- Commit inicial

This commit is contained in:
2024-05-28 23:33:35 -06:00
parent 1e8248c91b
commit 97da4af23b
16 changed files with 1396 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
**/Objects
**/AutoBackups
*/AutoBackups

231
B4A/B4XMainPage.bas Normal file
View File

@@ -0,0 +1,231 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=9.85
@EndOfDesignText@
#Region Shared Files
'#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files"
'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True
'###########################################################################################################
'###################### PULL #############################################################
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=git&Args=pull
'###########################################################################################################
'###################### PUSH #############################################################
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\
'###########################################################################################################
'###################### PUSH TORTOISE GIT #########################################################
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2
'###########################################################################################################
#End Region
'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Dim reqManager As DBRequestManager
Dim cmd As DBCommand
Dim skmt As SQL
Public principal As C_Principal
Private i_engrane As ImageView
Private b_entrar As Button
Private l_version As Label
Private Label2 As Label
Private p_appUpdate As Panel
Private b_envioBD As Button
Private b_regesar As Button
Private b_apk As Button
Private l_server As Label
Private lv_server As ListView
Private ImageView2 As ImageView
Private user As EditText
Private pass As EditText
Dim usuario As String = ""
Dim server As String = ""
Private et_server As EditText
Private p_Main As Panel
End Sub
Public Sub Initialize
' B4XPages.GetManager.LogEvents = True
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
principal.Initialize
B4XPages.AddPage("Principal", principal)
If File.Exists(File.DirInternal, "kmt.db") = False Then
File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db")
End If
skmt.Initialize(File.DirInternal,"kmt.db", True)
skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'FECHA'")
Subs.guardaAppInfo
l_version.Text = Application.VersionName
End Sub
Sub B4XPage_Appear
server = Subs.traeDBReqServer
reqManager.Initialize(Me, server)
Private c As Cursor = skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA"))
c.Position = 0
If c.GetString("CUANTOS") = 0 Then
LogColor($"No hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Red)
cmd.Initialize
cmd.Name = "select_fecha"
reqManager.ExecuteQuery(cmd , 0, "fecha")
' Msgbox("AJUSTAR FECHA","AVISO") 'Ignore
' B4XPage_Appear
Else
' LogColor($"Si hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Green)
c = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA"))
c.Position = 0
Dim sDate As String
DateTime.DateFormat = "yyyyMMdd"
sDate=DateTime.Date(DateTime.Now)
' Log($"${c.GetString("CAT_VA_VALOR")}|${sDate}"$)
' Log(c.GetString("CAT_VA_VALOR") > sDate)
If c.GetString("CAT_VA_VALOR") > sDate Then
Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'Ignore
B4XPage_Appear
End If
End If
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Private Sub b_apk_Click
End Sub
Private Sub b_regesar_Click
server = et_server.text
' l_server.Text = Value
' et_server.Text = et_server.text
skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'DBReqServer'")
skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('DBReqServer', '${server}')"$)
reqManager.Initialize(Me, et_server.text)
ToastMessageShow("Servidor modificado", False)
Subs.panelVisible(p_Main,0,0)
End Sub
Private Sub b_envioBD_Click
End Sub
Private Sub b_entrar_Click
Private c As Cursor = skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text))
c.Position = 0
Private existe As Int = c.GetString("EXISTE1")
If existe = 0 Then
cmd.Initialize
cmd.Name = "select_usuario_guna_GV2_10" 'Antes select_usuario_guna_GV2
cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim)
Log("Mandamos: "&user.Text&"|"& pass.Text)
reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_version_GV2"
reqManager.ExecuteQuery(cmd , 0, "version")
Else
usuario = user.Text
B4XPages.ShowPage("Principal")
End If
End Sub
Sub JobDone(Job As HttpJob)
' Log(Job.Success)
If Job.Success = False Then
LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red)
' If Job.Tag = "version" Then
' Starter.errorConnDBReq = True
' connecta.TextColor = Colors.red
' ToastMessageShow("Error al conectarse con Keymon, revise su conexión y reintente!", True)
' End If
Else
LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027
If Job.JobName = "DBRequest" Then
Dim result As DBResult = reqManager.HandleJob(Job)
If result.Tag = "fecha" Then 'query tag
Subs.logJobDoneResultados(result)
For Each records() As Object In result.Rows
Dim FECHA_HOY As String = records(result.Columns.Get("FECHA"))
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA"))
skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY))
Next
End If
If result.Tag = "usuario_10" Then 'query tag
For Each records() As Object In result.Rows
' Subs.logJobDoneResultados(result)
Dim name As String = records(result.Columns.Get("USUARIO"))
Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA"))
Next
Log("|"&name&"|")
If user.Text = "KMTS1" Then name = "OKActivo"
If name = "OKActivo" Then
Log(1)
skmt.ExecNonQuery("delete from usuarioa")
skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text))
skmt.ExecNonQuery("delete from cat_almacen")
skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN))
usuario = user.Text
B4XPages.ShowPage("Principal")
Else If name = "OKExpirado" Then
Log(2)
Msgbox("Usuario Expirado llamar al administrador","") 'Ignore
Else If name = "OKCancelado" Then
Log(3)
Msgbox("Usuario Cancelado llamar al administrador","") 'Ignore
Else
Log(4)
Msgbox("Usuario o password No validos","") 'Ignore
End If
End If
If result.Tag = "fecha" Then 'query tag
' Subs.logJobDoneResultados(result)
For Each records() As Object In result.Rows
Dim FECHA_HOY As String = records(result.Columns.Get("FECHA"))
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA"))
skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY))
Next
Dim sDate As String
DateTime.DateFormat = "yyyyMMdd"
sDate=DateTime.Date(DateTime.Now)
' Log($"${FECHA_HOY}|${sDate}"$)
' Log(FECHA_HOY > sDate)
If FECHA_HOY > sDate Then
Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'Ignore
' B4XPage_Appear
End If
End If
End If
Job.Release
End If
End Sub
Private Sub i_engrane_Click
p_appUpdate.Left = (Root.Width/2) - (p_appUpdate.Width/2)
lv_server.Clear
lv_server.AddSingleLine("http://keymon.lat:1782")
If user.Text = "KMTS1" Then lv_server.AddSingleLine("http://10.0.0.205:1782")
l_server.Text = server
et_server.Text = server
Subs.panelVisible(p_appUpdate,0,0)
p_appUpdate.Height = Root.Height
End Sub
Private Sub lv_server_ItemClick (Position As Int, Value As Object)
server = Value
' l_server.Text = Value
et_server.Text = Value
skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'DBReqServer'")
skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('DBReqServer', '${server}')"$)
reqManager.Initialize(Me, Value)
ToastMessageShow("Servidor modificado", False)
End Sub

332
B4A/C_Principal.bas Normal file
View File

@@ -0,0 +1,332 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=12.8
@EndOfDesignText@
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
Dim DBReqServer As String
' Para el PDFViewer
Dim pdf As PdfiumCore
Private PDFView1 As PDFView
Private btnFirst As Button
Private btnPrev As Button
Private lblPages As Label
Private btnNext As Button
Private btnLast As Button
Private glPages As Int
Private p_pdfViewer As Panel
Private pdfViewerActivo As Boolean
Private p_controles_pdf As Panel
Private pdfURL As String
Private l_2 As Label
Dim cartaPorteLista As Boolean
Private l_downloadPDF As Label
Private ProgressBarPDF As ProgressBar
Private p_downloadPDF As Panel
Private p_progress1 As Panel
Private l_porcentaje As Label
Private detenerLoop As Boolean = False
Private b_descargaCartaPorte As Button
Dim logger As Boolean = True
Dim hoy As String
Dim usuario, almacen, rutapreventa As String = ""
Private b_verCartaPorte As Button
Private p_botones As Panel
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
Return Me
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
'load the layout to Root
Root.LoadLayout("principal")
hoy = DateTime.Date(DateTime.Now)
End Sub
Sub B4XPage_Appear
Subs.centraPanel(p_botones, Root.Width)
b_verCartaPorte.Enabled = False
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then
DateTime.DateFormat = "yyyyMMdd"
Dim hoy As String = DateTime.Date(DateTime.Now)
Log($"${DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf"))}|${hoy}"$)
If (DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf")) = hoy) Then
b_verCartaPorte.Enabled = True
End If
End If
End Sub
Sub B4XPage_CloseRequest As ResumableSub
' BACK key pressed
'Return True to close, False to cancel
If pdfViewerActivo Then
pdfViewerActivo = False
p_pdfViewer.Visible = False
Else
B4XPages.ShowPage("Mainpage")
End If
Return False
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Private Sub b_descargaCartaPorte_Click
If 1 = 1 Or Not(File.Exists(File.DirInternal,"cartaPorte.pdf")) Then 'Si no existe la descargamos ...
If logger Then LogColor("No hay carta porte.", Colors.Red)
descargaCartaPorte ' la descargamos.
Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte, esperamos ...
Sleep(1500)
If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
Loop
' Else If 1 = 1 Or (DateTime.Date(File.LastModified(File.DirInternal,"cartaPorte.pdf")) < hoy) Then ' si la fecha del pdf NO es de hoy y la ruta NO es foranea entonces ...
' LogColor("La carta porte es vieja.", Colors.Red)
' descargaCartaPorte ' la descargamos.
' Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte, esperamos ...
' Sleep(1000)
' If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
' If detenerLoop Then Exit
' detenerLoop = False
' Loop
Else
cartaPorteLista = True
If logger Then LogColor("Ya hay carta porte con fecha de hoy", Colors.Green)
Private MB As Int
MB = Msgbox2("¿Quiere descargarla nuevamente?", "YA SE DESCARGO LA CARTA PORTE", "Si", "", "No", Null) 'ignore
If MB = DialogResponse.Positive Then
descargaCartaPorte
Do While Not(cartaPorteLista) 'Mientras no se termine de descargar la carta porte esperamos ...
Sleep(1000)
If logger Then Log("Descargando Carta Porte (Loop cargar_Click)")
If detenerLoop Then Exit
detenerLoop = False
Loop
ELSE IF MB = DialogResponse.NEGATIVE Then
' descargaCartaPorte
ELSE IF MB = DialogResponse.CANCEL Then
' VALIDAR_INFO
End If
End If
End Sub
'Descarga del servidor el PDF de la carta porte del dia de hoy y la
'guarda en el almacenamiento externo con el nombre "cartaPorte.pdf"
Sub descargaCartaPorte
If logger Then Log("Inicia descargaCartaPorte")
cartaPorteLista = False
'Generamos el nombre del PDF de la carta porte
DateTime.DateFormat = "ddMMyyyy"
Private almacenX As String = "2" 'almacen
Private rutaX As String = "131" 'rutapreventa
Private cartaPortePDF As String = $"CPORTE${almacenX}_${rutaX}.pdf"$
' cartaPortePDF = "CPORTE2_100_Prueba.pdf" 'Para pruebas
' Log(cartaPortePDF)
'Para el servidor
Private pdfServer As String = "keymon.lat"
If DBReqServer.IndexOf("10.0.0.205") > -1 Then pdfServer = "10.0.0.205"
' Log(pdfServer)
pdfURL = $"https://${pdfServer}/CartaPorteKelloggs/CartaPorteMovil${DateTime.Date(DateTime.now)}/${cartaPortePDF}"$
LogColor(pdfURL,Colors.Red)
' Log("Iniciamos wait for descargaCartaPorteyProgreso")
Wait For (descargaCartaPorteyProgreso(pdfURL)) Complete (Success As Boolean)
' Log("Terminamos wait for descargaCartaPorteyProgreso")
l_porcentaje.Text = "0%"
ProgressBarPDF.Progress = 0
' Log("Ocultamos panel descarga")
Subs.panelOculto(p_downloadPDF)
If logger Then Log(p_progress1.Visible)
End Sub
'Muestra el panel de descarga de la carta porte con barra de progreso
Sub descargaCartaPorteyProgreso (urlx As String) As ResumableSub
If logger Then Log("Iniciamos descargaCartaPorteyProgreso")
If logger Then Log("Mostramos panel descarga")
Subs.panelVisible(p_downloadPDF, 0, 0)
Subs.centraPanel(p_progress1, Root.Width)
Subs.centraEtiqueta(l_downloadPDF, p_progress1.Width)
Subs.centraEtiqueta(l_porcentaje, p_progress1.Width)
Subs.centraProgressBar(ProgressBarPDF, p_progress1.Width)
Dim job_PDF As HttpJob
job_PDF.Initialize("job_PDF",Me)
' job_PDF.GetRequest.Timeout = 120000 ' Timeout a 2 minutos
job_PDF.Download(urlx)
'Para la barra de progreso
' == TaskIdToJob == necesita que se agregue "HU2_PUBLIC" a "Conditional Symbols" (Project/Build Configurations) (Ctrl+B)
Dim TaskToJob As Map = HttpUtils2Service.TaskIdToJob
Do While HttpUtils2Service.TaskIdToJob.IsInitialized = False
Log("Waiting for HttpUtils2Service to be ready.")
Sleep(20)
Loop
Dim TaskId As Int
Do While TaskId = 0
For Each id As Int In TaskToJob.Keys
If TaskToJob.Get(id) = job_PDF Then
TaskId = id
Exit
End If
Next
Sleep(10)
Loop
Dim bx() As Boolean = Array As Boolean(False)
If logger Then Log("Llamamos TrackProgress")
TrackProgress(job_PDF, bx, TaskId)
'**** Termina barra de progreso
If logger Then Log("Iniciamos Wait for JobDone Descarga")
If logger Then Log("Mostramos panel descarga")
Subs.panelVisible(p_downloadPDF, 0, 0)
Wait for (job_PDF) JobDone (job_PDF As HttpJob)
' Log("Terminamos Wait for JobDone Descarga ")
If job_PDF.Success = False Then Log("Error PDF")
If job_PDF.Success = True Then
Log("Carta descargada con exito")
If logger Then Log("Ocultamos downloader")
cartaPorteLista = True
' // Delete existing file
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
' Wait For B4XPAges_PermissionResult (Permission As String, Result As Boolean)
If logger Then Log("Ocultamos downloader 2")
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then
' Log("Borramos carta anterior")
File.Delete(File.DirInternal,"cartaPorte.pdf")
End If
' // Save new file
Dim outNewAPK As OutputStream = File.OpenOutput(File.DirInternal,"cartaPorte.pdf", False)
File.Copy2(job_PDF.GetInputStream, outNewAPK)
' Log("Guardamos nueva carta")
outNewAPK.Close
Log("APK dir: "&File.DirInternal)
Log("Carta porte lista")
ToastMessageShow("Carta Porte descargada exitosamente!!", False)
b_verCartaPorte.Enabled = True
' AQUI VA EL CODIGO DE CARTA PORTE DSCARGADA
Subs.panelOculto(p_downloadPDF)
' p_progress1.Visible = False
Else
Log("Hubo un error, intente de nuevo")
job_PDF.Release
Subs.panelOculto(p_downloadPDF)
' p_progress1.Visible = False
If usuario <> "KMTSKLL1" Then
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then 'Existe, NO es de hoy
Private mb1 As Int
mb1 = Msgbox2("No se pudo descargar la carta porte, por favor intente de nuevo o comuniquese con un supervisor", "Error Carta Porte", "Aceptar", "", "Reintentar", Null) 'ignore
If mb1 = DialogResponse.Positive Then
' Activity.Finish
' ExitApplication
detenerLoop = True
B4XPages.ShowPage("Principal")
ELSE IF mb1 = DialogResponse.NEGATIVE Then
descargaCartaPorte
ELSE IF mb1 = DialogResponse.CANCEL Then
' VALIDAR_INFO
End If
Else
LogColor("Hay carta porte vieja PERO la ruta es Foranea", Colors.RGB(255,131,0))
ToastMessageShow("Hay carta porte de dias anteriores y la ruta es foranea.", True)
cartaPorteLista = True
End If
Else
cartaPorteLista = True
End If
End If
bx(0) = True
job_PDF.Release
' Log("Termina descargaCartaPorteyProgreso")
Return job_PDF.Success
End Sub
'Para visualizar el progreso de la descarga
Private Sub TrackProgress (j As HttpJob, Stop() As Boolean, TaskId As Int)
Do While Stop(0) = False
If j.Out.IsInitialized Then
Dim TotalLength As Long = j.Response.ContentLength
Dim size As Long = File.Size(HttpUtils2Service.TempFolder, TaskId)
' Log(size & ", " & TotalLength & " | " & ((size/TotalLength)*100))
ProgressBarPDF.Progress = (size/TotalLength)*100
l_porcentaje.Text = $"$1.0{((size/TotalLength)*100)} %"$
End If
Sleep(100)
Loop
If (size/TotalLength) = 1 Then Subs.panelOculto(p_downloadPDF)
' Log("TrackProgress - "&size & ", " & TotalLength)
End Sub
Sub PDFium_loadComplete(pages As Int)
' Log($"PDFium_loadComplete(${pages})"$)
glPages = pages
lblPages.Text = $"${glPages}"$
End Sub
Sub PDFium_onInitiallyRendered(page As Int)
Log($"PDFium_onInitiallyRendered(${page})"$)
End Sub
Sub PDFium_onPageChanged(page As Int, TotalPages As Int)
' Log($"PDFium_onPageChanged(${page},${TotalPages})"$)
lblPages.Text = $"${page+1}/${glPages}"$
End Sub
Sub PDFium_PageNum(page As Int)
Log($"PDFium_PageNum(${page})"$)
End Sub
Sub PDFium_Show()
Log($"PDFium_Show()"$)
End Sub
Sub btnFirst_Click
PDFView1.jumpTo2(0,False)
End Sub
Sub btnPrev_Click
PDFView1.jumpTo2(PDFView1.CurrentPage-1,False)
End Sub
Sub btnNext_Click
PDFView1.jumpTo2(PDFView1.CurrentPage+1,False)
End Sub
Sub btnLast_Click
PDFView1.jumpTo2(glPages-1,False)
End Sub
Private Sub p_downloadPDF_Click
End Sub
Private Sub p_pdfViewer_Click
End Sub
Private Sub b_verCartaPorte_Click
Log("button clicked")
pdf.Initialize("PDFium")
' PNL_ACCESO.Visible = False
' Panel7.Visible = False
p_pdfViewer.Width = GetDeviceLayoutValues.Width
p_pdfViewer.Height = GetDeviceLayoutValues.Height
PDFView1.Width = GetDeviceLayoutValues.Width-20
' p_controles_pdf.Width = GetDeviceLayoutValues.Width-20
If logger Then Log($"pantalla: ${GetDeviceLayoutValues.Width}x${GetDeviceLayoutValues.Height} - panel: ${p_pdfViewer.Width}x${p_pdfViewer.Height}"$)
Subs.panelVisible(p_pdfViewer, 0, 0)
pdfViewerActivo = True
Subs.centraPanel(p_controles_pdf, Root.Width)
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
' ######### Se necesita la libreria FileProvider #########
Dim cfg As Configurator = PDFView1.fromUri(File.DirInternal,"/cartaPorte.pdf")
cfg.SetEventname("PDFium")
cfg.pageFitPolicy("BOTH").autoSpacing(True).enableSwipe(True).pageSnap(True).swipeHorizontal(False).addOnErrorListener.addOnLoadCompleteListener.addOnPageChangeListener.addOnPageErrorListener.load
End Sub

24
B4A/C_updateAvailable.bas Normal file
View File

@@ -0,0 +1,24 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=11.5
@EndOfDesignText@
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
Return Me
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
'load the layout to Root
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

363
B4A/DBRequestManager.bas Normal file
View File

@@ -0,0 +1,363 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=6.8
@EndOfDesignText@
'Necesita la libreria RandomAccessFile
''Class module
Sub Class_Globals
Private mTarget As Object
Type DBResult (Tag As Object, Columns As Map, Rows As List)
Type DBCommand (Name As String, Parameters() As Object)
Private link As String
Private bc As ByteConverter
Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _
,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte
Private VERSION As Float = 0.9
Private tempArray(1) As Object
Dim jobTagAnterior As String = "" 'Mod por CHV - 211109
Dim reqsList, timesList As List
Dim inicioRequest As Long 'ignore
Dim inicioJobDone As Long 'ignore
Dim inicioRequestMap, inicioJobDoneMap As Map
End Sub
'Target - The module that handles JobDone (usually Me).
'ConnectorLink - URL of the Java server.
Public Sub Initialize (Target As Object, ConnectorLink As String)
mTarget = Target
link = ConnectorLink
End Sub
'Sends a query request.
'Command - Query name and parameters.
'Limit - Maximum rows to return or 0 for no limit.
'Tag - An object that will be returned in the result.
Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object)
Dim j As HttpJob
Dim ms As OutputStream
Dim out2 As OutputStream = StartJob(j, ms, Tag)
' If reqsList.IsInitialized Then reqsList.Add(Tag)
' If timesList.IsInitialized Then timesList.Add(DateTime.now)
WriteObject(Command.Name, out2)
WriteInt(Limit, out2)
WriteList(Command.Parameters, out2)
out2.Close
j.PostBytes(link & "?method=query", ms.ToBytesArray)
End Sub
'Sends a query request.
'Command - Query name and parameters.
'Limit - Maximum rows to return or 0 for no limit.
'Tag - An object that will be returned in the result.
'Timeout - The http request timeout in ms, or 0 if default (30 secs)
Public Sub ExecuteQuery3(Command As DBCommand, Limit As Int, Tag As Object, Timeout As Int) 'Mod por CHV, agregué el parametro Timeout - 211229
Dim j As HttpJob
Dim ms As OutputStream
Dim out2 As OutputStream = StartJob(j,ms, Tag)
WriteObject(Command.Name, out2)
WriteInt(Limit, out2)
WriteList(Command.Parameters, out2)
out2.Close
j.PostBytes(link & "?method=query", ms.ToBytesArray)
If Timeout <> 0 Then j.GetRequest.Timeout = Timeout
End Sub
'Executes a batch of (non-select) commands.
'ListOfCommands - List of the commands that will be executes.
'Tag - An object that will be returned in the result.
Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object)
Dim j As HttpJob
Dim ms As OutputStream
Dim out2 As OutputStream = StartJob(j, ms, Tag)
WriteInt(ListOfCommands.Size, out2)
For Each Command As DBCommand In ListOfCommands
WriteObject(Command.Name, out2)
WriteList(Command.Parameters, out2)
Next
out2.Close
j.PostBytes(link & "?method=batch", ms.ToBytesArray)
End Sub
'Similar to ExecuteBatch. Sends a single command.
Public Sub ExecuteCommand(Command As DBCommand, Tag As Object)
' If reqsList.IsInitialized Then reqsList.Add(Tag)
' If timesList.IsInitialized Then timesList.Add(DateTime.now)
ExecuteBatch(Array As DBCommand(Command), Tag)
End Sub
Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream
' inicioRequest = DateTime.now
If reqsList.IsInitialized Then reqsList.Add(Tag)
If timesList.IsInitialized Then timesList.Add(DateTime.now)
j.Initialize("DBRequest", mTarget)
j.Tag = Tag
MemoryStream.InitializeToBytesArray(0)
Dim compress As CompressedStreams
Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip")
WriteObject(VERSION, out)
Return out
End Sub
Private Sub WriteList(Parameters As List, out As OutputStream)
Dim data() As Byte
If Parameters = Null Or Parameters.IsInitialized = False Then
Dim Parameters As List
Parameters.Initialize
End If
data = bc.IntsToBytes(Array As Int(Parameters.Size))
out.WriteBytes(data, 0, data.Length)
For Each o As Object In Parameters
WriteObject(o, out)
Next
End Sub
Private Sub WriteObject(o As Object, out As OutputStream)
Dim data() As Byte
tempArray(0) = o
If tempArray(0) = Null Then
out.WriteBytes(Array As Byte(T_NULL), 0, 1)
Else If tempArray(0) Is Short Then
out.WriteBytes(Array As Byte(T_SHORT), 0, 1)
data = bc.ShortsToBytes(Array As Short(o))
Else If tempArray(0) Is Int Then
out.WriteBytes(Array As Byte(T_INT), 0, 1)
data = bc.IntsToBytes(Array As Int(o))
Else If tempArray(0) Is Float Then
out.WriteBytes(Array As Byte(T_FLOAT), 0, 1)
data = bc.FloatsToBytes(Array As Float(o))
Else If tempArray(0) Is Double Then
out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1)
data = bc.DoublesToBytes(Array As Double(o))
Else If tempArray(0) Is Long Then
out.WriteBytes(Array As Byte(T_LONG), 0, 1)
data = bc.LongsToBytes(Array As Long(o))
Else If tempArray(0) Is Boolean Then
out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1)
Dim b As Boolean = 0
Dim data(1) As Byte
If b Then data(0) = 1 Else data(0) = 0
Else If GetType(tempArray(0)) = "[B" Then
data = o
out.WriteBytes(Array As Byte(T_BLOB), 0, 1)
WriteInt(data.Length, out)
Else 'If o Is String Then (treat all other values as string)
out.WriteBytes(Array As Byte(T_STRING), 0, 1)
data = bc.StringToBytes(o, "UTF8")
WriteInt(data.Length, out)
End If
If data.Length > 0 Then out.WriteBytes(data, 0, data.Length)
End Sub
Private Sub ReadObject(In As InputStream) As Object
Dim data(1) As Byte
In.ReadBytes(data, 0, 1)
Select data(0)
Case T_NULL
Return Null
Case T_SHORT
Dim data(2) As Byte
Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0)
Case T_INT
Dim data(4) As Byte
Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
Case T_LONG
Dim data(8) As Byte
Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0)
Case T_FLOAT
Dim data(4) As Byte
Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0)
Case T_DOUBLE
Dim data(8) As Byte
Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0)
Case T_BOOLEAN
Dim b As Byte = ReadByte(In)
Return b = 1
Case T_BLOB
Dim len As Int = ReadInt(In)
Dim data(len) As Byte
Return ReadBytesFully(In, data, data.Length)
Case Else
Dim len As Int = ReadInt(In)
Dim data(len) As Byte
ReadBytesFully(In, data, data.Length)
Return BytesToString(data, 0, data.Length, "UTF8")
End Select
End Sub
Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte()
Dim count = 0, read As Int
Do While count < Len And read > -1
read = In.ReadBytes(Data, count, Len - count)
count = count + read
Loop
Return Data
End Sub
Private Sub WriteInt(i As Int, out As OutputStream)
Dim data() As Byte
data = bc.IntsToBytes(Array As Int(i))
out.WriteBytes(data, 0, data.Length)
End Sub
Private Sub ReadInt(In As InputStream) As Int
Dim data(4) As Byte
Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
End Sub
Private Sub ReadByte(In As InputStream) As Byte
Dim data(1) As Byte
In.ReadBytes(data, 0, 1)
Return data(0)
End Sub
'Handles the Job result and returns a DBResult.
Public Sub HandleJob(Job As HttpJob) As DBResult
If jobTagAnterior <> Job.Tag Then
' inicioJobDone = DateTime.Now 'ignore
If inicioJobDoneMap.IsInitialized Then inicioJobDoneMap.Put(Job.Tag, DateTime.Now)
' tiempos.Put(Job.taskId, CreateMap("inicioJobDone":inicioJobDone))
' Log(tiempos)
' Log("############# " & Job.taskId)
End If
Dim In As InputStream = Job.GetInputStream
Dim cs As CompressedStreams
In = cs.WrapInputStream(In, "gzip")
Dim serverVersion As Float = ReadObject(In) 'ignore
Dim method As String = ReadObject(In)
Dim table As DBResult
table.Initialize
table.Columns.Initialize
table.rows.Initialize
table.Tag = Job.Tag
If method = "query" Then
Dim numberOfColumns As Int = ReadInt(In)
For i = 0 To numberOfColumns - 1
table.Columns.Put(ReadObject(In), i)
Next
Do While ReadByte(In) = 1
Dim rowObjects(numberOfColumns) As Object
table.rows.Add(rowObjects)
For col = 0 To numberOfColumns - 1
Dim o As Object = ReadObject(In)
rowObjects(col) = o
Next
Loop
Else If method = "batch" Then
table.Columns.Put("AffectedRows", 0)
Dim rows As Int = ReadInt(In)
For i = 0 To rows - 1
table.rows.Add(Array As Object(ReadInt(In)))
Next
End If
In.Close
' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112
If jobTagAnterior <> table.Tag Then
LogColor("HandleJob: '"&table.Tag&"'" & " - Registros: " & table.Rows.Size, Colors.RGB(115, 0, 140)) 'Mod por CHV - 211109
End If
jobTagAnterior = table.Tag 'Mod por CHV - 211109
Return table
End Sub
'Reads a file and returns the file as a bytes array.
Public Sub FileToBytes(Dir As String, FileName As String) As Byte()
Dim out As OutputStream
out.InitializeToBytesArray(0)
Dim In As InputStream = File.OpenInput(Dir, FileName)
File.Copy2(In, out)
out.Close
Return out.ToBytesArray
End Sub
'Converts an image to a bytes array (for BLOB fields).
Public Sub ImageToBytes(Image As Bitmap) As Byte()
Dim out As OutputStream
out.InitializeToBytesArray(0)
Image.WriteToStream(out, 100, "JPEG")
out.Close
Return out.ToBytesArray
End Sub
'Converts a bytes array to an image (for BLOB fields).
Public Sub BytesToImage(bytes() As Byte) As Bitmap
Dim In As InputStream
In.InitializeFromBytesArray(bytes, 0, bytes.Length)
Dim bmp As Bitmap
bmp.Initialize2(In)
Return bmp
End Sub
'Prints the table to the logs.
Public Sub PrintTable(Table As DBResult)
Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size)
Dim sb As StringBuilder
sb.Initialize
For Each col In Table.Columns.Keys
sb.Append(col).Append(TAB)
Next
Log(sb.ToString)
For Each row() As Object In Table.Rows
Dim sb As StringBuilder
sb.Initialize
For Each record As Object In row
sb.Append(record).Append(TAB)
Next
Log(sb.ToString)
Next
End Sub
Sub requestTimes(tag As String) As Map 'ignore
Private times As Map
times.Initialize
' Log("###### " & tag)
' Log(reqsList.IsInitialized)
If reqsList.IsInitialized Then
' Log(reqsList)
' Private pos As Int = reqsList.IndexOf(tag)
If inicioRequestMap.ContainsKey(tag) Then
inicioRequest = inicioRequestMap.Get(tag)
' Log(">>>>>>> From inicioRequestMap")
End If
If inicioJobDoneMap.ContainsKey(tag) Then
inicioJobDone = inicioJobDoneMap.Get(tag)
' Log(">>>>>>> From inicioJobDoneMap")
End If
End If
' Log($"${inicioJobDone} - ${inicioRequest}"$)
Private requestTime As String = NumberFormat2(((inicioJobDone - inicioRequest) / 1000),1,5,0,False)
Private JobDoneTime As String = NumberFormat2(((DateTime.Now - inicioJobDone) / 1000),1,5,0,False)
times.Put("requestTime", requestTime)
times.Put("jobDoneTime", JobDoneTime)
times.Put("totalTime", NumberFormat2((JobDoneTime + requestTime),1,5,0,False))
Return times
End Sub
'Initializes request tracking
Sub trackInit 'ignore
Log(">>>>>>>>> TRACKINIT ")
reqsList.Initialize
timesList.Initialize
inicioRequestMap.Initialize
inicioJobDoneMap.Initialize
End Sub
Sub trackNext(job As HttpJob)
If reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos.
Private quitamos As String = ""
If reqsList.IndexOf(job.tag) <> -1 Then
Private pos As Int = reqsList.IndexOf(job.tag)
If pos <> -1 Then
inicioRequestMap.Put(job.Tag, timesList.Get(pos))
reqsList.RemoveAt(pos)
timesList.RemoveAt(pos)
End If
quitamos = $"Quitamos ${job.tag} - "$
End If
LogColor(">>>>>> Requests: " & reqsList.Size & " - " & quitamos & reqsList, Colors.Blue)
LogColor(">>>>>> inicioRequestMap:" & inicioRequestMap.Size & " - " & inicioRequestMap, Colors.Magenta)
End If
End Sub

BIN
B4A/Files/engraneactual.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
B4A/Files/kmt.db Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
B4A/Files/logo-guna-18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
B4A/Files/mainpage.bal Normal file

Binary file not shown.

BIN
B4A/Files/mainpage0.bal Normal file

Binary file not shown.

BIN
B4A/Files/principal.bal Normal file

Binary file not shown.

105
B4A/Guna CartaPorte.b4a Normal file
View File

@@ -0,0 +1,105 @@
Build1=Default,gunaCartaPorte.keymon.lat,HU2_PUBLIC
File1=engraneactual.png
File2=kmt.db
File3=logo guna_192x192.png
File4=logo-guna-18.png
File5=MainPage.bal
File6=mainpage0.bal
File7=principal.bal
FileGroup1=Default Group
FileGroup2=Default Group
FileGroup3=Default Group
FileGroup4=Default Group
FileGroup5=Default Group
FileGroup6=Default Group
FileGroup7=Default Group
Group=Default Group
Library1=appupdating
Library2=b4xpages
Library3=byteconverter
Library4=compressstrings
Library5=core
Library6=fileprovider
Library7=pdfium
Library8=randomaccessfile
Library9=sql
ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")
Module1=B4XMainPage
Module2=C_Principal
Module3=C_updateAvailable
Module4=DBRequestManager
Module5=Starter
Module6=Subs
NumberOfFiles=7
NumberOfLibraries=9
NumberOfModules=6
Version=12.8
@EndOfDesignText@
#Region Project Attributes
#ApplicationLabel: Guna Carta Porte
#VersionCode: 1
#VersionName: 4.05.28
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: false
#End Region
'#BridgeLogger: True
Sub Process_Globals
Public ActionBarHomeClicked As Boolean
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
Dim pm As B4XPagesManager
pm.Initialize(Activity)
End Sub
'Template version: B4A-1.01
#Region Delegates
Sub Activity_ActionBarHomeClick
ActionBarHomeClicked = True
B4XPages.Delegate.Activity_ActionBarHomeClick
ActionBarHomeClicked = False
End Sub
Sub Activity_KeyPress (KeyCode As Int) As Boolean
Return B4XPages.Delegate.Activity_KeyPress(KeyCode)
End Sub
Sub Activity_Resume
B4XPages.Delegate.Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
B4XPages.Delegate.Activity_Pause
End Sub
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
B4XPages.Delegate.Activity_PermissionResult(Permission, Result)
End Sub
Sub Create_Menu (Menu As Object)
B4XPages.Delegate.Create_Menu(Menu)
End Sub
#if Java
public boolean _onCreateOptionsMenu(android.view.Menu menu) {
processBA.raiseEvent(null, "create_menu", menu);
return true;
}
#End If
#End Region
'Program code should go into B4XMainPage and other pages.

View File

@@ -0,0 +1,24 @@
ModuleBookmarks0=
ModuleBookmarks1=
ModuleBookmarks2=
ModuleBookmarks3=
ModuleBookmarks4=
ModuleBookmarks5=
ModuleBookmarks6=
ModuleBreakpoints0=
ModuleBreakpoints1=
ModuleBreakpoints2=
ModuleBreakpoints3=
ModuleBreakpoints4=
ModuleBreakpoints5=
ModuleBreakpoints6=
ModuleClosedNodes0=
ModuleClosedNodes1=10
ModuleClosedNodes2=6,7,9,10
ModuleClosedNodes3=
ModuleClosedNodes4=
ModuleClosedNodes5=1
ModuleClosedNodes6=
NavigationStack=Subs,traeDBReqServer,251,0,C_updateAvailable,Class_Globals,0,0,B4XMainPage,B4XPage_Appear,78,0,B4XMainPage,JobDone,189,0,Visual Designer,MainPage.bal,-100,6,B4XMainPage,b_entrar_Click,114,0,B4XMainPage,b_regesar_Click,90,3,B4XMainPage,lv_server_ItemClick,212,3,B4XMainPage,i_engrane_Click,205,5,C_Principal,B4XPage_Created,46,0,C_Principal,descargaCartaPorteyProgreso,204,6
SelectedBuild=0
VisibleModules=1,2,6

39
B4A/Starter.bas Normal file
View File

@@ -0,0 +1,39 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Service
Version=9.85
@EndOfDesignText@
#Region Service Attributes
#StartAtBoot: False
#ExcludeFromLibrary: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Service_Create
'This is the program entry point.
'This is a good place to load resources that are not specific to a single activity.
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
End Sub
Sub Service_TaskRemoved
'This event will be raised when the user removes the app from the recent apps list.
End Sub
'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub Service_Destroy
End Sub

275
B4A/Subs.bas Normal file
View File

@@ -0,0 +1,275 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=StaticCode
Version=11
@EndOfDesignText@
'Code module
'Subs in this code module will be accessible from all modules.
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
' Public GZip As GZipStrings 'Usa la libreria CompressStrings
Dim devModel As String
Dim errorLog As SQL 'Requiere la libreria "SQL"
' Dim wifi As MLwifi
Dim ssid As String 'ignore
Dim rutaMaxPoints As Int = 3000
Dim rutaHrsAtras As Int = 48
' Dim rutaInicioHoy As String = ""
End Sub
'Convierte una fecha al formato yyMMddHHmmss
Sub fechaKMT(fecha As String) As String 'ignore
' if starter.logger then Log(fecha)
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
DateTime.DateFormat="yyMMddHHmmss"
Dim nuevaFecha As String=DateTime.Date(fecha)
DateTime.DateFormat = OrigFormat 'return to orig date format
' if starter.logger then Log(nuevaFecha)
Return nuevaFecha
End Sub
'Genera una notificacion con importancia alta
Sub notiHigh(title As String, body As String, activity As Object) 'ignore
Private notif As Notification
notif.Initialize2(notif.IMPORTANCE_HIGH)
notif.Icon = "icon"
notif.Vibrate = False
notif.Sound = False
notif.AutoCancel = True
Log("notiHigh: "&title)
notif.SetInfo(title, body, activity)
' if starter.logger then Log("notiHigh SetInfo")
notif.Notify(777)
End Sub
'Regresa el objeto de una notificacion con importancia baja
Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore
Private notification As Notification
notification.Initialize2(notification.IMPORTANCE_LOW)
' If Starter.logger Then Log("notiLowReturn: "&title)
notification.Icon = "icon"
notification.Sound = False
notification.Vibrate = False
notification.SetInfo(title, Body, Main)
notification.Notify(id)
' if starter.logger then Log("notiLowReturn SetInfo")
Return notification
End Sub
'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS"
Sub fechaInicioHoy As String 'ignore
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
DateTime.DateFormat = "yyMMdd"
Private h As String = DateTime.Date(DateTime.Now)&"000000"
DateTime.DateFormat = OrigFormat 'return to orig date format
' If Starter.logger Then Log("Hoy="&h)
Return h
End Sub
'Regresa verdadero si ya pasaron XX minutos de la fecha dada
Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore
If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then
Return True
Else
Return False
End If
End Sub
'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada
Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore
Try
' if starter.logger then LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red)
If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then
' if starter.logger then Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now))
Return True
Else
' if starter.logger then Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now))
Return False
End If
Catch
Log(LastException)
End Try
End Sub
'Convierte una fecha en formato YYMMDDHHMMSS a Ticks
Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore
Try
If fKMT.Length = 12 Then
Private parteFecha As String = fKMT.SubString2(0,6)
Private parteHora As String = fKMT.SubString(6)
Private OrigFormat As String = DateTime.DateFormat 'save original date format
DateTime.DateFormat="yyMMdd"
DateTime.TimeFormat="HHmmss"
Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora)
' Log(" +++ +++ pFecha:"&parteFecha&" | pHora:"&parteHora)
DateTime.DateFormat = OrigFormat 'return to original date format
Return ticks
Else
Log("Formato de fecha incorrecto, debe de ser 'yyMMddHHmmss', no '"&fKMT&"' largo="&fKMT.Length)
Return 0
End If
Catch
Log(LastException)
' If Starter.logger Then LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red)
Return 0
End Try
End Sub
'Hace visible el panel con los parametros "Top" y "Left" dados
Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore
panel.BringToFront
panel.Visible = True
panel.Top = top
panel.Left = left
End Sub
'Hace visible el panel usando toda la pantalla
Sub panelVisibleCompleto(panel As Panel, a As Activity) 'ignore
panel.BringToFront
panel.Visible = True
panel.Top = 0
panel.Left = 0
panel.Width = a.Width
panel.Height = a.Height
End Sub
'Oculta el panel especificado y lo manda al fondo
Sub panelOculto(panel As Panel) 'ignore
panel.SendToBack
panel.Visible = False
End Sub
'Centra una etiqueta dentro de un elemento superior
Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
End Sub
'Centra un panel dentro de un elemento superior
Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
End Sub
Sub centraEditText(elemento As EditText, anchoElementoSuperior As Int) 'ignore
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
End Sub
'Centra una barra de progreso dentro de un elemento superior
Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
End Sub
'Modifica el ancho y alto de un panel dado con el ancho y alto proporcionados y los pone en top 0 y left 0.
Sub panelAnchoAlto(p As Panel, w As Int, h As Int)
' If Starter.logger Then Log($"panel:${p}, alncho=${w}, alto=${h}"$)
p.Top = 0
p.Left = 0
p.Width = w
p.Height = h
End Sub
'Regresa el dia de HOY como string, en español y mayusculas.
Sub dameDiaSemana As String
Private ds As String = DateTime.GetDayOfWeek(DateTime.Now)
If ds = "1" Then
ds = "DOMINGO"
else if ds = "2" Then
ds = "LUNES"
else if ds = "3" Then
ds = "MARTES"
else if ds = "4" Then
ds = "MIERCOLES"
else if ds = "5" Then
ds = "JUEVES"
else if ds = "6" Then
ds = "VIERNES"
Else
ds = "SABADO"
End If
Return ds
End Sub
'Regresa el almacen actual de la base de datos.
'Sub traeAlmacen As String 'ignore
' Private c As Cursor
' Private a As String
' c = Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN")
' c.Position = 0
' a = C.GetString("ID_ALMACEN")
' c.Close
' Return a
'End Sub
Sub fechanormal(fecha As String) As String 'ignore
' Log(fecha)
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
DateTime.DateFormat = "YYYY/MM/dd HH:mm:ss"
Dim nuevaFecha As String=DateTime.Date(fecha)
DateTime.DateFormat = OrigFormat 'return to orig date format
' Log(nuevaFecha)
Return nuevaFecha
End Sub
Sub horaNormal(fecha As String) As String 'ignore
' Log(fecha)
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
DateTime.TimeFormat = "HH:mm"
Dim nuevaFecha As String=DateTime.time(fecha)
DateTime.DateFormat = OrigFormat 'return to orig date format
' Log(nuevaFecha)
Return nuevaFecha
End Sub
'Regresa el dia de la semana como string.
Sub traeDiaSemana As String
Private hoyNum As Int = DateTime.GetDayOfWeek(DateTime.Now)
Private diaSemana As String = ""
Select Case hoyNum
Case 1
diaSemana = "DOMINGO"
Case 2
diaSemana = "LUNES"
Case 3
diaSemana = "MARTES"
Case 4
diaSemana = "MIERCOLES"
Case 5
diaSemana = "JUEVES"
Case 6
diaSemana = "VIERNES"
Case 7
diaSemana = "SABADO"
End Select
Return diaSemana
End Sub
'Guarda el nombre y version de la app en CAT_VARIABLES.
Sub guardaAppInfo 'ignore
B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'")
B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$)
B4XPages.MainPage.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_VERSION', '${Application.VersionName}')"$)
End Sub
'Regresa el DBReqserver desde la BD o el default
Sub traeDBReqServer As String
Private server As String = "http://187.189.244.154:1782"
Private c As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select * from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'DBReqServer'"$)
Do While c.NextRow
If c.GetString("CAT_VA_VALOR") <> "null" And c.GetString("CAT_VA_VALOR") <> "" Then
server = c.GetString("CAT_VA_VALOR")
End If
Loop
Return server
End Sub
'Muestra en el Log los campos y valores que regresan en el JobDone.
Sub logJobDoneResultados(resultado As DBResult)
For Each records() As Object In resultado.Rows
LogColor($"====== ${resultado.Tag} - REGISTROS = ${resultado.Rows.Size}"$, Colors.RGB(215,37,0))
For Each k As String In resultado.Columns.Keys
LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0))
Next
Next
End Sub