Files
Kelloggs_v4/B4A/Starter.bas
Jose Alberto Guerra Ugalde 048deef8c1 VERSION 6.03.30
- Cambios en DBRequestManagerW para evitar un error cuando no hay internet
2026-04-01 17:07:51 -06:00

270 lines
11 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 rp As RuntimePermissions
' Dim s As C_Subs
Dim reqManager As DBRequestManager
Dim skmt, errorLog As SQL
Dim ruta As String = File.DirInternal
Public BluetoothState As Boolean
Dim btAdmin As BluetoothAdmin
Dim intentosImpresora As Int = 0
Dim revisandoImpresora As Boolean = False
Public FLP As FusedLocationProvider
Dim GPS As GPS
'Para ENVIA_ULTIMA_GPS
Dim Timer1 As Timer
Dim Interval As Int = 600
Dim DBReqServer As String
Dim pe As PhoneEvents
Dim ph As Phone
Dim marcaCel As String = ph.manufacturer
Dim rutaTipo As String = "TRADICIONAL"
'Para los Logs
Dim logs As StringBuilder
Private logcat As LogCat
Dim rutaV As String = ""
Dim montoActual, clientesTotal, clientesVenta, clientesVisitados, almacen, rutaPreventa, CANTIDADPROD As String 'ignore
Dim lat_gps, lon_gps As String
Dim ubicacionActual As Location
Dim FECHA_HOY As String
Dim HORA As String
Dim usuario As String
Dim tipov As String
Dim MAC_IMPRESORA As String
Dim batt As Int
Dim ultimaActualizacionGPS As String = 235959 '
Dim fechaRuta As String 'ignore
Dim tiempos As Map
Dim Logger As Boolean = True
Dim ultimaActividad As String = ""
Dim boleta As String = 0
Dim sesion As Map
' dim cp_running as Boolean = false
Dim enVenta As Boolean = False
Dim pingShell As Boolean = False
Dim errorConnDBReq As Boolean = False
Dim GUID As String = ""
Dim passSupervisor As String = "135###" ' Valor predeterminado DIFERENTE a ""
Dim semana As Int = 0
dim revisandoNotifiaciones 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.
' s.Initialize(Me, "Subs") 'Inicializamos la clase Subs
If Logger Then LogColor("'/////////////////////////////////////////////////////////////////////////////////////////////", Colors.Green)
If Logger Then LogColor("'///////////////////////////////////// Iniciamos Starter /////////////////////////////////", Colors.Green)
If Logger Then LogColor("'/////////////////////////////////////////////////////////////////////////////////////////////", Colors.Green)
Timer1.Initialize("Timer1", Interval * 1000)
Timer1.Enabled = True
GPS.Initialize("GPS")
ubicacionActual.Initialize
Subs.revisaBD
' promociones.Initialize
pe.Initialize("pe") 'Para obtener la bateria
' skmt = s.dbInit 'Inicializamos BD.
DBReqServer = "http://keymon.net:1781"
' DBReqServer = "http://keymon.lat:9003"
Private c As Cursor = skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'SERVER'"$)
If c.RowCount > 0 Then
c.Position = 0
DBReqServer = c.GetString("CAT_VA_VALOR")
End If
c.Close
reqManager.Initialize(Me, DBReqServer) 'Inicializamos reqManager.
If Logger Then Log($"Starter reqManager server: ${DBReqServer}"$)
'Para los Logs
' #if RELEASE
logcat.LogCatStart(Array As String("-v","raw","*:F","B4A:v"), "logcat")
' #end if
logs.Initialize
sesion.Initialize
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
#if DEBUG
Logger = True
#else
Logger = False
#End If
End Sub
Sub Subs_dbOk(success As Boolean)
LogColor($"Conexión con base de datos: ${success}"$, Colors.red)
End Sub
Sub Service_TaskRemoved
'This event will be raised when the user removes the app from the recent apps list.
Timer1.Enabled=False
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.
Log("::::::::::::::::::::: ERROR")
Dim jo As JavaObject
Dim l As Long = 500: jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l)) 'Sleep 500ms
logcat.LogCatStop
logs.Initialize
logs.Append("Ver " & Application.VersionName & CRLF)
logs.Append("R:" & Subs.traeRuta & CRLF)
logs.Append(StackTrace)
Subs.revisaBD
LogColor(logs, Colors.blue)
skmt.ExecNonQuery($"INSERT INTO errores(fecha, error) VALUES ('${Subs.fechaKMT(DateTime.now)}', '${logs}')"$)
LogColor("insertamos Error", Colors.red)
StartActivity(errorManager)
Return True
End Sub
Sub Service_Destroy
' Timer1.Enabled=False
If Logger Then LogColor("starter destroyed", Colors.red)
End Sub
Sub pe_BatteryChanged (Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent)
batt=Level
End Sub
Private Sub Timer1_Tick
' ToastMessageShow("Timer",False)
If Logger Then Log("Siguiente actualizacion " & DateTime.Time(DateTime.Now + Interval * 1000))
ENVIA_ULTIMA_GPS 'Comentado para que no estorbe hasta que no esten los queries correctos en el config.properties
End Sub
'Sub reinicializaReqManager
' reqManager.Initialize(Me, server)
' If Logger Then Log(server)
'End Sub
Sub ENVIA_ULTIMA_GPS
If Logger Then Log("Iniciamos ENVIA_ULTIMA_GPS")
If Not(skmt.IsInitialized) Then skmt.Initialize(ruta,"kmt.db", True)
DateTime.TimeFormat = "HHmmss"
ultimaActualizacionGPS = DateTime.Time(DateTime.Now)
Private s1 As Cursor = skmt.ExecQuery2("select CAT_VA_VALOR as semana from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) 'Traemos la semana.
If s1.RowCount > 0 Then
s1.Position = 0
Private laSemana As String = s1.GetString("semana")
Else
Private laSemana As String = ""
End If
Private cpv As Cursor = skmt.ExecQuery2("select count(*) as CUANTOS from kmt_info where CAT_CL_DIAS_VISITA = (SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?) and cat_cl_codigo <> 0 AND CAT_CL_TIPO_RUTA IN (?,?) ORDER BY CAT_CL_NUM_SERIEFISICO", Array As String("DIA_VISITA", laSemana, "SEMANAL")) 'Traemos los clientes a visitar hoy.
cpv.Position = 0
Private clientesVisitaHoy As String = cpv.GetString("CUANTOS")
If lat_gps = 0 Or lat_gps = Null Then 'Si latitud es CERO o NULL traemos las ultimas coordenadas de la base de datos.
Private coords As List = Subs.traeCoordsDeBD
lat_gps = coords.Get(0)
lon_gps = coords.Get(1)
End If
s1.Close
cpv.Close
Private rtec, ping, salty As String
' Log(Application.VersionName)
Subs.dameClientesFueraDeFrecuencia
Private h As Cursor
For Each i As String In Array As String ("RTEC", "PING", "SALTY SNACKS")
h=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod2 where CAT_GP_TIPO = ? )", Array As String(i))
Private x As String = 0
If h.RowCount > 0 Then
h.Position = 0
x = $"$1.3{h.GetString("MONTO_DIA")}"$
End If
x = $"$1.3{x}"$
If x="NaN" Then X = "0"
If i = "RTEC" Then rtec = x
If i = "PING" Then ping = x
If i = "SALTY SNACKS" Then salty = x
Next
h.Close
If Subs.EstaEnHorarioPermitido Then
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "UPDATE_KELL_ACTUAL3_GPS"
cmd.Parameters = Array As Object(montoActual, clientesVisitaHoy, clientesVenta, clientesVisitados, lat_gps, lon_gps, batt, 0, 0, 0, Application.VersionName, rtec, ping, salty, Subs.dameClientesFueraDeFrecuencia, almacen, rutaPreventa)
' If Logger Then LogColor(montoActual&","&clientesVisitaHoy&","&clientesVenta&","&clientesVisitados&","&lat_gps&","&lon_gps&","&batt&","&0&","&0&","&0&","&Application.VersionName&","&rtec&","&ping&","&salty&","& Subs.dameClientesFueraDeFrecuencia&","&almacen&","&rutaPreventa, Colors.Magenta)
reqManager.ExecuteCommand(cmd,"updateKell_UTR")
cmd.Name = "select_hora"
reqManager.ExecuteQuery(cmd , 0, "hora")
' log(subs.revisaHora)
End If
' If Logger Then Log(reqManager)
' If Logger Then Log("++ ++ ++ Envia_Ultima GPS - Inst_visitas - server: "& server)
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 otra actividad
Timer1.Enabled = False
Timer1.Interval = Interval * 1000
Timer1.Enabled = True
End Sub
Sub JobDone(Job As HttpJob)
If Logger Then Log("JOBDONE STARTER")
If Job.Success = False Then
' ToastMessageShow("Error: " & Job.ErrorMessage, True)
Else
' If Logger Then LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
If Job.JobName = "DBRequest" Then
Dim result As DBResult = reqManager.HandleJob(Job)
If result.Tag = "updateKell_UTR" Then 'query tag
' For Each records() As Object In result.Rows
' For Each k As String In result.Columns.Keys
' If Logger Then Log("Ubicacion en tiempo real: " & k & ": " & records(result.Columns.Get(k)))
' Next
' Next
End If
If result.Tag = "hora" Then 'query tag
For Each records() As Object In result.Rows
HORA = records(result.Columns.Get("HORA"))
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORA"))
skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORA", HORA))
DateTime.DateFormat = "HH"
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORASRVR"))
skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("HORAMVL"))
skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("HORAMVL", DateTime.Date(DateTime.Now)))
Next
End If
End If
End If
Job.Release
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
'Revisa que la conexion a la base de datos este bien.
Sub revisaBD 'ignore
If Logger Then Log("revisaBD")
If Not(File.Exists(ruta, "kmt.db")) Then File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db")
If Not(skmt.IsInitialized) Then skmt.Initialize(ruta, "kmt.db", 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