mirror of
https://github.com/KeymonSoft/Intmex_Multiventa.git
synced 2026-04-17 12:56:08 +00:00
- Cambios en validador para enviar el pedido enun solo paquete y no produto producto.
501 lines
26 KiB
QBasic
501 lines
26 KiB
QBasic
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
|
|
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 (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
|
|
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
|
|
LogColor("##############################################", Colors.Red)
|
|
LogColor("##### INICIAMOS VALIDACIONES DE PEDIDOS", Colors.Red)
|
|
LogColor("##############################################", Colors.Red)
|
|
Sleep(2000)
|
|
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
|
|
|
|
' 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 mandaGuardados0
|
|
LogColor("##############################################", Colors.Red)
|
|
LogColor("#### MANDA GUARDADOS", Colors.red)
|
|
LogColor("##############################################", Colors.Red)
|
|
' PEDIDO_CLIENTE (Pendientes)
|
|
' Dim PCNoArts As String
|
|
' Dim PCMonto As String
|
|
Private almacen As String = Subs.traeAlmacen
|
|
DateTime.TimeFormat = "HHmmss"
|
|
Private elFolio As String = DateTime.Time(DateTime.Now)
|
|
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")}|"$)
|
|
Dim cmd As DBCommand
|
|
cmd.Initialize
|
|
cmd.Name = "insert_pedidos5_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"), $"${Application.VersionName}|${elFolio}"$)
|
|
' 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"$)
|
|
c = skmt.ExecQuery($"Select (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * 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_pedido5_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"), c.GetString("PCNoArts"), c.GetString("PCMonto"), c.GetString("PE_TICKET"), elFolio)
|
|
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")}, ${c.GetString("PCNoArts")}, ${c.GetString("PCMonto")}, ${c.GetString("PE_TICKET")}, ${Application.VersionName}, ${elFolio}"$)
|
|
Next
|
|
End If
|
|
c.Close
|
|
End Sub
|
|
|
|
'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1 (BATCH)
|
|
Sub mandaGuardados
|
|
' Creamos una lista llamada BatchCommands. Aquí vamos a guardar todas las instrucciones
|
|
' de base de datos que queremos mandar al servidor de un solo golpe (en lote o "batch").
|
|
Dim BatchCommands As List
|
|
BatchCommands.Initialize
|
|
LogColor("##############################################", Colors.Red)
|
|
LogColor($"### enviaPedidoBatch"$, Colors.red)
|
|
LogColor("##############################################", Colors.Red)
|
|
|
|
DateTime.TimeFormat = "HHmmss"
|
|
Private elFolio As String = DateTime.Time(DateTime.Now)
|
|
Private almacen As String = Subs.traeAlmacen
|
|
|
|
' Preparamos una variable para filtrar la consulta a la base de datos.
|
|
' Si el filtro no dice "Todos", armamos la condición para traer solo los pedidos que no se han enviado (PC_ENVIO_OK = 0).
|
|
' Private condicion As String = ""
|
|
' If filtro.ToUpperCase <> "TODOS" Then condicion = "where PC_ENVIO_OK = 0"
|
|
|
|
' Ejecutamos una consulta (Query) a la base de datos local de SQLite (skmt).
|
|
' Buscamos los ENCABEZADOS de los pedidos en la tabla PEDIDO_CLIENTE.
|
|
' Private cx As Cursor = Starter.skmt.ExecQuery($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
|
Private cx As Cursor = Starter.skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1")
|
|
' Log($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
|
Log("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1")
|
|
Log("pedido_cliente: " & cx.RowCount)
|
|
|
|
' Reiniciamos la variable de condición para usarla ahora en el DETALLE de los pedidos.
|
|
' Private condicion As String = ""
|
|
' If filtro.ToUpperCase <> "TODOS" Then condicion = "where PE_ENVIO_OK = 0"
|
|
|
|
' Revisamos si nuestro cursor 'cx' (los encabezados de pedido) trajo algún resultado.
|
|
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
|
|
|
|
' Iniciamos un bucle (For) para recorrer cada uno de los encabezados de pedido encontrados.
|
|
For j = 0 To cx.RowCount - 1
|
|
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
|
|
' Movemos el cursor 'cx' a la posición 'j' actual del bucle.
|
|
cx.Position = j
|
|
|
|
' Generamos un identificador único (Arch) concatenando el almacén, la ruta, el cliente y la fecha/hora actual.
|
|
' Esto sirve para agrupar en el servidor el encabezado con sus respectivos detalles.
|
|
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
|
|
|
|
' Preparamos un comando de base de datos (DBCommand) para mandar al servidor.
|
|
Dim cmdHeader As DBCommand
|
|
cmdHeader.Initialize
|
|
' Asignamos el nombre del procedimiento almacenado o query que está en el servidor (jRDC2).
|
|
cmdHeader.Name = "insert_pedidos_INTMEX_arch"
|
|
' Pasamos los parámetros leyendo los datos del cursor 'cx' (encabezado) y le pasamos el ID único 'Arch'.
|
|
cmdHeader.Parameters = Array As Object(cx.GetString("PC_CLIENTE"),cx.GetString("PC_FECHA"),cx.GetString("PC_USER"),cx.GetString("PC_NOART"),cx.GetString("PC_MONTO"),cx.GetString("PC_LON"),cx.GetString("PC_LAT"),almacen,B4XPages.MainPage.principal.l_ruta.text,cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$, Arch)
|
|
Log($"${cx.GetString("PC_CLIENTE")},${cx.GetString("PC_FECHA")},${cx.GetString("PC_USER")},${cx.GetString("PC_NOART")},${cx.GetString("PC_MONTO")},${cx.GetString("PC_LON")},${cx.GetString("PC_LAT")},${almacen},${B4XPages.MainPage.principal.l_ruta.text},${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_FACTURA")}, ${Application.VersionName}|${elFolio}, ${Arch}"$)
|
|
' cmd.Name = "insert_pedidos5_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, l_ruta.text, c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$)
|
|
|
|
' Añadimos este comando a nuestra lista del lote (Batch).
|
|
BatchCommands.Add(cmdHeader)
|
|
|
|
' Ahora hacemos una consulta para buscar el DETALLE de este pedido (los productos individuales).
|
|
' Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"Select (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where PE_ENVIO_OK < 2 And PE_GUARDADO = 1 and pe_cliente = '${cx.GetString("PC_CLIENTE")}'"$)
|
|
|
|
Log($"Select (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where PE_ENVIO_OK < 2 And PE_GUARDADO = 1 and pe_cliente = '${cx.GetString("PC_CLIENTE")}'"$)
|
|
Log("Productos sin enviar: " & cPed.RowCount)
|
|
' Si hay detalles para este encabezado...
|
|
If cPed.RowCount > 0 Then
|
|
|
|
' Iniciamos un bucle interno para recorrer cada producto de este pedido.
|
|
For i = 0 To cPed.RowCount - 1
|
|
Log("==== ENVIAMOS PRODS ====")
|
|
' Movemos el cursor de detalles a la posición actual.
|
|
cPed.Position = i
|
|
|
|
' Preparamos el comando para enviar este producto al servidor.
|
|
Dim cmdDetail As DBCommand
|
|
cmdDetail.Initialize
|
|
|
|
' Si es un vendedor normal, usa el comando estándar para insertar el detalle
|
|
' y le pasa la misma variable 'Arch' para que en el servidor sepa de qué encabezado es.
|
|
cmdDetail.Name = "insert_pedido_INTMEX_arch"
|
|
cmdDetail.Parameters = Array As Object(cPed.GetString("PE_CEDIS"),almacen,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"), cPed.GetString("PCNoArts"), cPed.GetString("PCMonto"), cPed.GetString("PE_TICKET"), elFolio, Arch)
|
|
Log($"ProdsPedido ==> (${cPed.GetString("PE_CEDIS")}, ${almacen}, ${cPed.GetString("PE_COSTO_TOT")}, ${cPed.GetString("PE_COSTOU")}, $cPed.GetString("PE_CANT")}, ${cPed.GetString("PE_PRONOMBRE")}, ${cPed.GetString("PE_PROID")}, ${cPed.GetString("PE_CLIENTE")}, ${cPed.GetString("PE_FECHA")}, ${cPed.GetString("PE_USUARIO")}, ${cPed.GetString("PE_RUTA")}, ${cPed.GetString("PE_COSTO_SIN")}, ${cPed.GetString("PE_DESC")}, ${cPed.GetString("PE_FOLIO")}, ${cPed.GetString("PCNoArts")}, ${cPed.GetString("PCMonto")}, ${cPed.GetString("PE_TICKET")}, ${elFolio}, ${Arch}"$)
|
|
|
|
' Añadimos la instrucción del producto al lote de envío.
|
|
BatchCommands.Add(cmdDetail)
|
|
Next
|
|
End If
|
|
|
|
' Al terminar de empaquetar, enviamos toda la lista de instrucciones (BatchCommands) al servidor de un solo golpe.
|
|
' Se le asigna un nombre de etiqueta (Tag) para saber qué responderá el JobDone ("pedido_completo_" + id de cliente).
|
|
' (Ojo visual para el programador: Esta línea está dentro del 'If' general, pero también después de armar los batches en el bucle 'For'. Al procesar el último item del bucle cx, tomará el ID del último cliente para el Tag).
|
|
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
|
|
Next
|
|
End If
|
|
|
|
' Por buena práctica y para evitar fugas de memoria (memory leaks),
|
|
' cerramos siempre los cursores que abrimos hacia la base de datos local.
|
|
' c.Close
|
|
cx.Close
|
|
End Sub
|
|
|
|
'Revisa que los pedidos con envio_ok < 2 esten completos en web y los pone en 2.
|
|
Sub revisaGuardados
|
|
LogColor("##############################################", Colors.Red)
|
|
LogColor("##### VALIDA GUARDADOS", Colors.red)
|
|
LogColor("##############################################", Colors.Red)
|
|
'' Dim PCNoArts As String
|
|
'' Dim PCMonto As String
|
|
Private almacen As String = Subs.traeAlmacen
|
|
Private laRuta As String = Subs.traeRuta
|
|
|
|
'PEDIDO (Pendientes)
|
|
c = skmt.ExecQuery($"SELECT * FROM PEDIDO where PE_ENVIO_OK = 1"$)
|
|
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
|
|
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
|
|
|
|
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
|
|
|
|
'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
|
|
LogColor("##############################################", Colors.Red)
|
|
Logcolor("###### VALIDA CANTIDADES Y MONTOS", Colors.red)
|
|
LogColor("##############################################", Colors.Red)
|
|
Private almacen As String = Subs.traeAlmacen
|
|
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
|
|
totalAValidar = c.RowCount
|
|
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)
|
|
LogColor("############################################", Colors.red)
|
|
LogColor("###### Validador JobError: " & Job.Tag & CRLF & Job.ErrorMessage, Colors.red)
|
|
LogColor("############################################", Colors.red)
|
|
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
|
|
' pedidoGuardando("Listo")
|
|
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("_")+22)
|
|
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("\|", cliente)
|
|
Log($"${pars(0)},${pars(1)},${pars(2)}"$)
|
|
LogColor($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(0)}' and PE_PROID = '${pars(1)}' and PE_CEDIS = '${pars(2)}' and PE_ENVIO_OK = 0"$, Colors.red)
|
|
skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(0)}' and PE_PROID = '${pars(1)}' and PE_CEDIS = '${pars(2)}' and PE_ENVIO_OK = 0"$)
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
' PEDIDOS GUARDADOS BATCH
|
|
If Job.JobName = "DBRequest" Then
|
|
Dim RESULT As DBResult = reqManager.HandleJob(Job)
|
|
If RESULT.Tag.As(String).Contains("pedido_completo") Then 'query tag
|
|
Subs.logJobDoneResultados(RESULT)
|
|
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("_", RESULT.tag)
|
|
B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
|
Log($"update PEDIDO set PE_ENVIO_OK = 1, PE_GUARDADO = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
|
B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1, PC_GUARDADO = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
|
Log($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
|
End If
|
|
Next
|
|
End If
|
|
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("_")+23)
|
|
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("\|", cliente)
|
|
skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 2 where PE_CLIENTE = '${pars(0)}' and PE_PROID = '${pars(1)}' and PE_CEDIS = '${pars(2)}' and PE_ENVIO_OK = 1"$)
|
|
' LogColor($"update PEDIDO set PE_ENVIO_OK = 2 where PE_CLIENTE = '${pars(0)}' and PE_PROID = '${pars(1)}' and PE_CEDIS = '${pars(2)}' and PE_ENVIO_OK = 1"$, Colors.red)
|
|
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("_") + 22)
|
|
Log(cliente)
|
|
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)
|
|
' Log($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 2 where PC_CLIENTE = '${pars(3)}'"$)
|
|
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
|
|
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)
|
|
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}"$)
|
|
' Si el numero de articulos y monto total coinciden en web y local, ponemos PC_VALIDADO en 2.
|
|
Private pc As Cursor =skmt.ExecQuery($"select * from pedido_cliente where pc_cliente = '${pars(1)}'"$)
|
|
If pc.RowCount > 0 Then
|
|
pc.Position = 0
|
|
Dim cmd As DBCommand
|
|
cmd.Initialize
|
|
cmd.Name = "validaCCT2_Intmex"
|
|
cmd.Parameters = Array As Object(pc.GetString("PC_CLIENTE"), pc.GetString("PC_USER"), pc.GetString("PC_FECHA"), pc.GetString("PC_MONTO"), pc.GetString("PC_NOART"), Subs.traeAlmacen, Subs.traeRuta)
|
|
reqManager.ExecuteCommand(cmd , $"validaCCT2_${pc.GetString("PC_CLIENTE")}"$)
|
|
End If
|
|
|
|
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
|
|
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
|
|
Log("validaCCT2_")
|
|
Subs.logJobDoneResultados(resultado)
|
|
|
|
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
|
|
|
|
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 |