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 = 300 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 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 = False 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 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 pe.Initialize("pe") 'Para obtener la bateria ' skmt = s.dbInit 'Inicializamos BD. DBReqServer = "http://keymon.lat: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) errorLog.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 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") ' 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) 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 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