From ec9e4b8f8d206f63397784858217b6e5ed511b5e Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Mon, 12 May 2025 18:38:05 -0600 Subject: [PATCH] =?UTF-8?q?-=20VERSION=205.05.11=20-=20Se=20agrego=20en=20?= =?UTF-8?q?"Principal"=20que=20cuando=20haya=20pedidos=20pendientes,=20apa?= =?UTF-8?q?rezca=20un=20mensaje=20y=20el=20estatus=20del=20envio=20de=20lo?= =?UTF-8?q?s=20pedidos.=20-=20Se=20agreg=C3=B3=20en=20"Principal"=20un=20i?= =?UTF-8?q?cono=20de=20"conexion"=20en=20la=20esquina=20superior=20derecha?= =?UTF-8?q?,=20que=20dependiendo=20de=20la=20conexion=20se=20pone=20verde?= =?UTF-8?q?=20o=20rojo.=20-=20Se=20agrego=20la=20version=20y=20el=20estatu?= =?UTF-8?q?s=20de=20la=20conexion=20a=20tmp=5Fdrop.=20-=20Se=20agrego=20la?= =?UTF-8?q?=20version=20y=20el=20estatus=20de=20la=20conexion=20a=20la=20u?= =?UTF-8?q?bicacion=20em=20tiempo=20real=20(CAT=5FRUTAS)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 59 +++++++++++------- B4A/C_Principal.bas | 82 ++++++++++++++++++------ B4A/C_TicketsDia.bas | 2 +- B4A/C_Validador.bas | 121 ++++++++++++++++++++++++++++------- B4A/Files/principal.bal | Bin 47239 -> 49071 bytes B4A/INTMEX.b4a | 2 +- B4A/INTMEX.b4a.meta | 10 +-- B4A/Starter.bas | 135 +++++++++++++++++++++++++++++++++++++--- 8 files changed, 333 insertions(+), 78 deletions(-) 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 3beef17a6742c281ce544484078807649ca43ad3..de3f8b5d8a992521bd31cccd0cfe6e501b52d07d 100644 GIT binary patch delta 2707 zcmai$e^69a6vy9rw90O>5eqG>3%mT3Uki)nZ&5%|peU3dQG&S2W?QhVESg$^5ZHi| zfoE*2Mr2cA1QqpB{MXb>Gfg_p=pQxXIF*0(M>91#{nI~4=U#Yn9M_4N^WNv(^L^*u zbMD>q_~?N;Ijcq)6h-+yN>NO7?;DD$wOR;vH?{8f20Pk4RbGFy&+G5-2CwbD0A?X- zY1-4~_a5}M`EjxOhm^NGDcAl|-Kum3!Z;HR(E#n3w$%Vq*D3_gJzx zvKPp#WM;DG$l@6%5ZlO>lGzz2GEQRbVC-a^JjY!!PzrOTGEQTh&NzedGGaY}OkzEO zEXLW4a~S6;T?;R`m?MvIK4Uj=0oii07uonrj8`yT$#@mx)jHGs${PKF?rRyZW4xYm zA>$2^W&Ad=e)4_9`p@zm;&;hf$XXfu8Mn=Imkx+AzSYPx93hln0{Sk8L+{su}=qOn?Sr3{1@`uEF&|YHMthBmk{{bk_Dx!Wi z%hndA4~mW#rgw^CQ06)040xM;&22$v(C2r0{Re!WcJV@(-n@v0OQqoP1}%E~_VTS| zwi>b2zfXT7R#xfh@V5IrEzWZ4<3Y_~|F|7);pG!E5WX*OIv=EOf+P1?N+g+MWq#=61cpq$000z|tN z+XTzeJ(dZ-;Ku$fk%}U^IT�m>n!wburZ>YAC)nMhkWhJ8)!8Jemj0cG1yg9MNNB z95XFTe0(4kJuVv#uB^bS{3vuzB|t2OLUHJ`vm zv2h|6?_Wwdc_IdX9f-jz6K2%{CmYjMD^1k87Iz&t+eh?i=suT#_!&M*z=4iF6Wqma zmrG2G?knjKPia^pl@jrxF(%;E={UUAV8FJi7?X|ikyRqixjejIXu{8{pI4Ux79V%n zlgKMmnx#KktkfswQtfnN`hAc{RnMjCk&C5j1z@D36$f|5;HL3(ND{7S5p1D!iGa8J zR^r|99$YgOi~A-DabU`*KJh830`7~&dolE+~|5?&4w>a`c?#e^0I|ac delta 2000 zcma*oS!_&E7zgn4-Ku0pJ8hWJb*g)(6fJ7&l-hTuXl+$RY1LNyZZtwYSo?{jlB$qS zB+}4cL1;Cev=R~zhnVMc198R=_tNQNXpM4|!K~mI5Vt|BG!X+_KLfR{b zLGg5d)3|yTNhbLE!km_N#=yCn^z~1WpF0fK$cR1k%LT1U%q$@L=!|)Bdg* zXFy^oc$j#&M5aU*Tps}*2_6N`29E}h0gsjYcaM4;csw`<>;>n7Cx9n{^T3n9lmFOn zJnt!xmo(-M@o(rC*l)roS^C7VS>;vb67lIdo7lRAHh2SOKmi1rS zeWKJd@N)19a1nSVxEQ<&TmoJVUSrsJ{>CF%3yD(jImarNd zD`IteL~L$E`m285h&=j}(B}?4$9-x$-R6!nom9<_&UR9P9JAP+W3Q=cr!sb*&*FNo zoy#{xUX5jsl2V*X+hFWNfG8<%a!v62CcK$n#IwI5&PVU#{)X8=F$dWhBF0GEQTw3kjElO-l2|B=YB`3w)^2$+gY7 z{It=bxrlF8q;THJ*<7IC&?1QQD~7NmF*z*apXM%pc0HaV`ODpf{PI?SqPX&|FD$Bu znrO4ecRN5aW=%}5H63>X6l>PR_EPhm-2A%57v}CEA7|d@{=EPnYj*OdmRx?(?2xG& zee{`Pq@367+Vp6{WcS{|1 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