B4A=true Group=Default Group ModulesStructureVersion=1 Type=Class Version=12.8 @EndOfDesignText@ Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI '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 End Sub 'You can add more parameters here. Public Sub Initialize As Object reqManager.Initialize(Me, Starter.DBReqServer) timerValidador.Initialize("timerValidador", intervalo * 1000) timerValidador.Enabled = True If File.Exists(File.DirInternal, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") LogColor($"Copiamos ${"kmt.db"} de ${File.DirAssets} a ${File.DirInternal}"$,Colors.Green) End If skmt.Initialize(File.DirInternal, "kmt.db", True) Subs.agregaColumna("PEDIDO", "PE_GUARDADO", "TEXT DEFAULT '0'") Return Me End Sub 'This event will be called once, before the page becomes visible. Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub iniciaValidacion Log("INICIAMOS VALIDACIONES DE PEDIDOS") mandaGuardados Sleep(5000) revisaGuardados Sleep(5000) revisaCantsYMontosTotales Log("TIMER RESET") timerValidador.Enabled = False timerValidador.Initialize("timerValidador", intervalo * 1000) timerValidador.Enabled = True End Sub Sub timerValidador_Tick Log("TIMER TICK") Log("----->> PANTALLA ACTUAL: " & B4XPages.GetManager.GetTopPage.Id) iniciaValidacion End Sub 'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1. Sub mandaGuardados Log(">>>>>>> MANDA GUARDADOS") ' PEDIDO_CLIENTE (Pendientes) Dim PCNoArts As String Dim PCMonto As String Private almacen As String = Subs.traeAlmacen 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 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 = "insert_pedidos_INTMEX" cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), almacen, B4XPages.MainPage.principal.l_ruta.text, c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA")) PCNoArts = c.GetString("PC_NOART") PCMonto = c.GetString("PC_MONTO") reqManager.ExecuteCommand(cmd , $"ins_mandaGuardados_head_${c.GetString("PC_CLIENTE")}"$) Next End If 'PEDIDO (Pendientes) c = skmt.ExecQuery($"SELECT * FROM PEDIDO where PE_ENVIO_OK < 2 and PE_GUARDADO = 1"$) Log($"Pedido PENDIENTE: ${c.RowCount}"$) If c.RowCount>0 Then For i=0 To c.RowCount -1 c.Position=i Dim cmd As DBCommand cmd.Initialize cmd.Name = "insert_pedido4_INTMEX" cmd.Parameters = Array As Object(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,c.GetString("PE_TICKET")) reqManager.ExecuteCommand(cmd, $"ins_mandaGuardados_prods_${c.GetString("PE_CLIENTE")}_${c.GetString("PE_PROID")}_${c.GetString("PE_CEDIS")}"$) 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 c.Close 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 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"), c.GetString("PC_MONTO"), c.GetString("PC_NOART"), 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}"$) If c.RowCount > 0 Then For i = 0 To c.RowCount - 1 c.Position=i Dim cmd As DBCommand cmd.Initialize cmd.Name = "validaProd_Intmex" cmd.Parameters = Array As Object(C.GetString("PE_CLIENTE"),C.GetString("PE_USUARIO"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CEDIS"),almacen,laRuta) reqManager.ExecuteCommand(cmd , $"ins_revisaGuardados_prods_${c.GetString("PE_CLIENTE")}_${c.GetString("PE_PROID")}_${c.GetString("PE_CEDIS")}"$) ' 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 c.Close End Sub 'Revisa que coincidan las cantidades y montos totales de los pedidos en web y locales, y si coinciden, pone PC_ENVIO_OK en 3 (en JobDone). 'Si No coinciden, pone en CERO PC_ENVIO_OK y PE_ENVIO_OK y reinicia el proceso de validacion. Sub revisaCantsYMontosTotales Log(">>>>>>> VALIDA CANTIDADES Y MONTOS") Private almacen As String = Subs.traeAlmacen Private laRuta As String = Subs.traeRuta c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 2") Log($"Pedidos a VALIDAR (Cants y Montos): ${c.RowCount}"$) If c.RowCount>0 Then For i=0 To c.RowCount -1 c.Position=i Dim cmd As DBCommand cmd.Initialize cmd.Name = "validaCantsCostosTotales_Intmex" cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"),C.GetString("PC_USER"),almacen,laRuta) Log($"${C.GetString("PC_CLIENTE")},${C.GetString("PC_USER")},${almacen},${laRuta}"$) reqManager.ExecuteQuery(cmd , 0, $"validaCantsCostosTotales_${c.GetString("PC_CLIENTE")}_${c.GetString("PC_NOART")}_${c.GetString("PC_MONTO")}"$) Next End If c.Close End Sub Sub JobDone(Job As HttpJob) ' Log(Job.Success) If Job.Success = False Then ToastMessageShow("Validador JobDone Error: " & Job.ErrorMessage, True) Else LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) If Job.JobName = "DBRequest" Then Dim resultado As DBResult = reqManager.HandleJob(Job) If resultado.Tag = "ruta" Then 'query tag 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_") Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+24) For Each records() As Object In resultado.Rows If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then Private pars() As String = Regex.Split("_", resultado.tag) skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(3)}'"$) End If Next End If ' PEDIDOS GUARDADOS PRODS Dim resultado As DBResult = reqManager.HandleJob(Job) If resultado.Tag.As(String).IndexOf("ins_mandaGuardados_prods_") > -1 Then Log("ins_mandaGuardados_prods_") Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+25) Log($"Cliente2:${cliente}"$) For Each records() As Object In resultado.Rows Log("AffectedRows: " & records(resultado.Columns.Get("AffectedRows"))) If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then Private pars() As String = Regex.Split("_", resultado.tag) skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(3)}' and PE_PROID = '${pars(4)}' and PE_CEDIS = '${pars(5)}' and PE_ENVIO_OK = 0"$) End If Next End If ' REVISA GUARDADOS PRODS Dim resultado As DBResult = reqManager.HandleJob(Job) If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_prods_") > -1 Then Log("ins_revisaGuardados_prods_") Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+25) Log($"Cliente2:${cliente}"$) For Each records() As Object In resultado.Rows Log("AffectedRows: " & records(resultado.Columns.Get("AffectedRows"))) If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then Private pars() As String = Regex.Split("_", resultado.tag) skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 2 where PE_CLIENTE = '${pars(3)}' and PE_PROID = '${pars(4)}' and PE_CEDIS = '${pars(5)}' and PE_ENVIO_OK = 1"$) End If Next End If ' REVISA GUARDADOS HEAD If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_head_") > -1 Then Log("ins_revisaGuardados_head_") Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_") + 24) For Each records() As Object In resultado.Rows If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then Private pars() As String = Regex.Split("_", resultado.tag) skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 2 where PC_CLIENTE = '${pars(3)}'"$) End If Next End If ' REVISA CANTIDADES Y MONTOS TOTALES If resultado.Tag.As(String).IndexOf("validaCantsCostosTotales_") > -1 Then Log("validaCantsCostosTotales_") Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+1) Log("CLIENTE: " & cliente) For Each records() As Object In resultado.Rows ' Si el numero de articulos y monto total coinciden en web y local, ponemos PC_ENVIO_OK en 3. Private pars() As String = Regex.Split("_", resultado.tag) Dim COSTOT As String = records(resultado.Columns.Get("COSTOT")) Dim CANTT As String = records(resultado.Columns.Get("CANTT")) ' Si montos y cantidades coinciden en local y web, ponemos PC_ENVIO_OK en 3, si no, REINICIAMOS TODO!! If pars(2) = CANTT And pars(3) = COSTOT Then skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 3 where PC_CLIENTE = '${pars(1)}' and PC_NOART = ${CANTT} and PC_MONTO = ${COSTOT}"$) Else LogColor("################################################################", Colors.red) LogColor("##### LAS CANTIDADES Y MONTOS NO COINCIDEN EN WEB #####", Colors.red) LogColor("################################################################", Colors.red) skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 0 where PC_CLIENTE = '${pars(1)}'"$) skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 0 where PE_CLIENTE = '${pars(1)}'"$) End If Next End If ' If resultado.Tag.As(String).IndexOf("validaProds_") > -1 Then ' Log("validaProds_") ' Subs.logJobDoneResultados(resultado) ' End If End If Job.Release End If End Sub