Files
ADM/B4A/Starter.bas
Jose Alberto Guerra Ugalde 966ed2357b - VERSION 5.09.01
- Cambios en starter para el mandaPendientes
2025-09-11 13:22:56 -06:00

250 lines
10 KiB
QBasic

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.
Public gps As GPS
Dim skmt As SQL
Dim s As C_Subs
Dim ph As Phone
Public rp As RuntimePermissions
Public FLP As FusedLocationProvider
' Private flpStarted As Boolean
Dim reqManager As DBRequestManager
Dim DBReqServer As String = "http://keymon.net:1781"
' Dim DBReqServer As String = "http://192.168.100.10:1781"
Dim Timer1 As Timer
Dim Interval As Int = 300
Dim ruta As String = File.DirInternal
'Para los Logs
Private logs As StringBuilder
Private logcat As LogCat
Dim muestraProgreso = 0
Dim logger As Boolean = False
Dim MAC_IMPRESORA As String
Dim marcaCel As String = ph.manufacturer
Dim tabla As String
Dim pre_viejo As Float
Private BTAdmin As BluetoothAdmin
Public BluetoothState As Boolean
Public fFileProvider As FileProvider
Dim lat_gps, lon_gps As String
Dim enVenta As Boolean = False
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.
fFileProvider.Initialize
gps.Initialize("GPS")
s.Initialize(Me, "Subs") 'Inicializamos la clase Subs
skmt = s.inicializaBD(File.DirInternal, "kmt.db")
BTAdmin.Initialize("admin")
' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging
Timer1.Initialize("Timer1", Interval * 1000)
Timer1.Enabled = True
' 'Para los Logs
#if RELEASE
logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat")
#end if
logs.Initialize
' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging
End Sub
Private Sub BTAdmin_StateChanged (NewState As Int, OldState As Int)
If logger Then Log("BT state changed: " & NewState)
BluetoothState = NewState = BTAdmin.STATE_ON
' StateChanged
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
Subs.revisaBD
' Log(marcaCel)
If s.traeDBReqServerDeBD(skmt) <> "N/A" And s.traeDBReqServerDeBD(skmt) <> "" Then DBReqServer = s.traeDBReqServerDeBD(skmt)
reqManager.Initialize(Me, DBReqServer)
Log($"Starter - |${DBReqServer}|"$)
End Sub
Private Sub Timer1_Tick
' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000))
ENVIA_ULTIMA_GPS
End Sub
Sub GPS_LocationChanged (Location1 As Location)
' CallSub2(Main, "GPS_LocationChanged", Location1)
End Sub
Sub Service_TaskRemoved
'This event will be raised when the user removes the app from the recent apps list.
End Sub
Sub Service_Destroy
End Sub
Sub ENVIA_ULTIMA_GPS
Dim logger As Boolean = True
If logger Then LogColor("Iniciamos ENVIA_ULTIMA_GPS", Colors.Magenta)
Dim cmd As DBCommand
' cmd.Initialize
' cmd.Name = "select_fechat"
' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fechat")
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "UPDATE_ADM_ACTUAL2_GPS"
' En el campo CAT_RU_MONTO_ACT necesito que Me mandes el monto total de peso que llevan al momento. 1
' En el campo CAT_RU_TTOTAL_ACT necesito saber si Me estas mandando los clientes totales por día. 4
' En el campo CAT_RU_TVISIT_ACT necesito que Me mandes el total de visitas realizadas. 2
' En el campo CAT_RU_TVENTA_ACT necesito que Me mandes el total de visitas con venta. 3
Private totalPesoActual As String = 0
Private conVenta As String = 0
Private visitados As String = 0
Private totalAVisitar As String = 0
Private utr As Cursor = skmt.ExecQuery($"select sum(pe_peso) as totalPesoActual,
(select count(pe_cliente) from pesos where pe_tipo = 'VENTA') as conVenta,
(select count(distinct pe_cliente) from pesos) as visitados,
(select count(cat_cl_codigo) from kmt_info) as totalAVisitar
from pesos"$)
If utr.RowCount > 0 Then
utr.position = 0
If logger Then Log("totalPesoActual: " & utr.GetString("totalPesoActual"))
totalPesoActual = utr.GetString("totalPesoActual")
conVenta = utr.GetString("conVenta")
If logger Then Log("conVenta: " & utr.GetString("conVenta"))
visitados = utr.GetString("visitados")
If logger Then Log("visitados: " & utr.GetString("visitados"))
totalAVisitar = utr.GetString("totalAVisitar")
If logger Then Log("totalAVisitar: " & utr.GetString("totalAVisitar"))
End If
If B4XPages.MainPage.lat_gps.Length < 15 Then B4XPages.MainPage.lat_gps = B4XPages.MainPage.lat_gps&"0"
cmd.Parameters = Array As Object(totalPesoActual, visitados, conVenta, totalAVisitar, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, B4XPages.MainPage.batt, 0, 0, 0, B4XPages.MainPage.ALMACEN, B4XPages.MainPage.rutapreventa)
If logger Then Log($"Ruta: ${B4XPages.MainPage.rutapreventa}, pesoActual: ${totalPesoActual}, cTotal: ${totalAVisitar}, cVenta: ${conVenta}, cVisitados: ${visitados}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}, Batt: ${B4XPages.MainPage.batt}, 0, 0, 0, Almacen: ${B4XPages.MainPage.ALMACEN}, Ruta: ${B4XPages.MainPage.rutapreventa}"$)
reqManager.ExecuteCommand(cmd, "ubicacionTiempoReal")
skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso"))
'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion"
Timer1.Enabled = False
Timer1.Interval = Interval * 1000
Timer1.Enabled = True
End Sub
'Para los Logs
Private Sub logcat_LogCatData (Buffer() As Byte, Length As Int)
logs.Append(BytesToString(Buffer, 0, Length, "utf8"))
If logs.Length > 4000 Then
logs.Remove(0, logs.Length - 2000) 'Obtenemos log de 2000 ~ 4000 chars
End If
End Sub
'Return true to allow the OS default exceptions handler to handle the uncaught exception. 'Para los Logs
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
'wait for 500ms to allow the logs to be updated.
Dim jo As JavaObject
Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms
logcat.LogCatStop
logs.Append(StackTrace)
Subs.revisaBD
Subs.errorLog.ExecNonQuery2("INSERT INTO errores(fecha, error) VALUES (?,?)", Array As Object (Subs.fechaKMT(DateTime.now), logs))
Return True
End Sub
'Inicializa el reqServer con la dirección dada y lo guarda en CAT_VARIABLES.
Sub reinicializaReqManager(srv As String)
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("SERVER"))
skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("SERVER", srv))
DBReqServer = srv
reqManager.Initialize(Me, srv)
LogColor(srv, Colors.red)
End Sub
Sub JobDone(Job As HttpJob)
Log("JOBDONE STARTER")
Try
If reqManager.reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos.
If reqManager.reqsList.IndexOf(Job.tag) <> -1 Then
reqManager.reqsList.RemoveAt(reqManager.reqsList.IndexOf(Job.tag))
LogColor($">>>>>> Quitamos ${Job.tag}"$, Colors.Blue)
End If
LogColor(">>>>>> " & reqManager.reqsList.Size & " - " & reqManager.reqsList, Colors.Blue)
End If
If Job.Success = False Then
LogColor("############################################", Colors.red)
LogColor("###### JobError: " & Job.Tag & CRLF & Job.ErrorMessage, Colors.red)
LogColor("############################################", Colors.red)
' LogColor("Error2: " & Job.ErrorMessage, Colors.red)
' LogColor("Error1: " & reqManager.HandleJob(Job).tag, Colors.red)
' LogColor("Error: " & reqManager.HandleJob(Job).tag & " : " & Job.ErrorMessage, Colors.red)
' Job.Release
Else 'If Job Success then ...
' Log(3)
LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.RGB(0,160,0)) 'Mod por CHV - 211027
'Verificamos que el usuario guardado en BD sea VALIDO.
If Job.JobName = "DBRequest" Then
Dim result As DBResult = reqManager.HandleJob(Job)
' For Each records() As Object In result.Rows
' Log("==========================REGISTROS="&result.Rows)
' For Each k As String In result.Columns.Keys
' Log(result.Tag & ": " & k & ": " & records(result.Columns.Get(k)))
' Next
' Next
If result.Tag.As(String).StartsWith("mandaBitacora_") Then
For Each records() As Object In result.Rows
Private id() = Regex.Split("_", result.tag)
If id.Length > 1 Then
For Each k As String In result.Columns.Keys
' Log(result.Tag & ": " & k & ": " & records(result.Columns.Get(k)))
skmt.ExecNonQuery($"update bitacoragps set enviado = 1 where id = '${id(1)}'"$)
' Log($"update bitacoragps set enviado = 1 where id = '${id(1)}'"$)
Next
End If
Next
End If
'HISTORIAL DE UBICACIONES (Tracker)
If result.Tag.As(String).StartsWith("guardaHistorialUbicaciones_") Then
For Each records() As Object In result.Rows
Private id() As String = Regex.Split("_", result.tag)
If id.Length > 1 Then
For Each k As String In result.Columns.Keys
' Log(result.Tag & ": " & k & ": " & records(result.Columns.Get(k)))
skmt.ExecNonQuery($"update HIST_UBICACIONES set HU_ENVIADO = 1 where HU_ID = '${id(1)}'"$)
' Log($"update bitacoragps set enviado = 1 where id = '${id(1)}'"$)
Next
End If
Next
End If
'GUARDA PESOS
If result.Tag.As(String).StartsWith("insertPesos_") Then
For Each records() As Object In result.Rows
Private id() = Regex.Split("_", result.tag)
If id.Length > 1 Then
For Each k As String In result.Columns.Keys
' Log(RESULT.Tag & ": " & k & ": " & records(RESULT.Columns.Get(k)))
skmt.ExecNonQuery($"update pesos set PE_ENVIO_OK = 1 where PE_CLIENTE = '${id(1)}'"$)
' Log($"update bitacoragps set enviado = 1 where id = '${id(1)}'"$)
Next
End If
Next
End If
End If
End If
Log(">>>>> Job.Release Starter")
Job.Release
Catch
Log(LastException)
End Try
End Sub