diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index a4e8f7b..b39c4a7 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -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") @@ -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 @@ -1045,8 +1056,17 @@ Private Sub ImageView1_LongClick ' cmdX.Parameters = Array As Object("CDAZA") ' reqManagerX.Executequery(cmdX, 0, "traeConexion") +' Log("traeConexion") +' Private reqManagerX As DBRequestManager +' reqManagerX.Initialize(Me, "http://keymon.net:9010/DB2") +' Private cmdX As DBCommand +' cmdX.Initialize +' cmdX.Name = "traeVersion999" +' cmdX.Parameters = Array As Object("CDAZA") +' reqManagerX.ExecuteCommand(cmdX, "prueba") + If Subs.traeAlmacen <> "" Then - linker.VerifyAndLinkDevice(Subs.traeAlmacen, Subs.traeRuta) + linker.VerifyDevice(Subs.traeAlmacen, Subs.traeRuta) End If End Sub @@ -1080,8 +1100,8 @@ Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query] 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("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" Log("Dispositivo NO registrado.") diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 00b998d..959604d 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -915,7 +915,7 @@ Sub GPS_LocationChanged (Location1 As Location) 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 +1006,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 +1036,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 +1051,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 diff --git a/B4A/C_Clientes.bas b/B4A/C_Clientes.bas index eca1b80..3e1c631 100644 --- a/B4A/C_Clientes.bas +++ b/B4A/C_Clientes.bas @@ -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) diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas index cd5540c..1042eef 100644 --- a/B4A/C_Nota.bas +++ b/B4A/C_Nota.bas @@ -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") diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 8e43e07..7f01681 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -219,6 +219,7 @@ Sub Class_Globals Dim validaCuantos As TCuantos Dim ts As C_TrendSpending Dim linker As C_deviceLinker + Dim kb As IME End Sub 'You can add more parameters here. @@ -342,10 +343,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. @@ -541,6 +552,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) @@ -550,13 +562,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 @@ -750,6 +786,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") @@ -1139,7 +1176,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) @@ -1383,6 +1420,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 @@ -1761,14 +1799,33 @@ 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 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 If RESULT.Tag = "version" Then 'query tag connecta.TextColor = Colors.White @@ -1782,9 +1839,18 @@ Sub JobDone(Job As HttpJob) 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 @@ -2217,6 +2283,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") @@ -2255,8 +2323,8 @@ Sub connecta_Click conn = "1" reqManager.trackInit - - linker.VerifyAndLinkDevice(Subs.traeAlmacen, Subs.traeRuta) + + linker.verifyDevice(Subs.traeAlmacen, e_ruta.text) ' Else ' Msgbox("LA RUTA NO ES CORRECTA","") 'ignore @@ -2331,6 +2399,7 @@ Sub e_ruta_EnterPressed 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_inventario") Starter.skmt.ExecNonQuery("delete from cat_rmi") Starter.skmt.ExecNonQuery("delete from cat_gunaprod2") Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") @@ -3055,9 +3124,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" @@ -3135,9 +3204,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" @@ -3162,97 +3233,21 @@ 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 + 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 @@ -3348,6 +3343,108 @@ Sub SUBIR_INFO_PEDIDO 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") + 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 + t3.Initialize("T3", 500) ' 1000 = 1 second + t3.Enabled = True + Wait For t3_tick + 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 + 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 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 + 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 @@ -3784,6 +3881,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 @@ -3910,22 +4008,31 @@ Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query] 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("Dispositivo ligado y verificado exitosamente.") - ToastMessageShow("Dispositivo verificado y ligado correctamente.", False) + 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 "NO_REGISTRADO" -' Log("Dispositivo NO registrado.") -' ToastMessageShow("Dispositivo NO registrado.", False) - Case "REGISTRO_NUEVO" - Log("¡¡Registro nuevo!!") + Case "REGISTRO_COMPLETO" + Log("########################################################") + Log("¡Registro completo!") + ToastMessageShow("¡Registro completo!", False) connecta2 - ToastMessageShow("¡¡Registro nuevo!!", False) + 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("¡¡El dispositivo ya esta registrado con otra ruta!!") + Log("########################################################") + Log("¡El dispositivo ya esta registrado con otra ruta!") ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True) - Msgbox2("Ruta registrada en otro dispositivo", "RUTA INCORRECTA","Aceptar", "", "",Null) 'ignore + 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. diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas index a74c008..4e12f0a 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -352,9 +352,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 @@ -1434,6 +1434,14 @@ 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") diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas index 41c86a1..93b1e57 100644 --- a/B4A/C_TicketsDia.bas +++ b/B4A/C_TicketsDia.bas @@ -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") diff --git a/B4A/C_deviceLinker.bas b/B4A/C_deviceLinker.bas index 38b97f1..940589f 100644 --- a/B4A/C_deviceLinker.bas +++ b/B4A/C_deviceLinker.bas @@ -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 @@ -47,7 +82,8 @@ Public Sub Initialize (PageObject As Object, NameOfEvent As String, AppLogger As ' '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:1781") 'Servidor productivo +' 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.") @@ -56,8 +92,9 @@ 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) +Public Sub verifyDevice(Almacen_ As String, Ruta_ As String) Dim DeviceId_ As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo. + LogColor(DeviceId_, Colors.red) almacen = Almacen_ ruta = Ruta_ deviceId = DeviceId_ @@ -65,7 +102,7 @@ Public Sub VerifyAndLinkDevice(Almacen_ As String, Ruta_ As String) 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") + CallSub2(CallBack, EventName & "_Response", "GUID_ERROR") ' Dispara el evento Linker_Response("GUID_ERROR") End If Return End If @@ -77,11 +114,27 @@ Public Sub VerifyAndLinkDevice(Almacen_ As String, Ruta_ As String) 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") 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 = "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", "REGISTRANDO") ' Dispara el evento Linker_Response("REGISTRANDO") + End If +End Sub + ' Obtiene el GUID único del dispositivo desde B4XKeyStore. ' Si no existe, lo genera y lo guarda utilizando Subs.GUID. Private Sub GetDeviceGUID As String @@ -115,7 +168,7 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q 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 = "" @@ -147,45 +200,50 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q 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 - Log(">>> NUEVO") -' Status = "REGISTRO_NUEVO" - 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") + 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", "REGISTRO_NUEVO") + CallSub2(CallBack, EventName & "_Response", "SIN_REGISTRO") End If - else if CAT_RU_IDTELEFONO = deviceId Then + 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. - If SubExists(CallBack, EventName & "_Response") Then - CallSub2(CallBack, EventName & "_Response", Status) - End If 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 + Else + 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 diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 1eae0d4..525489c 100644 Binary files a/B4A/Files/principal.bal and b/B4A/Files/principal.bal differ diff --git a/B4A/KelloggsV4.b4a b/B4A/KelloggsV4.b4a index f9fa516..53e991f 100644 --- a/B4A/KelloggsV4.b4a +++ b/B4A/KelloggsV4.b4a @@ -917,7 +917,7 @@ Version=12.8 #Region Project Attributes #ApplicationLabel: Kelloggs Venta #VersionCode: 3000 - #VersionName: 5.09.10.1 + #VersionName: 5.10.01 #SupportedOrientations: portrait #CanInstallToExternalStorage: False #BridgeLogger:true diff --git a/B4A/KelloggsV4.b4a.meta b/B4A/KelloggsV4.b4a.meta index 9bfb7e6..456f03d 100644 --- a/B4A/KelloggsV4.b4a.meta +++ b/B4A/KelloggsV4.b4a.meta @@ -67,10 +67,10 @@ ModuleBreakpoints7= ModuleBreakpoints8= ModuleBreakpoints9= ModuleClosedNodes0= -ModuleClosedNodes1=6,46,47 +ModuleClosedNodes1=6 ModuleClosedNodes10= ModuleClosedNodes11= -ModuleClosedNodes12=3,5 +ModuleClosedNodes12=1,26,40 ModuleClosedNodes13=7,8,9,10,11,12 ModuleClosedNodes14=6,7,8,9,12,13 ModuleClosedNodes15= @@ -85,21 +85,21 @@ 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=3,5,6 ModuleClosedNodes30= ModuleClosedNodes31= -ModuleClosedNodes32=116 +ModuleClosedNodes32=101,116 ModuleClosedNodes33= ModuleClosedNodes4= -ModuleClosedNodes5= +ModuleClosedNodes5=5 ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=C_Principal,JobDone,1779,0,B4XMainPage,B4XPage_Appear,392,0,B4XMainPage,Label4_Click,1062,0,B4XMainPage,Linker_Response,1063,3,C_Principal,l_efectiva_Click,3892,0,C_Principal,Class_Globals,214,0,C_Principal,B4XPage_Created,312,0,C_Principal,B4XPage_Appear,321,0,C_Principal,Linker_Response,3917,6,C_deviceLinker,JobDone,132,6,C_deviceLinker,Initialize,44,0 +NavigationStack=C_TicketsDia,Class_Globals,1,0,C_TicketsDia,ListView1_ItemLongClick,86,2,C_Principal,SUBIR_INFO_PEDIDO,3231,0,Subs,actualizaTET,1526,0,C_Cliente,Guardar_Click,989,2,C_Principal,enviaPedidoCliente,3423,0,C_Principal,JobDone,1813,0,C_Principal,enviaPedido,3368,0,kms_helperSubs,revisaImpresa,1066,0,kms_helperSubs,clienteConDOE,1062,0,B4XMainPage,B4XPage_Created,153,0 SelectedBuild=0 -VisibleModules=31,1,12,5,16,26,3,32,13,14,8,33,10,28,19 +VisibleModules=31,1,12,5,16,26,3,32,13,14,19,4,15 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 806f276..965a58a 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -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,6 +915,7 @@ 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}"$) 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) @@ -922,7 +923,7 @@ Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, 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)) 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)") @@ -930,7 +931,7 @@ Sub guardaProductoSinGestion(cedis As String, costoU As String, cant As String, ' 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 +941,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 +950,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) @@ -1102,6 +1103,7 @@ 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 +1115,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 +1171,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. @@ -1346,6 +1353,12 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int 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. @@ -1668,7 +1681,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 +1722,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,6 +2094,10 @@ 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.]" + 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) ' Si la actual tiene MENOS partes que la mínima, es inválida (opcional) @@ -2358,4 +2375,31 @@ 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 \ No newline at end of file diff --git a/B4A/kms_helperSubs.bas b/B4A/kms_helperSubs.bas index f35b772..191f9ac 100644 --- a/B4A/kms_helperSubs.bas +++ b/B4A/kms_helperSubs.bas @@ -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" @@ -1072,6 +1073,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 diff --git a/C_TrendSpending.bas b/C_TrendSpending.bas index 4b4f257..92c4bf1 100644 --- a/C_TrendSpending.bas +++ b/C_TrendSpending.bas @@ -325,23 +325,24 @@ 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 thisLog As Boolean = False Private tsMaximas As Int = 10000000 Private tsRestantes As String = 0 Private tsMonto As String - LogColor($"Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Red) + 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) tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones. End If - Log($"Monto de bonificacion: ${tsMonto}"$) - Log($"Presupuesto disponible: ${tsRestantes}"$) - Log($"Cantidad: ${laCant}"$) - Log($"Floor(tsRestantes / (tsMonto * laCant))= ${Floor(tsRestantes / (tsMonto * 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 @@ -349,6 +350,7 @@ End Sub ' - 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 + private thisLog as boolean = False ' Log(promoId) 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}'"$) @@ -360,7 +362,7 @@ Sub traeMontoBonificacion(id As String, promoId As String) As String 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) Return tsMonto @@ -374,7 +376,7 @@ End Sub ' se agoto el presupuesto. ' Aunque si hay suficiente para mostrar algunas promos ... pues que si las muestre. Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int - Private logger As Boolean = True + Private logger As Boolean = False Private Maxs As Int = 10000000 Private prodsVariablesXPresupuestoBonificaciones As List Private prodsVariablesRequeridos As Int = traeProdsVariablesRequeridos(promo)