diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 72f4679..81eff7b 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -451,10 +451,34 @@ Sub JobDone(Job As HttpJob) End If If Job.Success = False Then LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) + If Job.Tag = "ping" Then 'query tag +' Log("ERROR DE PING") +' B4XPages.MainPage.principal.p_conexion.Color = Colors.red + If B4XPages.MainPage.principal.l_conexion.IsInitialized Then + Starter.senial = 0 + B4XPages.MainPage.principal.l_conexion.TextColor = Colors.red + End If + 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 = "ping" Then 'query tag +' Log("PING OK!!") + If B4XPages.MainPage.principal.l_conexion.IsInitialized Then + Starter.senial = 1 + B4XPages.MainPage.principal.l_conexion.TextColor = Colors.Green + End If + End If + + If result.Tag = "fecha" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log("select_fechat: " & k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + If result.Tag = "version" Then 'query tag For Each records() As Object In result.Rows skmt.ExecNonQuery("delete from VERSION") @@ -470,19 +494,13 @@ Sub JobDone(Job As HttpJob) Next Next End If - End If - If Job.JobName = "DBRequest" Then - Dim result As DBResult = reqManager.HandleJob(Job) If result.Tag = "agencia" Then 'query tag For Each records() As Object In result.Rows Dim ID_ALMACEN As String = records(result.Columns.Get("ID_ALMACEN")) Next End If - End If - If Job.JobName = "DBRequest" Then - Dim result As DBResult = reqManager.HandleJob(Job) If result.Tag = "fecha" Then 'query tag For Each records() As Object In result.Rows Dim FECHA_HOY As String = records(result.Columns.Get("FECHA")) @@ -490,10 +508,7 @@ Sub JobDone(Job As HttpJob) skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) Next End If - End If - If Job.JobName = "DBRequest" Then - Dim result As DBResult = reqManager.HandleJob(Job) If result.Tag = "usuario" Then 'query tag For Each records() As Object In result.Rows Dim name As String = records(result.Columns.Get("USUARIO")) @@ -505,10 +520,7 @@ Sub JobDone(Job As HttpJob) ToastMessageShow(name, False) Log("////////////////////////// "&name) End If - End If - If Job.JobName = "DBRequest" Then - Dim result As DBResult = reqManager.HandleJob(Job) If result.Tag = "usuario_10" Then 'query tag For Each records() As Object In result.Rows Dim name As String = records(result.Columns.Get("USUARIO")) @@ -520,19 +532,18 @@ Sub JobDone(Job As HttpJob) IMEI_BASE = "" IMEI = "" End If + + If result.Tag = "ruta" Then 'query tag + Log("JOBDONE PRINCIPAL MAINPAGE") + For Each records() As Object In result.Rows + Dim VALIDO As String = records(result.Columns.Get("VALIDO")) + If VALIDO = "OK" Then + Log(VALIDO) + End If + Next + End If End If - - If result.Tag = "ruta" Then 'query tag - Log("JOBDONE PRINCIPAL MAINPAGE") - For Each records() As Object In result.Rows - Dim VALIDO As String = records(result.Columns.Get("VALIDO")) - If VALIDO = "OK" Then - Log(VALIDO) - End If - Next - End If - - + Job.Release End If Log($"Paso1 = ${paso1} - Name: ${name} - IMEI: ${IMEI} - IMEI_BASE: ${IMEI_BASE}"$) diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 813edd4..cf227d3 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -214,6 +214,10 @@ Sub Class_Globals Private L_VENTA As Label Private L_PREVENTA As Label Dim validador As C_Validador + Dim p_muestraPendientes As Panel + Private b_muestraPendientes As Button +' Dim p_conexion As Panel + Dim l_conexion As Label End Sub 'You can add more parameters here. @@ -228,7 +232,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) Root.LoadLayout("principal") rd.Initialize rd.vacuum - validador.Initialize + validador.Initialize(Me, "val") EJECUTANDO=1 Dim ruta As String img2.Visible =False @@ -301,6 +305,10 @@ Private Sub B4XPage_Created (Root1 As B4XView) l_rutasuplencia.Text = s.GetString("RS_RUTA") End If Starter.Skmt.ExecNonQuery($"create table if not exists kmt_info2 (${getTableColumnList(Starter.skmt, "kmt_info")})"$) + p_mandaInfo.Left = 0: p_mandaInfo.top = 0 + p_muestraPendientes.Left = Root.Width - p_muestraPendientes.Width - 5dip +' p_conexion.Top = 1 : p_conexion.left = Root.width - p_conexion.width + l_conexion.Top = 0 : l_conexion.left = Root.width - l_conexion.width -2 End Sub Sub chkIfTableExists(db As SQL, table As String) As Boolean 'ignore @@ -490,8 +498,6 @@ Sub B4XPage_Appear c.Close bu.Initialize batterystatus = bu.BatteryInformation - - c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") c.Position = 0 usuario = c.GetString("USUARIO") @@ -503,38 +509,47 @@ Sub B4XPage_Appear B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT B4XPages.MainPage.ALMACEN = ALMACEN B4XPages.MainPage.rutapreventa = l_ruta.text - - '////// Para el usuario global - Chv - c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c = B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") c.Position = 0 usuario = c.GetString("USUARIO") B4XPages.MainPage.usuario = usuario c.Close - '/////// CallSub(Starter, "ENVIA_ULTIMA_GPS") - - s = B4XPages.MainPage.skmt.ExecQuery("select RS_RUTA FROM RUTA_SUPLENCIA") s.Position = 0 If s.RowCount = 0 Then - Label22.Visible = False l_rutasuplencia.Visible = False l_rutasuplencia.Text = "" - Else If s.RowCount > 0 Then - Label22.Visible = True l_rutasuplencia.Visible = True l_rutasuplencia.Text = s.GetString("RS_RUTA") - End If - ' If l_ruta.Text = "0" Then ' b_abordo.Visible = False ' Else ' b_abordo.Visible = True ' End If + Dim RedDisponible As Phone + Log("GetNetworkOperatorName: "&RedDisponible.GetNetworkOperatorName) + Log("GetNetworkType: "&RedDisponible.GetNetworkType) + Log("GetPhoneType: "&RedDisponible.GetPhoneType) +' If RedDisponible.GetNetworkOperatorName <> "" And RedDisponible.GetNetworkType <> "UNKNOWN" Then +' Log("Red Disponible") +' Else +' Log("Red no disponible") +' End If + Log("GetDataState: " & RedDisponible.GetDataState) + Log("IsAirplaneModeOn: " & RedDisponible.IsAirplaneModeOn) + Log("|" & validador.buscaSinEnviar & "|") + If validador.buscaSinEnviar > 0 Then + p_muestraPendientes.Visible = True + b_muestraPendientes.Enabled = True + b_muestraPendientes.text = "Enviar" + Else + p_muestraPendientes.Visible = False + End If validador.iniciaValidacion End Sub @@ -737,8 +752,8 @@ Sub Subir_Click sTime=DateTime.Time(DateTime.Now) Dim cmd As DBCommand cmd.Initialize - cmd.Name ="insert_drop_INTMEX_2" - cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN) + cmd.Name ="insert_drop_INTMEX_3" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN, Application.VersionName, Starter.senial) reqManager.ExecuteCommand(cmd , "inst_noventa") img2.Visible =True PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) @@ -876,8 +891,8 @@ Sub cargar_Click ' imei = P.GetDeviceId imei = "xxxx" cmd.Initialize - cmd.Name ="insert_drop_INTMEX_2" - cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN) + cmd.Name ="insert_drop_INTMEX_3" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN, Application.VersionName, Starter.senial) reqManager.ExecuteCommand(cmd , "inst_noventa") cmd.Initialize @@ -2665,4 +2680,35 @@ Private Sub b_abordo_Click Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object("0")) B4XPages.MainPage.tipo_venta = "ABORDO" B4XPages.ShowPage("Productos") +End Sub + +Private Sub b_muestraPendientes_Click + validador.iniciaValidacion + b_muestraPendientes.Enabled = False + b_muestraPendientes.TextColor = Colors.white + B4XPages.ShowPage("ticketsDia") +End Sub + +Sub val_Guardando(msg As String) + Log("##################################################" & CRLF & msg) + b_muestraPendientes.Enabled = False + b_muestraPendientes.TextColor = Colors.white + b_muestraPendientes.Text = msg +End Sub + +Sub val_Enviando(msg As String) + Log("##################################################" & CRLF & msg) + b_muestraPendientes.Text = msg +End Sub + +Sub val_Validando(msg As String) + Log("##################################################" & CRLF & msg) + b_muestraPendientes.Text = msg +End Sub + +Sub val_Terminado(msg As String) + Log("##################################################" & CRLF & msg) + b_muestraPendientes.Text = msg + Sleep (1000) + p_muestraPendientes.Visible = False End Sub \ No newline at end of file diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas index 817f38b..14073f8 100644 --- a/B4A/C_TicketsDia.bas +++ b/B4A/C_TicketsDia.bas @@ -98,7 +98,7 @@ Sub B4XPage_Appear color = Colors.RGB(0,146,1) End If End If - Log(estatus) +' Log(estatus) Private cs As CSBuilder cs.Initialize ListView1.AddTwoLines(c.GetString("PC_CLIENTE"), _ diff --git a/B4A/C_Validador.bas b/B4A/C_Validador.bas index 33f90ae..ae9cea8 100644 --- a/B4A/C_Validador.bas +++ b/B4A/C_Validador.bas @@ -7,16 +7,21 @@ Version=12.8 Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI 'ignore + Private EventName As String 'ignore + Private CallBack As Object 'ignore Dim reqManager As DBRequestManager Dim timerValidador As Timer Dim intervalo As Int = 300 Dim skmt As SQL Dim c As Cursor Dim sDate, sTime As String + dim totalAValidar as int = 0 End Sub 'You can add more parameters here. -Public Sub Initialize As Object +Public Sub Initialize (vCallback As Object, vEventName As String) As Object + EventName = vEventName + CallBack = vCallback reqManager.Initialize(Me, Starter.DBReqServer) timerValidador.Initialize("timerValidador", intervalo * 1000) timerValidador.Enabled = True @@ -57,6 +62,17 @@ Sub timerValidador_Tick iniciaValidacion End Sub +' Regresa cuantos pedidos sin gardar o enviar hay. +Sub buscaSinEnviar As Int + Private x As Int = 0 + Private f As Cursor = skmt.ExecQuery("SELECT count(*) as cuantos FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1") + If f.RowCount > 0 Then + f.Position = 0 + x = f.GetInt("cuantos") + End If + Return x +End Sub + 'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1. Sub mandaGuardados Log(">>>>>>> MANDA GUARDADOS") @@ -67,6 +83,7 @@ Sub mandaGuardados c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1") Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) If c.RowCount > 0 Then + pedidoGuardando($"Guardando ..."$) For i = 0 To c.RowCount - 1 c.Position = i Log($"${c.GetString("PC_CLIENTE")}|${c.GetString("PC_FECHA")}|${c.GetString("PC_ENVIO_OK")}|"$) @@ -100,30 +117,16 @@ End Sub 'Revisa que los pedidos con envio_ok < 2 esten completos en web y los pone en 2. Sub revisaGuardados Log(">>>>>>> VALIDA GUARDADOS") -'' Dim PCNoArts As String -'' Dim PCMonto As String + '' Dim PCNoArts As String + '' Dim PCMonto As String Private almacen As String = Subs.traeAlmacen Private laRuta As String = Subs.traeRuta - c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 1") - Log($"Pedido_Cliente VALIDAR: ${c.RowCount}"$) - If c.RowCount > 0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - Log($"${c.GetString("PC_CLIENTE")}|${c.GetString("PC_FECHA")}|${c.GetString("PC_ENVIO_OK")}|"$) - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "validaPC_Intmex" - cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_USER"), c.GetString("PC_FECHA"), almacen, laRuta) -' PCNoArts = c.GetString("PC_NOART") -' PCMonto = c.GetString("PC_MONTO") - reqManager.ExecuteCommand(cmd , $"ins_revisaGuardados_head_${c.GetString("PC_CLIENTE")}"$) - Next - End If 'PEDIDO (Pendientes) c = skmt.ExecQuery($"SELECT * FROM PEDIDO where PE_ENVIO_OK = 1"$) - Log($"Pedido VALIDAR: ${c.RowCount}"$) + Log($"Pedidos a VALIDAR: ${c.RowCount}"$) If c.RowCount > 0 Then + pedidoEnviando($"Enviando ..."$) For i = 0 To c.RowCount - 1 c.Position=i Dim cmd As DBCommand @@ -134,6 +137,40 @@ Sub revisaGuardados ' Log($">>>> INS_PEDIDO= ${C.GetString("PE_CEDIS")},${almacen},${C.GetString("PE_COSTO_TOT")},${C.GetString("PE_COSTOU")},${C.GetString("PE_CANT")}, ${C.GetString("PE_PRONOMBRE")}, ${C.GetString("PE_PROID")}, ${C.GetString("PE_CLIENTE")}, ${C.GetString("PE_FECHA")}, ${C.GetString("PE_USUARIO")}, ${C.GetString("PE_RUTA")}, ${C.GetString("PE_COSTO_SIN")}, ${C.GetString("PE_DESC")}, ${c.GetString("PE_FOLIO")}, ${PCNoArts}, ${PCMonto}, ${PCMonto}, ${c.GetString("PE_TICKET")}"$) Next End If + + Sleep(5000) + + ' Subir los productos del pedido, y en el jobdone revisar si ya se enviaron todos los de ese pedido (verificar con AffectedRows = 1), si ya se enviaron, + ' entonces Y SOLO ENTONCES, subir el header del pedido y validarlo con AffectedRows = 1. + + 'PEDIDO CLIENTE + c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 1") + Log($"Pedidos_Cliente a VALIDAR: ${c.RowCount}"$) + If c.RowCount > 0 Then + pedidoEnviando($"Enviando ..."$) + For i = 0 To c.RowCount - 1 + Private cuantosProdsPedido As Int = 0 + c.Position = i + ' Traemos la cantidad de productos "validados" de PEDIDO. + Private x As Cursor = Starter.skmt.ExecQuery($"select sum(pe_cant) as cuantos from pedido where pe_cliente = '${c.GetString("PC_CLIENTE")}' and pe_envio_ok = 2"$) + If x.RowCount > 0 Then + x.Position = 0 + cuantosProdsPedido = x.GetInt("cuantos") + End If + Log($"Articulos en cliente ${c.GetString("PC_CLIENTE")}: P:${cuantosProdsPedido}, PC:${c.GetInt("PC_NOART")}"$) + ' Si los productos validados en PEDIDO coinciden con los productos de PEDIDO_CLIENTE, entonces validamos el header. + If cuantosProdsPedido = c.GetInt("PC_NOART") Then + Log($"${c.GetString("PC_CLIENTE")}|${c.GetString("PC_FECHA")}|${c.GetString("PC_ENVIO_OK")}|"$) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "validaPC_Intmex" + cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_USER"), c.GetString("PC_FECHA"), almacen, laRuta) +' PCNoArts = c.GetString("PC_NOART") +' PCMonto = c.GetString("PC_MONTO") + reqManager.ExecuteCommand(cmd , $"ins_revisaGuardados_head_${c.GetString("PC_CLIENTE")}"$) + End If + Next + End If c.Close End Sub @@ -145,7 +182,8 @@ Sub revisaCantsYMontosTotales Private laRuta As String = Subs.traeRuta c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 2 or 1") ' El uno del final es para que SIEMPRE revise las cantidades y montos, por si se borra la orden desde web, para que se envíe NUEVAMENTE. Log($"Pedidos a VALIDAR (Cants y Montos): ${c.RowCount}"$) - If c.RowCount>0 Then + If c.RowCount > 0 Then + totalAValidar = c.RowCount For i=0 To c.RowCount -1 c.Position=i Dim cmd As DBCommand @@ -172,7 +210,6 @@ Sub JobDone(Job As HttpJob) Log("JOBDONE VALIDADOR RUTA") Subs.logJobDoneResultados(resultado) End If - ' PEDIDOS GUARDADOS HEAD If resultado.Tag.As(String).IndexOf("ins_mandaGuardados_head_") > -1 Then Log("ins_mandaGuardados_head_") @@ -185,6 +222,7 @@ Sub JobDone(Job As HttpJob) skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(3)}'"$) End If Next +' pedidoGuardando("Listo") End If ' PEDIDOS GUARDADOS PRODS Dim resultado As DBResult = reqManager.HandleJob(Job) @@ -224,7 +262,7 @@ Sub JobDone(Job As HttpJob) ' REVISA GUARDADOS HEAD If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_head_") > -1 Then Log("ins_revisaGuardados_head_") - Subs.logJobDoneResultados(resultado) + Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_") + 22) Log(cliente) @@ -238,7 +276,10 @@ Sub JobDone(Job As HttpJob) End If ' REVISA CANTIDADES Y MONTOS TOTALES If resultado.Tag.As(String).IndexOf("validaCantsCostosTotales_") > -1 Then + pedidoValidando($"Validando ..."$) + totalAValidar = totalAValidar - 1 Log("validaCantsCostosTotales_") + Log("totalAValidar: " & totalAValidar) Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+1) @@ -270,6 +311,10 @@ Sub JobDone(Job As HttpJob) skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 0 where PE_CLIENTE = '${pars(1)}'"$) End If Next + If totalAValidar <= 0 Then + totalAValidar = 0 + validacionTerminada("Listo!!") + End If End If ' VALIDA CANTIDADES Y COSTOS TOTALES If resultado.Tag.As(String).IndexOf("validaCCT2_") > -1 Then @@ -284,4 +329,36 @@ Sub JobDone(Job As HttpJob) End If Job.Release End If +End Sub + +Sub pedidoGuardando(msg As String) + Log("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& - Guardando") + If SubExists(CallBack, EventName & "_Guardando") Then + Log("GGG") + CallSub2(CallBack, EventName & "_Guardando", msg) + End If +End Sub + +Sub pedidoEnviando(msg As String) +' Log("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& - Enviando") + If SubExists(CallBack, EventName & "_Enviando") Then +' Log("EEE") + CallSub2(CallBack, EventName & "_Enviando", msg) + End If +End Sub + +Sub pedidoValidando(msg As String) +' Log("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& - Validadndo") + If SubExists(CallBack, EventName & "_Validando") Then +' Log("VVVV") + CallSub2(CallBack, EventName & "_Validando", msg) + End If +End Sub + +Sub validacionTerminada(msg As String) + Log("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& - Terminado") + If SubExists(CallBack, EventName & "_Terminado") Then +' Log("VVVV") + CallSub2(CallBack, EventName & "_Terminado", msg) + End If End Sub \ No newline at end of file diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 3beef17..de3f8b5 100644 Binary files a/B4A/Files/principal.bal and b/B4A/Files/principal.bal differ diff --git a/B4A/INTMEX.b4a b/B4A/INTMEX.b4a index 9c9e94e..b77dd21 100644 --- a/B4A/INTMEX.b4a +++ b/B4A/INTMEX.b4a @@ -164,7 +164,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Intmex #VersionCode: 1 - #VersionName: 5.03.25 + #VersionName: 5.05.11 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/INTMEX.b4a.meta b/B4A/INTMEX.b4a.meta index 72879db..4f4847f 100644 --- a/B4A/INTMEX.b4a.meta +++ b/B4A/INTMEX.b4a.meta @@ -65,14 +65,14 @@ ModuleClosedNodes1= ModuleClosedNodes10= ModuleClosedNodes11= ModuleClosedNodes12= -ModuleClosedNodes13=3 +ModuleClosedNodes13=4,5,6 ModuleClosedNodes14=11 ModuleClosedNodes15= ModuleClosedNodes16= ModuleClosedNodes17= ModuleClosedNodes18= ModuleClosedNodes19= -ModuleClosedNodes2= +ModuleClosedNodes2=6 ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= @@ -81,7 +81,7 @@ ModuleClosedNodes24= ModuleClosedNodes25=2 ModuleClosedNodes26= ModuleClosedNodes27=1 -ModuleClosedNodes28= +ModuleClosedNodes28=3,7,8,9,11,12 ModuleClosedNodes29= ModuleClosedNodes3= ModuleClosedNodes30= @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Nota,ListView1_ItemLongClick,165,0,C_Nota,B4XPage_Appear,57,0,C_Nota,borra_Click,154,6,C_RespaldoDiario,Class_Globals,0,0,C_Promos,Class_Globals,18,0,Diseñador Visual,pedido.bal,-100,1,C_Productos,b_terminar1_Click,770,0,Diseñador Visual,productos.bal,-100,3,C_Productos,lv_prodsPedido_ItemLongClick,987,4,C_Validador,Class_Globals,10,0,C_Validador,revisaCantsYMontosTotales,153,0 +NavigationStack=C_Principal,cargar_Click,886,0,C_Principal,Class_Globals,212,2,C_Principal,B4XPage_Created,303,0,Starter,Service_Start,58,0,Starter,tConexion_Tick,83,0,B4XMainPage,JobDone,441,6,C_Principal,b_muestraPendientes_Click,2681,4,Diseñador Visual,principal.bal,-100,6,C_TicketsDia,B4XPage_Appear,94,0,C_Principal,val_Guardando,2688,0 SelectedBuild=0 -VisibleModules=2,28,14,9,4,20,29,15,16,18 +VisibleModules=28,2,13,20,14,9,4,29,27,17,18 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 8ad2285..09e9a5c 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -24,8 +24,9 @@ Sub Process_Globals ' Dim DBReqServer As String = "http://11.0.0.119:1781" ' Dim DBReqServer As String = "http://10.0.0.205:1783" ' Dim DBReqServer As String = "http://192.168.100.10:1781" - Dim Timer1 As Timer - Dim Interval As Int = 10 + Dim Timer1, tConexion As Timer + Dim Interval As Int = 300 + Dim IntervalC As Int = 10 Dim ruta As String = File.DirInternal 'Para los Logs Private logs As StringBuilder @@ -36,6 +37,7 @@ Sub Process_Globals Dim tabla As String Dim MAC_IMPRESORA As String Dim utimaPagina As String + Dim senial As Int = 1 End Sub Sub Service_Create @@ -45,6 +47,8 @@ Sub Service_Create s.Initialize(Me, "Subs") 'Inicializamos la clase Subs skmt = s.inicializaBD(File.DirInternal, "kmt.db") ' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") 'Para Push FirebaseMessaging + tConexion.Initialize("tConexion", IntervalC * 1000) + tConexion.Enabled = True Timer1.Initialize("Timer1", Interval * 1000) Timer1.Enabled = True ' 'Para los Logs @@ -62,6 +66,13 @@ Sub Service_Start (StartingIntent As Intent) If s.traeDBReqServerDeBD(skmt) <> "N/A" And s.traeDBReqServerDeBD(skmt) <> "" Then DBReqServer = s.traeDBReqServerDeBD(skmt) reqManager.Initialize(Me, DBReqServer) Log($"Starter - |${DBReqServer}|"$) + +' Dim ctxt As JavaObject +' ctxt.InitializeContext +' Dim TelephonyManager As JavaObject = ctxt.RunMethod("getSystemService", Array("phone")) +' Dim listener As JavaObject +' listener.InitializeNewInstance(Application.PackageName & ".starter.ResilientPhoneListener", Null) +' TelephonyManager.RunMethod("listen", Array(listener, 0x00000100)) End Sub Private Sub Timer1_Tick @@ -69,6 +80,16 @@ Private Sub Timer1_Tick ENVIA_ULTIMA_GPS End Sub +Private Sub tConexion_Tick +' Log("Next run " & DateTime.Time(DateTime.Now + Interval * 1000)) +' ENVIA_ULTIMA_GPS + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_fecha" + B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "ping") 'Usamos el "reqManager" de Mainpage para que usar el jobDone de ahi!! +' Log("tConexion") +End Sub + Sub GPS_LocationChanged (Location1 As Location) ' CallSub2(Main, "GPS_LocationChanged", Location1) End Sub @@ -82,7 +103,7 @@ Sub Service_Destroy End Sub Sub ENVIA_ULTIMA_GPS - Dim logger As Boolean = False + Dim logger As Boolean = True If logger Then LogColor("Iniciamos ENVIA_ULTIMA_GPS", Colors.Magenta) Dim cmd As DBCommand ' cmd.Initialize @@ -90,12 +111,13 @@ Sub ENVIA_ULTIMA_GPS ' B4XPages.MainPage.reqManager.ExecuteQuery(cmd , 0, "fechat") Dim cmd As DBCommand cmd.Initialize - cmd.Name = "UPDATE_INTMEX_ACTUAL2_GPS" + cmd.Name = "UPDATE_INTMEX_ACTUAL3_GPS" If B4XPages.MainPage.lat_gps.Length < 15 Then B4XPages.MainPage.lat_gps = B4XPages.MainPage.lat_gps&"0" - cmd.Parameters = Array As Object(B4XPages.MainPage.montoActual, B4XPages.MainPage.clientestotal, B4XPages.MainPage.clientesventa,B4XPages.MainPage.clientesvisitados,B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,B4XPages.MainPage.batt,0, 0, 0,B4XPages.MainPage.ALMACEN,B4XPages.MainPage.rutapreventa) - If logger Then Log($"montoActual: ${B4XPages.MainPage.montoActual}, cTotal: ${B4XPages.MainPage.clientestotal}, cVenta: ${B4XPages.MainPage.clientesventa}, cVisitados: ${B4XPages.MainPage.clientesvisitados}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}, Batt: ${B4XPages.MainPage.batt}, 0, 0, 0, Almacen: ${B4XPages.MainPage.ALMACEN}, Ruta: ${B4XPages.MainPage.rutapreventa}"$) + cmd.Parameters = Array As Object(B4XPages.MainPage.montoActual, B4XPages.MainPage.clientestotal, B4XPages.MainPage.clientesventa,B4XPages.MainPage.clientesvisitados,B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,B4XPages.MainPage.batt,0, 0, 0, Application.VersionName,senial,B4XPages.MainPage.ALMACEN,B4XPages.MainPage.rutapreventa) + If logger Then Log($"montoActual: ${B4XPages.MainPage.montoActual}, cTotal: ${B4XPages.MainPage.clientestotal}, cVenta: ${B4XPages.MainPage.clientesventa}, cVisitados: ${B4XPages.MainPage.clientesvisitados}, ${B4XPages.MainPage.lat_gps}, ${B4XPages.MainPage.lon_gps}, Batt: ${B4XPages.MainPage.batt}, 0, 0, 0, ${Application.VersionName},${senial},Almacen: ${B4XPages.MainPage.ALMACEN}, Ruta: ${B4XPages.MainPage.rutapreventa}"$) reqManager.ExecuteCommand(cmd, "inst_visitas") 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 @@ -129,4 +151,103 @@ Sub reinicializaReqManager(srv As String) DBReqServer = srv reqManager.Initialize(Me, srv) LogColor(srv, Colors.red) -End Sub \ No newline at end of file +End Sub + +Sub Signal_Changedx (SignalStrengh As Object) + Dim s2 As JavaObject = SignalStrengh + Private theSignal As String = s2.RunMethod("getGsmSignalStrength", Null) + Log(theSignal) + ToastMessageShow(theSignal, False) +End Sub + +'Sub Signal_Changed (strength As Int) +' Log($"Intensidad de señal recibida: ${strength}"$) +' ToastMessageShow($"Intensidad de señal recibida: ${strength}"$, False) +' ' Procesar el valor según el tipo de red +' If strength >= 0 And strength <= 31 Then +' ' GSM: convertir a dBm aproximado +' Dim dBm As Int = -113 + strength * 2 +' Log($"Señal GSM: ${strength} (~${dBm} dBm)"$) +' ToastMessageShow($"Señal GSM: ${strength} (~${dBm} dBm)"$, False) +' Else If strength < 0 Then +' ' CDMA/LTE: ya está en dBm +' Log($"Señal CDMA/LTE: ${strength} dBm"$) +' ToastMessageShow($"Señal GSM: ${strength} (~${dBm} dBm)"$, False) +' Else If strength = 99 Then +' Log("Señal desconocida o error") +' ToastMessageShow("Señal desconicida", False) +' End If +'End Sub + + + +'if Java +' +'import android.telephony.*; +'import android.os.Build; +'Public static class MyPhoneStateListener extends PhoneStateListener { +'Public MyPhoneStateListener() { +'} +'Public void onSignalStrengthsChanged(SignalStrength signalStrength) { +' anywheresoftware.b4a.BA.Log("onSignalStrengthsChanged"); +' +' int strengthValue; +' +' Try { +' If (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +' strengthValue = signalStrength.getLevel(); // 0-4 +' } Else { +' If (signalStrength.isGsm()) { +' strengthValue = signalStrength.getGsmSignalStrength(); // 0-31, 99 es desconocido +' } Else { +' strengthValue = signalStrength.getCdmaDbm(); +' } +' } +' +' // Pasar solo el valor entero, no el objeto SignalStrength completo +' starter.processBA.raiseEventFromUI(Null, "signal_changed", strengthValue); +' +' } Catch (Exception e) { +' anywheresoftware.b4a.BA.Log("Error: " + e.getMessage()); +' starter.processBA.raiseEventFromUI(Null, "signal_changed", 99); // Valor por defecto en caso de error +' } +'} +'} +'End If + + +#if Java + +import android.telephony.*; +import android.os.Build; +public static class ResilientPhoneListener extends PhoneStateListener { + private long lastUpdate = 0; + + @Override + public void onSignalStrengthsChanged(SignalStrength signalStrength) { + lastUpdate = System.currentTimeMillis(); + anywheresoftware.b4a.BA.Log("onSignalStrengthsChanged"); + + int strengthValue; + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + strengthValue = signalStrength.getLevel(); + } else { + if (signalStrength.isGsm()) { + strengthValue = signalStrength.getGsmSignalStrength(); + } else { + strengthValue = signalStrength.getCdmaDbm(); + } + } + starter.processBA.raiseEventFromUI(null, "signal_changed", strengthValue); + } catch (Exception e) { + starter.processBA.raiseEventFromUI(null, "signal_changed", 99); + } + } + + public boolean isAlive() { + return (System.currentTimeMillis() - lastUpdate) < 120000; + } + +} +#End If \ No newline at end of file