diff --git a/B4A/C_Validador.bas b/B4A/C_Validador.bas new file mode 100644 index 0000000..fc8cc09 --- /dev/null +++ b/B4A/C_Validador.bas @@ -0,0 +1,266 @@ +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 \ No newline at end of file diff --git a/B4A/INTMEX.b4a.meta b/B4A/INTMEX.b4a.meta index 052fbec..a6a0370 100644 --- a/B4A/INTMEX.b4a.meta +++ b/B4A/INTMEX.b4a.meta @@ -73,7 +73,7 @@ ModuleClosedNodes17= ModuleClosedNodes18= ModuleClosedNodes19= ModuleClosedNodes2= -ModuleClosedNodes20=6 +ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= ModuleClosedNodes23= @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_TicketsDia,b_noventa_Click,156,0,C_TicketsDia,B4XPage_Created,28,0,C_TicketsDia,B4XPage_Appear,92,6,C_Principal,JobDone,1558,0,C_Principal,Subir_Click,695,0,C_Validador,revisaCantsYMontosTotales,149,0,C_Validador,timerValidador_Tick,52,0,C_Validador,revisaGuardados,93,0,C_Validador,iniciaValidacion,37,0,C_Validador,mandaGuardados,92,0,C_Validador,JobDone,159,0 +NavigationStack=C_TicketsDia,B4XPage_Appear,92,6,C_Principal,JobDone,1558,0,C_Principal,Subir_Click,695,0,C_Validador,timerValidador_Tick,52,0,C_Validador,Class_Globals,11,0,C_Validador,iniciaValidacion,37,0,C_Validador,revisaGuardados,113,0,C_Validador,mandaGuardados,87,0,C_Validador,JobDone,196,0,C_Validador,revisaCantsYMontosTotales,142,0 SelectedBuild=0 VisibleModules=2,28,13,14,4,20,29,15,16,18