3 Commits

Author SHA1 Message Date
136df88646 - VERSION 5.12.15
- Se agregga codigo para que si hay nulos en los datos de Trade Spending no truene la aplicacion.
2025-12-19 23:36:33 -06:00
f0116e375d - VERSION 5.12.14
- Se agrego codigo para que el label de la notificacion tenga scroll vertical y se vaya al inicio del texto
2025-12-19 20:12:14 -06:00
409c224820 - VERSION 5.12.10
- Codigo de prueba para envio de pedido en BATCH
- Se amplio el panel de las notificaciones
- Si no hay presupuesto para bonificaciones NO se muestra la opcion de PROMOS en "Productos"
2025-12-10 16:58:51 -06:00
10 changed files with 263 additions and 28 deletions

View File

@@ -189,6 +189,9 @@ Private Sub B4XPage_Created (Root1 As B4XView)
kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD2", "CAT_GP_PROMOCION", "TEXT") kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD2", "CAT_GP_PROMOCION", "TEXT")
kh.agregaColumna(Starter.skmt, "TREND_SPENDING", "TIPO", "TEXT") kh.agregaColumna(Starter.skmt, "TREND_SPENDING", "TIPO", "TEXT")
kh.agregaColumna(Starter.skmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT") kh.agregaColumna(Starter.skmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ARCH", "TEXT")
kh.agregaColumna(Starter.skmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
kh.agregaColumna(Starter.skmt, "PEDIDO3", "PE_ARCH", "TEXT")
Root = Root1 Root = Root1
' Root.LoadLayout("MainPage") ' Root.LoadLayout("MainPage")
Root.LoadLayout("login") Root.LoadLayout("login")

View File

@@ -300,6 +300,7 @@ Sub Class_Globals
Private l_notificacionTexto As Label Private l_notificacionTexto As Label
Private l_notificacionTitulo As Label Private l_notificacionTitulo As Label
Private b_notificacion As Button Private b_notificacion As Button
Dim reqManagerW As DBRequestManagerW
End Sub End Sub
'You can add more parameters here. 'You can add more parameters here.
@@ -416,7 +417,7 @@ Sub B4XPage_Appear
clienteId = kh.traeCliente clienteId = kh.traeCliente
P_DOE.Visible = False P_DOE.Visible = False
dentroDeGeocerca = False dentroDeGeocerca = False
' Log($"TOTAL VENTA: ${kh.traeTotalCliente}"$) ' Log($"TOTAL VENTA: ${kh.traeTotalCliente}"$)
B_VENTA.Visible = False B_VENTA.Visible = False
b_noVenta.Visible = False b_noVenta.Visible = False
@@ -426,11 +427,12 @@ Sub B4XPage_Appear
' Log(Starter.rp.Check("android.permission.BLUETOOTH_CONNECT")) ' Log(Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
reqManager.Initialize(Me, Starter.DBReqServer) reqManager.Initialize(Me, Starter.DBReqServer)
reqManagerW.Initialize
usarGeocerca = kh.traeUsarGeocerca usarGeocerca = kh.traeUsarGeocerca
'Para el almacen 12 (GDL) no se usa la geocerca 'Para el almacen 12 (GDL) no se usa la geocerca
' If kh.traeAlmacen = 12 Then usarGeocerca = False ' If kh.traeAlmacen = 12 Then usarGeocerca = False
' Log(Subs.traeUltimaActividadBD) ' Log(Subs.traeUltimaActividadBD)
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP")) c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
c.Position = 0 c.Position = 0
@@ -499,10 +501,8 @@ Sub B4XPage_Appear
l_atiende.Text = "N/A" l_atiende.Text = "N/A"
If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then l_atiende.Text = c.GetString("CAT_CL_ATIENDE1")
l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2")
l_segmento2.text = "N/A" l_segmento2.text = "N/A"
If c.GetString("CAT_CL_SEGMENTO") <> Null Then l_segmento2.text = c.GetString("CAT_CL_SEGMENTO") If c.GetString("CAT_CL_SEGMENTO") <> Null Then l_segmento2.text = c.GetString("CAT_CL_SEGMENTO")
b_inicioFinVenta.Text = "INICIAR VENTA" b_inicioFinVenta.Text = "INICIAR VENTA"
b_inicioFinVenta.BringToFront b_inicioFinVenta.BringToFront
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red) ' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
@@ -514,7 +514,7 @@ Sub B4XPage_Appear
b_inicioFinVenta.Visible = False b_inicioFinVenta.Visible = False
End If End If
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red) ' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
' LONGITUD = 0 ' LONGITUD = 0
' If c.GetString("CAT_CL_LONG") <> Null And c.GetString("CAT_CL_LONG") <> "null" And IsNumber(c.GetString("CAT_CL_LONG")) Then LONGITUD = c.GetString("CAT_CL_LONG") ' If c.GetString("CAT_CL_LONG") <> Null And c.GetString("CAT_CL_LONG") <> "null" And IsNumber(c.GetString("CAT_CL_LONG")) Then LONGITUD = c.GetString("CAT_CL_LONG")
' LATITUD = 0 ' LATITUD = 0
@@ -845,6 +845,19 @@ Sub B4XPage_Appear
p_transparenciaNoti.BringToFront p_transparenciaNoti.BringToFront
End If End If
c.Close c.Close
' Este codigo es para hacer que el Label de las notificaciones tenga SCROLLVERTICAL.
Dim labeljo, scrollerjo As JavaObject
labeljo = l_notificacionTexto
scrollerjo.InitializeNewInstance("android.text.method.ScrollingMovementMethod", Null)
labeljo.RunMethod("setMovementMethod", Array(scrollerjo)) ' Asigna el método de movimiento para permitir scroll
labeljo.RunMethod("setHorizontallyScrolling", Array(False)) ' CAMBIO: Para scroll vertical, esto DEBE ser False
labeljo.RunMethod("setVerticalScrollBarEnabled", Array(True)) ' Opcional: Forzar a que el scroll sea vertical explícitamente si el contenido es grande
' Forzar el scroll al inicio (0,0)
Sleep(0)
' El primer 0 es la posición X (horizontal), el segundo es la posición Y (vertical)
labeljo.RunMethod("scrollTo", Array(0, 0))
'Termina codigo de label horzontal
End Sub End Sub
Sub Printer1_Connected (Success As Boolean) Sub Printer1_Connected (Success As Boolean)
@@ -1027,7 +1040,7 @@ Sub Guardar_Click
Starter.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)") Starter.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)")
Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
If logger Then LogColor($"Insertamos coordenadas en pedido: ${Starter.lon_gps}, ${Starter.lat_gps}"$, Colors.Magenta) If logger Then LogColor($"Insertamos coordenadas en pedido: ${Starter.lon_gps}, ${Starter.lat_gps}"$, Colors.Magenta)
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps)) Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_RUTA, PC_ALMACEN, PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeAlmacen, Subs.traeRuta, clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps))
Log("Actualizamos gestion") Log("Actualizamos gestion")
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
End If End If
@@ -1069,6 +1082,8 @@ Sub Guardar_Click
b_inicioFinVenta.Text = "TERMINAR VENTA" b_inicioFinVenta.Text = "TERMINAR VENTA"
Log("RESPALDO") Log("RESPALDO")
kh.RD_respaldoBatch kh.RD_respaldoBatch
' Subir_Pedido_Con_Integridad(clie_id)
mandaPendientes mandaPendientes
@@ -1085,8 +1100,9 @@ Sub Guardar_Click
End Sub End Sub
Sub mandaPendientes Sub mandaPendientes
B4XPages.MainPage.principal.enviaPedido(Null) ' B4XPages.MainPage.principal.enviaPedido(Null)
B4XPages.MainPage.principal.enviaPedidoCliente(Null) ' B4XPages.MainPage.principal.enviaPedidoCliente(Null)
B4XPages.MainPage.principal.enviaPedidoBatch(Null)
End Sub End Sub
Sub NUEVO_Click Sub NUEVO_Click
@@ -4472,4 +4488,135 @@ Private Sub b_notificacion_Click
cmd.Name = "updateHistNotificacionesMotivo" cmd.Name = "updateHistNotificacionesMotivo"
cmd.Parameters = Array As Object("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId) cmd.Parameters = Array As Object("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId)
reqManager.ExecuteCommand(cmd , "updateHistNotificacionesMotivo") reqManager.ExecuteCommand(cmd , "updateHistNotificacionesMotivo")
End Sub
' Subrutina principal para subir pedidos con validación de integridad ARCH
' Llama a esto desde tu botón Subir_Click
' Devuelve un ResumableSub que puedes esperar con Wait For
Sub Subir_Pedido_Con_Integridad(cliente As String) As ResumableSub
Log("--- Iniciando Envío Seguro para Cliente: " & cliente & " ---")
' 1. Generar ARCH (Identificador Único del Paquete)
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cliente & "_" & DateTime.Now
' 2. Marcar registros pendientes con este ARCH localmente
' CORRECCIÓN CRÍTICA: El orden es (Valor_a_Asignar, Filtro) -> (Arch, cliente)
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO SET PE_ARCH = ? WHERE PE_CLIENTE = ? AND PE_ENVIADO = 0"$, Array As Object(Arch, cliente))
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO_CLIENTE SET PC_ARCH = ? WHERE PC_CLIENTE = ? AND PC_ENVIADO = 0"$, Array As Object(Arch, cliente))
' 3. Contar qué vamos a enviar
Dim cCheck As Cursor = Starter.skmt.ExecQuery($"SELECT COUNT(*) as total FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
cCheck.Position = 0
Dim TotalProductosLocal As Int = cCheck.GetInt("total")
cCheck.Close
If TotalProductosLocal = 0 Then
Log("Nada pendiente para enviar con este ARCH.")
Return "Vacio"
End If
Log($"Total a enviar: ${TotalProductosLocal} productos. ID Paquete: ${Arch}"$)
Dim envioCorrecto As Boolean = True
' 4. Enviar Encabezados (PEDIDO_CLIENTE)
Log("Enviando encabezado con ARCH: " & Arch)
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_ENVIADO, PC_ARCH FROM PEDIDO_CLIENTE WHERE PC_ARCH = '${Arch}'"$)
If cx.RowCount > 0 Then
For i = 0 To cx.RowCount - 1
cx.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedidos_KELL_arch"
cmd.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"), cx.GetString("PC_ALMACEN"), cx.GetString("PC_RUTA"), cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_ARCH"))
Log($"insert_pedidos_KELL_arch: ${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")}, ${cx.GetString("PC_ALMACEN")}, ${cx.GetString("PC_RUTA")}, ${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_ARCH")}"$)
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "header_envio")
Wait For header_envio_Completed (ResultHeader As TResultado)
If ResultHeader.Success = False Then
Log("Error crítico enviando encabezado: " & ResultHeader.ErrorMessage)
envioCorrecto = False
Exit
End If
Next
cx.Close
End If
If envioCorrecto = False Then
Msgbox("Error al enviar encabezado del pedido. Intente nuevamente.", "Error de Conexión")
Return "Error PC"
End If
' 5. Enviar Detalles (PEDIDO)
Log("Enviando detalle con ARCH: " & Arch)
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
If cPed.RowCount > 0 Then
For i = 0 To cPed.RowCount - 1
cPed.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedido_KELL_arch"
cmd.Parameters = Array As Object(cPed.GetString("PE_CEDIS"), Subs.traeAlmacen, 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("PE_TIPO"), cPed.GetString("PE_ARCH"))
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "detalle_envio")
Wait For detalle_envio_Completed (ResultDet As TResultado)
If ResultDet.Success = False Then
Log("Error enviando producto " & cPed.GetString("PE_PRONOMBRE"))
envioCorrecto = False
Exit
End If
Next
cPed.Close
End If
If envioCorrecto = False Then
Return "Error PE"
End If
' 6. VALIDACIÓN FINAL
Log("Validando integridad con Oracle...")
Dim cmdVal As DBCommand
cmdVal.Initialize
cmdVal.Name = "validar_integridad_arch"
cmdVal.Parameters = Array As Object(Arch, TotalProductosLocal)
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmdVal, Me, "validacion_integridad")
Wait For validacion_integridad_Completed (ResultVal As TResultado)
If ResultVal.Success Then
Dim estado As String = ""
For Each row() As Object In ResultVal.resultado.Rows
estado = row(ResultVal.resultado.Columns.Get("ESTADO"))
Next
If estado = "COMPLETO" Then
Log("¡Validación Exitosa! Marcando pedido como enviado.")
' Marcamos como enviado localmente usando el ARCH
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_ENVIADO = 1 WHERE PE_ARCH = ?", Array As Object(Arch))
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO_CLIENTE SET PC_ENVIADO = 1 WHERE PC_ARCH = ?", Array As Object(Arch))
ToastMessageShow("Pedido enviado y verificado correctamente", False)
Return "Validado OK"
Else
Log("ERROR DE INTEGRIDAD: El servidor reporta " & estado)
Msgbox("El servidor recibió datos incompletos. El pedido NO se marcó como enviado. Por favor intente subir de nuevo.", "Error de Integridad")
Return "Error Validacion"
End If
Else
Log("Error al ejecutar query de validación: " & ResultVal.ErrorMessage)
Msgbox("No se pudo verificar el pedido por error de red. Intente de nuevo.", "Error de Red")
Return "Error Validacion (Red)"
End If
End Sub End Sub

View File

@@ -1870,6 +1870,19 @@ Sub JobDone(Job As HttpJob)
PB2.Progress = 100 PB2.Progress = 100
S_CP.Text = "VALIDANDO" S_CP.Text = "VALIDANDO"
End If End If
If RESULT.Tag.As(String).StartsWith("pedido_completo_") Then 'query tag
For Each records() As Object In RESULT.Rows
Private temp() As String = Regex.Split("_", RESULT.Tag)
' Log(temp(2))
If temp.Length > 1 Then
Starter.skmt.ExecNonQuery($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
Log($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
Starter.skmt.ExecNonQuery($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
Log($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
End If
Next
End If
If RESULT.Tag = "version" Then 'query tag If RESULT.Tag = "version" Then 'query tag
connecta.TextColor = Colors.White connecta.TextColor = Colors.White
@@ -3270,7 +3283,7 @@ Sub SUBIR_INFO_PEDIDO
If d.GetString("MONTO") <> Null And d.GetString("MONTO") <> "" Then monto1 = d.GetString("MONTO") If d.GetString("MONTO") <> Null And d.GetString("MONTO") <> "" Then monto1 = d.GetString("MONTO")
Private abordo1 As String = L_ABORDO.Text Private abordo1 As String = L_ABORDO.Text
If abordo1 = "" Then abordo1 = "0" If abordo1 = "" Then abordo1 = "0"
Log($"${monto1}, ${abordo1}"$) ' Log($"${monto1}, ${abordo1}"$)
monto1 = monto1 - abordo1 monto1 = monto1 - abordo1
reqManager.trackInit reqManager.trackInit
@@ -3280,7 +3293,7 @@ Sub SUBIR_INFO_PEDIDO
cmd.Name ="insert_drop2_KELL" cmd.Name ="insert_drop2_KELL"
cmd.Parameters = Array As Object(usuario, l_ruta.Text, fecha, l_porvisitar.Text, l_drop.Text, l_efectiva.Text, l_cuantosc.Text, l_cuantosn.Text, monto1, "ENVIO", ALMACEN, abordo1) cmd.Parameters = Array As Object(usuario, l_ruta.Text, fecha, l_porvisitar.Text, l_drop.Text, l_efectiva.Text, l_cuantosc.Text, l_cuantosn.Text, monto1, "ENVIO", ALMACEN, abordo1)
reqManager.ExecuteCommand(cmd , "inst_noventa_ins_drop_kell") reqManager.ExecuteCommand(cmd , "inst_noventa_ins_drop_kell")
Log($"${usuario}, ${l_ruta.Text}, ${fecha}, ${l_porvisitar.Text}, ${l_drop.Text}, ${l_efectiva.Text}, ${l_cuantosc.Text}, ${l_cuantosn.Text}, ${monto1}, "ENVIO", ${ALMACEN}, ${abordo1}"$) ' Log($"${usuario}, ${l_ruta.Text}, ${fecha}, ${l_porvisitar.Text}, ${l_drop.Text}, ${l_efectiva.Text}, ${l_cuantosc.Text}, ${l_cuantosn.Text}, ${monto1}, "ENVIO", ${ALMACEN}, ${abordo1}"$)
Log("################## inst_noventa_ins_drop_kell") Log("################## inst_noventa_ins_drop_kell")
img2.Visible =True img2.Visible =True
contador_env = contador_env + 1 contador_env = contador_env + 1
@@ -3383,7 +3396,7 @@ Sub SUBIR_INFO_PEDIDO
PB2.Progress = 1 PB2.Progress = 1
' PEDIO_CLIENTE ' PEDIO_CLIENTE
enviaPedidoCliente("Todos") ' enviaPedidoCliente("Todos")
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ") d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ")
d.Position=0 d.Position=0
@@ -3395,10 +3408,12 @@ Sub SUBIR_INFO_PEDIDO
PORENVIAR = 0 PORENVIAR = 0
' PEDIDO ' PEDIDO
t3.Initialize("T3", 500) ' 1000 = 1 second ' t3.Initialize("T3", 500) ' 1000 = 1 second
t3.Enabled = True ' t3.Enabled = True
Wait For t3_tick ' Wait For t3_tick
enviaPedido("Todos") ' enviaPedido("Todos")
enviaPedidoBatch("Todos") ' ****** AQUI VA PEDIDO_CLIENTE Y PEDIDO JUNTOS *****
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
d.Position=0 d.Position=0
@@ -3498,6 +3513,72 @@ Sub SUBIR_INFO_PEDIDO
DateTime.TimeFormat = "HH:mm:ss" DateTime.TimeFormat = "HH:mm:ss"
End Sub End Sub
Sub enviaPedidoBatch(filtro As String)
' Crear una lista para almacenar TODAS las operaciones de UN pedido
Dim BatchCommands As List
BatchCommands.Initialize
' DE PEDIDO_CLIENTE
Log($"enviaPedidoBatch(${filtro})"$)
Private condicion As String = ""
If filtro <> "Todos" Then condicion = "where PC_ENVIADO = 0"
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_ENVIADO FROM PEDIDO_CLIENTE ${condicion}"$)
Log($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIADO FROM PEDIDO_CLIENTE ${condicion}"$)
Log("pedido_cliente: " & cx.RowCount)
' DE PEDIDO
Private condicion As String = ""
If filtro <> "Todos" Then condicion = "where PE_ENVIADO = 0"
c = Starter.skmt.ExecQuery2("SELECT COUNT(*) as CANTIDAD FROM HIST_ENVIOS WHERE HE_TIPO = ?",Array As String("ABORDO") )
c.Position = 0
If c.GetString("CANTIDAD") > 0 Then
Log($"pe_cedis_0"$)
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
End If
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
For j = 0 To cx.RowCount - 1
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
cx.Position = j
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
' 1. Agregar comando del Encabezado (PEDIDO_CLIENTE)
Dim cmdHeader As DBCommand
cmdHeader.Initialize
cmdHeader.Name = "insert_pedidos_KELL_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,l_ruta.text,cx.GetString("PC_COSTO_SIN"), Arch)
BatchCommands.Add(cmdHeader)
' 2. Agregar comandos del Detalle (PEDIDO) dentro del bucle
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where ", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
If cPed.RowCount > 0 Then
For i = 0 To cPed.RowCount - 1
Log("==== ENVIAMOS PRODS ====")
cPed.Position = i
Dim cmdDetail As DBCommand
cmdDetail.Initialize
If PERFIL = "V-ESPECIAL" Then
Log("===== V-ESPECIAL =====")
cmd.Name = "insert_pedido_esp_KELL"
cmd.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("PE_TIPO"),NUMERO_PEDIDO)
Else
cmdDetail.Name = "insert_pedido_KELL_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("PE_TIPO"), Arch)
End If
BatchCommands.Add(cmdDetail)
Next
End If
Next
' 3. Enviar TODO junto en una sola petición HTTP
' Si esto falla, no se guarda nada en Oracle y el pedido sigue pendiente en local.
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
End If
c.Close
cx.Close
End Sub
'Envio de la tabla pedido 'Envio de la tabla pedido
Sub enviaPedido(filtro As String) Sub enviaPedido(filtro As String)
Log($"enviaPedido(${filtro})"$) Log($"enviaPedido(${filtro})"$)
@@ -3510,11 +3591,11 @@ Sub enviaPedido(filtro As String)
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0")) Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
End If End If
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1") Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
Log("####################################################") Log("####################################################")
Log(PERFIL) Log(PERFIL)
Log("####################################################") Log("####################################################")
If PERFIL = "V-ESPECIAL" Then If PERFIL = "V-ESPECIAL" Then
Log($"pe_cedis_1"$) Log($"pe_cedis_1"$)
c = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion} ORDER BY PE_CLIENTE"$) c = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion} ORDER BY PE_CLIENTE"$)
@@ -3535,7 +3616,7 @@ Sub enviaPedido(filtro As String)
Else Else
' Log($"pe_cedis_3"$) ' Log($"pe_cedis_3"$)
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$) Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$) ' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
' TIEMPO = 0 ' TIEMPO = 0
S_CP.Text = "Envio de Pedidos" S_CP.Text = "Envio de Pedidos"
PB2.Progress = 1 PB2.Progress = 1

View File

@@ -99,6 +99,8 @@ End Sub
'This sub will be called by the DBRequestManager when the job is done 'This sub will be called by the DBRequestManager when the job is done
Public Sub JobDone(job As HttpJob) Public Sub JobDone(job As HttpJob)
Log("===== JDDBRW =====")
LogColor("JobDone: '" & reqManager.HandleJob(job).tag & "' - Registros: " & reqManager.HandleJob(job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
'<<< Obtenemos el Tag único que asignamos al job '<<< Obtenemos el Tag único que asignamos al job
Dim currentJobTag As String = job.Tag Dim currentJobTag As String = job.Tag

Binary file not shown.

View File

@@ -917,7 +917,7 @@ Version=12.8
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Kelloggs Venta #ApplicationLabel: Kelloggs Venta
#VersionCode: 3000 #VersionCode: 3000
#VersionName: 5.12.5 #VersionName: 5.12.15
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False
#BridgeLogger:true #BridgeLogger:true
@@ -933,7 +933,6 @@ Version=12.8
#IncludeTitle: False #IncludeTitle: False
#End Region #End Region
'222543 '222543
' Version que estaba en la tabla CAT_VERSION antes -> 2.95 ' Version que estaba en la tabla CAT_VERSION antes -> 2.95

View File

@@ -79,7 +79,7 @@ ModuleClosedNodes17=
ModuleClosedNodes18= ModuleClosedNodes18=
ModuleClosedNodes19=7,8,9,10,11,12,13,14 ModuleClosedNodes19=7,8,9,10,11,12,13,14
ModuleClosedNodes2= ModuleClosedNodes2=
ModuleClosedNodes20= ModuleClosedNodes20=3,4
ModuleClosedNodes21= ModuleClosedNodes21=
ModuleClosedNodes22= ModuleClosedNodes22=
ModuleClosedNodes23= ModuleClosedNodes23=
@@ -89,7 +89,7 @@ ModuleClosedNodes26=24,26,31,32,33,35
ModuleClosedNodes27= ModuleClosedNodes27=
ModuleClosedNodes28=4 ModuleClosedNodes28=4
ModuleClosedNodes29= ModuleClosedNodes29=
ModuleClosedNodes3=3 ModuleClosedNodes3=
ModuleClosedNodes30= ModuleClosedNodes30=
ModuleClosedNodes31= ModuleClosedNodes31=
ModuleClosedNodes32=116 ModuleClosedNodes32=116
@@ -100,6 +100,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=C_Principal,B4XPage_Appear,595,0,Subs,revisaMaxPromosProdsFijosPorInventario,1393,1,Subs,procesaPromocion,1256,1,C_TrendSpending,traeMontoBonificacion,370,1,C_TrendSpending,traeBonificacionesMaximas,363,0,kms_helperSubs,RD_Init,105,0,C_Productos,B4XPage_Appear,235,6,MAPA_RUTAS,CreateBitmapWithNumber,363,0,MAPA_RUTAS,MapFragment1_Ready,223,0,B4XMainPage,B4XPage_Created,128,0 NavigationStack=C_Cliente,B4XPage_Appear,841,0,B4XMainPage,Class_Globals,118,0,B4XMainPage,Initialize,126,0,C_Principal,cargar_Click,1031,0,Subs,modTrendSpending,2210,3,C_TrendSpending,modTrendSpending,112,2,C_Productos,B4XPage_Appear,236,0,C_TrendSpending,traeDescXSku,59,0,C_TrendSpending,traeInfoTrendSpending,73,2,C_Principal,JobDone,2240,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=31,1,12,3,32,13,14,19,16,26,28 VisibleModules=31,1,12,3,32,13,14,20,19,33,16

View File

@@ -2214,7 +2214,7 @@ Sub modTrendSpending(accion As String, tipo As String, monto As String)
acumulado = d.GetString("ACUMULADO") acumulado = d.GetString("ACUMULADO")
End If End If
Log("acumulado: " & acumulado & " | monto: " & monto) Log("acumulado: " & acumulado & " | monto: " & monto)
Private c As Cursor = Starter.skmt.ExecQuery($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$) Private c As Cursor = Starter.skmt.ExecQuery($"select HIST_TSS_TIPO, ifnull(${HIST_TSS_SEMANA},0) as disponible, ifnull(${HIST_TSS_SEMANA_ACUM},0) as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
If accion.ToUpperCase = "RESTA" Then If accion.ToUpperCase = "RESTA" Then
If c.RowCount > 0 Then If c.RowCount > 0 Then
c.Position = 0 c.Position = 0

View File

@@ -101,6 +101,8 @@ Sub RD_Init
agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT") agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER") agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER")
agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER") agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER")
agregaColumna(rkmt, "PEDIDO", "PE_ARCH", "TEXT")
agregaColumna(rkmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
If chkIfTableExists(khdb, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(khdb, "CAT_VARIABLES")}, FECHA TEXT)"$) If chkIfTableExists(khdb, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(khdb, "CAT_VARIABLES")}, FECHA TEXT)"$)
If chkIfTableExists(khdb, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(khdb, "CAT_RMI")}, FECHA TEXT)"$) If chkIfTableExists(khdb, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(khdb, "CAT_RMI")}, FECHA TEXT)"$)
DateTime.DateFormat = "yyyyMMdd" DateTime.DateFormat = "yyyyMMdd"

View File

@@ -82,11 +82,12 @@ Sub traeInfoTrendSpending As Map
End If End If
If semana > 0 Then If semana > 0 Then
c = tsdb.ExecQuery($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$) c = tsdb.ExecQuery($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
' Log($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$) Log($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
If c.RowCount > 0 Then If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1 For i = 0 To c.RowCount - 1
c.Position = i c.Position = i
HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$) HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$)
If Not(IsNumber(HIST_TSS_SEMANA)) Then HIST_TSS_SEMANA = 0
Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$) Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
If xx = "null" Then xx = 0 If xx = "null" Then xx = 0
HIST_TSS_SEMANA_ACUM = xx HIST_TSS_SEMANA_ACUM = xx
@@ -124,7 +125,7 @@ Sub modTrendSpending(accion As String, tipo As String, monto As String)
acumulado = d.GetString("ACUMULADO") acumulado = d.GetString("ACUMULADO")
End If End If
Log("acumulado:" & acumulado & " | monto: " & monto) Log("acumulado:" & acumulado & " | monto: " & monto)
Private c As Cursor = tsdb.ExecQuery($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$) Private c As Cursor = tsdb.ExecQuery($"select HIST_TSS_TIPO, ifnull(${HIST_TSS_SEMANA},0) as disponible, ifnull(${HIST_TSS_SEMANA_ACUM},0) as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
' Log(($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)) ' Log(($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$))
Log("---- " & c.RowCount) Log("---- " & c.RowCount)
If accion.ToUpperCase = "RESTA" Then If accion.ToUpperCase = "RESTA" Then