- Agregar clase C_Validador!!

This commit is contained in:
2025-03-06 10:47:16 -06:00
parent e45c86a857
commit 0c84e1372d
2 changed files with 268 additions and 2 deletions

266
B4A/C_Validador.bas Normal file
View File

@@ -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

View File

@@ -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