7 Commits

Author SHA1 Message Date
bca0d31469 - VERSION 5.10.20
- Correcciones en el envio de informacion despues de agregar el mandaPendientes, no se estaba enviando el pedido cuando se enviaba informacion desde la pantalla principal (por un timer que no funciona bien).
2025-10-24 00:47:32 -06:00
6fc81fcf0d - VERSION 5.10.16
- Se corrigieron errores en resumen dia e impresion de inventario
2025-10-21 20:03:51 -06:00
ceaa5246e5 - VERSION 5.10.15
- Se pusieron los regalos y exhibidores como categorias exentas de bonificacion.
2025-10-20 16:20:47 -06:00
7a547503b9 - VERSION 5.10.15
- Se hicieron correcciones al codigo de Trade Spending.
- Se cambio la tabla de donde lee los datos para dar de alta clientes nuevos, antes en CLIENTES_NUEVOS_X_RUTA, ahora CAT_RUTAS.
2025-10-16 16:07:41 -06:00
6446187478 - VERSION 5.10.01
- Se cambio el query de conectar (select_ruta4_KELL) a nueva version (select_ruta5_KELL) para preveeer cuando se quiera bloquear la conexion de versiones viejas.
2025-10-03 10:32:23 -06:00
48a1221ef9 - VERSION 5.10.01
- Se agregó el mandaPendientes en el boton de "Guardar" de "Cliente"
2025-10-02 23:47:22 -06:00
e6455d8147 - VERSION 5.09.10.2
- Se corrigio que Trade Spending no consideraba los productos fijos de las promos a la hora de afectar el presupuesto.
- Se agregó la validacion de la version de la app desde cat_rutas (CAT_RU_VERSION_REQUERIDA).
- Se agregó el ligar el telefono a una ruta desde cat_rutas (CAT_RU_IDTELEFONO).
2025-09-23 18:28:06 -06:00
18 changed files with 864 additions and 316 deletions

View File

@@ -165,9 +165,13 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_TREND_SPENDING_SEMANAL (HIST_TSS_RUTA TEXT, HIST_TSS_IDALMACEN TEXT, HIST_TSS_TIPO TEXT, HIST_TSS_SEMANA1 TEXT, HIST_TSS_SEMANA1_ACUM TEXT, HIST_TSS_SEMANA2 TEXT, HIST_TSS_SEMANA2_ACUM TEXT, HIST_TSS_SEMANA3 TEXT, HIST_TSS_SEMANA3_ACUM TEXT, HIST_TSS_SEMANA4 TEXT, HIST_TSS_SEMANA4_ACUM TEXT, HIST_TSS_SEMANA5 TEXT, HIST_TSS_SEMANA5_ACUM TEXT, HIST_TSS_SEMANA6 TEXT, HIST_TSS_SEMANA6_ACUM TEXT, HIST_TSS_GRUPO TEXT)")
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS TREND_SPENDING (TIPO TEXT, MONTO_SEMANA TEXT, ACUMULADO TEXT)")
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VERSIONES (VERSION TEXT, FECHA TEXT)")
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_INVENTARIO(CI_IDPROD TEXT, CI_INVENTARIO TEXT)")
''' FIN DOE
kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER")
kh.agregaColumna(Starter.skmt, "kmt_info", "CREDITO", "INTEGER")
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ENVIADO", "INTEGER DEFAULT 0")
kh.agregaColumna(Starter.skmt, "PEDIDO3", "PE_ENVIADO", "INTEGER DEFAULT 0")
kh.agregaColumna(Starter.skmt, "PEDIDO_CLIENTE", "PC_ENVIADO", "INTEGER DEFAULT 0")
kh.agregaColumna(Starter.skmt, "USUARIOA", "FECHA", "TEXT")
kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_PORCENTAJE_PAQUETE", "TEXT")
kh.agregaColumna(Starter.skmt, "PROMOS_COMP", "CAT_PA_PRECIO1", "TEXT")
@@ -258,7 +262,7 @@ Log(111)
End If
' reqManager.Initialize(Me, Starter.server)
' Activity.LoadLayout("login")
Label1.Text = Application.VersionName
Label1.Text = Application.VersionName & " "
' Log("Pedimos permisos de almacenamiento externo")
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
@@ -491,8 +495,8 @@ Sub Entrar_Click
Starter.skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?,?)", Array As Object(user.Text, pass.Text, DateTime.Date(DateTime.Now)))
Starter.skmt.ExecNonQuery("delete from cat_almacen")
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (pass.Text))
Starter.skmt.ExecNonQuery("delete from VERSION")
Starter.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.95"))
' Starter.skmt.ExecNonQuery("delete from VERSION")
' Starter.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.95"))
B4XPages.ShowPage("Principal")
End If
' c=Starter.skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text))
@@ -508,10 +512,11 @@ Sub Entrar_Click
cmd.Name = "select_usuario_guna_KELL"
cmd.Parameters = Array As Object(user.Text, pass.Text)
reqManager.ExecuteQuery(cmd , 0, "usuario")
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_version_KELL"
reqManager.ExecuteQuery(cmd , 0, "version")
' Dim cmd As DBCommand
' cmd.Initialize
' cmd.Name = "select_version_KELL"
' reqManager.ExecuteQuery(cmd , 0, "version")
Else
Subs.iniciaActividad("Principal")
' B4XPages.ShowPage("Principal")
@@ -555,6 +560,7 @@ Sub JobDone(Job As HttpJob)
Dim result As DBResult = reqManager.HandleJob(Job)
If result.Tag = "usuario" Then 'query tag
Subs.logJobDoneResultados(result)
For Each records() As Object In result.Rows
Dim name As String = records(result.Columns.Get("USUARIO"))
Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA"))
@@ -592,6 +598,11 @@ Sub JobDone(Job As HttpJob)
p_importarBDWA.Visible = False
End If
End If
If result.Tag = "prueba" Then
Subs.logJobDoneResultados(result)
End If
If result.tag = "traeConexion" Then
Subs.logJobDoneResultados(result)
End If
@@ -856,6 +867,13 @@ Private Sub b_cargaLocalOk_Click
p_cargaLocal.Visible = False
' Log(et_cargaLocal.Text.Length > pass1.Length)
Log("Deshabilitamos VERIFY_DEVICE")
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERIFY_DEVICE"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERIFY_DEVICE", 0))
Log("Deshabilitamos VALIDA_VERSION")
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VALIDA_VERSION"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VALIDA_VERSION", 0))
Log(et_cargaLocal.text)
If et_cargaLocal.Text.Length = pass1.Length Then ' Si no se especifica nada, la fecha es hoy MENOS un día.
et_cargaLocal.text = et_cargaLocal.text & "-1"
@@ -938,12 +956,7 @@ Private Sub cb_cartaPorte_CheckedChange(Checked As Boolean)
Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('CARTAPORTE', '${Checked}')"$)
End Sub
Private Sub et_maxClientesNuevos_TextChanged (Old As String, New As String)
If IsNumber(New) Then
Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'MAXCTESNUEVOS'")
Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('MAXCTESNUEVOS', '${New}')"$)
End If
End Sub
private Sub l_geocerca_Click
If cb_geocerca.Enabled = False Then ToastMessageShow("Ingrese la contraseña para modificar", True)
@@ -954,6 +967,8 @@ Private Sub et_geocerca_TextChanged (Old As String, New As String)
Log(New & "|" & Starter.passSupervisor)
If x.RowCount > 0 Then
x.Position = 0
Log("Pass FinDia: |" & x.GetString("CAT_VA_VALOR")&"|"&New&"|")
Log(New.Trim = x.GetString("CAT_VA_VALOR").Trim)
If New = x.GetString("CAT_VA_VALOR") Or New = Starter.passSupervisor Then
cb_geocerca.Enabled = True
cb_cartaPorte.Enabled = True
@@ -1038,15 +1053,25 @@ Private Sub ImageView1_LongClick
' Log("traeConexion")
' Private reqManagerX As DBRequestManager
' reqManagerX.Initialize(Me, "http://keymon.net:9010/DB2")
' reqManagerX.Initialize(Me, "http://keymon.net:9010")
' Private cmdX As DBCommand
' cmdX.Initialize
' cmdX.Name = "traeConexion"
' cmdX.Parameters = Array As Object()
' reqManagerX.ExecuteQuery(cmdX, 0, "traeConexion")
If Subs.traeAlmacen <> "" Then
linker.VerifyAndLinkDevice(Subs.traeAlmacen, Subs.traeRuta)
End If
' cmdX.Name = "update_usuario_guna_nobajas"
' cmdX.Parameters = Array As Object("CDAZA")
' reqManagerX.Executequery(cmdX, 0, "traeConexion")
Log("traeConexion")
Private reqManagerX As DBRequestManager
reqManagerX.Initialize(Me, "http://keymon.net:9010/SALMA")
Private cmdX As DBCommand
cmdX.Initialize
cmdX.Name = "traeConexion4"
cmdX.Parameters = Array As Object("CDAZA", 2, 3, 4)
reqManagerX.ExecuteQuery(cmdX, 0, "prueba")
' If Subs.traeAlmacen <> "" Then
' linker.VerifyDevice(Subs.traeAlmacen, Subs.traeRuta)
' End If
End Sub
Sub ponUsuario
@@ -1070,27 +1095,29 @@ Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query]
If Starter.Logger Then LogColor($"Respuesta de DeviceLinker para la verificación del dispositivo: ${Status}"$, Colors.Magenta) '
Select Status
Case "UUID_ERROR"
Log("Error interno al obtener el identificador único del dispositivo.")
ToastMessageShow("Error interno al obtener el identificador único del dispositivo.", True)
Case "HTTP_ERROR"
LogColor("Error HTTP al verificar el dispositivo: " & linker.lastJobDoneError, Colors.Red)
ToastMessageShow("Error de conexión al servidor durante la verificación del dispositivo.", True)
Case "SERVER_LOGIC_ERROR"
Log("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.")
ToastMessageShow("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.", True)
Case "OK"
If Starter.Logger Then Log("Dispositivo ligado y verificado exitosamente.")
ToastMessageShow("Dispositivo verificado y ligado correctamente.", False)
Log("Dispositivo vinculado y verificado exitosamente.")
ToastMessageShow("Dispositivo verificado y vinculado correctamente.", False)
' Aquí puedes añadir lógica adicional si la verificación es exitosa, por ejemplo, habilitar ciertos botones o continuar con el flujo normal.
Case "NO_REGISTRADO"
If Starter.Logger Then Log("Dispositivo NO registrado.")
Log("Dispositivo NO registrado.")
ToastMessageShow("Dispositivo NO registrado.", False)
Case "REGISTRO_NUEVO"
If Starter.Logger Then Log("¡¡Registro nuevo!!")
Log("¡¡Registro nuevo!!")
ToastMessageShow("¡¡Registro nuevo!!", False)
Case "ALREADY_REGISTERED"
If Starter.Logger Then Log("¡¡El dispositivo ya esta registrado con otra ruta!!")
Case "YA_REGISTRADO"
Log("¡¡El dispositivo ya esta registrado con otra ruta!!")
ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True)
Case Else ' Otros estados que tu servidor pueda devolver (ej. "UNAUTHORIZED", "PENDING_APPROVAL")
If Starter.Logger Then Log($"Estado de verificación del dispositivo: ${Status}"$)
Log($"Estado de verificación del dispositivo: ${Status}"$)
ToastMessageShow($"Verificación del dispositivo: ${Status}"$, True)
' Puedes decidir si bloquear la funcionalidad o mostrar un mensaje específico según el estado.
End Select

View File

@@ -772,8 +772,9 @@ Sub B4XPage_Appear
'PROMOS POR MONTO
Private mPromoXMonto As Map = Subs.revisaPromoPorMonto
Private elMontoTSDeLaVenta As String = 0
' LogColor("PROMOXMONTO:" & mPromoXMonto, Colors.Blue)
If mPromoXMonto.Size > 0 And clienteId <> 0 Then ' El "clienteId <> 0" es para que no la promo cuando se pida ABORDO
If mPromoXMonto.Size > 0 And clienteId <> 0 Then ' El "clienteId <> 0" es para que no de la promo cuando sea ABORDO
If l_total.Text > mPromoXMonto.Get("rangoMin") And l_total.Text < mPromoXMonto.Get("precio1") Then
Log("Eres candidato a una promocion")
MsgboxAsync($"Si agregas venta para que supere los $${mPromoXMonto.Get("precio1")}, la promoción "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" se agregará automáticamente."$, "AGREGA VENTA")
@@ -781,13 +782,20 @@ Sub B4XPage_Appear
'Agregamos la promocion y sus productos FIJOS.
Private dp As Cursor = Starter.skmt.ExecQuery($"select * from cat_detalles_paq where cat_dp_id = '${mPromoXMonto.Get("id")}'"$)
If dp.RowCount > 0 Then
Log(">>>> GUARDAMOS PROMOXMONTO HEADER")
Subs.guardaProductoSinGestion(mPromoXMonto.Get("id"), 0, 1, Subs.traeProdNombre(mPromoXMonto.Get("id")), mPromoXMonto.Get("id"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
For i = 0 To dp.RowCount - 1
dp.Position = i
If dp.GetString("CAT_DP_TIPO") = "0" Then
Log(">>>> GUARDAMOS PROMOXMONTO PRODS")
Subs.guardaProductoSinGestion(mPromoXMonto.Get("id"), dp.GetString("CAT_DP_PRECIO"), dp.GetString("CAT_DP_PZAS"), Subs.traeProdNombre(dp.GetString("CAT_DP_IDPROD")), dp.GetString("CAT_DP_IDPROD"), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
' Traemos el monto de las bonificacionos a guardar. -- Trade Spending
Log("Monto Bonificacion -->> " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(dp.GetString("CAT_DP_IDPROD"), dp.GetString("CAT_DP_PRECIO"), mPromoXMonto.Get("id")))
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (B4XPages.MainPage.promos.ts.traeMontoBonificacion(dp.GetString("CAT_DP_IDPROD"), dp.GetString("CAT_DP_PRECIO"), mPromoXMonto.Get("id")) * dp.GetString("CAT_DP_PZAS"))
End If
Next
B4XPages.MainPage.promos.ts.modTrendSpending("RESTA", "BONIFICACIONES", elMontoTSDeLaVenta)
Log($"### modTrendSpending("RESTA", "BONIFICACIONES", ${elMontoTSDeLaVenta})"$)
MsgboxAsync($"Promo por monto "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" agregada."$,"AVISO")
B4XPage_Appear
End If
@@ -910,12 +918,12 @@ Sub GPS_LocationChanged (Location1 As Location)
If Not(clienteDeudor) Then B_VENTA.Visible = True 'Si el cliente no tiene adeudo, habilitamos el boton de venta
If Not(clienteId.StartsWith("N")) And la_cuenta.Text <> "0" Then
b_noVenta.Visible = True 'Ni cliente nuevo, ni abordo.
Log("NoVenta False")
' Log("NoVenta False")
End If
If Not(p_rechazoDOE.Visible) Then pedido_doe_muestra
Else
b_noVenta.Visible = False
Log("NoVenta False")
' Log("NoVenta False")
B_VENTA.Visible = False
b_whats.Visible = False
End If
@@ -1006,8 +1014,8 @@ Sub Guardar_Click
End If
s.Close
Starter.skmt.ExecNonQuery("delete from pedido3")
Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO ) SELECT PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE ")
c=Starter.skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE, PE_FECHA,PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_ENVIADO) SELECT PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_ENVIADO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_ENVIADO")
c=Starter.skmt.ExecQuery("select PE_PRECIO2,PE_TIPO,PE_DESC,PE_COSTO_SIN,PE_RUTA,PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_ENVIADO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
If c.RowCount>0 Then
For i=0 To c.RowCount -1
c.Position=i
@@ -1036,6 +1044,9 @@ Sub Guardar_Click
b_inicioFinVenta.Text = "TERMINAR VENTA"
Log("RESPALDO")
kh.RD_respaldoBatch
mandaPendientes
If la_cuenta.Text <> "0" Then 'Si es ABORDO, no mostramos el boton b_inicioFinVenta y regresamos a Principal.
b_inicioFinVenta.Visible = True
Else
@@ -1048,6 +1059,11 @@ Sub Guardar_Click
End If
End Sub
Sub mandaPendientes
B4XPages.MainPage.principal.enviaPedido(Null)
B4XPages.MainPage.principal.enviaPedidoCliente(Null)
End Sub
Sub NUEVO_Click
' Subs.iniciaActividad("nuevocliente")
End Sub
@@ -1096,24 +1112,26 @@ End Sub
Sub B_IMP_Click
' Buscamos los clientes que tienen pedido y NO estan impresos.
Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
If t.RowCount > 0 Then
For i = 0 To t.RowCount - 1
t.Position = i ' Y los BORRAMOS.
Log(t.GetString("CAT_CL_CODIGO"))
Starter.skmt.ExecNonQuery($"update CUENTAA set CUENTA = '${t.GetString("CAT_CL_CODIGO")}'"$)
Subs.borraPedidoClienteActual
' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
Next
End If
' Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
' If t.RowCount > 0 Then
' For i = 0 To t.RowCount - 1
' t.Position = i ' Y los BORRAMOS.
' Log(t.GetString("CAT_CL_CODIGO"))
' Starter.skmt.ExecNonQuery($"update CUENTAA set CUENTA = '${t.GetString("CAT_CL_CODIGO")}'"$)
' Subs.borraPedidoClienteActual
'' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
' Next
' End If
Sleep(1000)
Starter.skmt.Close : Log("Cerramos BD") : Starter.revisaBD
Subs.panelAnchoAlto(Panel_INV_A, Root.Width, Root.Height)
Panel_INV_A.Visible = True
P_INF_GENERAL.Visible = False
If logger Then Log("Panel general="&P_INF_GENERAL.Visible)
L_INVA.Left = 5dip
L_INVA.Width = Root.Width * 0.98
L_INVA.Clear
Dim label1 As Label
label1 = L_INVA.TwoLinesLayout.Label
@@ -1125,10 +1143,10 @@ Sub B_IMP_Click
label2.TextColor = Colors.Black
' Aqui es donde esta el pedo de julieta de los descuentos, quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show.
s=Starter.skmt.ExecQuery2 ("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_ALMACEN from cat_gunaprod2 where CAT_GP_CLASIF <> ? ORDER BY CAT_GP_NOMBRE ", Array As String("PROMOS"))
If s.RowCount>0 Then
For i=0 To S.RowCount -1
If s.RowCount > 0 Then
For i = 0 To S.RowCount - 1
s.Position=i
S1=Starter.skmt.ExecQuery2("select CAT_GP_ALMACEN from cat_gunaprod5 where CAT_GP_ID = ?", Array As String(s.GetString("CAT_GP_ID")))
S1=Starter.skmt.ExecQuery2("select CAT_GP_ALMACEN from cat_gunaprod2 where CAT_GP_ID = ?", Array As String(s.GetString("CAT_GP_ID")))
S1.Position=0
S3=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from HIST_ABORDO where HIST_PROID = ?", Array As String(s.GetString("CAT_GP_ID")))
S3.Position=0

View File

@@ -101,6 +101,7 @@ Private Sub B4XPage_CloseRequest As ResumableSub
End Sub
Sub ListView1_ItemClick (Position As Int, Value As Object)
Log(Value)
' If Logger Then Log(Regex.Split("\.",Me)(Regex.Split("\.",Me).Length-1))
Private Subrutina As Map =CreateMap("nombre":"ListView1_ItemClick", "param1":Position, "param2":Value)
Starter.sesion = CreateMap("actividad":Me, "sub":Subrutina)

View File

@@ -445,11 +445,11 @@ End Sub
Private Sub clv_pedidos_ItemLongClick (position As Int, Value As Object)
Private thisLog As Boolean = False
c = Starter.skmt.ExecQuery("select count(*) as hayImpresos from CLIENTE_IMPRESO where CI_CUENTA in (Select CUENTA from cuentaa)")
c.Position = 0
' c = Starter.skmt.ExecQuery("select count(*) as hayImpresos from CLIENTE_IMPRESO where CI_CUENTA in (Select CUENTA from cuentaa)")
' c.Position = 0
If thisLog Then Log("lista prods="&list_prodsPedido.Get(position))
Private m As Map = list_prodsPedido.Get(position)
If c.GetString("hayImpresos") = 0 Then 'Si la venta no está impresa o es abordo entonces continuamos ... 'Para que el abordo borre siempre " Or Subs.clienteActual = "0""
If kh.revisaImpresa = False Then 'Si la venta no está impresa o es abordo entonces continuamos ... 'Para que el abordo borre siempre " Or Subs.clienteActual = "0""
c=Starter.skmt.ExecQuery2("select count(*) as CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? AND PE_CLIENTE IN (Select CUENTA from cuentaa)", Array As String("DUR"))
c.Position = 0
CAMBIOS = c.GetString("CUANTOS")

View File

@@ -98,7 +98,7 @@ Sub Class_Globals
Private PORCENTAJE As Int
Private P_RESUMEN As Panel
Private B_OK_RES As Button
Private Resumen As Button
Dim Resumen As Button
Private L_CUANTOST As Label
Private img3 As ImageView
Private ImageView3 As ImageView
@@ -150,7 +150,7 @@ Sub Class_Globals
Private Panel2 As Panel
Dim ENVIADA As String
Dim PORENVIAR As String
Private Btn_CheckList As Button
Dim Btn_CheckList As Button
Dim Cedis_Check As String = "0"
Private TIEMPO As String
Private RUTA1 As Label
@@ -218,6 +218,9 @@ Sub Class_Globals
Type TCuantos (query As String, esperados As Int, guardados As Int)
Dim validaCuantos As TCuantos
Dim ts As C_TrendSpending
Dim linker As C_deviceLinker
Dim kb As IME
Dim reqTotales As Int
End Sub
'You can add more parameters here.
@@ -272,6 +275,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
L_MONTOD.Text = 0
l_cuantosc.Text = 0
l_cuantosn.Text = 0
Log(">>>> Ponemos en CERO!!")
drop = 0
l_drop.Text = 0
efectiva = 0
@@ -286,7 +290,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
b.Position = 0
L_MONTOD.Text = c.GetString("MONTO_DIA")
l_cuantosc.Text = c.GetString("CLIENTES_DIA")
l_cuantosn.Text = b.GetString("CUANTOS")
l_cuantosn.Text = b.GetString("CUANTOS")
Try
drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")
Catch
@@ -321,6 +325,7 @@ End Sub
Sub B4XPage_Appear
' Log(Subs.traeDiaSemana)
linker.Initialize(Me, "Linker", True)
Starter.errorConnDBReq = False
connecta.TextColor = Colors.White
StartBluetooth
@@ -340,10 +345,20 @@ Sub B4XPage_Appear
reqManagerW.Initialize
Log($"DBREQSERVER = ${Starter.DBReqServer}"$)
' c = Starter.skmt.ExecQuery($"select * from CAT_ALMACEN"$)
' If c.RowCount > 0 Then
' c.Position = 0
' Dim cmd As DBCommand
' cmd.Initialize
' cmd.Name = "select_version_KELL"
' cmd.Parameters = Array As Object(c.GetString("ID_ALMACEN"), Subs.traeRuta)
' reqManager.ExecuteQuery(cmd , 0, "version")
' End If
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_version_KELL"
reqManager.ExecuteQuery(cmd , 0, "version")
cmd.Name = "select_conexion"
reqManager.ExecuteQuery(cmd , 0, "conexion")
' If Not(btAdmin.IsEnabled) Then btAdmin.Enable 'Si no esta prendido el BT, lo prendemos.
@@ -539,6 +554,7 @@ Sub B4XPage_Appear
trabajar.Enabled = False
NUEVO.Enabled = False
B_PROXIMA.Enabled = False
' LogColor("deshabilitamos", Colors.magenta)
Else
Private cd1 As ColorDrawable
cd1.Initialize(Colors.RGB(213, 0, 0), 5dip)
@@ -548,13 +564,37 @@ Sub B4XPage_Appear
NUEVO.Enabled = True
B_PROXIMA.Enabled = True
End If
'############# Deshabilitamos botones para validacion de ruta y vinculo #########
c = Starter.skmt.ExecQuery("select count(*) as cuantos from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'LIGADO' and CAT_VA_VALOR = 1")
c.Position = 0
If c.GetInt("cuantos") = 0 Then
trabajar.Enabled = False
Resumen.Enabled = False
BUSCA.Enabled = False
Btn_CheckList.Enabled = False
NUEVO.Enabled = False
B_PROXIMA.Enabled = False
' LogColor("deshabilitamos", Colors.magenta)
Else
trabajar.Enabled = True
Resumen.Enabled = True
BUSCA.Enabled = True
Btn_CheckList.Enabled = True
NUEVO.Enabled = True
B_PROXIMA.Enabled = True
' LogColor("deshabilitamos", Colors.magenta)
End If
'################################################################################
kh.traeMaxClientesNuevos
Private n As Cursor = Starter.skmt.ExecQuery("select count(*) as cuantos from kmt_info where cat_cl_codigo like 'N%'")
n.Position = 0
Log(n.GetString("cuantos"))
If n.GetString("cuantos") >= kh.traeMaxClientesNuevos Then NUEVO.Enabled = False
LogColor(">>>>>>>> REVISAMOS GUID <<<<<<<<<", Colors.red)
Subs.generaGUID_EnExterno
' LogColor(">>>>>>>> REVISAMOS GUID <<<<<<<<<", Colors.red)
' Subs.generaGUID_EnExterno
End Sub
Sub trabajar_Click
@@ -613,12 +653,15 @@ Sub Subir_Click
S_CH.Visible = False
PB1.Visible = False
Resumen.Visible= False
L_P_2.Text = "Envio de Pedidos"
L_P_2.Text = "Envio de información"
'L_P_3.Text = "Envio de Pedidos"
'S_CH.Text = "EN PROCESO"
S_CP.Text = "EN PROCESO"
PB1.Progress = 0
PB2.Progress = 0
PB2.Color = Colors.RGB(180,203,36)
PB2.Height = 15dip
PB2.Padding = Array As Int (10dip, 10dip, 10dip, 10dip)
contador_env = 0
contador_strem = 0
e_ruta.Text = ruta_valida
@@ -639,7 +682,7 @@ Sub Subir_Click
SUBIR_INFO_PEDIDO
Else
Dim result As Int
result = Msgbox2("QUE VA A ENVIAR?", "ENVIO DE INFO.", "BOLETA", "VALIDAR", "VTA/PED", LoadBitmap(File.DirAssets, "alert2.png")) 'ignore
result = Msgbox2("QUE VA A ENVIAR?", "ENVIO DE INFO.", "BOLETA", "VALIDAR", "VENTA/PEDIDO", LoadBitmap(File.DirAssets, "alert2.png")) 'ignore
If result = DialogResponse.Positive Then
SUBIR_INFO_BOLETA
ELSE IF result = DialogResponse.NEGATIVE Then
@@ -740,7 +783,7 @@ Sub cargar_Click
bcarga3 = 0
e_ruta.Text = ruta_valida
' NUEVOS CLIENTE
Starter.skmt.ExecNonQuery2("delete from kmt_info where substr(CAT_CL_CODIGO,1,1) <> ?", Array As Object ("N"))
Starter.skmt.ExecNonQuery("delete from cod_result")
Starter.skmt.ExecNonQuery("delete from hist_gest")
@@ -748,6 +791,7 @@ Sub cargar_Click
Starter.skmt.ExecNonQuery("delete from cat_gunaprod")
Starter.skmt.ExecNonQuery("delete from cat_gunaprod2")
Starter.skmt.ExecNonQuery("DELETE FROM CAT_GUNAPROD5")
Starter.skmt.ExecNonQuery("DELETE FROM CAT_INVENTARIO")
Starter.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA2")
Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ")
Starter.skmt.ExecNonQuery("delete from telefonos")
@@ -1137,7 +1181,7 @@ Sub JobDone(Job As HttpJob)
reqManager.trackNext(Job)
If Not(Job.Success) Then
LogColor("Error: " & Job.tag & " : " & Subs.parseHTTPError(Job.ErrorMessage), Colors.red)
If Job.Tag = "version" Then
If Job.Tag = "conexion" Then
Starter.errorConnDBReq = True
connecta.TextColor = Colors.red
ToastMessageShow("Error al conectarse con Keymon, revise su conexión y reintente!", True)
@@ -1381,6 +1425,7 @@ Sub JobDone(Job As HttpJob)
'CAT_GP_INICIATIVA = 5
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_GP_DEV,CAT_GP_CODPROMO,CAT_GP_TIPOPROD2,CAT_GP_PROMOCION) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA,CAT_GP_DEV, CAT_GP_TIPOPROD2,CAT_GP_PROMOCION))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_INVENTARIO(CI_IDPROD,CI_INVENTARIO) VALUES (?,?)", Array As Object (CAT_GP_ID,CAT_GP_ALMACEN))
Next
Starter.skmt.TransactionSuccessful
Starter.skmt.EndTransaction
@@ -1759,11 +1804,48 @@ Sub JobDone(Job As HttpJob)
Next
End If
If RESULT.Tag = "ins_pedido" Then 'query tag
If RESULT.Tag.As(String).StartsWith("ins_pedido_") Then 'query tag
' If L_P_2.Text = "Envio de Pedidos" Then
' L_P_2.Text = "Envio de Pedidos --"
' Log(1)
' else if L_P_2.Text = "Envio de Pedidos --" Then
' Log(2)
' L_P_2.Text = "Envio de Pedidos \"
' else if L_P_2.Text = "Envio de Pedidos \" Then
' Log(3)
' L_P_2.Text = "Envio de Pedidos |"
' else if L_P_2.Text = "Envio de Pedidos |" Then
' Log(4)
' L_P_2.Text = "Envio de Pedidos /"
' else if L_P_2.Text = "Envio de Pedidos /" Then
' Log(5)
' L_P_2.Text = "Envio de Pedidos --"
' End If
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 set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
Log($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
End If
PB2.Progress = PB2.Progress + 5
S_CP.Text = "SUBIENDO"
Next
' PB2.Progress = 100
S_CP.Text = "VALIDANDO"
End If
If RESULT.Tag.As(String).StartsWith("ins_pedidos_") 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)}'"$)
End If
Next
PB2.Progress = 100
S_CP.Text = "VALIDANDO"
End If
@@ -1771,13 +1853,29 @@ Sub JobDone(Job As HttpJob)
If RESULT.Tag = "version" Then 'query tag
connecta.TextColor = Colors.White
' Subs.logJobDoneResultados(RESULT)
Subs.logJobDoneResultados(RESULT)
For Each records() As Object In RESULT.Rows
Starter.skmt.ExecNonQuery("delete from VERSION")
Dim CAT_VE_VERSION As String = records(RESULT.Columns.Get("CAT_VE_VERSION"))
Log(">>>>>>> Version minima: " & CAT_VE_VERSION & " - Actual: " & Application.VersionName & " --> " & Subs.comparaVersiones(CAT_VE_VERSION, Application.VersionName))
Dim CAT_RU_VERSION_REQUERIDA As String = records(RESULT.Columns.Get("CAT_RU_VERSION_REQUERIDA"))
Log(">>>>>>> Version requerida: " & CAT_RU_VERSION_REQUERIDA & " - Actual: " & Application.VersionName & " --> " & Subs.comparaVersiones(CAT_RU_VERSION_REQUERIDA, Application.VersionName))
Starter.skmt.ExecNonQuery("delete from VERSION")
Starter.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION))
Starter.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_RU_VERSION_REQUERIDA))
Next
If CAT_RU_VERSION_REQUERIDA = 0 Or Subs.comparaVersiones(CAT_RU_VERSION_REQUERIDA, Application.VersionName) = 0 Then
connecta3
trabajar.Enabled = True
Resumen.Enabled = True
BUSCA.Enabled = True
Btn_CheckList.Enabled = True
Else
Msgbox2("Es necesario actualizar la versión de la aplicación.", "VERSION INCORRECTA","Aceptar", "", "",Null) 'ignore
trabajar.Enabled = False
Resumen.Enabled = False
BUSCA.Enabled = False
Btn_CheckList.Enabled = False
' ExitApplication
' LogColor("deshabilitamos", Colors.magenta)
End If
End If
If RESULT.Tag = "count_cli" Then 'query tag
@@ -2130,7 +2228,13 @@ Sub JobDone(Job As HttpJob)
End If
Job.Release
' if carga = "SUBIR" then logcolor(reqManager.reqsList, Colors.blue)
If reqManager.reqsList.IsInitialized Then
LogColor(reqManager.reqsList, Colors.blue)
' LogColor(reqManager.reqsList.Size, Colors.blue)
actualizaProgressBar
End If
' LogColor(reqTotales, Colors.blue)
' If Starter.Logger Then Log($"tiempo Request "${Job.Tag}": ${((reqManager.inicioJobDone - reqManager.inicioRequest)/1000)}"$)
' If Starter.Logger Then Log($"tiempo JobDone "${Job.Tag}": ${((DateTime.Now - reqManager.inicioJobDone)/1000)}"$)
' If Starter.Logger Then Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$)
@@ -2141,11 +2245,20 @@ Sub JobDone(Job As HttpJob)
copiaCatGPPromocion
End If
Log(reqManager.requestTimes(Job.Tag))
' Log(reqManager.requestTimes(Job.Tag))
' Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$)
' reqManager.PrintTable(RESULT)2
End Sub
Sub actualizaProgressBar
Log($"Porcentaje = ${(((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)}"$)
Private porcentajePB2 As Int = (((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)
If PB2.IsInitialized And PB2.Visible Then
Sleep(0)
PB2.Progress = porcentajePB2
End If
End Sub
Sub copiaCatGPPromocion
Log(">>>>>>>>> COPIAMOS CAT_GP_PROMOCION a CAT_GUNAPROD2")
Starter.skmt.ExecNonQuery("UPDATE CAT_GUNAPROD2 SET CAT_GP_PROMOCION = '0'")
@@ -2209,6 +2322,8 @@ Sub connecta_Click
Else
connecta.TextColor = Colors.White
End If
kb.HideKeyboard
' Log("################# PERMISOS BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
' Log("Permisos BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
' Log("REVISAMOS PERMISOS DE BT")
@@ -2248,13 +2363,36 @@ Sub connecta_Click
reqManager.trackInit
linker.verifyDevice(Subs.traeAlmacen, e_ruta.text)
' Else
' Msgbox("LA RUTA NO ES CORRECTA","") 'ignore
' End If
End Sub
'Revisamos que la version actual sea la correcta.
Sub connecta2
Private revisaVersion As Boolean = True ' La verificacion se realiza por default
Private vv As Cursor = Starter.skmt.ExecQuery("select * from cat_variables where CAT_VA_DESCRIPCION = 'VALIDA_VERSION'")
If vv.RowCount > 0 Then
vv.Position = 0
If vv.GetString("CAT_VA_VALOR") = 0 Then revisaVersion = False
End If
If revisaVersion Then ' Si VALIDA_VERSION no está en CERO ... revisamos.
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_version_KELL"
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text)
reqManager.ExecuteQuery(cmd , 0, "version")
Else ' Si está en CERO (Validacion deshabilitada), continuamos a connecta3.
connecta3
End If
End Sub
Sub connecta3
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_version_KELL"
reqManager.ExecuteQuery(cmd , 0, "version")
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "select_ruta4_KELL"
cmd.Name = "select_ruta5_KELL"
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, usuario)
' Log($"******* Almacen: ${ALMACEN}, ${e_ruta.text}, ${usuario}"$)
reqManager.ExecuteQuery(cmd , 0, "ruta")
@@ -2262,9 +2400,6 @@ Sub connecta_Click
If e_ruta.Text = "KMTSKLL1" Then e_ruta.Enabled = True
ToastMessageShow("Validando Conexión." , False)
ruta_valida = e_ruta.Text
' Else
' Msgbox("LA RUTA NO ES CORRECTA","") 'ignore
' End If
End Sub
Private Sub connecta_LongClick
@@ -2280,6 +2415,7 @@ Private Sub connecta_LongClick
' Loop
'' End If
' Log("MANDAMOS BITACORA")
If e_ruta.Text = "KMTKLL1" Then Subs.deshabilitaValidaciones
End Sub
Sub BUSCA_Click
@@ -2305,16 +2441,17 @@ Sub e_ruta_EnterPressed
res = Msgbox2("Seguro que desea hacer el cierre? ... todos los datos se borraran","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
If res = DialogResponse.POSITIVE Then
e_ruta.Text = ""
Starter.skmt.ExecNonQuery("delete from pedido")
Starter.skmt.ExecNonQuery("delete from pedido_cliente")
Starter.skmt.ExecNonQuery("delete from pedido_sugerido")
Starter.skmt.ExecNonQuery("delete from pedido")
Starter.skmt.ExecNonQuery("delete from BITACORAGPS")
Starter.skmt.ExecNonQuery("delete from noventa")
Starter.skmt.ExecNonQuery("delete from clie_act")
Starter.skmt.ExecNonQuery("delete from kmt_info")
Starter.skmt.ExecNonQuery("delete from cat_gunaprod")
Starter.skmt.ExecNonQuery("delete from cat_rmi")
Starter.skmt.ExecNonQuery("delete from cat_gunaprod2")
Starter.skmt.ExecNonQuery("delete from cat_inventario")
Starter.skmt.ExecNonQuery("delete from cat_rmi")
Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ")
Starter.skmt.ExecNonQuery("delete from HIST_VENTAS")
Starter.skmt.ExecNonQuery("delete from HIST_VERIFICACION")
@@ -2330,7 +2467,7 @@ Sub e_ruta_EnterPressed
Starter.skmt.ExecNonQuery("delete from TREND_SPENDING")
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
Starter.skmt.ExecNonQuery("delete from VERSIONES")
Starter.skmt.ExecNonQuery2("INSERT INTO HIST_ENVIOS VALUES (?,0,?)", Array As Object(sTime, "PEDIDO"))
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("NUMERO_PEDIDO"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("NUMERO_PEDIDO",0))
@@ -2338,6 +2475,8 @@ Sub e_ruta_EnterPressed
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object("FINDIA_FECHA", Starter.FECHA_HOY))
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("NOVISITA_ACTIVA"))
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("NOVISITA_RAZON"))
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERIFY_DEVICE"))
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VALIDA_VERSION"))
If File.Exists(File.DirInternal,"FOTO1.jpg") Then File.Delete(File.DirInternal,"FOTO1.jpg")
If File.Exists(File.DirInternal,"FOTO2.jpg") Then File.Delete(File.DirInternal,"FOTO2.jpg")
If File.Exists(File.DirInternal,"FOTO3.jpg") Then File.Delete(File.DirInternal,"FOTO3.jpg")
@@ -2580,6 +2719,7 @@ Sub B_OK_RES_Click
End Sub
Sub Resumen_Click
Log("###############")
L_ABORDO.Text = "0"
P_RESUMEN.Visible = True
P_RESUMEN.BringToFront
@@ -2615,10 +2755,14 @@ Sub Resumen_Click
l_ruta.Text = f.GetString("CAT_CL_RUTA")
f.Close
End If
b = Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa")
b.Position = 0
l_cuantosn.Text = b.GetString("CUANTOS")
If Cuantos = 0 Then
L_MONTOD.Text = 0
l_cuantosc.Text = 0
l_cuantosn.Text = 0
' l_cuantosn.Text = 0
' Log(">>>> Ponemos en CERO!!")
drop = 0
l_drop.Text = 0
efectiva = 0
@@ -2689,10 +2833,8 @@ Sub Resumen_Click
End If
DDD.Close
c = Starter.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente where pc_cliente <> 0")
b = Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa")
'where pc_fecha = ?", Array As String(fecha)
c.Position = 0
b.Position = 0
' L_MONTOD.Text = c.GetString("MONTO_DIA")
L_MONTOD.Text = Subs.sumaPedido(Subs.traeCliente) 'Trae el monto sin el redondeo que a veces hace el SUM().
@@ -2705,7 +2847,8 @@ Sub Resumen_Click
' Log(Subs.sumaPedido(Subs.traeCliente) & " - " & L_MONTOD.Text)
' Subs.sumaPedido(Subs.traeCliente)
l_cuantosc.Text = c.GetString("CLIENTES_DIA")
l_cuantosn.Text = b.GetString("CUANTOS")
Log(">>>> Ponemos en " & b.GetString("CUANTOS"))
l_porvisitar.Text = NumberFormat2((l_cuantosc.Text + l_cuantosn.Text), 1, 0, 0, False)
' efectiva = L_CUANTOST.Text / e.GetString("POR_VISITAR")
efectiva = l_porvisitar.Text / L_CUANTOST.text ' Efectividad = Visitados de hoy / Totales de hoy
@@ -3037,9 +3180,9 @@ Sub SUBIR_INFO_PEDIDO
If abordo1 = "" Then abordo1 = "0"
Log($"${monto1}, ${abordo1}"$)
monto1 = monto1 - abordo1
reqManager.trackInit
Dim cmd As DBCommand
cmd.Initialize
cmd.Name ="insert_drop2_KELL"
@@ -3065,7 +3208,7 @@ Sub SUBIR_INFO_PEDIDO
cmd.Initialize
Private eventob As String = h.GetString("eventob")
cmd.Name = "mandaBitacora3"
Log("BITACORA3")
' Log("BITACORA3")
Private clienteb As String = h.GetString("clienteb")
Private finb As String = h.GetString("finb")
Private nombreCliente As String =Subs. traeNombreCliente(h.GetString("clienteb"))
@@ -3117,9 +3260,11 @@ Sub SUBIR_INFO_PEDIDO
Next
End If
c.Close
t3.Initialize("T3", 500) ' 1000 = 1 second
t3.Enabled = True
Wait For t3_tick
'clientes nuevos
c = Starter.skmt.ExecQuery2("SELECT CAT_CL_CODIGO, CAT_CL_NOMBRE FROM kmt_info where CAT_CL_ATIENDE1 = ?", Array As String("new"))
S_CP.Text = "Envio C/Nuevos"
@@ -3144,97 +3289,24 @@ Sub SUBIR_INFO_PEDIDO
PB2.Progress = 1
' PEDIO_CLIENTE
c = 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 FROM PEDIDO_CLIENTE ")
enviaPedidoCliente("Todos")
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ")
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedidos_KELL"
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") )
reqManager.ExecuteCommand(cmd , "ins_pedidos")
PB2.Progress = PB2.Progress + 1
contador_env = contador_env + 1
Next
c.Close
End If
d.Position=0
cuantos_pedidosc = D.GetString("CUANTOS_PEDIDOSC")
PB2.Progress = 100
d.Close
ENVIADA = 0
PORENVIAR = 0
' Msgbox(ENVIADA & " " & PORENVIAR, "A") 'ignore
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 PERFIL = "V-ESPECIAL" Then
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 ORDER BY PE_CLIENTE")
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedido_esp_KELL"
Log($"pe_cedis_2"$)
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("PE_TIPO"),NUMERO_PEDIDO )
reqManager.ExecuteCommand(cmd , "ins_pedido")
contador_env = contador_env + 1
Next
c.Close
End If
Else
Log($"pe_cedis_3"$)
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")
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
TIEMPO = 0
t3.Initialize("T3", 500) ' 1000 = 1 second
t3.Enabled = True
Wait For t3_tick
S_CP.Text = "Envio de Pedidos"
PB2.Progress = 1
If c.RowCount>0 Then
For i = 0 To c.RowCount - 1
c.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedido_KELL"
If logger Then Log($"pe_cedis_4"$)
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("PE_TIPO"))
reqManager.ExecuteCommand(cmd , "ins_pedido")
contador_env = contador_env + 1
TIEMPO = TIEMPO + 1
PB2.Progress = PB2.Progress + 1
If TIEMPO > 20 Then
' Msgbox("M","A") 'ignore
If L_P_2.Text = "Envio de Pedidos" Then
L_P_2.Text = "Envio de Pedidos --"
else if L_P_2.Text = "Envio de Pedidos --" Then
L_P_2.Text = "Envio de Pedidos \"
else if L_P_2.Text = "Envio de Pedidos \" Then
L_P_2.Text = "Envio de Pedidos |"
else if L_P_2.Text = "Envio de Pedidos |" Then
L_P_2.Text = "Envio de Pedidos /"
else if L_P_2.Text = "Envio de Pedidos /" Then
L_P_2.Text = "Envio de Pedidos --"
End If
t3.Initialize("T3", 2000) ' 1000 = 1 second
t3.Enabled = True
Wait For t3_tick
TIEMPO = 0
End If
Next
c.Close
End If
End If
' PEDIDO
t3.Initialize("T3", 500) ' 1000 = 1 second
t3.Enabled = True
Wait For t3_tick
enviaPedido("Todos")
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
d.Position=0
cuantos_pedido = D.GetString("CUANTOS_PEDIDO")
PB2.Progress = 100
@@ -3327,9 +3399,121 @@ Sub SUBIR_INFO_PEDIDO
End If
' ToastMessageShow("Se Actualizaran los datos. Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True)
S_CP.Text = "SUBIENDO"
Log(reqManager.reqsList.Size)
reqTotales = reqManager.reqsList.Size
DateTime.TimeFormat = "HH:mm:ss"
End Sub
'Envio de la tabla pedido
Sub enviaPedido(filtro As String)
Log($"enviaPedido(${filtro})"$)
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")
Log("####################################################")
Log(PERFIL)
Log("####################################################")
If PERFIL = "V-ESPECIAL" Then
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"$)
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} ORDER BY PE_CLIENTE"$)
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedido_esp_KELL"
Log($"pe_cedis_2"$)
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("PE_TIPO"),NUMERO_PEDIDO )
reqManager.ExecuteCommand(cmd , $"ins_pedido_${C.GetString("PE_CLIENTE")}"$)
contador_env = contador_env + 1
Next
c.Close
End If
Else
' 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}"$)
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
S_CP.Text = "Envio de Pedidos"
PB2.Progress = 1
Log("pedido:" & cPed.RowCount)
If cPed.RowCount > 0 Then
For i = 0 To cPed.RowCount - 1
cPed.Position = i
' LogColor($"##### ${i} #### "$, Colors.magenta)
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedido_KELL"
If logger Then Log($"pe_cedis_4"$)
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"))
reqManager.ExecuteCommand(cmd , $"ins_pedido_${cPed.GetString("PE_CLIENTE")}"$)
contador_env = contador_env + 1
' TIEMPO = TIEMPO + 1
' PB2.Progress = PB2.Progress + 1
' If i Mod 10 = 1 Then
' ' Msgbox("M","A") 'ignore
' If L_P_2.Text = "Envio de Pedidos" Then
' L_P_2.Text = "Envio de Pedidos --"
' Log(1)
' else if L_P_2.Text = "Envio de Pedidos --" Then
' Log(2)
' L_P_2.Text = "Envio de Pedidos \"
' else if L_P_2.Text = "Envio de Pedidos \" Then
' Log(3)
' L_P_2.Text = "Envio de Pedidos |"
' else if L_P_2.Text = "Envio de Pedidos |" Then
' Log(4)
' L_P_2.Text = "Envio de Pedidos /"
' else if L_P_2.Text = "Envio de Pedidos /" Then
' Log(5)
' L_P_2.Text = "Envio de Pedidos --"
' End If
'' t3.Initialize("T3", 2000) ' 1000 = 1 second
'' t3.Enabled = True
'' Wait For t3_tick
' TIEMPO = 0
' End If
Next
cPed.Close
End If
End If
End Sub
'Envio de la tabla pedido_cliente
Sub enviaPedidoCliente(filtro As String)
' PEDIO_CLIENTE
Log($"enviaPedidoCliente(${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)
If cx.RowCount > 0 Then
For i = 0 To cx.RowCount - 1
cx.Position = i
' Log(cx.GetInt("PC_ENVIADO"))
' Log(cx.GetString("PC_ENVIADO"))
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "insert_pedidos_KELL"
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"),ALMACEN,l_ruta.text,cx.GetString("PC_COSTO_SIN") )
reqManager.ExecuteCommand(cmd , $"ins_pedidos_${cx.GetString("PC_CLIENTE")}"$)
PB2.Progress = PB2.Progress + 1
contador_env = contador_env + 1
Next
cx.Close
End If
End Sub
Sub SUBIR_INFO_BOLETA
P1.Width = GetDeviceLayoutValues.Width
P1.Height = GetDeviceLayoutValues.Height
@@ -3674,9 +3858,11 @@ End Sub
Sub borraClientesNuevosSinVenta 'ignore
Private x As Cursor = Starter.skmt.ExecQuery("Select CAT_CL_CODIGO from kmt_info where CAT_CL_CODIGO like 'N%' and CAT_CL_CODIGO not in (Select pe_cliente from pedido)")
If x.RowCount > 0 Then
x.Position = 0
' x.Position = 0
For i = 0 To x.RowCount - 1
x.Position = i
Starter.skmt.ExecNonQuery($"delete from kmt_info where CAT_CL_CODIGO = '${x.GetString("CAT_CL_CODIGO")}'"$)
' Log($"delete from kmt_info where CAT_CL_CODIGO = '${x.GetString("CAT_CL_CODIGO")}'"$)
LogColor($"Cliente nuevo "${x.GetString("CAT_CL_CODIGO")}" SIN VENTA -> BORRADO!!"$, Colors.red)
Next
End If
@@ -3766,6 +3952,7 @@ Private Sub b_noVisita_Click
b_motivoNoVisita.Background = cd1
B_MAPA_RUTA.Enabled = False
trabajar.Enabled = False
' LogColor("deshabilitamos", Colors.magenta)
NUEVO.Enabled = False
B_PROXIMA.Enabled = False
Else If result = DialogResponse.CANCEL Then
@@ -3877,4 +4064,48 @@ End Sub
Private Sub l_efectiva_Click
l_descripcion.Text = "Clientes visitados / Clientes totales"
l_descripcion.Visible = True
End Sub
Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query]
If Starter.Logger Then LogColor($"Respuesta de DeviceLinker para la verificación del dispositivo: ${Status}"$, Colors.Magenta) '
Select Status
Case "UUID_ERROR"
Log("Error interno al obtener el identificador único del dispositivo.")
ToastMessageShow("Error interno al obtener el identificador único del dispositivo.", True)
Case "HTTP_ERROR"
LogColor("Error HTTP al verificar el dispositivo: " & linker.lastJobDoneError, Colors.Red)
ToastMessageShow("Error de conexión al servidor durante la verificación del dispositivo.", True)
Case "SERVER_LOGIC_ERROR"
Log("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.")
ToastMessageShow("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.", True)
Case "OK"
Log("########################################################")
Log("Dispositivo vinculado y verificado exitosamente.")
ToastMessageShow("Dispositivo verificado y vinculado correctamente.", False)
' Aquí puedes añadir lógica adicional si la verificación es exitosa, por ejemplo, habilitar ciertos botones o continuar con el flujo normal.
connecta2
Case "REGISTRO_COMPLETO"
Log("########################################################")
Log("¡Registro completo!")
ToastMessageShow("¡Registro completo!", False)
connecta2
Case "SIN_REGISTRO"
Log("########################################################")
Log("Sin registro")
ToastMessageShow("¡Dispositivo sin registro!", False)
linker.linkDevice(Subs.traeAlmacen, e_ruta.text)
Case "REGISTRANDO"
Log("¡Registro en proceso!")
ToastMessageShow("¡Registro en proceso!", True)
Case "YA_REGISTRADO"
Log("########################################################")
Log("¡El dispositivo ya esta registrado con otra ruta!")
ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True)
Msgbox2("Esa ruta ya esta registrada en otro dispositivo", "RUTA INCORRECTA","Aceptar", "", "",Null) 'ignore
Case Else ' Otros estados que tu servidor pueda devolver (ej. "UNAUTHORIZED", "PENDING_APPROVAL")
Log("########################################################")
Log($"Estado de verificación del dispositivo: ${Status}"$)
ToastMessageShow($"Verificación del dispositivo: ${Status}"$, True)
' Puedes decidir si bloquear la funcionalidad o mostrar un mensaje específico según el estado.
End Select
End Sub

View File

@@ -113,6 +113,9 @@ End Sub
Public Sub Initialize As Object
kh.Initialize(Me, "kh", Starter.skmt)
ts.Initialize(Me, "ts", Starter.skmt)
Log(TS_RMI)
Log(TS_DESCUENTOS)
Log(TS_BONIFICACIONES)
' promosC.Initialize(Me, "promosC", Starter.skmt)
Return Me
End Sub
@@ -352,9 +355,9 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
' promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId)
If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto.
Log(c2.GetString("CAT_GP_ID"))
Log(c2.GetString("CAT_PA_TIPO_PROMONTO"))
Log(c2.GetString("CAT_PA_PORCENTAJE_PAQUETE"))
' Log(c2.GetString("CAT_GP_ID"))
' Log(c2.GetString("CAT_PA_TIPO_PROMONTO"))
' Log(c2.GetString("CAT_PA_PORCENTAJE_PAQUETE"))
If c2.GetString("CAT_PA_TIPO_PROMONTO") = "0" Then ' Si NO es promo por monto entonces la mostamos.
lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant"))
End If
@@ -604,7 +607,7 @@ Sub b_prodMenos_Click
Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id")
' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen)
Log(clv_prods_ll.GetValue(index).As(Map))
' ######## Trend Spending - Poner estas lineas antes de que si es negativo se ponga en CERO.
' Private laBonificacion As String = kh.traePrecio(id)*(kh.traeDescXSku(clienteId, id)/100)
' If laBonificacion > 0 Then
@@ -620,7 +623,7 @@ Sub b_prodMenos_Click
' Subs.modTrendSpending("suma", "bonificaciones", laBonificacion)
' End If
' #######################
' ######## Trend Spending - Poner estas lineas antes de que si es negativo se ponga en CERO.
If lfila.Text = "PRODUCTOS" Then
Log(">>>>>>>>>> PRODUCTOS <<<<<<<<<<<<<<")
@@ -629,7 +632,7 @@ Sub b_prodMenos_Click
ts.trendSpending("prodMenos", "rmi", clienteId, id, laCant.Text, 0)
End If
' #######################
If laCant.Text < 0 Then laCant.Text = 0
' Log(tmpMap)
' prodsMap.Put(id, tmpMap)
@@ -792,7 +795,7 @@ Sub b_prodMas_Click
' Log(77)
laCant.Text = "0"
End If
Log(99)
If lfila.Text = "RMI" Then
almacenX = "DUR"
@@ -1150,7 +1153,7 @@ End Sub
Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object)
Log("Promo longclic = "&Value)
Private id As String = ""
Dim c As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ID from ${Subs.traeTablaProds(starter.tipov)} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$)
Dim c As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ID from ${Subs.traeTablaProds(Starter.tipov)} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$)
If c.RowCount > 0 Then
c.Position = 0
id = c.GetString("CAT_GP_ID")
@@ -1434,7 +1437,15 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
Else
l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Append("Almacen: " & clv_prods_ll.GetValue(i).As(Map).Get("almacen")).color(Colors.RGB(48,99,192)).Append(" Abordo: " & clv_prods_ll.GetValue(i).As(Map).Get("abordo")).Color(0xFF017F01).Append($" $${NumberFormat2(precio,1,2,2,False)}"$).Popall
End If
'#######################################################
If clv_prods_ll.GetValue(i).As(Map).Get("almacen").As(Int) = Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id")) Then
' Log("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|")
Else
LogColor("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|"&clv_prods_ll.GetValue(i).As(Map).Get("prod")&"|", Colors.red)
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
End If
'#######################################################
l_prodX.Tag = clv_prods_ll.GetValue(i).As(Map).Get("id")
l_pCant.Tag = clv_prods_ll.GetValue(i).As(Map).Get("id")
End If

View File

@@ -44,12 +44,18 @@ Sub Class_Globals
Dim montoPedidoActual As String
Dim promosMap As Map
Dim ts As C_TrendSpending
Dim TS_RMI() As String
Dim TS_DESCUENTOS() As String
Dim TS_BONIFICACIONES() As String
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
' promosC.Initialize(Me, "promosC", Starter.skmt)
ts.Initialize("ts", "ts", Starter.skmt)
Log(TS_RMI)
Log(TS_DESCUENTOS)
Log(TS_BONIFICACIONES)
Return Me
End Sub
@@ -476,20 +482,38 @@ Private Sub b_terminar1_Click
cuentaProds
Private elMontoTSDeLaVenta As String = 0
' Log("====================================================================")
' Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$)
Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$)
For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido.
Private pn As String = Subs.traeProdNombre(prodsIds.Get(t))
Private idProdFijo As String = prodsIds.Get(t)
Private cantProdFijo As Int = prodsCants.Get(t)
Private prodsPrecio As String = prodsPrecios.Get(t)
Log($"#### idProdFijo: ${idProdFijo}, ${cantProdFijo}, ${prodsPrecio}"$)
' ' Asumimos que el índice 0 es el encabezado de la promoción (estaPromo) y no tiene bonificación de producto.
If t > 0 Then
Private bonificacion_monto As String = ts.traeMontoBonificacion(idProdFijo, prodsPrecio, estaPromo)
Log(bonificacion_monto)
Log("elMontoTSDeLaVenta=" & elMontoTSDeLaVenta)
Log($"${elMontoTSDeLaVenta} + (${bonificacion_monto} * ${cantProdFijo})"$)
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (bonificacion_monto * cantProdFijo)
Log($"TS Fijo Acumulado: ${elMontoTSDeLaVenta}, Prod: ${idProdFijo}"$)
End If
If prodsCants.Get(t) > 0 Then Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
Next
For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido.
Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t))
Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
' Traemos el monto de las bonificacionos a guardar. -- Trade Spending
Log("Monto Bonificacion -->> " & ts.traeMontoBonificacion(prodsIds2.Get(t), estaPromo))
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (ts.traeMontoBonificacion(prodsIds2.Get(t), estaPromo) * prodsCants2.Get(t))
Log("Monto Bonificacion -->> " & ts.traeMontoBonificacion(prodsIds2.Get(t), prodsPrecios2.Get(t), estaPromo))
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (ts.traeMontoBonificacion(prodsIds2.Get(t), prodsPrecios2.Get(t), estaPromo) * prodsCants2.Get(t))
Log("Acumulado: " & elMontoTSDeLaVenta)
Next
ts.modTrendSpending("RESTA", "BONIFICACIONES", elMontoTSDeLaVenta)
Log($"### modTrendSpending("RESTA", "BONIFICACIONES", ${elMontoTSDeLaVenta})"$)
lv_prodsFijos.Clear
B4XPages.MainPage.bTerminarClicked = True
B4XPages.ShowPage("productos")
@@ -503,17 +527,35 @@ Private Sub b_continuar_Click
Log($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$)
For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido.
Private pn As String = Subs.traeProdNombre(prodsIds.Get(t))
Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
Private idProdFijo As String = prodsIds.Get(t)
Private cantProdFijo As Int = prodsCants.Get(t)
Private prodsPrecio As String = prodsPrecios.Get(t)
Log($"#### idProdFijo: ${idProdFijo}, ${cantProdFijo}, ${prodsPrecio}"$)
' ' Asumimos que el índice 0 es el encabezado de la promoción (estaPromo) y no tiene bonificación de producto.
If t > 0 Then
Private bonificacion_monto As String = ts.traeMontoBonificacion(idProdFijo, prodsPrecio, estaPromo)
Log(bonificacion_monto)
Log("elMontoTSDeLaVenta=" & elMontoTSDeLaVenta)
Log($"${elMontoTSDeLaVenta} + (${bonificacion_monto} * ${cantProdFijo})"$)
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (bonificacion_monto * cantProdFijo)
Log($"TS Fijo Acumulado: ${elMontoTSDeLaVenta}, Prod: ${idProdFijo}"$)
End If
If prodsCants.Get(t) > 0 Then Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
Next
For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido.
Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t))
Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta, 0, Starter.tipov)
' Traemos el monto de las bonificacionos a guardar. -- Trade Spending
Log("Monto Bonificacion -->> " & ts.traeMontoBonificacion(prodsIds2.Get(t), estaPromo))
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (ts.traeMontoBonificacion(prodsIds2.Get(t), estaPromo) * prodsCants2.Get(t))
Log("Monto Bonificacion -->> " & ts.traeMontoBonificacion(prodsIds2.Get(t), prodsPrecios2.Get(t), estaPromo))
elMontoTSDeLaVenta = elMontoTSDeLaVenta + (ts.traeMontoBonificacion(prodsIds2.Get(t), prodsPrecios2.Get(t), estaPromo) * prodsCants2.Get(t))
Log("Acumulado: " & elMontoTSDeLaVenta)
Next
ts.modTrendSpending("RESTA", "BONIFICACIONES", elMontoTSDeLaVenta)
Log($"### modTrendSpending("RESTA", "BONIFICACIONES", ${elMontoTSDeLaVenta})"$)
lv_prodsFijos.Clear
' Activity_KeyPress(KeyCodes.KEYCODE_BACK)
' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK)

View File

@@ -90,6 +90,7 @@ Sub Activity_KeyPress (key As Int) As Boolean
End Sub
Sub ListView1_ItemLongClick (Position As Int, Value As Object)
Log(value)
Starter.skmt.ExecNonQuery("delete from CUENTAA")
Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value))
Subs.iniciaActividad("Cliente")

View File

@@ -9,6 +9,41 @@ Version=12.8
' Propósito: Gestionar el GUID del dispositivo y verificar/ligar el dispositivo
' a un almacén y ruta en el servidor de forma segura.
'-----------------------------------------------------------------------------------
' Ejemplo de uso:
' ==== En config.properties ====
' sql.verify_device=Select nvl(CAT_RU_IDTELEFONO, 0) As CAT_RU_IDTELEFONO from kelloggs.CAT_RUTAS where cat_ru_idalmacen = ? And cat_ru_ruta = ?
' sql.registarMovil=update kelloggs.CAT_RUTAS set CAT_RU_IDTELEFONO = ? where cat_ru_idalmacen = ? And cat_ru_ruta = ?
' ==== En Class_Globals ====
' Dim linker As C_deviceLinker '<<<< Class_Globals
' ==== En B4XPage_Created ====
' linker.Initialize(Me, "Linker", True) '<<<<<< B4XPage_Created
' ==== En donde se quiera llamar ====
' linker.VerifyDevice(Subs.traeAlmacen, Subs.traeRuta)
' Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query]
' If Starter.Logger Then LogColor($"Respuesta de DeviceLinker para la verificación del dispositivo: ${Status}"$, Colors.Magenta) '
' Select Status
' Case "OK"
' Log("########################################################")
' ToastMessageShow("Dispositivo verificado y vinculado correctamente.", False)
' ' Aquí puedes añadir lógica adicional si la verificación es exitosa, por ejemplo, habilitar ciertos botones o continuar con el flujo normal.
' Case "REGISTRO_COMPLETO"
' Log("########################################################")
' ToastMessageShow("¡Registro completo!", False)
' Case "SIN_REGISTRO"
' Log("########################################################")
' ToastMessageShow("¡Dispositivo sin registro!", False)
' linker.linkDevice(Subs.traeAlmacen, e_ruta.text) '<<<<<<<<< Si no esta registrado lo registramos.
' Case "REGISTRANDO"
' ToastMessageShow("¡Registro en proceso!", True)
' Case "YA_REGISTRADO"
' Log("########################################################")
' ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True)
' Case Else ' Otros estados que tu servidor pueda devolver (ej. "UNAUTHORIZED", "PENDING_APPROVAL")
' Log("########################################################")
' ToastMessageShow($"Verificación del dispositivo: ${Status}"$, True)
' ' Puedes decidir si bloquear la funcionalidad o mostrar un mensaje específico según el estado.
' End Select
' End Sub
Sub Class_Globals
' Configuración del servidor y comandos
@@ -46,7 +81,9 @@ Public Sub Initialize (PageObject As Object, NameOfEvent As String, AppLogger As
' Inicializamos el DBRequestManager para las comunicaciones con el servidor.
' 'Me' indica que el evento JobDone de esta clase se encargará de las respuestas de reqManager.
' reqManager.Initialize(Me, Starter.DBReqServer)
reqManager.Initialize(Me, "http://keymon.net:9010/DB2") 'Servidor de pruebas
' reqManager.Initialize(Me, "http://keymon.net:9010/DB2") 'Servidor de pruebas
' reqManager.Initialize(Me, "http://keymon.net:1781") 'Servidor productivo
reqManager.Initialize(Me, Starter.DBReqServer) 'Servidor productivo
If logger Then Log("DBRequestManager para DeviceLinker inicializado.")
If logger Then Log("DeviceLinker inicializado y listo para operar.")
@@ -55,30 +92,57 @@ End Sub
' Verifica y liga el dispositivo con un almacén y una ruta en el servidor.
' Almacen: El identificador del almacén.
' Ruta: El identificador de la ruta.
Public Sub VerifyAndLinkDevice(Almacen_ As String, Ruta_ As String)
Dim DeviceId_ As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo.
almacen = Almacen_
ruta = Ruta_
deviceId = DeviceId_
If DeviceId_ = "" Then
If logger Then LogColor("Error: GUID del dispositivo no pudo ser obtenido o generado.", Colors.Red)
' Enviar una respuesta de error al callback si no se pudo obtener el GUID.
If SubExists(CallBack, EventName & "_Response") Then ' [New Query]
CallSub2(CallBack, EventName & "_Response", "GUID_ERROR")
End If
Return
Public Sub verifyDevice(Almacen_ As String, Ruta_ As String)
Private verificar As Boolean = True ' La verificacion se realiza por default
Private tv As Cursor = Starter.skmt.ExecQuery("select * from cat_variables where CAT_VA_DESCRIPCION = 'VERIFY_DEVICE'")
If tv.RowCount > 0 Then
tv.Position = 0
If tv.GetString("CAT_VA_VALOR") = 0 Then verificar = False
End If
If verificar Then ' Si VERIFY_DEVICE no está en CERO ... verificamos.
Dim DeviceId_ As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo.
LogColor(DeviceId_, Colors.red)
almacen = Almacen_
ruta = Ruta_
deviceId = DeviceId_
If DeviceId_ = "" Then
If logger Then LogColor("Error: GUID del dispositivo no pudo ser obtenido o generado.", Colors.Red)
' Enviar una respuesta de error al callback si no se pudo obtener el GUID.
If SubExists(CallBack, EventName & "_Response") Then ' [New Query]
CallSub2(CallBack, EventName & "_Response", "GUID_ERROR") ' Dispara el evento Linker_Response("GUID_ERROR")
End If
Return
End If
If logger Then Log($"Enviando solicitud de verificación para DeviceId: ${DeviceId_}, Almacen: ${Almacen_}, Ruta: ${Ruta_}"$)
If logger Then Log($"Enviando solicitud de verificación para DeviceId: ${DeviceId_}, Almacen: ${Almacen_}, Ruta: ${Ruta_}"$)
Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
cmd.Initialize
cmd.Name = "verify_device"
' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
cmd.Parameters = Array As Object(Almacen_, Ruta_) ', DeviceId_
Log($"Enviamos almacen: ${Almacen_} y ruta: ${Ruta_}"$)
' Ejecutamos el comando en el servidor. 'Me' indica que DBRequestManager_JobDone en esta clase manejará la respuesta.
reqManager.ExecuteQuery(cmd, 0, "verify_device")
Else ' Si está en CERO (Verificacion deshabilitada), regresamos "OK".
CallSub2(CallBack, EventName & "_Response", "OK")
End If
End Sub
Sub linkDevice(Almacen_ As String, Ruta_ As String)
Dim deviceId As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo.
Log("########################################################")
Log("REGISTRANDO")
Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
cmd.Initialize
cmd.Name = "verify_device"
cmd.Name = "registarMovil"
' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
cmd.Parameters = Array As Object(Almacen_, Ruta_) ', DeviceId_
' Ejecutamos el comando en el servidor. 'Me' indica que DBRequestManager_JobDone en esta clase manejará la respuesta.
reqManager.ExecuteQuery(cmd, 0, "verify_device")
cmd.Parameters = Array As Object(deviceId, Almacen_, Ruta_)
reqManager.ExecuteCommand(cmd, "registramosGUID")
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", "REGISTRANDO") ' Dispara el evento Linker_Response("REGISTRANDO")
End If
End Sub
' Obtiene el GUID único del dispositivo desde B4XKeyStore.
@@ -110,11 +174,11 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q
If Job.Success = False Then
lastJobDoneError = Job.ErrorMessage
LogColor("############################################", Colors.red)
LogColor("###### JobError: " & Job.Tag & CRLF & Job.ErrorMessage, Colors.red)
LogColor("###### JobError: " & Job.Tag & " ######" & CRLF & "#### " & Job.ErrorMessage, Colors.red)
LogColor("############################################", Colors.red)
' Enviar una respuesta de error HTTP al callback.
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", "HTTP_ERROR")
CallSub2(CallBack, EventName & "_Response", "HTTP_ERROR") ' Dispara el evento Linker_Response("HTTP_ERROR")
End If
Else 'If Job Success then ...
lastJobDoneError = ""
@@ -125,50 +189,71 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q
If logger Then LogColor($"Petición exitosa al servidor. Registros devueltos: ${result.Rows.Size}"$, Colors.Green)
If result.Tag = "hist_cliente_promos" Then 'query tag
Starter.skmt.BeginTransaction
For Each records() As Object In result.Rows
Dim HCCP_CLIENTE As String = records(result.Columns.Get("HCCP_CLIENTE"))
Starter.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT, HCCP_CANT_VENDIDA) VALUES (?,?,?,?)", Array As Object (HCCP_CLIENTE))
Next
Starter.skmt.TransactionSuccessful
Starter.skmt.EndTransaction
' ToastMessageShow(" Historico Clientes Promociones Actualizado." , True)
End If
' If result.Tag = "hist_cliente_promos" Then 'query tag
' Starter.skmt.BeginTransaction
' For Each records() As Object In result.Rows
' Dim HCCP_CLIENTE As String = records(result.Columns.Get("HCCP_CLIENTE"))
' Starter.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT, HCCP_CANT_VENDIDA) VALUES (?,?,?,?)", Array As Object (HCCP_CLIENTE))
' Next
' Starter.skmt.TransactionSuccessful
' Starter.skmt.EndTransaction
' ' ToastMessageShow(" Historico Clientes Promociones Actualizado." , True)
' End If
If result.Tag = "verify_device" Then 'query tag
' Aquí es donde la lógica de la aplicación interpreta el éxito/falla de la operación en el servidor.
' No usamos result.Success porque DBResult no tiene esa propiedad.
' En su lugar, comprobamos si se devolvieron filas y el campo 'status' dentro de los datos.
If result.Rows.Size > 0 Then
Subs.logJobDoneResultados(result)
For Each records() As Object In result.Rows
Dim Status As String = records(result.Columns.Get("ESTATUS"))
Dim GUID As String = records(result.Columns.Get("GUID"))
If deviceId <> GUID Then Status = "ALREADY_REGISTERED" ' Ya existe OTRO registro.
' Invocamos el callback en el módulo principal con el estado.
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", Status)
Dim Status As String = "" 'records(result.Columns.Get("ESTATUS"))
Dim CAT_RU_IDTELEFONO As String = records(result.Columns.Get("CAT_RU_IDTELEFONO"))
Log($"|${deviceId}|${CAT_RU_IDTELEFONO}|"$)
' If deviceId <> CAT_RU_IDTELEFONO Then Status = "YA_REGISTRADO" ' Ya existe OTRO registro.
If CAT_RU_IDTELEFONO = 0 Or CAT_RU_IDTELEFONO.Length < 5 Then
Status = "SIN_REGISTRO"
' Log("########################################################")
' Log("REGISTRANDO")
' Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
' cmd.Initialize
' cmd.Name = "registarMovil"
' ' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
' cmd.Parameters = Array As Object(deviceId, almacen, ruta)
' reqManager.ExecuteCommand(cmd, "registramosGUID")
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", "SIN_REGISTRO")
End If
else if CAT_RU_IDTELEFONO = deviceId Then
Status = "OK"
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
Log("OK")
LogColor("######### GUARDAMOS ###########", Colors.red)
Else
Status = "YA_REGISTRADO"
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 0))
Log("YA_REGISTRADO")
LogColor("######### GUARDAMOS ###########", Colors.red)
End If
' Invocamos el callback en el módulo principal con el estado.
Next
Else
If logger Then LogColor($"El servidor respondió con éxito, pero no encontró registros.${CRLF}Quiere decir que la ruta NO esta registrada en el servidor."$, Colors.Red)
Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
cmd.Initialize
cmd.Name = "registarMovil"
' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
cmd.Parameters = Array As Object(almacen, ruta, deviceId)
reqManager.ExecuteCommand(cmd, "registramosGUID")
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", "NO_REGISTRADO")
End If
Status = "NO_EXISTE_RUTA"
End If
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", Status) ' Dispara el evento Linker_Response("OK") o Linker_Response("YA_REGISTRADO")
End If
End If
If result.Tag = "registramosGUID" Then
Log("########################################################")
Log("REGISTRO_COMPLETO")
LogColor("######### GUARDAMOS ###########", Colors.red)
Subs.logJobDoneResultados(result)
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
If SubExists(CallBack, EventName & "_Response") Then
CallSub2(CallBack, EventName & "_Response", "REGISTRO_NUEVO")
CallSub2(CallBack, EventName & "_Response", "REGISTRO_COMPLETO") ' Dispara el evento Linker_Response("REGISTRO_COMPLETO")
End If
End If
End If

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -917,7 +917,7 @@ Version=12.8
#Region Project Attributes
#ApplicationLabel: Kelloggs Venta
#VersionCode: 3000
#VersionName: 5.09.10
#VersionName: 5.10.20
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#BridgeLogger:true

View File

@@ -67,14 +67,14 @@ ModuleBreakpoints7=
ModuleBreakpoints8=
ModuleBreakpoints9=
ModuleClosedNodes0=
ModuleClosedNodes1=6,8,46,47
ModuleClosedNodes1=6,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,35,37,38,39,40,41,42,43,45,46,47
ModuleClosedNodes10=
ModuleClosedNodes11=
ModuleClosedNodes12=3,5,6
ModuleClosedNodes13=7,8,9,10,11,12
ModuleClosedNodes12=
ModuleClosedNodes13=1,7,8,9,10,11,12
ModuleClosedNodes14=6,7,8,9,12,13
ModuleClosedNodes15=
ModuleClosedNodes16=3,7,8,15,17
ModuleClosedNodes16=3,8,17
ModuleClosedNodes17=
ModuleClosedNodes18=
ModuleClosedNodes19=7,8,9,10,11,12,13,14
@@ -85,14 +85,14 @@ ModuleClosedNodes22=
ModuleClosedNodes23=
ModuleClosedNodes24=
ModuleClosedNodes25=
ModuleClosedNodes26=24,26,27,31,32,33,35
ModuleClosedNodes26=24,26,31,32,33,35
ModuleClosedNodes27=
ModuleClosedNodes28=4
ModuleClosedNodes29=
ModuleClosedNodes3=1,3,5,6
ModuleClosedNodes3=5,6
ModuleClosedNodes30=
ModuleClosedNodes31=
ModuleClosedNodes32=114,116
ModuleClosedNodes32=101,116
ModuleClosedNodes33=
ModuleClosedNodes4=
ModuleClosedNodes5=
@@ -100,6 +100,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7=
ModuleClosedNodes8=
ModuleClosedNodes9=
NavigationStack=C_Cliente,GPS_LocationChanged,906,0,C_Cliente,B4XPage_Appear,552,6,Diseñador Visual,cliente.bal,-100,6,Diseñador Visual,principal.bal,-100,2,C_Principal,cargar_Click,837,0,C_Principal,B4XPage_Appear,539,6,kms_helperSubs,traeRuta,748,0,C_deviceLinker,Initialize,43,0,C_deviceLinker,VerifyAndLinkDevice,64,0,B4XMainPage,ImageView1_LongClick,1041,0
NavigationStack=Diseñador Visual,principal.bal,-100,6,C_Principal,SUBIR_INFO_PEDIDO,3371,6,C_Principal,B4XPage_Created,228,0,C_Principal,descargaCartaPorteyProgreso,3693,0,C_Principal,VALIDAR_INFO,3548,0,C_Principal,t1_tick,2536,0,C_Principal,cargar_Click,690,0,C_Principal,Subir_Click,679,6,C_Principal,actualizaProgressBar,2250,1,C_Principal,JobDone,2232,6
SelectedBuild=0
VisibleModules=31,1,12,5,16,26,3,32,13,14,8,33,10,28
VisibleModules=31,1,12,5,16,3,32,13,14,9

View File

@@ -56,7 +56,7 @@ Sub Process_Globals
Dim pingShell As Boolean = False
Dim errorConnDBReq As Boolean = False
Dim GUID As String = ""
Dim passSupervisor As String = "13X#X$X46" ' Valor predeterminado DIFERENTE a ""
Dim passSupervisor As String = "135###" ' Valor predeterminado DIFERENTE a ""
Dim semana As Int = 0
End Sub
@@ -189,17 +189,20 @@ Sub ENVIA_ULTIMA_GPS
If i = "SALTY SNACKS" Then salty = x
Next
h.Close
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "UPDATE_KELL_ACTUAL3_GPS"
cmd.Parameters = Array As Object(montoActual, clientesVisitaHoy, clientesVenta, clientesVisitados, lat_gps, lon_gps, batt, 0, 0, 0, Application.VersionName, rtec, ping, salty, Subs.dameClientesFueraDeFrecuencia, almacen, rutaPreventa)
' If Logger Then LogColor(montoActual&","&clientesVisitaHoy&","&clientesVenta&","&clientesVisitados&","&lat_gps&","&lon_gps&","&batt&","&0&","&0&","&0&","&Application.VersionName&","&rtec&","&ping&","&salty&","& Subs.dameClientesFueraDeFrecuencia&","&almacen&","&rutaPreventa, Colors.Magenta)
reqManager.ExecuteCommand(cmd,"updateKell_UTR")
cmd.Name = "select_hora"
reqManager.ExecuteQuery(cmd , 0, "hora")
If Subs.EstaEnHorarioPermitido Then
Dim cmd As DBCommand
cmd.Initialize
cmd.Name = "UPDATE_KELL_ACTUAL3_GPS"
cmd.Parameters = Array As Object(montoActual, clientesVisitaHoy, clientesVenta, clientesVisitados, lat_gps, lon_gps, batt, 0, 0, 0, Application.VersionName, rtec, ping, salty, Subs.dameClientesFueraDeFrecuencia, almacen, rutaPreventa)
' If Logger Then LogColor(montoActual&","&clientesVisitaHoy&","&clientesVenta&","&clientesVisitados&","&lat_gps&","&lon_gps&","&batt&","&0&","&0&","&0&","&Application.VersionName&","&rtec&","&ping&","&salty&","& Subs.dameClientesFueraDeFrecuencia&","&almacen&","&rutaPreventa, Colors.Magenta)
reqManager.ExecuteCommand(cmd,"updateKell_UTR")
cmd.Name = "select_hora"
reqManager.ExecuteQuery(cmd , 0, "hora")
' log(subs.revisaHora)
End If
' If Logger Then Log(reqManager)
' If Logger Then Log("++ ++ ++ Envia_Ultima GPS - Inst_visitas - server: "& server)
skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso"))

View File

@@ -906,7 +906,7 @@ Sub guardaProducto(cedis As String, costoTot As String, costoU As String, cant A
LogColor("guardaProducto", Colors.Magenta)
Log($"Guardamos producto ${prodId}"$)
LogColor("TIPO VENTA="&tipoV, Colors.Magenta)
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, tipoV, precio2, Starter.rutaV))
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_RUTA, PE_ENVIADO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,0) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, tipoV, precio2, Starter.rutaV))
Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId))
ToastMessageShow("guardaProd", False)
End Sub
@@ -915,22 +915,26 @@ End Sub
'NO ACTUALIZA LA BANDERA DE GESTION EN LA TABLA "kmt_info".
'Si "gestion=2" entonces el sistema considera que el pedido ya se guardó y ya no se debe modificar.
Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoVenta As String)
Log($"Guarda producto ${nombre}, cant: ${cant}, cedis: ${cedis}"$)
If nombre.Length < 6 Then ToastMessageShow("(guardaProductoSinGestion) El nombre del producto no es valido " & nombre, True)
precioSin = NumberFormat2(precioSin, 1, 2, 2, False)
costoU = NumberFormat2(costoU, 1, 2, 2, False)
' LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant&", tipo="&tipoVenta, Colors.Magenta)
LogColor("guardaProductoSinGestion: "&prodId&", cant="&cant&", tipo="&tipoVenta, Colors.Magenta)
Private c As Cursor
' Private tablaProds As String = "cat_gunaprod2"
' If tipoVenta = "ABORDO" Then tablaProds = "cat_gunaprod"
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta))
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_ENVIADO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,0) ", Array As Object (cedis, (cant * costoU), costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoVenta))
'Actualizamos el inventario en cat_gunaprod solo si no es RMI
If cedis <> "DUR" Then Starter.skmt.ExecNonQuery2($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cant, prodId))
If cedis <> "DUR" Then
Starter.skmt.ExecNonQuery2($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? "$, Array As Object(cant, prodId))
Log($"update ${traeTablaProds(tipoVenta)} set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? -- ${cant}, ${prodId}"$)
End If
c=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
c.Position=0
' Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId)
' Log($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$)
Starter.skmt.ExecNonQuery($"delete from pedido_cliente where PC_CLIENTE = '${traeCliente}'"$)
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN")))
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN,PC_ENVIADO) VALUES (?,?,?,?,?,?,?,?,?,?,0)", Array As Object(clienteId, fecha, usuario, c.GetString("CANT_CLIE"), c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN")))
End Sub
Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, cant As String, nombre As String, prodId As String, clienteId As String, fecha As String, usuario As String, rutaV As String, precioSin As String, tipoV As String, precio2 As String, query As String) 'ignore
@@ -940,7 +944,7 @@ Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, can
costoU = NumberFormat2(costoU, 1, 2, 2, False)
costoTot = NumberFormat2(costoTot, 1, 2, 2, False)
LogColor("guardaProductoSin", Colors.Magenta)
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoV, precio2))
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_RUTA, PE_COSTO_SIN, PE_TIPO, PE_PRECIO2, PE_ENVIADO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,0) ", Array As Object (cedis, costoTot, costoU, cant, nombre, prodId, clienteId, fecha, usuario, rutaV, precioSin, tipoV, precio2))
Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cant, prodId))
DateTime.DateFormat = "MM/dd/yyyy"
Private sDate As String =DateTime.Date(DateTime.Now)
@@ -949,7 +953,7 @@ Sub guardaProductoSin(cedis As String, costoTot As String, costoU As String, can
c.Position=0
Log("###### delete from pedido_cliente - " & traeCliente & "|" & clienteId)
Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clienteId, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN")))
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN,PC_ENVIADO) VALUES (?,?,?,?,?,?,?,?,?,?,0)", Array As Object(clienteId, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps, cedis, rutaV, c.GetString("TOTAL_CLIE_SIN")))
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
c.Close
' ToastMessageShow("guardaProdSin", False)
@@ -1004,10 +1008,10 @@ End Sub
' resultado="OK" 'Ok si existe la promocion.
' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción.
Sub traePromo(promo As String, cliente As String) As Map
Private thisLog As Boolean = False
Private thisLog As Boolean = True
If thisLog Then Log("traePromo:"&promo)
Private inicioContador As String = DateTime.Now
Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar.
Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos el maximo de promociones a otorgar.
Private siHistorico As String = 0
Private promoMap As Map
Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables, prodsVariablesPrecios As List
@@ -1019,20 +1023,23 @@ Sub traePromo(promo As String, cliente As String) As Map
prodsVariablesPrecios.Initialize
c.Position = 0
promoMap = CreateMap("id":promo, "maxXcliente":0, "maxRecurrente":0, "maxPromos":0) 'Ponemos el DEFAULT en CERO.
If c.RowCount > 0 Then promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM"))
If c.RowCount > 0 Then
promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM"))
End If
'######### PROMOCIONES SEGMENTADAS ##########
' Si la promo esta en la lista, SOLO los clientes que la tengan la pueden ver.
Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente}'"$)
' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$)
If thisLog Then Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$)
Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$) ' and HCCP_CLIENTE = '${cliente}'
Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$)
If thisLog Then Log($"PROMOS SEGMENTADAS ENCONTRADAS: ${ps.RowCount}"$)
If thisLog Then Log(promoMap)
If ps.RowCount > 0 Then
ps.Position = 0
promoMap = CreateMap("id":promo, "maxXcliente":0, "maxRecurrente":0, "maxPromos":0) 'Si es segmentada la ponemos en cero, porque SOLO le debe de aparecer a ciertos clientes.
If thisLog Then Log($">>> PROMO "${promo}" SEGMENTADA PARA EL CLIENTE ${ps.GetString("HCCP_CLIENTE")}"$)
' Select hccp_cliente As valido from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traecliente}'
Private ps2 As Cursor = Starter.skmt.ExecQuery($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
' Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
' Log($"registros:${ps2.RowCount}"$)
Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
Log($"registros:${ps2.RowCount}"$)
If ps2.RowCount > 0 Then
ps2.Position = 0
If thisLog Then Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}"$)
@@ -1096,12 +1103,13 @@ Sub traePromo(promo As String, cliente As String) As Map
If thisLog Then Log($"Inv variables: ${cuantosVariablesDisponiblesDB(promo)}"$)
If thisLog Then Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$)
If thisLog Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue)
If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
' If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
Return promoMap
End Sub
'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos).
Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
Private thisLog As Boolean = True
Private c As Cursor
c = Starter.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)", Array As String(promo))
' Private prodInv As Map
@@ -1113,6 +1121,11 @@ Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
c.Position=i
prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN"))
' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$)
If thisLog Then LogColor($"#### prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}, inv2: ${traeExistenciasPorId(c.GetString("CAT_GP_ID"))}"$, Colors.Magenta)
If c.GetString("CAT_GP_ALMACEN") <> traeExistenciasPorId(c.GetString("CAT_GP_ID")) Then
If thisLog Then LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
End If
Next
' prodInv.Put("inventarios", prods)
End If
@@ -1164,7 +1177,7 @@ End Sub
'Revisa si tenemos los productos variables requeridos para la promoción (mapa).
'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion.
Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Boolean 'ignore
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub.
If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial.
Private totalProdsVariables As Int = 0
' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción.
@@ -1185,7 +1198,7 @@ End Sub
'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos.
Sub traeMaxPromos(pm As Map) As Int
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
Private thisLog As Boolean = true 'Si es verdadero, muestra los logs de este sub.
Private maxPromos As List
Private mp0, mp As String = "0"
maxPromos.Initialize
@@ -1235,7 +1248,7 @@ Sub traePromosVendidas(promo As String, cliente As String) As Int
End Sub
Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
Private inicioContador As String = DateTime.Now
Private mp As Int = 0
If thisLog Then LogColor($"****************************************************************"$, Colors.red)
@@ -1336,29 +1349,39 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
Private t As List
t.Initialize
t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo).
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
invFijoXpromo.Initialize
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
Private idProdsFijos As List = pm.Get("prodsFijos")
Private idProdsFijosPrecios As List = pm.Get("prodsFijosPrecios")
For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas).
Private thisInvDisp As Int = 0
If invDispParaPromo.Get(idProdsFijos.Get(p)) <> Null Then thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p))
If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzasReq=${prodsFijosPiezas.Get(p)}"$)
LogColor($"====== ${idProdsFijos.Get(p)} - Inv1:${thisInvDisp}, inv2: ${traeExistenciasPorId(idProdsFijos.Get(p))}"$, Colors.Magenta)
If thisInvDisp <> traeExistenciasPorId(idProdsFijos.Get(p)) Then
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
End If
' If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$)
Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal.
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division.
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. (promos por inventario)
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green) 'promos por inventario
If thisLog Then Log(">> Promos x Prods Fijos: " & x(0))
Log(">>>>> Monto Bonificacion: " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), pm.Get("id")))
If thisLog Then LogColor(">> Max prods fijos x Bonificaciones: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), pm.Get("id")), Colors.blue)
t.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), pm.Get("id")))
Log(">>>>> Monto Bonificacion: " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")))
If thisLog Then LogColor(">> Max prods fijos x Bonificaciones: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")), Colors.blue)
t.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id"))) 'Agregamos las promos disponibles por Trade Spending
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
Next
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño.
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
' If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
' LogColor(">>>>>> T: " & t, Colors.red)
If thisLog Then LogColor(">>>>>> T: " & t, Colors.red)
If thisLog Then LogColor("Max promos x inv de prodsFijos = " & t.Get(0), Colors.red)
Return t.Get(0) 'Regresamos el resultado mas pequeño.
End Sub
@@ -1381,6 +1404,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
Private maxPromos As String = traeMaxPromos(pm)
Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
Private idProdsVariables As List = pm.Get("prodsVariables")
Private prodsVariablesPrecios As List = pm.Get("prodsVariablesPrecios")
Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos")
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
Private idProdsFijos As List = pm.Get("prodsFijos")
@@ -1430,7 +1454,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
Log($"Este prodVariable: ${idProdsVariables.Get(i)}"$)
Log($"Este invDisponible: ${invDispParaPromo.Get(idProdsVariables.Get(i))}"$)
' Log(">> Monto Bonificacion: " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsVariables.Get(i), pm.Get("id")))
prodsVariablesXPresupuestoBonificaciones.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsVariables.Get(i), prodsVariablesRequeridos, pm.Get("id")))
prodsVariablesXPresupuestoBonificaciones.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsVariables.Get(i), prodsVariablesRequeridos, prodsVariablesPrecios.Get(i), pm.Get("id")))
' If thisLog Then LogColor(">> Max prods fijos x Bonificaciones: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsVariables.Get(i), prodsVariablesRequeridos, pm.Get("id")), Colors.blue)
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
End If
@@ -1539,7 +1563,7 @@ Sub borraPedidoClienteActual As String
Log($"Borramos pedido del cliente ${traeCliente}"$)
Private thisC As Cursor
' Private tablaProds As String = "cat_gunaprod2"
thisC = Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_CEDIS FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) and PE_CEDIS <> 'DOE'")
thisC = Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_CEDIS, PE_COSTOU FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) and PE_CEDIS <> 'DOE'")
Log($"Registros = ${thisC.RowCount}"$)
If thisC.RowCount > 0 Then
For i = 0 To thisC.RowCount - 1
@@ -1553,7 +1577,8 @@ Sub borraPedidoClienteActual As String
Log("precioConDesc: " & precioConDesc)
Log(">>>>>>>>>>>>> " & (precioConDesc * thisC.GetString("PE_CANT")))
If Not(IsNumber(thisC.GetString("PE_CEDIS"))) Then ' Si es promo, entonces es bonificacion.
Private desc As String = B4XPages.MainPage.promos.ts.traeMontoBonificacion(thisC.GetString("PE_PROID"), thisC.GetString("PE_CEDIS"))
Private desc As String = B4XPages.MainPage.promos.ts.traeMontoBonificacion(thisC.GetString("PE_PROID"), thisC.GetString("PE_COSTOU"), thisC.GetString("PE_CEDIS"))
desc = desc * thisC.GetString("PE_CANT")
Log("Regresamos bonificaciones " & thisC.GetString("PE_PROID") & "=" & desc)
modTrendSpending("suma", "bonificaciones", desc)
Else ' Si no es promo, entonces es descuento.
@@ -1668,7 +1693,7 @@ Sub guardaCambiosDeProducto(cantidad, prodNombre, prodId, precio2, query) 'ignor
a = Starter.skmt.ExecQuery("select USUARIO from usuarioa")
a.Position=0
usuario = a.GetString("USUARIO")
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR", (precio2 * -1), ((precio2/cantidad) * -1), cantidad, "CAMBIO" & prodNombre, prodId, clie_id, sDate & sTime, usuario, Starter.tipov, precio2))
Starter.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_TIPO, PE_PRECIO2, PE_ENVIADO) VALUES(?,?,?,?,?,?,?,?,?,?,?,0) ", Array As Object ("DUR", (precio2 * -1), ((precio2/cantidad) * -1), cantidad, "CAMBIO" & prodNombre, prodId, clie_id, sDate & sTime, usuario, Starter.tipov, precio2))
Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad, prodId))
End Sub
@@ -1709,7 +1734,7 @@ Sub agrupador()
' Log($"Ya imprimio=${YA_IMPRIMIO}"$)
Starter.skmt.ExecNonQuery("delete from pedido3")
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = 0 where PE_FOLIO IS NULL")
Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO ) SELECT PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE ")
Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO3 (PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_ENVIADO) SELECT PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, PE_COSTOU, SUM(PE_CANT) As PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_USUARIO, PE_ENVIADO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) GROUP BY PE_PRECIO2, PE_TIPO, PE_DESC, PE_COSTO_SIN, PE_RUTA, PE_CEDIS, PE_COSTOU, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_ENVIADO")
' Log("update pedido3")
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO3 SET PE_FOLIO = ? WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)", Array As Object(YA_IMPRIMIO))
Starter.skmt.ExecNonQuery("delete from pedido WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
@@ -2081,11 +2106,23 @@ End Sub
' 0 si son IGUALES
' 1 si versionActual es MAYOR que versionMinima
Sub comparaVersiones(versionMinima As String, versionActual As String) As Int
Dim Pattern As String = "[^0-9.]"
Log(versionMinima)
If versionMinima = "NA" Then Return 0 ' Si version minima es igal a "NA" regresamos "Version valida"
versionMinima = Regex.Replace(Pattern, versionMinima, "") ' Quitamos todo lo que no sea numero o punto.
versionActual = Regex.Replace(Pattern, versionActual, "") ' Quitamos todo lo que no sea numero o punto.
Log($"${versionMinima}|${versionActual}"$)
Dim partesMin() As String = Regex.Split("\.", versionMinima)
Dim partesAct() As String = Regex.Split("\.", versionActual)
If partesMin.Length < 2 Then
' ToastMessageShow("Version incorrecta", False)
LogColor("VERSION INCORRECTA", Colors.red)
Return -1 ' ← Actual no cumple el formato mínimo
End If
' Si la actual tiene MENOS partes que la mínima, es inválida (opcional)
If partesAct.Length < partesMin.Length Then
ToastMessageShow("Version incorrecta", False)
' ToastMessageShow("Version incorrecta", False)
LogColor("VERSION INCORRECTA", Colors.red)
Return -1 ' ← Actual no cumple el formato mínimo
End If
' Compara solo las partes que existen en la versión mínima
@@ -2093,7 +2130,7 @@ Sub comparaVersiones(versionMinima As String, versionActual As String) As Int
Dim numMin As Int = partesMin(i)
Dim numAct As Int = partesAct(i)
If numAct < numMin Then
ToastMessageShow("Versión vieja, por favor actualizar!", False)
ToastMessageShow("Versión descontinuada, por favor actualizar!", False)
Return -1 ' Actual es menor
Else If numAct > numMin Then
Return 1 ' Actual es mayor
@@ -2358,4 +2395,70 @@ Sub revisaContrasenaHoy
' If Not(versionOk) Then ExitApplication 'Si la version no es correcta, salimos de la aplicacion.
' kb.HideKeyboard
' End If
End Sub
' Trae las existencias de un producto dado desde CAT_GUNAPROD5 (inventario original) menos el total de producto en PEDIDO.
Sub traeExistenciasPorId(id As String) As Int
' Private inv As Cursor = Starter.skmt.ExecQuery($"Select
' inv.cat_gp_id, inv.cat_gp_almacen - IFNULL(ventas.total_vendido, 0) As inventario_final
' FROM ${traeTablaProds(Starter.tipov)} As inv
' LEFT JOIN
' (Select pe_proid, SUM(pe_cant) As total_vendido FROM pedido
' WHERE pe_tipo = 'VENTA' GROUP BY pe_proid) As ventas
' ON inv.cat_gp_id = ventas.pe_proid
' WHERE inv.cat_gp_id = '${id}'"$)
Dim vendido As Int = 0
Dim existencias As Int = 0
Private inv As Cursor = Starter.skmt.ExecQuery($"select cat_gp_almacen from cat_gunaprod5 where cat_gp_id = '${id}'"$)
If inv.RowCount > 0 Then
inv.position = 0
existencias = inv.GetString("CAT_GP_ALMACEN").As(Int)
End If
' Log("ex:" & existencias)
Private inv As Cursor = Starter.skmt.ExecQuery($"Select ifnull(SUM(pe_cant),0) As total_vendido FROM pedido WHERE pe_tipo = 'VENTA' and pe_proid = '${id}'"$)
inv.Position = 0
vendido = inv.GetInt("total_vendido")
' Log("ven:" & vendido)
existencias = (existencias - vendido)
inv.Close
Return existencias
End Sub
' Devuelve True si la hora actual está entre las 5:00 AM y las 22:30 PM
Sub EstaEnHorarioPermitido As Boolean
' Obtener la hora y el minuto actual
Dim HoraActual As Int = DateTime.GetHour(DateTime.Now)
Dim MinutoActual As Int = DateTime.GetMinute(DateTime.Now)
' Convertir la hora actual a minutos totales desde la medianoche para una comparación simple
Dim TiempoActualEnMinutos As Int = (HoraActual * 60) + MinutoActual
' Definir los límites del horario permitido en minutos
Dim InicioEnMinutos As Int = (5 * 60) + 0 ' 5:00 AM = 300 minutos
Dim FinEnMinutos As Int = (22 * 60) + 30 ' 22:30 PM = 1350 minutos
' Comprobar si la hora actual está dentro del rango
If TiempoActualEnMinutos >= InicioEnMinutos And TiempoActualEnMinutos <= FinEnMinutos Then
Return True
Else
Return False
End If
End Sub
'Desahabilita validaciones de Ruta y Version
Sub deshabilitaValidaciones
Log("Deshabilitamos VERIFY_DEVICE")
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VERIFY_DEVICE"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VERIFY_DEVICE", 0))
Log("Deshabilitamos VALIDA_VERSION")
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("VALIDA_VERSION"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("VALIDA_VERSION", 0))
Log("Espeificamos LIGADO")
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
' B4XPages.MainPage.principal.Btn_CheckList.Enabled = True
' B4XPages.MainPage.principal.trabajar.Enabled = True
' B4XPages.MainPage.principal.Resumen.Enabled = True
' B4XPages.MainPage.principal.BUSCA.Enabled = True
ToastMessageShow("REALIZADO", False)
End Sub

View File

@@ -100,6 +100,7 @@ Sub RD_Init
agregaColumna(rkmt, "PROMOS_COMP", "CAT_PA_PRECIO1", "TEXT")
agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER")
agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER")
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)"$)
DateTime.DateFormat = "yyyyMMdd"
@@ -118,9 +119,7 @@ Sub revisaSiExisteRespaldo
If File.size(File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$) < 43000 And File.Exists(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$) Then
LogColor("Copiamos el respaldo desde la tarjeta!!", Colors.red)
File.Copy(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$, File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$)
RD_Init
Else
LogColor("No hay respaldo en tarjeta externa!", Colors.red)
End If
@@ -1072,6 +1071,7 @@ Sub revisaImpresa As Boolean
Dim i As Cursor = Starter.skmt.ExecQuery("select count(*) as CUANTOS from kmt_info where (impresion = 1 or cat_cl_codigo in (select ci_cuenta from cliente_impreso)) and CAT_CL_CODIGO in (Select CUENTA from cuentaa)")
i.Position = 0
If i.GetString("CUANTOS") > 0 Then imp = True Else imp = False
Log($"Impresa: ${imp}"$)
Return imp
End Sub

View File

@@ -13,6 +13,11 @@ Version=12.8
' el presupuesto de bonificaciones ya se agoto, ya no aparecen promociones, o si el de descuentos se agoto, ya no se pueden agregar
' mas productos con descuento.
' Descuento es TODO lo que tenga un precio diferente al precio de lista y NO esta en promo.
' Bonificacion es lo que tiene precio diferente al orginal y esta en promo y NO es regalo o exhibidor.
Sub Class_Globals
Private EventName As String 'ignore
Private CallBack As Object 'ignore
@@ -29,7 +34,7 @@ Public Sub Initialize (vCallback As Object, vEventName As String, db As SQL) As
CallBack = vCallback
tsdb = db
Private mx As Map = traeInfoTrendSpending
' LogColor(mx, Colors.red)
LogColor(mx, Colors.red)
TS_RMI = Regex.Split(",", mx.Get("RMI"))
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
@@ -76,12 +81,15 @@ Sub traeInfoTrendSpending As Map
semana = c.GetInt("CAT_VA_VALOR")
End If
If semana > 0 Then
c = tsdb.ExecQuery($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, 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"$)
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$)
HIST_TSS_SEMANA_ACUM = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
If xx = "null" Then xx = 0
HIST_TSS_SEMANA_ACUM = xx
If c.GetString("HIST_TSS_TIPO") = "RMI" Then
m.Put("RMI", HIST_TSS_SEMANA & "," & HIST_TSS_SEMANA_ACUM)
else if c.GetString("HIST_TSS_TIPO") = "DESCUENTOS" Then
@@ -97,7 +105,7 @@ End Sub
' Modifica el acumulado del Trend Speding, le "suma" o "resta" al presupuesto especificado (RMI, BONIFICACIONES o DESCUENTOS)
Sub modTrendSpending(accion As String, tipo As String, monto As String)
LogColor($"Accion: ${accion}, Tipo: ${tipo}, Monto: ${monto}"$, Colors.Blue)
LogColor($"#### ACCION: ${accion}, Tipo: ${tipo}, Monto: ${monto}"$, Colors.Blue)
Private HIST_TSS_SEMANA As String
Private HIST_TSS_SEMANA_ACUM As String
Private acumulado As String = "0"
@@ -110,7 +118,7 @@ Sub modTrendSpending(accion As String, tipo As String, monto As String)
End If
HIST_TSS_SEMANA = $"HIST_TSS_SEMANA${Starter.semana}"$
HIST_TSS_SEMANA_ACUM = $"HIST_TSS_SEMANA${Starter.semana}_ACUM"$
Private d As Cursor = tsdb.ExecQuery($"select acumulado from TREND_SPENDING where tipo = '${tipo.ToUpperCase}'"$)
Private d As Cursor = tsdb.ExecQuery($"select ifnull(acumulado, 0) as ACUMULADO from TREND_SPENDING where tipo = '${tipo.ToUpperCase}'"$)
If d.RowCount > 0 Then
d.Position = 0
acumulado = d.GetString("ACUMULADO")
@@ -221,6 +229,7 @@ Sub trendSpending(accion As String, tipo As String, clienteId As String, id As S
If logger Then Log($"lacant=${laCant} < lasMaximas=${lasMaximas} = ${laCant<lasMaximas}"$)
If laCant < lasMaximas Then
modTrendSpending("resta", "rmi", elMonto) ' Restamos al presupuesto de hoy (agregamos al acumulado).
Log($"modTrendSpending("resta", "rmi", ${elMonto})"$)
End If
If logger Then LogColor("RMI RESTANTES: " & (TS_RMI(0) - TS_RMI(1) - traeAcumuladoHoyTS("rmi")), Colors.red)
Return lasMaximas & "|" & elMonto
@@ -228,6 +237,7 @@ Sub trendSpending(accion As String, tipo As String, clienteId As String, id As S
If logger Then Log("LaCANT= " & laCant & ", elMonto= " & elMonto)
If laCant >= 0 Then
modTrendSpending("suma", "rmi", elMonto) ' Agregamos al presupuesto de hoy (restamos del acumulado).
Log($"modTrendSpending("suma", "rmi", ${elMonto})"$)
End If
Return lasMaximas & "|" & elMonto
End If
@@ -324,44 +334,60 @@ End Sub
' Trae la cantidad máxima de productos con bonificacion por presupuesto.
' Si el presupuesto es 10 y la bonificacion del producto es 2, el máximo es 5 productos.
Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String, laCant As String, promoId As String) As Int
Private tsMaximas As Int = 10000000
Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String, laCant As String, elPrecioVenta As String, promoId As String) As Int
Private thisLog As Boolean = False
Private tsMaximas As Int = 100000000
Private tsRestantes As String = 0
Private tsMonto As String
LogColor($"Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Red)
Private mx As Map = traeInfoTrendSpending
TS_RMI = Regex.Split(",", mx.Get("RMI"))
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
If thisLog Then LogColor($"Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Red)
If tipo.ToUpperCase = "BONIFICACIONES" Then
tsMonto = NumberFormat2(traeMontoBonificacion(id, promoId), 1, 2, 2, False)
tsMonto = NumberFormat2(traeMontoBonificacion(id, elPrecioVenta, promoId), 1, 2, 2, False)
tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
Log("TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS('bonificaciones')")
Log($"${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
End If
Log($"Monto de bonificacion: ${tsMonto}"$)
Log($"Presupuesto disponible: ${tsRestantes}"$)
Log($"Cantidad: ${laCant}"$)
Log($"Floor(tsRestantes / (tsMonto * laCant))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
If thisLog Then Log($"Monto de bonificacion: ${tsMonto}"$)
If thisLog Then Log($"Presupuesto disponible: ${tsRestantes}"$)
If thisLog Then Log($"Cantidad: ${laCant}"$)
If thisLog Then Log($"Floor(tsRestantes / (tsMonto * laCant))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
If tsMonto > 0 Then
tsMaximas = Floor(tsRestantes / (tsMonto * laCant))
End If
Log(">>> tsMaximas: " & tsMaximas)
If thisLog Then Log(">>> tsMaximas: " & tsMaximas)
Return tsMaximas
End Sub
' Trae el monto de la bonificacion, que es el precio original MENOS el precio de venta con descuento.
' - Si CAT_DP_PRECIOB es 1, la bonificacion es: Precio original - precio de venta.
' - Si CAT_DP_PRECIOB es 0, la bonificacion es: Precio original.
Sub traeMontoBonificacion(id As String, promoId As String) As String
' Log(promoId)
Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As String
Private thisLog As Boolean = True
LogColor($">>>>>>> ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
Private tsMonto As String = 0
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_ID = '${promoId}'"$)
If c.RowCount > 0 Then
c.Position = 0
If c.GetInt("CAT_DP_PRECIOB") = 1 Then
tsMonto = c.GetString("CAT_GP_PRECIO") - c.GetString("CAT_DP_PRECIO") ' Precio original - precio de venta.
Else
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
End If
Private re As Cursor = Starter.skmt.ExecQuery($"select cat_gp_id from cat_gunaprod2 where (cat_gp_tipo like 'REGALO%' or cat_gp_tipo like 'EXHIBIDOR%') and cat_gp_id = '${id}'"$) ' Revisamos si el producto es regalo o exhibidor.
If re.RowCount = 0 Then' No es regalo ni exhibidor.
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
Log($"rowcount: ${c.RowCount}"$)
If c.RowCount > 0 Then
c.Position = 0
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
tsMonto = c.GetString("CAT_GP_PRECIO") - c.GetString("CAT_DP_PRECIO") ' Precio original - precio de venta.
Else
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
End If
' Log("PRECIOB: " & c.GetInt("CAT_DP_PRECIOB"))
' Log($"Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
If thisLog Then Log($"Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
End If
' Log("ROWCOUNT: " & c.RowCount)
End If
' Log("ROWCOUNT: " & c.RowCount)
Return tsMonto
End Sub
@@ -382,8 +408,8 @@ Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int
For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
If logger Then LogColor($"=>> prodVariable ${i} : ${idProdsVariables.Get(i)}, ${Subs.traeProdNombre(idProdsVariables.Get(i))} <<=="$, Colors.blue)
' Log($"Este invDisponible: ${invDispParaPromo.Get(idProdsVariables.Get(i))}"$)
If logger Then Log(">> Monto Bonificacion: " & traeMontoBonificacion(idProdsVariables.Get(i), promo))
Private maxProds As Int = traeBonificacionesMaximas("bonificaciones", traeCliente, idProdsVariables.Get(i), prodsVariablesRequeridos, promo)
If logger Then Log(">> Monto Bonificacion: " & traeMontoBonificacion(idProdsVariables.Get(i), 1, promo))
Private maxProds As Int = traeBonificacionesMaximas("bonificaciones", traeCliente, idProdsVariables.Get(i), prodsVariablesRequeridos, 1, promo)
prodsVariablesXPresupuestoBonificaciones.Add(maxProds)
Next
prodsVariablesXPresupuestoBonificaciones.Sort(True)