From 2a8817aa02e4279198b317e4c0a749fd9881c92c Mon Sep 17 00:00:00 2001 From: cvaldes1201 Date: Mon, 20 May 2024 09:53:42 -0600 Subject: [PATCH] vistas... --- B4A/B4XMainPage.bas | 31 +- B4A/C_Cliente.bas | 36 +- B4A/C_Nota.bas | 38 +- B4A/C_Principal.bas | 137 ++++- B4A/C_Subs_XXX.bas | 607 -------------------- B4A/Files/cliente.bal | Bin 34659 -> 34998 bytes B4A/Files/clientes.bal | Bin 4942 -> 5961 bytes B4A/Files/engrane.jpg | Bin 4132 -> 5188 bytes B4A/Files/login.bal | Bin 12977 -> 11660 bytes B4A/Files/mapa_rutas.bal | Bin 5796 -> 5796 bytes B4A/Files/nota.bal | Bin 7334 -> 7334 bytes B4A/Files/noventa.bal | Bin 6118 -> 6884 bytes B4A/Files/nuevocliente.bal | Bin 8611 -> 9114 bytes B4A/Files/principal.bal | Bin 46774 -> 48712 bytes B4A/Files/proditem.bal | Bin 5141 -> 5586 bytes B4A/Files/proditempromo.bal | Bin 5141 -> 5586 bytes B4A/Files/productos.bal | Bin 16182 -> 16315 bytes B4A/Files/promociones.bal | Bin 9382 -> 9693 bytes B4A/Files/resdia.bal | Bin 40003 -> 42292 bytes B4A/Files/ticketsdia.bal | Bin 2656 -> 2909 bytes B4A/Mariana.b4a | 1041 ++++++++++++++++++----------------- B4A/Mariana.b4a.meta | 7 +- B4A/Starter.bas | 8 +- B4A/kms_helperSubs.bas | 654 ---------------------- 24 files changed, 704 insertions(+), 1855 deletions(-) delete mode 100644 B4A/C_Subs_XXX.bas delete mode 100644 B4A/kms_helperSubs.bas diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 12d1963..38a66df 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -42,7 +42,7 @@ Sub Class_Globals Public historico As C_Historico Dim reqManager As DBRequestManager - Dim kh As kms_helperSubs + Dim s As C_Subs Dim v As String = Application.VersionName Dim ruta As String Dim tgl As Toggle @@ -92,8 +92,6 @@ Sub Class_Globals Dim MES1 As ManageExternalStorage Dim device As Phone Private b_importarBD As Button - Private p_importarBDWA As Panel - Private cb_importarBDWA As CheckBox End Sub Public Sub Initialize @@ -105,7 +103,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) B4XPages.GetManager.LogEvents = True Root = Root1 Root.LoadLayout("login") - kh.Initialize(Me, "Subs") + s.Initialize(Me, "Subs") B4XPages.SetTitle(Me, "Mariana Preventa") login.Initialize B4XPages.AddPage("Login", login) @@ -160,11 +158,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) End If ' Log(ruta) ' Starter.skmt.Initialize(ruta,"kmt.db", True) - - 'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp. - If kh.traeUsarIntentBDWA Then kh.importaBDDesdeWhatsApp - - kh.guardaAppInfo(Starter.skmt) + s.guardaAppInfo(Starter.skmt) Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CUOTAS (HC_META6 TEXT, HC_META5 TEXT, HC_META4 TEXT, HC_META3 TEXT, HC_META2 TEXT, HC_META1 TEXT, HC_RUTA TEXT, HC_CUOTA1 TEXT, HC_CUOTA2 TEXT, HC_CUOTA3 TEXT, HC_CUOTA4 TEXT, HC_CUOTA5 TEXT, HC_CUOTA6 TEXT)") Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GPS (HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_STORE (HSS_CODIGO TEXT, HSS_IN TEXT, HSS_OUT TEXT, HSS_TOT TEXT)") @@ -290,6 +284,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) End Sub Sub B4XPage_Appear + If Starter.muestraProgreso = 1 Then muestraProgreso("Descargando actualización") Starter.muestraProgreso = 0 @@ -300,7 +295,6 @@ Sub B4XPage_Appear DBReqServer = Starter.DBReqServer reqManager.Initialize(Me, Starter.DBReqServer) tgl.Initialize() - cb_importarBDWA.Checked = kh.traeUsarIntentBDWA If Not(Starter.gps.GPSEnabled) Then ToastMessageShow("Es necesario tener el GPS encendido", True) Sleep(500) @@ -718,11 +712,6 @@ Sub i_engrane_Click et_server.Text = Starter.DBReqServer If user.Text = "KMTS1" Then b_importarBD.Visible = True Else b_importarBD.Visible = False Subs.panelVisible(p_appUpdate,0,0) - If user.Text.Trim = "KMTS1" Then - p_importarBDWA.Visible = True - Else - p_importarBDWA.Visible = False - End If End Sub Sub b_regesar_Click @@ -739,7 +728,7 @@ Sub B_SERVER_Click If Logger Then Log("Inicializamos reqManager con " & Starter.DBReqServer) reqManager.Initialize(Me, Starter.DBReqServer) CallSubDelayed2(Starter, "reinicializaReqManager", Starter.DBReqServer) - kh.reqManagerReInit 'Inicializamos el reqManager de C_Subs. + s.reqManagerReInit 'Inicializamos el reqManager de C_Subs. Subs.panelVisible(p_Main,0,0) p_appUpdate.Visible = False ' Entrar.Visible = True @@ -766,11 +755,11 @@ Private Sub b_envioBD_Click 'copy the shared file to the shared folder Log("xxxxxx:"&Provider.SharedFolder) Sleep(1000) - File.Copy(File.DirInternal, FileName, Provider.SharedFolder, "kmt_mariana.db") + File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName) Dim email As Email email.To.Add("cheveguerra@gmail.com") email.Subject = "subject" - email.Attachments.Add(Provider.GetFileUri("kmt_mariana.db")) + email.Attachments.Add(Provider.GetFileUri(FileName)) ' email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment Dim in As Intent = email.GetIntent in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION @@ -794,10 +783,4 @@ Private Sub b_importarBD_Click File.Copy(Result.Dir, Result.FileName, File.DirInternal, "kmt.db") 'Copia la base de datos seleccionada al directorio interno. Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) 'Reiniciliza la base de datos con la recien importada. ToastMessageShow("¡BD importada!", False) -End Sub - -Private Sub cb_importarBDWA_CheckedChange(Checked As Boolean) -' LogColor($"cb_importarBDWA_CheckedChange = ${Checked}"$, Colors.Red) - Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") - Starter.skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${Checked}')"$) End Sub \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index a4ecc76..e07f0b4 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -196,11 +196,11 @@ End Sub Sub B4XPage_Appear Tels.Enabled = True gest.Enabled = True - c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") - If c.RowCount > 0 Then - Tels.Enabled = False - gest.Enabled = False - End If +' c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") +' If c.RowCount > 0 Then +' Tels.Enabled = False +' gest.Enabled = False +' End If reqManager.Initialize(Me, Starter.DBReqServer) ' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) ' Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) @@ -444,16 +444,16 @@ Sub DATOS_Click End Sub Sub Guardar_Click - If l_total.Text = "0" Or l_total.Text = Null Then - B4XPages.ShowPage("Principal") - Else - c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") - If c.RowCount > 0 Then - B4XPages.ShowPage("Principal") - Else +' If l_total.Text = "0" Or l_total.Text = Null Then +' B4XPages.ShowPage("Principal") +' Else +' c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") +' If c.RowCount > 0 Then +' B4XPages.ShowPage("Principal") +' Else - res = Msgbox2("Seguro que desea cerrar el pedido? no se podran hacer cambios una vez guardada la venta!!!","Atención", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore - If res = DialogResponse.POSITIVE Then +' res = Msgbox2("Seguro que desea cerrar el pedido? no se podran hacer cambios una vez guardada la venta!!!","Atención", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If res = DialogResponse.POSITIVE Then DateTime.DateFormat = "MM/dd/yyyy" sDate=DateTime.Date(DateTime.Now) @@ -503,16 +503,16 @@ Sub Guardar_Click ' LogColor($"actualizamos "${la_cuenta.text}, hora_final=${DateTime.now}"$,Colors.Red) Subs.actualizaTET(la_cuenta.text) DateTime.TimeFormat = "HH:mm:ss" - skmt.ExecNonQuery2("insert into VENDIDOS(ID) VALUES(?)",Array As String(clie_id)) +' skmt.ExecNonQuery2("insert into VENDIDOS(ID) VALUES(?)",Array As String(clie_id)) mandaPendientes 'LO COMENTAMOS PARA PRUEBAS, ACTIVAR AL FINAL!!! B4XPages.MainPage.productos.reiniciarlistaProds = True B4XPages.MainPage.productos.prodsMap.Initialize B4XPages.MainPage.promos.promosMap.Initialize B4XPages.ShowPage("Principal") - End If - End If - End If +' End If +' End If +' End If End Sub Sub NUEVO_Click diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas index 8bc9c95..ae35915 100644 --- a/B4A/C_Nota.bas +++ b/B4A/C_Nota.bas @@ -109,7 +109,7 @@ Sub B4XPage_Appear DESC = c.GetString("DESCUENTO") b_desc.Visible = False End If - If Subs.pedidoGuardado Then borra.Enabled = False Else borra.Enabled = True +' If Subs.pedidoGuardado Then borra.Enabled = False Else borra.Enabled = True End Sub Sub GPS_LocationChanged (Location1 As Location) @@ -129,10 +129,10 @@ Private Sub B4XPage_CloseRequest As ResumableSub End Sub Sub borra_Click - c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") - If c.RowCount = 0 Then +' c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") +' If c.RowCount = 0 Then - If folio <> "" Then +' If folio <> "" Then result = Msgbox2("Seguro que desea borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore If result = DialogResponse.POSITIVE Then c=Starter.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") @@ -148,18 +148,18 @@ Sub borra_Click Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") B4XPage_Appear End If - Else - Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore - End If - Else - MsgboxAsync("La venta fue enviada, no se puede eliminar","Atnción") - End If +' Else +' Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore +' End If +' Else +' MsgboxAsync("La venta fue enviada, no se puede eliminar","Atnción") +' End If End Sub Sub ListView1_ItemLongClick (Position As Int, Value As Object) - c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") - If c.RowCount = 0 Then - If Not(Subs.pedidoGuardado) Then +' c = Starter.skmt.ExecQuery("SELECT ID FROM VENDIDOS WHERE ID IN (Select cuenta from cuentaa)") +' If c.RowCount = 0 Then +' If Not(Subs.pedidoGuardado) Then result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore If result = DialogResponse.POSITIVE Then c=Starter.skmt.ExecQuery2("select PE_PROID,PE_CANT FROM PEDIDO where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) @@ -195,12 +195,12 @@ Sub ListView1_ItemLongClick (Position As Int, Value As Object) End If B4XPage_Appear End If - Else - ToastMessageShow("El pedido ya fue guardado, no se puden borrar productos.", True) - End If - Else - MsgboxAsync("La venta fue enviada, no se puede eliminar","Atnción") - End If +' Else +' ToastMessageShow("El pedido ya fue guardado, no se puden borrar productos.", True) +' End If +' Else +' MsgboxAsync("La venta fue enviada, no se puede eliminar","Atnción") +' End If End Sub Sub b_desc_Click diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index a20fe0b..beb29c2 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -6,7 +6,7 @@ Version=11.5 @EndOfDesignText@ Sub Class_Globals Public rp As RuntimePermissions - Dim kh As kms_helperSubs + Dim s As C_Subs Private Root As B4XView 'ignore Private xui As XUI 'ignore Dim reqManager As DBRequestManager @@ -226,6 +226,7 @@ Sub Class_Globals Private p_principal As Panel Private p_mandaInfo As Panel Private l_version As Label + Private p_marcascodigo As Panel End Sub 'You can add more parameters here. @@ -239,10 +240,10 @@ Private Sub B4XPage_Created (Root1 As B4XView) 'load the layout to Root Root.LoadLayout("principal") B4XPages.SetTitle(Me, $"${Subs.capitalizar(B4XPages.GetPageId(Me))} ${Application.VersionName}"$) - kh.Initialize(Me, "Subs") + s.Initialize(Me, "Subs") p_mandaInfo.Width = Root.Width p_mandaInfo.Height = Root.Height - kh.centraPanel(P1, Root.Width) + s.centraPanel(P1, Root.Width) l_version.Text = Application.VersionName ' rd.Initialize 'Inicializamos el respaldo diario. ' rd.vacuum @@ -315,7 +316,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) End Sub Sub B4XPage_Appear - Subs.checaPedido + checaPedido ' s.reqManagerReInit 'Reiniciamos el DBReqManager de C_Subs por si hay modificacion en el servidor. reqManager.Initialize(Me, Starter.DBReqServer) ' B4XPages.MainPage.cliente.mandaPendientes 'Ejecutamos mandaPendientes. @@ -763,7 +764,7 @@ Sub cargar_Click End If If Not (pedidodiaanterior) Then CARGA = "CARGAR" - kh.panelVisible(p_mandaInfo, 0, 0) + s.panelVisible(p_mandaInfo, 0, 0) P1.Left = (p_mandaInfo.Width/2) - (P1.Width/2) P1.top = (p_mandaInfo.Height/2) - (P1.Height/2) img2.Visible =True @@ -1775,7 +1776,7 @@ Private Sub B4XPage_CloseRequest As ResumableSub SCROLL_RESDIA.Visible = False B_OK_RES_Click Return False - Else if Panel5.Visible Then + Else if p_marcascodigo.Visible Then B_OK_PANEL5_Click Return False Else @@ -1789,7 +1790,7 @@ End Sub Sub connecta_LongClick ProgressDialogShow("Enviamos") ' s.reqManagerReInit 'Reiniciamos el DBReqManager por si hay modificacion en el servidor. - kh.envioTest 'Llamamos envioTest de C_Subs. + s.envioTest 'Llamamos envioTest de C_Subs. End Sub Sub tickets_dia_LongClick @@ -1819,9 +1820,9 @@ Sub connecta_Click imei = "" conn = "1" Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "select_version_MARDS" - reqManager.ExecuteQuery(cmd , 0, "version") +' cmd.Initialize +' cmd.Name = "select_version_MARDS" +' reqManager.ExecuteQuery(cmd , 0, "version") ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. c = Starter.skmt.ExecQuery("select USUARIO, PASS from usuarioa") @@ -2027,7 +2028,7 @@ Sub B_OK_PAS_Click Resumen.Visible= True img2.Visible=False Subs.panelVisible(p_principal, 0, 0) - Subs.checaPedido + checaPedido Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then RES = Msgbox2("Seguro que desea abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore If RES = DialogResponse.POSITIVE Then @@ -2100,7 +2101,7 @@ Sub resdia_Click SCROLL_RESDIA.Panel.LoadLayout("RESDIA") SCROLL_RESDIA.Panel.Height = Panel4.Height Panel4.Visible = True - + p_mandaInfo.Visible = False NUEVO.Visible =False BUSCA.Visible=False connecta.Visible=False @@ -2300,7 +2301,7 @@ Sub B_COMM_Click SCROLL_RESDIA.Visible = False - Panel5.Visible = True + p_marcascodigo.Visible = True pnlTitle.Visible = False pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) pnlTitle.LoadLayout("CellTitle") @@ -2356,6 +2357,93 @@ Sub B_OK_COMISS_Click End Sub +'Sub B_MARCAS_Click +'' SCROLL_RESDIA.Visible = False +'' Panel5.Visible = True +'' pnlTitle.Visible = False +'' pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) +'' pnlTitle.LoadLayout("CellTitle") +'' c=Starter.skmt.ExecQuery("Select CAT_GP_CLASIF, sum(pe_costo_tot) As total from CATALOGO, pedido where pe_proid = cat_gp_id And pe_cliente <> 0 group by cat_gp_clasif") +'' +'' CLV1.Clear +'' If c.RowCount>0 Then +'' For i=0 To c.RowCount -1 +'' c.Position=i +'' AddTitle(c.GetString("CAT_GP_CLASIF")) +'' f=Starter.skmt.ExecQuery2("select * from HIST_AVANCE where HA_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) +'' f.Position=0 +'' If f.RowCount > 0 Then +'' CLV1.AddTextItem("VENTA = $" & f.GetString("HA_AVANCE"),"1") +'' CLV1.AddTextItem("META = $" & f.GetString("HA_OBJETIVO"),"1") +'' CLV1.AddTextItem("PORCENTAJE = %" & (f.GetString("HA_PORCENTAJE")) ,"1") +'' End If +'' f.Close +'' Next +'' End If +'' c.Close +' +' SCROLL_RESDIA.Visible = False +' Panel5.Visible = True +' pnlTitle.Visible = False +' pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) +' pnlTitle.LoadLayout("CellTitle") +' c=Starter.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") +' CLV1.Clear +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' AddTitle(c.GetString("CAT_GP_CLASIF")) +' If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then +' d=Starter.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") +' d.Position=0 +' CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") +' d.Close +' Else +' f=Starter.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) +' f.Position=0 +' If f.GetString("CUANTOS") > 0 Then +' e=Starter.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) +' e.Position=0 +' d=Starter.skmt.ExecQuery2("SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) +' d.Position=0 +' CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") +' CLV1.AddTextItem("M E T A = $" & e.GetString("HMC_TOTAL"),"1") +' CLV1.AddTextItem("FALTA = $" & (e.GetString("HMC_TOTAL") - c.GetString("TOTAL")) ,"1") +' CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") +' d.Close +' e.Close +' Else +' d=Starter.skmt.ExecQuery2("SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) +' d.Position=0 +' CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") +' CLV1.AddTextItem("M E T A = $" & "1000","1") +' CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") +' CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") +' d.Close +' +' +' +' End If +' f.Close +' End If +' Next +' End If +' c.Close +' c=Starter.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA not in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' AddTitle(c.GetString("HMC_MARCA")) +' CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") +' CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") +' CLV1.AddTextItem("CLIENTES = 0","1") +' Next +' End If +' c.Close +' +' +'End Sub + Sub B_MARCAS_Click ' SCROLL_RESDIA.Visible = False ' Panel5.Visible = True @@ -2382,7 +2470,8 @@ Sub B_MARCAS_Click ' c.Close SCROLL_RESDIA.Visible = False - Panel5.Visible = True + p_marcascodigo.Visible = True +' Panel5.BringToFront pnlTitle.Visible = False pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) pnlTitle.LoadLayout("CellTitle") @@ -2438,6 +2527,7 @@ Sub B_MARCAS_Click CLV1.AddTextItem("CLIENTES = 0","1") Next End If +' Panel5.Visible= True c.Close @@ -2456,7 +2546,7 @@ Sub AddTitle (Title As String) End Sub Sub B_OK_PANEL5_Click - Panel5.Visible = False + p_marcascodigo.Visible = False NUEVO.Visible =True BUSCA.Visible=True connecta.Visible=True @@ -2475,3 +2565,20 @@ Private Sub p_mandaInfo_Click End Sub + + +Private Sub p_marcascodigo_Click + +End Sub + +'Revisa si el cliente tiene venta o No venta y si es así modifica gestion en kmt_info +Sub checaPedido + Private c As Cursor = Starter.skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info set gestion = 2 WHERE CAT_CL_CODIGO IN (SELECT PC_CLIENTE FROM PEDIDO_CLIENTE)") + End If + Private c As Cursor = Starter.skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info set gestion = 3 WHERE CAT_CL_CODIGO IN (SELECT NV_CLIENTE FROM NOVENTA)") + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Subs_XXX.bas b/B4A/C_Subs_XXX.bas deleted file mode 100644 index 7e65b43..0000000 --- a/B4A/C_Subs_XXX.bas +++ /dev/null @@ -1,607 +0,0 @@ -B4A=true -Group=Default Group -ModulesStructureVersion=1 -Type=Class -Version=12.2 -@EndOfDesignText@ -Sub Class_Globals - 'These global variables will be declared once when the application starts. - 'These variables can be accessed from all modules. -' Public GZip As GZipStrings 'Usa la libreria CompressStrings -' Private su As StringUtils 'Usa la libreria StringUtils - Dim reqManager As DBRequestManager - Private EventName As String 'ignore - Private CallBack As Object 'ignore - Dim phn As Phone - Dim devModel As String - Dim db, kmt, errorLog As SQL 'Requiere la libreria "SQL" 'ignore - Dim ssid As String 'ignore - Dim reqsList As List - Dim reqError As Boolean = False - Private subsLogs As Boolean = False -End Sub - -'You can add more parameters here. -Public Sub Initialize (vCallback As Object, vEventName As String) As Object - reqsList.Initialize - EventName = vEventName - CallBack = vCallback - db = dbInit - reqManager = reqManagerInit - Return Me -End Sub - -'Inicializa la BD con "kmt.db" en File.DirInternal, si el archivo no existe, lo copia desde File.DirAssets. -'Dispara el evento "dbOk" cuando termina. -Sub dbInit As SQL - If File.Exists(File.DirInternal, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") - db.Initialize(File.DirInternal,"kmt.db", True) - dbOk(True) -' Log(db.IsInitialized) - Return db -End Sub - -Sub dbOk(Success As Boolean) - If SubExists(CallBack, EventName & "_dbOk") Then - CallSub2(CallBack, EventName & "_dbOk", Success) - End If -End Sub - -'Inicializamos el DBReqServer. -Sub reqManagerInit As DBRequestManager - Private rm As DBRequestManager - rm.Initialize(Me, traeDBReqServerDeBD(db)) - Log($"Inicializamos reqManager con ${traeDBReqServerDeBD(db)}"$) - Return rm -End Sub - -'Reinicializamos el DBReqServer de C_Subs. -Sub reqManagerReInit - Log("reqManager ReInit") - reqManager = reqManagerInit -End Sub - -Sub envioTest - reqsList.Initialize ' Ponemos la lista de DBRequests en cero. - Private cmd As DBCommand - cmd.Initialize - cmd.Name = "select_fecha" - For i = 0 To 50 -' Sleep(200) - reqManager.ExecuteQuery(cmd, 0, $"select_fecha_${i}"$) - reqsList.Add($"select_fecha_${i}"$) - Next -End Sub - -'Dispara el evento "_envioOk" del caller. -Sub envioOk(Success As Boolean) -' Log($"_ENVIOOK_"$) - If SubExists(CallBack, EventName & "_envioOk") Then - CallSub2(CallBack, EventName & "_envioOk", Success) - End If -End Sub - -Sub JobDone(Job As HttpJob) - LogColor("C_SUBS JOBDONE - " & Job.Success, Colors.Red) - If Job.Success = False Then - Log($"Error en el request ${Job.Tag}"$) - LogColor("** " & Job.Tag & " Error: " & Job.ErrorMessage, Colors.Red) - If reqsList.IndexOf(Job.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(Job.Tag)) - reqError = True - Else - If Job.JobName = "DBRequest" Then - Dim resultado As DBResult = reqManager.HandleJob(Job) - If reqsList.IndexOf(resultado.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(resultado.Tag)) - If resultado.Tag = "select_fecha" Then - For Each records() As Object In resultado.Rows - For Each k As String In resultado.Columns.Keys - Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) - Next - Next - End If - End If - End If - Log(reqsList.Size) - If reqsList.Size = 0 Then 'Ya no hay DBReqs pendientes. - Log(reqError) - If Not(reqError) Then - envioOk(True) - Else - envioOk(False) - End If - reqError = False - Log("-= FIN =-") - End If - Job.Release -End Sub - -'Pone el valor de phn.Model en la variable global "devModel" -Sub getPhnId As String 'ignore - 'Requiere la libreria "Phone" - devModel = phn.Model - If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... - Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" - devModel = t - End If - If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model - File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId -' Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") - Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt - Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") - devModel = s -' Log("Leemos id de "&File.DirInternal&"/phnId.txt") -' Log(devModel) - End If - Return devModel -End Sub - -'Convierte una fecha al formato yyMMddHHmmss -Sub fechaKMT(fecha As String) As String 'ignore -' Log(fecha) - Dim OrigFormat As String = DateTime.DateFormat 'save orig date format - DateTime.DateFormat="yyMMddHHmmss" - Dim nuevaFecha As String=DateTime.Date(fecha) - DateTime.DateFormat=OrigFormat 'return to orig date format -' Log(nuevaFecha) - Return nuevaFecha -End Sub - -'Escribimos las coordenadas y fecha a un archivo de texto -Sub guardaInfoEnArchivo(coords As String) 'ignore - ' Cambiamos el formato de la hora - Dim OrigFormat As String=DateTime.DateFormat 'save orig date format - DateTime.DateFormat="MMM-dd HH:mm:ss" - Dim lastUpdate As String=DateTime.Date(DateTime.Now) - DateTime.DateFormat=OrigFormat 'return to orig date format - - Dim ubic As String = coords&","&lastUpdate - Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", True) - Dim s As String = ubic & CRLF - Dim t() As Byte = s.GetBytes("UTF-8") - out.WriteBytes(t, 0, t.Length) - out.Close -End Sub - -'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD -Sub guardaInfoEnBD(coords As String) 'ignore - Log("Guardamos ubicacion en BD - "&coords) - Try - Dim latlon() As String = Regex.Split("\|", coords) - If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" - If subsLogs Then Log("LatLon="&latlon) - kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) - Catch - LogColor(LastException, Colors.red) - End Try -End Sub - -'Limpiamos la tabla RUTA_GPS de la BD -Sub deleteGPS_DB 'ignore - kmt.ExecNonQuery("delete from RUTA_GPS") - kmt.ExecNonQuery("vacuum;") - ToastMessageShow("Borramos BD Coords GPS", False) -End Sub - -'Limpiamos la tabla errorLog de la BD -Sub deleteErrorLog_DB 'ignore - errorLog.ExecNonQuery("delete from errores") - errorLog.ExecNonQuery("vacuum;") - ToastMessageShow("BD Errores Borrada", False) -End Sub - -'Mandamos "coords" en un mensaje a "Sprvsr" -'Sub mandamosLoc(coords As String) 'ignore -'' Log("Iniciamos mandamosLoc "&coords) -'' Log("locRequest="&Tracker.locRequest) -' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd -' Dim t As String -' If Tracker.locRequest="Activa" Then -' If PushService.au = 1 Then -' t = "au" ' es una actualizacion -' Else -' t = "u" ' es una peticion -' End If -' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery, "mt":Main.montoActual) -' CallSub2(PushService, "mandaMensaje",params) -' Tracker.locRequest="Enviada" -' CallSubDelayed(Tracker,"CreateLocationRequest") -' End If -'End Sub - -'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" -Sub fechaInicioHoy As String 'ignore - Dim OrigFormat As String = DateTime.DateFormat 'save orig date format - DateTime.DateFormat="yyMMdd" - Private h As String = DateTime.Date(DateTime.Now)&"000000" - DateTime.DateFormat=OrigFormat 'return to orig date format - Log("Hoy="&h) - Return h -End Sub - -'Guardamos "texto" a la bitacora -Sub log2DB(texto As String) 'ignore - LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.LightGray) - kmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) -End Sub - -'Regresa verdadero si ya pasaron XX minutos de la fecha dada -Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore - If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then - Return True - Else - Return False - End If -End Sub - -'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada -Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore - Try - ' LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) - If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then - ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) - Return True - Else - ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) - Return False - End If - Catch - Log(LastException) - End Try -End Sub - -'Limpiamos la tabla "bitacora" de la BD -Sub borraLogDB 'ignore - LogColor("Borramos BD de log", Colors.Magenta) - kmt.ExecNonQuery("delete from bitacora") - kmt.ExecNonQuery("vacuum;") -End Sub - -'Monitoreamos los servicios para ver si estan activos (No pausados), y si no, los reniciamos -'Sub Monitor 'ignore -' Private monitorStatus As Boolean = True -' LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) -' If IsPaused(Tracker) Then -' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") -' StartService(Tracker) -' monitorStatus = False -' Else -' CallSubDelayed(Tracker, "revisaFLP") -' End If -' If IsPaused(PushService) Then -' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") -' StartService(PushService) -' monitorStatus = False -' Else -' revisaPushService -' End If -' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) -'End Sub - -'Convierte una fecha en formato YYMMDDHHMMSS a Ticks -Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore - Try - If fKMT.Length = 12 Then - Private parteFecha As String = fKMT.SubString2(0,6) - Private parteHora As String = fKMT.SubString(6) - Private OrigFormat As String = DateTime.DateFormat 'save original date format - DateTime.DateFormat="yymmdd" - DateTime.TimeFormat="HHmmss" - Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) - DateTime.DateFormat=OrigFormat 'return to original date format - Return ticks - Else - Log("Formato de fecha incorrecto, debe de ser 'YYMMDDHHMMSS', no '"&fKMT&"' largo="&fKMT.Length) - Return 0 - End If - Catch - Log(LastException) - LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) - Return 0 - End Try -End Sub - -Sub InstallAPK(dir As String, apk As String) 'ignore - If File.Exists(dir, apk) Then - Dim i As Intent - i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) - i.SetType("application/vnd.android.package-archive") - StartActivity(i) - End If -End Sub - -'Copia la base de datos del almacenamiento interno al externo en el directorio kmts. -Sub copiaDB(result As Boolean) 'ignore - ToastMessageShow("copiaDB", False) - If result Then - Dim p As String - If File.ExternalWritable Then - p = File.DirInternal -' Log("Externo") - Else - p = File.DirInternal -' Log("Interno") - End If - Dim theDir As String - Try - File.MakeDir(File.DirInternal,"kmts") - theDir = "/kmts" - Catch - theDir = "" - End Try - Try - File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir,"cedex_kmt.db") - File.Copy(File.DirInternal,"errorLog.db",File.DirInternal&theDir,"cedex_errorLog.db") - ToastMessageShow("BD copiada!", False) - Catch - ToastMessageShow("No se pudo hacer la copia: "&LastException, True) - End Try - Log("rootExternal="&p) - Log("File.DirInternal="&File.DirInternal) - Log("File.DirInternal="&File.DirInternal) - Else - ToastMessageShow("Sin permisos", False) - End If -End Sub - -'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados. -Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore - panel.BringToFront - panel.Visible = True - panel.Top = top - panel.Left = left -End Sub - -'Centra una etiqueta dentro de un elemento superior. -Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Centra un panel horizontalmente dentro de un elemento superior. -Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Centra un panel verticalmente dentro de un elemento superior. -Sub centraPanelV(elemento As Panel, altoElementoSuperior As Int) 'ignore - elemento.Top = Round(altoElementoSuperior/2)-(elemento.Height/2) -End Sub - -'Centra una barra de progreso dentro de un elemento superior. -Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Regresa la fecha en el formato "MM/dd/yyyy" -Sub traeFecha As String 'ignore - DateTime.DateFormat = "MM/dd/yyyy" - Private sDate As String = DateTime.Date(DateTime.Now) - Private sTime As String = DateTime.Time(DateTime.Now) - Return sDate & sTime -End Sub - -'Guarda el nombre y version de la app en CAT_VARIABLES. -Sub guardaAppInfo(skmt As SQL) 'ignore - skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'") - skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$) - skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_VERSION', '${Application.VersionName}')"$) -End Sub - -'Muestra en el Log los campos y valores que regresan en el JobDone. -Sub logJobDoneResultados(resultado As DBResult) 'ignore - For Each records() As Object In resultado.Rows - LogColor($"====== ${resultado.Tag} - REGISTROS = ${resultado.Rows.Size}"$, Colors.RGB(215,37,0)) - For Each k As String In resultado.Columns.Keys - LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0)) - Next - Next -End Sub - -'Regresa la base de datos especificada ya inicializada. -Sub inicializaBD(ruta As String, BDName As String) As SQL 'ignore - Dim skmt As SQL - If File.Exists(ruta, BDName) = False Then - File.Copy(File.DirAssets, BDName, ruta, BDName) - LogColor($"Copiamos ${BDName} de ${File.DirAssets} a ${ruta}"$,Colors.Green) - End If - skmt.Initialize(ruta, BDName, True) - Return skmt -End Sub - -'Agrega una columna a la tabla especificada. -'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) -'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") -Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore - Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla - Private c As Cursor = db.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) - c.Position = 0 - If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos - db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) - Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) - End If - Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch - Try - db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) - Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) - Catch - Log(LastException) - End Try - End Try -End Sub - -'Regresa el DBReqServer desde CAT_VARIABLES o "N/A" si no existe. -Sub traeDBReqServerDeBD(dbx As SQL) As String 'ignore - Dim srvr As String = "N/A" - Dim rs As ResultSet = dbx.ExecQuery("select CAT_VA_VALOR from cat_variables where CAT_VA_DESCRIPCION = 'SERVER'") - If rs.RowCount > 0 Then - rs.NextRow - srvr = rs.GetString("CAT_VA_VALOR") - End If - Return srvr -End Sub - -'Regresa el valor de intervalo desde CAT_VARIABLES o "30" si no existe. -Sub traeIntervaloDeBD As String 'ignore - Dim intrvl As String = "30" - Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'intervalo'") - If rs.RowCount > 0 Then - rs.NextRow - intrvl = rs.GetString("valor") - End If - Return intrvl -End Sub - -'Regresa el valor timeout desde CAT_VARIABLES o "9000" si no existe. -Sub traeTimeoutDeBD As String 'ignore - Dim tmout As String = "9000" - Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'timeout'") - If rs.RowCount > 0 Then - rs.NextRow - tmout = rs.GetString("valor") - End If - Return tmout -End Sub - -'Crea una notificación con el "body" dado y regresa el objeto. -Sub CreateNotification (Body As String) As Notification 'ignore - Dim notification As Notification - notification.Initialize2(notification.IMPORTANCE_LOW) - notification.Icon = "icon" - notification.SetInfo("Tester", Body, Main) - Return notification -End Sub - -'Genera una notificacion con importancia alta -Sub notiHigh(title As String, body As String, id As String, activity As Object) 'ignore - activity = Main - Private notif As Notification - notif.Initialize2(notif.IMPORTANCE_HIGH) - notif.Icon = "icon" - notif.Vibrate = False - notif.Sound = False - notif.AutoCancel = True -' If logger Then Log("notiHigh: "&title) - notif.SetInfo(title, body, activity) -' Log("notiHigh SetInfo") - notif.Notify(id) -End Sub - -'Regresa el objeto de una notificacion con importancia baja -Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore - Private notification As Notification - notification.Initialize2(notification.IMPORTANCE_LOW) -' Log("notiLowReturn: "&title) - notification.Icon = "icon" - notification.Sound = False - notification.Vibrate = False - notification.SetInfo(title, Body, Main) - notification.Notify(id) -' Log("notiLowReturn SetInfo") - Return notification -End Sub - -'Regresa el almacen actual de la base de datos. -Sub traeAlmacen As String 'ignore - Private c As Cursor - Private a As String - c = db.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") - c.Position = 0 - a = C.GetString("ID_ALMACEN") - c.Close - Return a -End Sub - -'Regresa la ruta actual de la base de datos. -Sub traeRuta As String 'ignore - Private c As Cursor - Private r As String - c = db.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") - r = "0" - If c.RowCount > 0 Then - c.Position=0 - r = c.GetString("CAT_CL_RUTA") - End If - c.Close - Return r -End Sub - -'Mandamos los pedidos pendientes (pc_envio_ok <> 1). -Sub mandaPendientes 'ignore - Private logger As Boolean = False - 'PEDIDO_CLIENTE (Pendientes) - Private c As Cursor = db.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE where pc_envio_ok <> 1") - If logger Then Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) - Private almacen As String = traeAlmacen - Private ruta As String = traeRuta - If c.RowCount>0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "DELETE_PEDIDO_MARDS_PC" - cmd.Parameters = Array As Object(almacen, ruta, c.GetString("PC_CLIENTE") ) - reqManager.ExecuteCommand(cmd , "DEL_PC") - - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "insert_pedidos_MARDS" - If logger Then Log($"${c.GetString("PC_CLIENTE")}, ${almacen}"$) - 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, ruta, C.GetString("PC_COSTO_SIN"), C.GetString("PC_FACTURA")) - reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_head_${c.GetString("PC_CLIENTE")}"$) - Next - End If - - 'PEDIDO (Pendientes) - c=Starter.skmt.ExecQuery("SELECT PC_ENVIO_OK, 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 FROM pedido_cliente left join PEDIDO where pc_cliente = pe_cliente and pc_envio_ok <> 1") - If logger Then Log($"Pedido PENDIENTE: ${c.RowCount}"$) - If c.RowCount>0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - Dim cmd As DBCommand - - cmd.Initialize - cmd.Name = "DELETE_PEDIDO_MARDS_PE" - cmd.Parameters = Array As Object(almacen, ruta,c.GetString("PE_CLIENTE") ) - reqManager.ExecuteCommand(cmd , "DEL_PE") - - cmd.Initialize - cmd.Name = "insert_pedido_MARDS" - 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")) - reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}"$) - Next - End If - - 'ABONOS - Dim ab As Cursor = db.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$) - If logger Then Log(ab.RowCount) - If ab.RowCount > 0 Then - For i = 0 To ab.RowCount - 1 - ab.Position = i - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "insert_abono_MARDS" - cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha") ) - reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) - If logger Then Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) - Next - End If - ab.Close -End Sub - -'Borra el pedido del cliente actual. -'Borra los registros de la tabla "pedido" y "pedido_cliente" -'Actualiza las tablas "cat_gunaprod" y "kmt_info". -Sub borraPedidoClienteActual As String - Private thisC As Cursor - thisC=Starter.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") - If thisC.RowCount>0 Then - For i=0 To thisC.RowCount -1 - thisC.Position=i - Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(thisC.GetString("PE_CANT"),thisC.GetString("PE_PROID"))) - Starter.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1)) - Next - End If - Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") - Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") - Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") - Return 1 -End Sub \ No newline at end of file diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal index 8e250a7c0fe095e44b2d81eb072ace699b175392..3c88b58550c07ddd9869235828a2761b476b08cd 100644 GIT binary patch delta 2507 zcmZ`(dr*|u73YX$+12p)AcMfJy9S~ti_3n?W628ciZ6mL3jzia$tvrE+3X?1iz zGh-rw{%R6!K+V)nohgaVrk&}GN$qr+wn-n*w2i4z40)K?>X0_IF`Yinz2Lf-_K)*@ z=bqoW_nh;)=iCo_r~R;h+I`=MiHX?}9}}bF|0Cz_`$4P{$C}6GUbe~>%UaD6>wKI~ z$-qak^;8jdOxMKjS;6*|EN+%677t5xlwK31uZhxYqx3q~jVvaXdKM9DI?LK9eH!bD zEG@p!Mkk1|)WiYolgoTyjwV^i@XC5LPnQ|g!%dy0)&@uwK62+yYY zsTj9Y=8+w9QopA!5fL{wdp8CHL91vlm(ax71^MBRQw!%H=fN~QGFQ?-=YbvXG@ zh@Od@GF+nYN}STr_^bp(9bJIdCFRhqux~)H~&*UU|}` z4K8dgRiR&e9&WpW>x(Va7qwf9>t!kion07MG7-bGA{#fCxRC1%!L+0c#--oHkSm0j z%ex4X2%=)h2$u2?eG5NHdyl(As+^(>tzcE+$5?@gvi*^7b z75l^QR%!_I%2j4Q4W}#BaKmagoOTIAMfj4N7iX4Epl94_xXHtY+~pI7T#t&;>i$XM z6`ZJ3FjQlq?<1jDTxA-Ds#O}2CA>13PAR=2OSoARqE{tyHiDd$NLy_v?5o$1m?+$+ zdxD#exr4Uh&J9llTGyapyvTs(8g$rN%Qv*P0;%hkeT@kxu4d(7JU$&3|YR+ECW9a(gqX(~itwE?r%tMs}|`HjeJiH>|j zrrppKq9052!W8s^L@#X!VffKIRApn(YoVV`>9WB`RXp9&e`i`y?=!$zslb$@gRwLo zquvm`IeFjF`F3sUqL=W`O-G>Hd|qC`#m$zKUov?`EOGzgkDSxl@N9G9qEDr_WR`Es zo_ce$Laf>KNXXG6dCPA4)z@M~7^GigPJ0>j4=AklHx|%uBHZ+CQ|Y%bKDZi5tp*zA zx5JDxfdu@!Q^Bi+O8D83wa~`aJTmNBelOTYro93SHRHepetPWa-8VQ zrcv=`Vtl8Twa+^b>#lM-;;GesfbE_PZp}EHe!Q5*xH1QQfDv;>;@FgoM{z210gU_1 zxSAV>!5wSpL%ys$c=ndkN4(1nXSNo@=1kn)DcheuMsR*1@@A)E?oJ1N!l^hgu+u`< zBB@;CRF>gntAgrXmGr4(^>WS(yuPbC@zW{MuZ0b}^+ca>rG+9$;%8G~PR>NvIpD-Q z9ow~D_hX)!QP%ts2`{Hr+;J*I?lrt5Z delta 2452 zcmZ`)d2o|e5bshk{lXENh5>rmChg9S;E`p+ZMT}kQpv1oWlsQ_cLMzZD@oi$ZC z(pe}_`073FH+ox|yyHaCs#SW5a8y5ApC>l^>KTAX(w1++_@p_cA}6Vu$=a5bPX%~B zDV@ytB*{k>I1N`a1M3Zsr^>?`>phMB7Qac%hC^r~cYaaWG}U}Ll2Zb-1E&ki`Ab!H z9InhnpKUUND;0#T+>q%(x()9&CBt5tfmI$oKDX$xyE1Lk?VQEJa_Ml>p6}6S%SF0> zGV+QQnCGeJnGr-|kpTns#RwPWqQR=ifJfwZVMuSf*<6C%ewsMG;wYOR>X&=SnlNZ;=auk|0_ZhH$7X69bE83@&-V0fMdXX@lFh?(nY`2Kp8UX;bYB;lN> z*V9W9PEJFBUY4H2BMs-fM297mBcq_i-lPj26^}GTh!Yd)_vFI3dON)mZrhPbIMx)T z`{4HO!pz3rkRuDeNh#713cw&v9UyG)-9rOnC z^sC^9-ozs}mGhSeOOW#xld}zjYqeNonT8g176xV|V0CjE9mTE9*>p6#zxgSmcNkB( z?j1&8VwpIVKgv<$dDHOG`p@WHJkye`dv}a?sO5e-#`~tC&u^voaNIvrcWg{dYo`?@ zt-sLw%w!VxO#_W1L*UcBKPIxb+DISZg|;60Fv3bvn*n{nD_~!zh`WNFZIkiWlFPIo z@kV)DKE}WmX5_Y)(I?R){QoFwO{1o)U^rtePbG( zWG-fE#lNkAMLCK6&FL^+smEZm0e9T&)PBll@!l$*!J``S+s%bE7##s_r%6X_?@rbY za>zvjPolS)pUO@ZLj{vDyva$YczEXWTQD8=g%k0xI)hG+WHA~Qq|QxY3qPXtISzK4 zalmN6Et_q02CFPa?p_LpHs{jW(bb-fsdhFV?N~}*M7uHpQ#vbjUyLg1Y`C>EmFPKH}BUihlTXveq7X#f|{IRuzhQ< PUuOa)v@4i@`{sWDa+(S- diff --git a/B4A/Files/clientes.bal b/B4A/Files/clientes.bal index 2cee098577b19e187085bf98c33c04c0a5b6d710..77bc7a62121dd5f2b5f011520e593696e6fbd990 100644 GIT binary patch delta 1775 zcmaJ>-A^1<6u)=bncW#?hb~)LSa!=|EB&&x%hDpWr3(Tr6rr{C1N#9B9bk3ctZa#m zX@XD2N62Y>GKTmM^nvuLiN30dnkGJ)sEN;76Pq;gVf~#$*$@1f-xGoWGJQD8kDl}ZruoNZalnm*aW_mEqM7<1@%-=x`KKesaN+=Ngo(&#*GN%Imixf zslm}2902BM^Q)y}*_G~MVTq>9c1WwQSlD`?4Xu~A9{S$#QAcpy;{3At;&PVm2fGp$ zR$e}zE0%H}cz!IVrl&^vJwN;23VmfxH?sHQidQOmw(PKZI3d6ai>~P zs*RGtDBUw#4seM4VlJO$N0XytSNT0WJvmaTG#!`2p9fC4%elgBwhynC7P2e!Yhb{s za?_KLbA!gaTn>FT=?-(}Z zP6n5yk~4}rLv8fLYO>E`(+9CGkZZ@x?mo}sd;Tr>5Gt<$uxD<(vaUmk`3AsEw#-7! zLG=4j{P=5#&(eA*_5!<*40&4`p9QG0GlSIteIM$#?*d5)ikjUN502tLpYqQmeT-LA z%m0qof|M6P{SswC%KK>NdyRYyPr^$EC#1{6lnlk>bLD@K6z0)UCnmqW7wI$Cr4OA( tV-cH6wC=<^J)rthc&}Q@0)6ZB#e=X(8G8UEVtOZHD+=Y03fo91_Mzb1ru;S$1& zZ)m~47+^9mp2=CmwskkLuvC(jl$ITu0l$~-%cgoh5&`Uq;?d1U0F}T}ur{ z)ZqIw`NGW%bs6#2#QLdnj#^E=WzQyRbw|kZgzLFrE1$Ou)Ap=Yfkk>So#MOmV|G46 zwmwL&^xgDLPsuiw`=zJ7>O|`BS&qGl=IE8zlG?u8oYbvRDPeMXS;s&rjAp^9&mH0a$#v4|!+>7mcmjeUq&X|)S11|atTt#a@h zt$JBo)oKMj3!1_GSgv$<08Dk*P4nJ5y&X#_$P6dvdO(d{m;j*34ZQ4wImjdoa|pno zE%x=ZCj}D&ewWEYD?PeFlpfslVL%;MPs0~F>pcRGCXNaSU<`osh^qKwKgn?ry*&E( zqiTrX{RD5Fgh?|Qq$ir(u*5XF&ewc?iqZ zJzwuT3$G?r=jT9UfV1;qcvRizLG<#cFXapDxd@{~;Ve-xhhsbrPE|OiQw zJ@V6i9VA2FePR4IZ+)iBf;ZQ^x9fe_PzB&CDsE7BRsWj9Hj3@PgS{UdsdHJpTAi?qJrO~9g$kd@&hL&yt@DZ diff --git a/B4A/Files/engrane.jpg b/B4A/Files/engrane.jpg index 01159dede406910442ea8745a6f5be1db3cf3848..a2c770f8bc77f2d245ee214b4d8aae728fcc86f6 100644 GIT binary patch literal 5188 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 l>S-IKG#z>!MytgFfb0M)homqRA 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 akYu$Ugse?Mb`M-aO`xN%S2en^*na?xRu*3X literal 12977 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 diff --git a/B4A/Files/nota.bal b/B4A/Files/nota.bal index dc491f77822b7ec59c0b56b0fab8d26dfc12e122..8f105d8f2cc31bad622b34ceb7a00f98a87ac934 100644 GIT binary patch delta 111 zcmZ2xxy*9IKQ3kl28PXy+{rAQ{~4IMfgDDo&AI%#ObG7eT>j$CVnVwZ(S&?NOqrSg oGcZl&lF^^MU5anAyNuA}>rz6K({}JzGf=O=PF7=)f0Q9^al>h($ delta 105 zcmZ2xxy*9IKQ88!sc$zkawoGeU&@r5yn$bQa~;176O1#tjz4L$n9wdp6agO*Q)Xrc ohVIE+GWwIZOYu#1ml2wLT}o(jx}^B#KjNKCFv-o^rQS0F0F>+_0{{R3 diff --git a/B4A/Files/noventa.bal b/B4A/Files/noventa.bal index 3756c95ebba55c643d5ac377ed559232ed2b984e..da000d88d442098ac082cf2274eb63cae546e02f 100644 GIT binary patch literal 6884 zcmeHLU5p!76`skiw{ci#p$+LTaei6|X-szW+nI*B~>vPXJ_slupIrrR|O=+5TX`QBR!0#rE^%%LjZ_b-&z~6OMrsFi5Fd-D$VQNU>r1Rdvzt>G2^Ui<(DILopx^X>s4?h}&oGEM?Q=gPA)L1k&;%~z ze;)J~FmA`VV}RZ`K!0(7rZ3EWVzo%>*V=O4!Jo@pKW;h)C!`k$XX@w*?reD4dpYNZ3uU)t#2Hqv_H!&YPav47+b zdYS+Jw7Bo}R~PSl@#@9DzW&<3XV$;6{_1Z(-gM>M+iza^N&C>!+5f!%w~@bWTm1VQ z@aP!~f>!sciyd_@sKTt_ne}Wzd1ljAZuYqHjj%2Wvk$$bVkK;bZMF^HbnHUcm0yP4 zaE%3H)>0277%%i>C=$zY!xhoYhTGyICfTq$ErZ#db=-z>Wov(V#%%a4s?}+d39maY z0%2)&J?c5G$%>|*tcz0dNVQg(K6V5!!-@t z-%V4Nn)6xGzSH661%^q}EoC-aJ~y@uyWVo7Ys?2E6(7D}Hayno?z=E0WmgXGit{~@ zpdBVC$jKSgZ{-DBFBAxDmYNrExrq7)9qbs5hG{p4`5{e6{1|LUfl15kc;>T$X?dnx zWZ*&jVnXK}+s`d1&k0h+C6x(nD`%mM+W?;!GSz$lic|qvYr5{(9@RX!WvP;BD?;Y^ zinnydO8d@1E$2A>#<%26(W2$&8=8U>xoQ2|%+^JHPJLaS3v)$y2bJ)ayD(LGS^pCpl%dQz4-&vC=_ zq~b#x^s{#e23Z|fd7f&7EQZ;;nt1SgfgPKvOrM=8S92vvcd&)ID$i7o=Ssw>x2eL| zCn*ZTIti753xYsg^W_rU9}`TQ>E&ChenB-P2Iaa&!=X2O1D#0%PV<#mCr%JYqkvNA=xZn({!`2$~uaCt}} zoY^VUZyTL(c_&o+X^YEPk8`G_R=IK*SkpE5T0w+^%b6h_jFywbT7CGckn}3S-NB0n zah!A9x+*xfoRk)BKQj3%XF`y+J6%6)h1KFyRTeXf;(~_CcS~_OCiCc z7EUH4wvfQkwuS^3quVfzZ0E#f`hH9j?E@hCAh4h!5QfFRwA7Cs`r7DMFcCF*|LMiP z1Ix&j3>Nx(m;?bnGKxf?pz>ES#sv?;7U2;^8ifNQldoa9n|u}m??_NoQE(yj3IR{c)y9&BNRP~=@5ypV-no( zs|{p;#n{gP{SgEI0wEc=3?hRewI4+iS%O5)qBeRMR8X3afszd5K=d;(6|(an3K)TQ ztYRfGOOOpK-SF7bZ2Z_3lPwN2w4{y5`De6oLrh14Yr_ovV(V5hw9+Hk(MFT%*ZWfFUKH?P|jeXvy7x(h^EvFU5?ia4aVzb8l2Q%)jSSHylS2RC#V|q14;Te{rakg z-uo$050as$olrR}BrWxoXPT z^vP7sTd;JURWpOFLDif9CB5cJ5dB^gYbwJ|ZrDq(b6E>Wg1-W-A@Hwk@{H>wMk+YE zbWV;g-Hj)KX5&d1X!R=(Z58SP{P14T<(KTOOFXPc0AMz{77s9%yzAc{mI8cpjLU z8_L5QFtD~fd=oo9wLE+a55Ea{pxHI#;c2MH^YAPj5qapa=+E@{{gLcWzYFb3bm z-@~%so)@ta^)V0v124S{hRzq%$eYL#n7wx@1!`3o5^hJl4sXCVo%@0h605gt21sE!?2Fyp0N8#LqMM{^zIi0p=Fi75PRG8E|!e2W=sN(YM6K z@{hzOc+-?(I2ch09mGN&6+dmi0sGoc+hu5WFb4l4F^08Z%Jd7S8$wJO P^$<)U=~djSl&1X;pwMh$ literal 6118 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 diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal index 0adc930e2dc9ee39cc02dc3af56a05f21c4ca8bb..a2b2de39c27c17f8f1913ea74975c1f76cf76eb1 100644 GIT binary patch delta 4521 zcmb7H2~?EV6`nV2{xibB4EwM~kWF#e6axkZMIgv90feNLka3ve$T$p}dq7Q~22_-5 zHo*im#YUro7@D@nBx-6*tX6Y+TAQO1EsAwP)Fvt?k>2-UHgGHF+<(4z|M$LkxBtFJ z&rSaEpZSh_PCC1oJ6o08*z zYNblA(M8G3Fv{MjjW(ee6Pj*9GfXJngl0mX-7!+$Ewzs!z65#rD8VSMC~hc|jTlND zX8TUXQ6$PVqZWTLnU|F*r?3suiK4N~yue#P1<6|)h&^>3Vj zS{~1q_m}3EGLOn!>)d*WA_f}gXtpk`4mfi9TH`v=fsCTyj%7FNCWn1>q3I zFZ@%MSLod{$pL){{kDqQfv>k5Z?Sj(ZcFTq!x3py(;l?m%=^ZERp^zuuk1Y|>vU`| zI3Aec^7+c;Tl_LR?LV6vS}qr~?@h>-JA9DunfB2hRbpz*mtOrHt;+d#GosU>Z~2O$ ztPge4A2w=wR%ZS=?&MD^yANHcU2*T#6N1Lm3h&-m(jrP|e=!cej)2 zOZqR052y|#evxi}z1M%&nGn5;dwe{8Z{gh$j%C7FAx6beWT?>U)mno}M?cYds)ZU| zEUkr{`FZky+47t;`5gK4^p&otqPj|j2@b2JL)H{#SmsH~LQda}WYRP%etfB5`e=!< zqAJ3wGR>ViHmf+3+BuT@$|B4@C&w`sXH+~^52Im~N(Z#BrBvyQ<}cK$RTVZk%F9-o zxTl+n5)@MJKyyEn(J30{AFUO2nO?6^qpzpDJ+o-b%&lIit)M|kRpe*La{`p9b28>+ zo7YECm|8?b#u}nLB|B$MHuZ!B5W|?2k*!G0lS7Zx--kM`D_W|lsMMC}DSb{xT6!LB zgV9mlccdP~i{WS*TkDSO2e&-~yN`KB5GjpGN>O%Zky5Tmofk*VHt2PE+A5u+`FxF2S!4%{ew8D5M5_M7{JLiH>zdUbSB-v2FfSv76tGn3 zp}jSfWoTJpJbc?EmR!eIB`AcR(DcuC8ys$uN^T&u*0)f-z&syZ3IfSZ`lawgQ($dF z81!xw!_K$FaH_!t98-Kiw#h}1fINvP+yGpR36^X^$b7tofSDA^Oxj!YY|*`C9bL*| zF48AOmwf|I3+x~Z>}^wEZ(GsddZxghh|$h&9%bCbVdooVoAzoY`4Lp_DDjD_$xqP#P7Ys9!0}}nJghYuF?Pv4w&WgL zav!?3W(a$XTNaP3U9MYChz_+dI=G^c-aw^f$67Auv1?M5O{~+Ytnv`JS+On+q5| zaV5h@=*{O5X#XVEV|bL49_l zpTOq2d>F3hV8AbrLo#+k+CZj%B)GMTVe>AjvkjVLZUVUEcHDF5xhu^INIuTRXqgRs zKYtpfF%|C&G&`Kw!p4u4&bC%WHUw1KU?|KLz>2P9Sg?CP-;RJx?FCr{Vi^3?77T^} zn7iExk7xP80KPqe!-jN7?&RRYo(|#w5BDlX4%U=x;so==g1sGtqZ1+hLnDvH>(l!> zU{;$eH0+-Ro7%=r*iVEo*r^l=$8Q3M+QfKKiD%{<>FR*uc2`(^U>5wN-ALnPHY1_C zgNPWFXgn3)**x*!!9<}8PN8Q%C&mlLE`J({DXyrqWB+5JmdEqN*DQ_fqC(FhbAD_f zpeGp`K27wtAVM~C>fLDNxIUTFZ5(Gk-<_6`mUv+0OcHL#32b){T0(yO?+A3(O&_hK z@LErN&7AN;;Eh6?B#)CC)$|tSg9DEKAMb}^Km4zMUZBNKXc5y(7@2~PKossdd`v>I zAFeq#6ht+__?V1hhk{3{iHWXd?Kt!IA&^+dz88K7t*QtZRB$oW8Wy}_oEU?`u5-+f z5PW5hq6dyfcA_PPUy>N!TmSlKL$$7UWU;PxeyBwmD>!h>l{$xxVYe#%ghq}WfnR4w r;RTm=Q56ZJU#D}}*hRPFlHfdE%CD~%LraqryJ&Rw*g{*60E7KM&Okxg delta 3617 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 delta 383 zcmcblJym0aC=+A+W-%rO7DkQ9jZ88sE~#mWr8y-oMTzB!Nja&K3=9lGFqfJ6uov;F_@<9{efBn(LKf*1inLJWu*xh4w>C^Lpnt`~HJ zSjV~rC>$~Qk)Ri2Ho6Ia?Jy}PHYqEz(;$&lCk;!{S Z*nxoq^yK6gVWG)9qOy!}P#u1vEdZavQ;`4w diff --git a/B4A/Files/proditempromo.bal b/B4A/Files/proditempromo.bal index 1f4ea06034e6f9c75f11e467c13b81107f47eab4..abdc9572f15ac99a8fec15acd9dbd4b36403d24d 100644 GIT binary patch delta 367 zcmbQLaY=iFC=+ASW-+FRER33y8<}JhgG&-iQgbqkOI(T)%ad|ar5P9)^iqKAL?A~G zEb9Z61&Ig%rBgDCLCh484iJMMD3+RsAyiP5T3no(ve|%sZCm$0M zVho4zg#Z6%U{D6?XXFABAixp z=aQTJN05u@|NqGXe0Gz+2v{@5Og0eIrNqj~Z-hi9cL~}~wiOm)MOc#~47bKj$eJ;J cvJ|g1)K6-R36tLn1prAqVLisg$+^NS0B5>pk^lez delta 210 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 U`@3K?)_|&|_N;F59?{5u0nFvV`2YX_ literal 16182 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 diff --git a/B4A/Files/promociones.bal b/B4A/Files/promociones.bal index f437224cd4f215c0a50ad74580aee7008bd14499..44a9e705b6da1a1b0bc407f2f779fde7b3e2802d 100644 GIT binary patch delta 1061 zcmb_bO-~b16n&R=psy6^P@A?x1N}gvQ7Ea2o7Pbpn%HO}MHEDk4^d-L3x1$TrA1kp zxVmdih>2?x;);Ku{sjF6CI)u88qb?59~l=enB<(CIdf;`y!-BZU-)+ZL&ilfH?pp6 zx5q7n$X&cJ@UF+xz>D5b8|Rv9O@Sg@9gu#|fD%Kz-8#fQfizv>n!iND{M|nY&g#*B zRA08M-yBZU6}x(bGr>U`L3J;U@@8<2uG;>X?T^|1H9j6%qj8@0m1u&$_>ydfB~&e% z=hxx9_c~%Us3?>CHGDER1vw39q8&_tFqD`DwE%Jw6jF{CbVxZU|W2F-F@ zH{g6uM(8dVV+p#)o~{BGBl%-{n(kw%8IBo}Pei+^ytCvomi+3-|HkQMGp^SoiFzcp zUUebTdZPY#(}>VK|LEL}wh%M|^C;TwM;Ui^Oy2@j9%!^Ii>on{Lmm0*0~mID9zt{j znvh`m2$WSqjml}DNr+hgV+c){%AW)6-y&7Ms2-_To&b&3)=%rHa+W~$?y0}*?A}=+ zxKD2msDJGb{EUBf%+NBAcMczX$10AFRU8589eWOcPsf)29Fi4`x5>x!w!Rg|i~Vpk lkpoNTX{+M=6xeK$d@7Mm)lhVRGrH=S(bYXO`T{fh_BSxayAS{X delta 1080 zcmb_bOK(z95Wc4r2^f% zqxWq{-NQy`OKA+nS5m8~bUy2kXO~jte5sjR1VQj;x*SqS^GV%{iixvl;@fpi^$-o{ z4bl{p1fZ&CUVNuF&Hz;%{WNY7>6;z)S$sAoK$wKN|tG13a52$$a#{bs~_0qyPjl zjUZ251W^JFIn$K0AWIa`da3BrkjkrP*PEHb_i~3St|&e89%DE7>#-c2a$DIVeeqbK z>{>1CCfSEPEKlP@lk$7#Z9#Sm-oltC(pTFsE65%T@R*=Ad&1r2Mz@zj4g}eG31k>h3L>Id=9A;D*j-s_ z%m=jr3=piGL=aX1QHO93P}TSL>-V|x072rU#Gk=f25rC3Ln=DcY>jrD$$vCk>1MXl zF}z`R9eRt|G5X~WAFTNXpM{l;Mm9Q{V^EaB1fp0)&~w5K#yNR}(3si!4`q%d0*`U> Uf48ZIOSW%Qt!0~@V4Gh522!cyG5`Po diff --git a/B4A/Files/resdia.bal b/B4A/Files/resdia.bal index b61d55766b764367d6f420922bcfcc59a7c14d30..84ca015fe54efc5c47cb5ede5f1bb48830ebfa88 100644 GIT binary patch literal 42292 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 diff --git a/B4A/Files/ticketsdia.bal b/B4A/Files/ticketsdia.bal index dd122427926ef8cb9446c261b97bc76ae6063943..d8f1ecbc7f3d9681a0bee5656e049cf629d95800 100644 GIT binary patch delta 365 zcmaDLa#w6a8zZCF=5|I#W=74)zRWU-!6k_$sX3X&B`!sY(kYq6AZ7|k2Z+HB6idy+5Gp82EiO(?*?f{El7-P^@@Y1`$+sWaa>h*RoNs!aP%GH4k9+2ZX)qsRO5VJBkfJsLn$>{_ngg^|CiOwK~3y^RH tVz&Q4AOU1BhA=WPxPheHfrJN$;Rz&UfEXyjz#t05tc;Q%?&QCm$pA4|KS%%o delta 233 zcmcaB_CRDq8zZCp=5|I#W=4(4zRWTzE~#mWr8y-oMTzB!Nja&K3=9luD;WSIZX>Y( diff --git a/B4A/Mariana.b4a b/B4A/Mariana.b4a index dfe733d..fe261a5 100644 --- a/B4A/Mariana.b4a +++ b/B4A/Mariana.b4a @@ -1,503 +1,515 @@ Build1=Default,md.keymon.com.mx,HU2_PUBLIC File1=alert2.png -File10=fondo_kmt.jpg -File100=marker-azul-31.png -File101=marker-azul-32.png -File102=marker-azul-33.png -File103=marker-azul-34.png -File104=marker-azul-35.png -File105=marker-azul-36.png -File106=marker-azul-37.png -File107=marker-azul-38.png -File108=marker-azul-39.png -File109=marker-azul-4.png -File11=Hacer pedido.jpg -File110=marker-azul-40.png -File111=marker-azul-41.png -File112=marker-azul-42.png -File113=marker-azul-43.png -File114=marker-azul-44.png -File115=marker-azul-45.png -File116=marker-azul-46.png -File117=marker-azul-47.png -File118=marker-azul-48.png -File119=marker-azul-49.png -File12=intmex_logo_192x192.jpg -File120=marker-azul-5.png -File121=marker-azul-50.png -File122=marker-azul-51.png -File123=marker-azul-52.png -File124=marker-azul-53.png -File125=marker-azul-54.png -File126=marker-azul-55.png -File127=marker-azul-56.png -File128=marker-azul-57.png -File129=marker-azul-58.png -File13=intmex_logo_192x192.png -File130=marker-azul-59.png -File131=marker-azul-6.png -File132=marker-azul-60.png -File133=marker-azul-61.png -File134=marker-azul-62.png -File135=marker-azul-63.png -File136=marker-azul-64.png -File137=marker-azul-65.png -File138=marker-azul-66.png -File139=marker-azul-67.png -File14=intmex_logo_192x192_OLD.jpg -File140=marker-azul-68.png -File141=marker-azul-69.png -File142=marker-azul-7.png -File143=marker-azul-70.png -File144=marker-azul-71.png -File145=marker-azul-72.png -File146=marker-azul-73.png -File147=marker-azul-74.png -File148=marker-azul-75.png -File149=marker-azul-76.png -File15=itembuttonblue.png -File150=marker-azul-77.png -File151=marker-azul-78.png -File152=marker-azul-79.png -File153=marker-azul-8.png -File154=marker-azul-80.png -File155=marker-azul-81.png -File156=marker-azul-82.png -File157=marker-azul-83.png -File158=marker-azul-84.png -File159=marker-azul-85.png -File16=kmt.db -File160=marker-azul-86.png -File161=marker-azul-87.png -File162=marker-azul-88.png -File163=marker-azul-89.png -File164=marker-azul-9.png -File165=marker-azul-90.png -File166=marker-azul-91.png -File167=marker-azul-92.png -File168=marker-azul-93.png -File169=marker-azul-94.png -File17=login.bal -File170=marker-azul-95.png -File171=marker-azul-96.png -File172=marker-azul-97.png -File173=marker-azul-98.png -File174=marker-azul-99.png -File175=marker-rojo-0.png -File176=marker-rojo-1.png -File177=marker-rojo-10.png -File178=marker-rojo-100.png -File179=marker-rojo-101.png -File18=Logo_192x192.jpg -File180=marker-rojo-102.png -File181=marker-rojo-103.png -File182=marker-rojo-104.png -File183=marker-rojo-105.png -File184=marker-rojo-106.png -File185=marker-rojo-107.png -File186=marker-rojo-108.png -File187=marker-rojo-109.png -File188=marker-rojo-11.png -File189=marker-rojo-110.png -File19=logo_mariana.jpeg -File190=marker-rojo-111.png -File191=marker-rojo-112.png -File192=marker-rojo-113.png -File193=marker-rojo-114.png -File194=marker-rojo-115.png -File195=marker-rojo-116.png -File196=marker-rojo-117.png -File197=marker-rojo-118.png -File198=marker-rojo-119.png -File199=marker-rojo-12.png +File10=durakelo.png +File100=marker-azul-26.png +File101=marker-azul-27.png +File102=marker-azul-28.png +File103=marker-azul-29.png +File104=marker-azul-3.png +File105=marker-azul-30.png +File106=marker-azul-31.png +File107=marker-azul-32.png +File108=marker-azul-33.png +File109=marker-azul-34.png +File11=engrane.jpg +File110=marker-azul-35.png +File111=marker-azul-36.png +File112=marker-azul-37.png +File113=marker-azul-38.png +File114=marker-azul-39.png +File115=marker-azul-4.png +File116=marker-azul-40.png +File117=marker-azul-41.png +File118=marker-azul-42.png +File119=marker-azul-43.png +File12=fondo_kmt.jpg +File120=marker-azul-44.png +File121=marker-azul-45.png +File122=marker-azul-46.png +File123=marker-azul-47.png +File124=marker-azul-48.png +File125=marker-azul-49.png +File126=marker-azul-5.png +File127=marker-azul-50.png +File128=marker-azul-51.png +File129=marker-azul-52.png +File13=gps20.png +File130=marker-azul-53.png +File131=marker-azul-54.png +File132=marker-azul-55.png +File133=marker-azul-56.png +File134=marker-azul-57.png +File135=marker-azul-58.png +File136=marker-azul-59.png +File137=marker-azul-6.png +File138=marker-azul-60.png +File139=marker-azul-61.png +File14=Hacer pedido.jpg +File140=marker-azul-62.png +File141=marker-azul-63.png +File142=marker-azul-64.png +File143=marker-azul-65.png +File144=marker-azul-66.png +File145=marker-azul-67.png +File146=marker-azul-68.png +File147=marker-azul-69.png +File148=marker-azul-7.png +File149=marker-azul-70.png +File15=hacerpedido30.jpg +File150=marker-azul-71.png +File151=marker-azul-72.png +File152=marker-azul-73.png +File153=marker-azul-74.png +File154=marker-azul-75.png +File155=marker-azul-76.png +File156=marker-azul-77.png +File157=marker-azul-78.png +File158=marker-azul-79.png +File159=marker-azul-8.png +File16=hacerpedido30.png +File160=marker-azul-80.png +File161=marker-azul-81.png +File162=marker-azul-82.png +File163=marker-azul-83.png +File164=marker-azul-84.png +File165=marker-azul-85.png +File166=marker-azul-86.png +File167=marker-azul-87.png +File168=marker-azul-88.png +File169=marker-azul-89.png +File17=intmex_logo_192x192.jpg +File170=marker-azul-9.png +File171=marker-azul-90.png +File172=marker-azul-91.png +File173=marker-azul-92.png +File174=marker-azul-93.png +File175=marker-azul-94.png +File176=marker-azul-95.png +File177=marker-azul-96.png +File178=marker-azul-97.png +File179=marker-azul-98.png +File18=intmex_logo_192x192.png +File180=marker-azul-99.png +File181=marker-rojo-0.png +File182=marker-rojo-1.png +File183=marker-rojo-10.png +File184=marker-rojo-100.png +File185=marker-rojo-101.png +File186=marker-rojo-102.png +File187=marker-rojo-103.png +File188=marker-rojo-104.png +File189=marker-rojo-105.png +File19=intmex_logo_192x192_OLD.jpg +File190=marker-rojo-106.png +File191=marker-rojo-107.png +File192=marker-rojo-108.png +File193=marker-rojo-109.png +File194=marker-rojo-11.png +File195=marker-rojo-110.png +File196=marker-rojo-111.png +File197=marker-rojo-112.png +File198=marker-rojo-113.png +File199=marker-rojo-114.png File2=alerta_amarilla.png -File20=MainPage.bal -File200=marker-rojo-120.png -File201=marker-rojo-121.png -File202=marker-rojo-122.png -File203=marker-rojo-123.png -File204=marker-rojo-124.png -File205=marker-rojo-125.png -File206=marker-rojo-126.png -File207=marker-rojo-127.png -File208=marker-rojo-128.png -File209=marker-rojo-129.png -File21=Malo.jpg -File210=marker-rojo-13.png -File211=marker-rojo-130.png -File212=marker-rojo-131.png -File213=marker-rojo-132.png -File214=marker-rojo-133.png -File215=marker-rojo-134.png -File216=marker-rojo-135.png -File217=marker-rojo-136.png -File218=marker-rojo-137.png -File219=marker-rojo-138.png -File22=mapa_rutas.bal -File220=marker-rojo-139.png -File221=marker-rojo-14.png -File222=marker-rojo-140.png -File223=marker-rojo-141.png -File224=marker-rojo-142.png -File225=marker-rojo-143.png -File226=marker-rojo-144.png -File227=marker-rojo-145.png -File228=marker-rojo-146.png -File229=marker-rojo-147.png -File23=mariana_ico.png -File230=marker-rojo-148.png -File231=marker-rojo-149.png -File232=marker-rojo-15.png -File233=marker-rojo-150.png -File234=marker-rojo-16.png -File235=marker-rojo-17.png -File236=marker-rojo-18.png -File237=marker-rojo-19.png -File238=marker-rojo-2.png -File239=marker-rojo-20.png -File24=marker-azul-0.png -File240=marker-rojo-21.png -File241=marker-rojo-22.png -File242=marker-rojo-23.png -File243=marker-rojo-24.png -File244=marker-rojo-25.png -File245=marker-rojo-26.png -File246=marker-rojo-27.png -File247=marker-rojo-28.png -File248=marker-rojo-29.png -File249=marker-rojo-3.png -File25=marker-azul-1.png -File250=marker-rojo-30.png -File251=marker-rojo-31.png -File252=marker-rojo-32.png -File253=marker-rojo-33.png -File254=marker-rojo-34.png -File255=marker-rojo-35.png -File256=marker-rojo-36.png -File257=marker-rojo-37.png -File258=marker-rojo-38.png -File259=marker-rojo-39.png -File26=marker-azul-10.png -File260=marker-rojo-4.png -File261=marker-rojo-40.png -File262=marker-rojo-41.png -File263=marker-rojo-42.png -File264=marker-rojo-43.png -File265=marker-rojo-44.png -File266=marker-rojo-45.png -File267=marker-rojo-46.png -File268=marker-rojo-47.png -File269=marker-rojo-48.png -File27=marker-azul-100.png -File270=marker-rojo-49.png -File271=marker-rojo-5.png -File272=marker-rojo-50.png -File273=marker-rojo-51.png -File274=marker-rojo-52.png -File275=marker-rojo-53.png -File276=marker-rojo-54.png -File277=marker-rojo-55.png -File278=marker-rojo-56.png -File279=marker-rojo-57.png -File28=marker-azul-101.png -File280=marker-rojo-58.png -File281=marker-rojo-59.png -File282=marker-rojo-6.png -File283=marker-rojo-60.png -File284=marker-rojo-61.png -File285=marker-rojo-62.png -File286=marker-rojo-63.png -File287=marker-rojo-64.png -File288=marker-rojo-65.png -File289=marker-rojo-66.png -File29=marker-azul-102.png -File290=marker-rojo-67.png -File291=marker-rojo-68.png -File292=marker-rojo-69.png -File293=marker-rojo-7.png -File294=marker-rojo-70.png -File295=marker-rojo-71.png -File296=marker-rojo-72.png -File297=marker-rojo-73.png -File298=marker-rojo-74.png -File299=marker-rojo-75.png +File20=itembuttonblue.png +File200=marker-rojo-115.png +File201=marker-rojo-116.png +File202=marker-rojo-117.png +File203=marker-rojo-118.png +File204=marker-rojo-119.png +File205=marker-rojo-12.png +File206=marker-rojo-120.png +File207=marker-rojo-121.png +File208=marker-rojo-122.png +File209=marker-rojo-123.png +File21=kmt.db +File210=marker-rojo-124.png +File211=marker-rojo-125.png +File212=marker-rojo-126.png +File213=marker-rojo-127.png +File214=marker-rojo-128.png +File215=marker-rojo-129.png +File216=marker-rojo-13.png +File217=marker-rojo-130.png +File218=marker-rojo-131.png +File219=marker-rojo-132.png +File22=login.bal +File220=marker-rojo-133.png +File221=marker-rojo-134.png +File222=marker-rojo-135.png +File223=marker-rojo-136.png +File224=marker-rojo-137.png +File225=marker-rojo-138.png +File226=marker-rojo-139.png +File227=marker-rojo-14.png +File228=marker-rojo-140.png +File229=marker-rojo-141.png +File23=Logo_192x192.jpg +File230=marker-rojo-142.png +File231=marker-rojo-143.png +File232=marker-rojo-144.png +File233=marker-rojo-145.png +File234=marker-rojo-146.png +File235=marker-rojo-147.png +File236=marker-rojo-148.png +File237=marker-rojo-149.png +File238=marker-rojo-15.png +File239=marker-rojo-150.png +File24=logo_mariana.jpeg +File240=marker-rojo-16.png +File241=marker-rojo-17.png +File242=marker-rojo-18.png +File243=marker-rojo-19.png +File244=marker-rojo-2.png +File245=marker-rojo-20.png +File246=marker-rojo-21.png +File247=marker-rojo-22.png +File248=marker-rojo-23.png +File249=marker-rojo-24.png +File25=MainPage.bal +File250=marker-rojo-25.png +File251=marker-rojo-26.png +File252=marker-rojo-27.png +File253=marker-rojo-28.png +File254=marker-rojo-29.png +File255=marker-rojo-3.png +File256=marker-rojo-30.png +File257=marker-rojo-31.png +File258=marker-rojo-32.png +File259=marker-rojo-33.png +File26=Malo.jpg +File260=marker-rojo-34.png +File261=marker-rojo-35.png +File262=marker-rojo-36.png +File263=marker-rojo-37.png +File264=marker-rojo-38.png +File265=marker-rojo-39.png +File266=marker-rojo-4.png +File267=marker-rojo-40.png +File268=marker-rojo-41.png +File269=marker-rojo-42.png +File27=mapa_rutas.bal +File270=marker-rojo-43.png +File271=marker-rojo-44.png +File272=marker-rojo-45.png +File273=marker-rojo-46.png +File274=marker-rojo-47.png +File275=marker-rojo-48.png +File276=marker-rojo-49.png +File277=marker-rojo-5.png +File278=marker-rojo-50.png +File279=marker-rojo-51.png +File28=mariana.jpg +File280=marker-rojo-52.png +File281=marker-rojo-53.png +File282=marker-rojo-54.png +File283=marker-rojo-55.png +File284=marker-rojo-56.png +File285=marker-rojo-57.png +File286=marker-rojo-58.png +File287=marker-rojo-59.png +File288=marker-rojo-6.png +File289=marker-rojo-60.png +File29=mariana_ico.png +File290=marker-rojo-61.png +File291=marker-rojo-62.png +File292=marker-rojo-63.png +File293=marker-rojo-64.png +File294=marker-rojo-65.png +File295=marker-rojo-66.png +File296=marker-rojo-67.png +File297=marker-rojo-68.png +File298=marker-rojo-69.png +File299=marker-rojo-7.png File3=anterior.jpg -File30=marker-azul-103.png -File300=marker-rojo-76.png -File301=marker-rojo-77.png -File302=marker-rojo-78.png -File303=marker-rojo-79.png -File304=marker-rojo-8.png -File305=marker-rojo-80.png -File306=marker-rojo-81.png -File307=marker-rojo-82.png -File308=marker-rojo-83.png -File309=marker-rojo-84.png -File31=marker-azul-104.png -File310=marker-rojo-85.png -File311=marker-rojo-86.png -File312=marker-rojo-87.png -File313=marker-rojo-88.png -File314=marker-rojo-89.png -File315=marker-rojo-9.png -File316=marker-rojo-90.png -File317=marker-rojo-91.png -File318=marker-rojo-92.png -File319=marker-rojo-93.png -File32=marker-azul-105.png -File320=marker-rojo-94.png -File321=marker-rojo-95.png -File322=marker-rojo-96.png -File323=marker-rojo-97.png -File324=marker-rojo-98.png -File325=marker-rojo-99.png -File326=marker-verde-0.png -File327=marker-verde-1.png -File328=marker-verde-10.png -File329=marker-verde-100.png -File33=marker-azul-106.png -File330=marker-verde-101.png -File331=marker-verde-102.png -File332=marker-verde-103.png -File333=marker-verde-104.png -File334=marker-verde-105.png -File335=marker-verde-106.png -File336=marker-verde-107.png -File337=marker-verde-108.png -File338=marker-verde-109.png -File339=marker-verde-11.png -File34=marker-azul-107.png -File340=marker-verde-110.png -File341=marker-verde-111.png -File342=marker-verde-112.png -File343=marker-verde-113.png -File344=marker-verde-114.png -File345=marker-verde-115.png -File346=marker-verde-116.png -File347=marker-verde-117.png -File348=marker-verde-118.png -File349=marker-verde-119.png -File35=marker-azul-108.png -File350=marker-verde-12.png -File351=marker-verde-120.png -File352=marker-verde-121.png -File353=marker-verde-122.png -File354=marker-verde-123.png -File355=marker-verde-124.png -File356=marker-verde-125.png -File357=marker-verde-126.png -File358=marker-verde-127.png -File359=marker-verde-128.png -File36=marker-azul-109.png -File360=marker-verde-129.png -File361=marker-verde-13.png -File362=marker-verde-130.png -File363=marker-verde-131.png -File364=marker-verde-132.png -File365=marker-verde-133.png -File366=marker-verde-134.png -File367=marker-verde-135.png -File368=marker-verde-136.png -File369=marker-verde-137.png -File37=marker-azul-11.png -File370=marker-verde-138.png -File371=marker-verde-139.png -File372=marker-verde-14.png -File373=marker-verde-140.png -File374=marker-verde-141.png -File375=marker-verde-142.png -File376=marker-verde-143.png -File377=marker-verde-144.png -File378=marker-verde-145.png -File379=marker-verde-146.png -File38=marker-azul-110.png -File380=marker-verde-147.png -File381=marker-verde-148.png -File382=marker-verde-149.png -File383=marker-verde-15.png -File384=marker-verde-150.png -File385=marker-verde-16.png -File386=marker-verde-17.png -File387=marker-verde-18.png -File388=marker-verde-19.png -File389=marker-verde-2.png -File39=marker-azul-111.png -File390=marker-verde-20.png -File391=marker-verde-21.png -File392=marker-verde-22.png -File393=marker-verde-23.png -File394=marker-verde-24.png -File395=marker-verde-25.png -File396=marker-verde-26.png -File397=marker-verde-27.png -File398=marker-verde-28.png -File399=marker-verde-29.png -File4=carrito.png -File40=marker-azul-112.png -File400=marker-verde-3.png -File401=marker-verde-30.png -File402=marker-verde-31.png -File403=marker-verde-32.png -File404=marker-verde-33.png -File405=marker-verde-34.png -File406=marker-verde-35.png -File407=marker-verde-36.png -File408=marker-verde-37.png -File409=marker-verde-38.png -File41=marker-azul-113.png -File410=marker-verde-39.png -File411=marker-verde-4.png -File412=marker-verde-40.png -File413=marker-verde-41.png -File414=marker-verde-42.png -File415=marker-verde-43.png -File416=marker-verde-44.png -File417=marker-verde-45.png -File418=marker-verde-46.png -File419=marker-verde-47.png -File42=marker-azul-114.png -File420=marker-verde-48.png -File421=marker-verde-49.png -File422=marker-verde-5.png -File423=marker-verde-50.png -File424=marker-verde-51.png -File425=marker-verde-52.png -File426=marker-verde-53.png -File427=marker-verde-54.png -File428=marker-verde-55.png -File429=marker-verde-56.png -File43=marker-azul-115.png -File430=marker-verde-57.png -File431=marker-verde-58.png -File432=marker-verde-59.png -File433=marker-verde-6.png -File434=marker-verde-60.png -File435=marker-verde-61.png -File436=marker-verde-62.png -File437=marker-verde-63.png -File438=marker-verde-64.png -File439=marker-verde-65.png -File44=marker-azul-116.png -File440=marker-verde-66.png -File441=marker-verde-67.png -File442=marker-verde-68.png -File443=marker-verde-69.png -File444=marker-verde-7.png -File445=marker-verde-70.png -File446=marker-verde-71.png -File447=marker-verde-72.png -File448=marker-verde-73.png -File449=marker-verde-74.png -File45=marker-azul-117.png -File450=marker-verde-75.png -File451=marker-verde-76.png -File452=marker-verde-77.png -File453=marker-verde-78.png -File454=marker-verde-79.png -File455=marker-verde-8.png -File456=marker-verde-80.png -File457=marker-verde-81.png -File458=marker-verde-82.png -File459=marker-verde-83.png -File46=marker-azul-118.png -File460=marker-verde-84.png -File461=marker-verde-85.png -File462=marker-verde-86.png -File463=marker-verde-87.png -File464=marker-verde-88.png -File465=marker-verde-89.png -File466=marker-verde-9.png -File467=marker-verde-90.png -File468=marker-verde-91.png -File469=marker-verde-92.png -File47=marker-azul-119.png -File470=marker-verde-93.png -File471=marker-verde-94.png -File472=marker-verde-95.png -File473=marker-verde-96.png -File474=marker-verde-97.png -File475=marker-verde-98.png -File476=marker-verde-99.png -File477=nota.bal -File478=noventa.bal -File479=nuevocliente.bal -File48=marker-azul-12.png -File480=Nvo Cliente.jpg -File481=palomita_verde.png -File482=pedido.bal -File483=planfia_logo.png -File484=principal.bal -File485=proditem.bal -File486=proditempromo.bal -File487=productos.bal -File488=promociones.bal -File489=resdia.bal -File49=marker-azul-120.png -File490=ResDia.jpg -File491=salma.jpg -File492=salma.png -File493=senial.jpg -File494=sync.png -File495=tache_rojo.png -File496=Ticket dia.jpg -File497=ticketsdia.bal -File498=Tiendita.jpg -File499=verde.png -File5=celltitle.bal -File50=marker-azul-121.png -File51=marker-azul-122.png -File52=marker-azul-123.png -File53=marker-azul-124.png -File54=marker-azul-125.png -File55=marker-azul-126.png -File56=marker-azul-127.png -File57=marker-azul-128.png -File58=marker-azul-129.png -File59=marker-azul-13.png -File6=cliente.bal -File60=marker-azul-130.png -File61=marker-azul-131.png -File62=marker-azul-132.png -File63=marker-azul-133.png -File64=marker-azul-134.png -File65=marker-azul-135.png -File66=marker-azul-136.png -File67=marker-azul-137.png -File68=marker-azul-138.png -File69=marker-azul-139.png -File7=clientes.bal -File70=marker-azul-14.png -File71=marker-azul-140.png -File72=marker-azul-141.png -File73=marker-azul-142.png -File74=marker-azul-143.png -File75=marker-azul-144.png -File76=marker-azul-145.png -File77=marker-azul-146.png -File78=marker-azul-147.png -File79=marker-azul-148.png -File8=durakelo.png -File80=marker-azul-149.png -File81=marker-azul-15.png -File82=marker-azul-150.png -File83=marker-azul-16.png -File84=marker-azul-17.png -File85=marker-azul-18.png -File86=marker-azul-19.png -File87=marker-azul-2.png -File88=marker-azul-20.png -File89=marker-azul-21.png -File9=engrane.jpg -File90=marker-azul-22.png -File91=marker-azul-23.png -File92=marker-azul-24.png -File93=marker-azul-25.png -File94=marker-azul-26.png -File95=marker-azul-27.png -File96=marker-azul-28.png -File97=marker-azul-29.png -File98=marker-azul-3.png -File99=marker-azul-30.png +File30=marker-azul-0.png +File300=marker-rojo-70.png +File301=marker-rojo-71.png +File302=marker-rojo-72.png +File303=marker-rojo-73.png +File304=marker-rojo-74.png +File305=marker-rojo-75.png +File306=marker-rojo-76.png +File307=marker-rojo-77.png +File308=marker-rojo-78.png +File309=marker-rojo-79.png +File31=marker-azul-1.png +File310=marker-rojo-8.png +File311=marker-rojo-80.png +File312=marker-rojo-81.png +File313=marker-rojo-82.png +File314=marker-rojo-83.png +File315=marker-rojo-84.png +File316=marker-rojo-85.png +File317=marker-rojo-86.png +File318=marker-rojo-87.png +File319=marker-rojo-88.png +File32=marker-azul-10.png +File320=marker-rojo-89.png +File321=marker-rojo-9.png +File322=marker-rojo-90.png +File323=marker-rojo-91.png +File324=marker-rojo-92.png +File325=marker-rojo-93.png +File326=marker-rojo-94.png +File327=marker-rojo-95.png +File328=marker-rojo-96.png +File329=marker-rojo-97.png +File33=marker-azul-100.png +File330=marker-rojo-98.png +File331=marker-rojo-99.png +File332=marker-verde-0.png +File333=marker-verde-1.png +File334=marker-verde-10.png +File335=marker-verde-100.png +File336=marker-verde-101.png +File337=marker-verde-102.png +File338=marker-verde-103.png +File339=marker-verde-104.png +File34=marker-azul-101.png +File340=marker-verde-105.png +File341=marker-verde-106.png +File342=marker-verde-107.png +File343=marker-verde-108.png +File344=marker-verde-109.png +File345=marker-verde-11.png +File346=marker-verde-110.png +File347=marker-verde-111.png +File348=marker-verde-112.png +File349=marker-verde-113.png +File35=marker-azul-102.png +File350=marker-verde-114.png +File351=marker-verde-115.png +File352=marker-verde-116.png +File353=marker-verde-117.png +File354=marker-verde-118.png +File355=marker-verde-119.png +File356=marker-verde-12.png +File357=marker-verde-120.png +File358=marker-verde-121.png +File359=marker-verde-122.png +File36=marker-azul-103.png +File360=marker-verde-123.png +File361=marker-verde-124.png +File362=marker-verde-125.png +File363=marker-verde-126.png +File364=marker-verde-127.png +File365=marker-verde-128.png +File366=marker-verde-129.png +File367=marker-verde-13.png +File368=marker-verde-130.png +File369=marker-verde-131.png +File37=marker-azul-104.png +File370=marker-verde-132.png +File371=marker-verde-133.png +File372=marker-verde-134.png +File373=marker-verde-135.png +File374=marker-verde-136.png +File375=marker-verde-137.png +File376=marker-verde-138.png +File377=marker-verde-139.png +File378=marker-verde-14.png +File379=marker-verde-140.png +File38=marker-azul-105.png +File380=marker-verde-141.png +File381=marker-verde-142.png +File382=marker-verde-143.png +File383=marker-verde-144.png +File384=marker-verde-145.png +File385=marker-verde-146.png +File386=marker-verde-147.png +File387=marker-verde-148.png +File388=marker-verde-149.png +File389=marker-verde-15.png +File39=marker-azul-106.png +File390=marker-verde-150.png +File391=marker-verde-16.png +File392=marker-verde-17.png +File393=marker-verde-18.png +File394=marker-verde-19.png +File395=marker-verde-2.png +File396=marker-verde-20.png +File397=marker-verde-21.png +File398=marker-verde-22.png +File399=marker-verde-23.png +File4=bus-ar.png +File40=marker-azul-107.png +File400=marker-verde-24.png +File401=marker-verde-25.png +File402=marker-verde-26.png +File403=marker-verde-27.png +File404=marker-verde-28.png +File405=marker-verde-29.png +File406=marker-verde-3.png +File407=marker-verde-30.png +File408=marker-verde-31.png +File409=marker-verde-32.png +File41=marker-azul-108.png +File410=marker-verde-33.png +File411=marker-verde-34.png +File412=marker-verde-35.png +File413=marker-verde-36.png +File414=marker-verde-37.png +File415=marker-verde-38.png +File416=marker-verde-39.png +File417=marker-verde-4.png +File418=marker-verde-40.png +File419=marker-verde-41.png +File42=marker-azul-109.png +File420=marker-verde-42.png +File421=marker-verde-43.png +File422=marker-verde-44.png +File423=marker-verde-45.png +File424=marker-verde-46.png +File425=marker-verde-47.png +File426=marker-verde-48.png +File427=marker-verde-49.png +File428=marker-verde-5.png +File429=marker-verde-50.png +File43=marker-azul-11.png +File430=marker-verde-51.png +File431=marker-verde-52.png +File432=marker-verde-53.png +File433=marker-verde-54.png +File434=marker-verde-55.png +File435=marker-verde-56.png +File436=marker-verde-57.png +File437=marker-verde-58.png +File438=marker-verde-59.png +File439=marker-verde-6.png +File44=marker-azul-110.png +File440=marker-verde-60.png +File441=marker-verde-61.png +File442=marker-verde-62.png +File443=marker-verde-63.png +File444=marker-verde-64.png +File445=marker-verde-65.png +File446=marker-verde-66.png +File447=marker-verde-67.png +File448=marker-verde-68.png +File449=marker-verde-69.png +File45=marker-azul-111.png +File450=marker-verde-7.png +File451=marker-verde-70.png +File452=marker-verde-71.png +File453=marker-verde-72.png +File454=marker-verde-73.png +File455=marker-verde-74.png +File456=marker-verde-75.png +File457=marker-verde-76.png +File458=marker-verde-77.png +File459=marker-verde-78.png +File46=marker-azul-112.png +File460=marker-verde-79.png +File461=marker-verde-8.png +File462=marker-verde-80.png +File463=marker-verde-81.png +File464=marker-verde-82.png +File465=marker-verde-83.png +File466=marker-verde-84.png +File467=marker-verde-85.png +File468=marker-verde-86.png +File469=marker-verde-87.png +File47=marker-azul-113.png +File470=marker-verde-88.png +File471=marker-verde-89.png +File472=marker-verde-9.png +File473=marker-verde-90.png +File474=marker-verde-91.png +File475=marker-verde-92.png +File476=marker-verde-93.png +File477=marker-verde-94.png +File478=marker-verde-95.png +File479=marker-verde-96.png +File48=marker-azul-114.png +File480=marker-verde-97.png +File481=marker-verde-98.png +File482=marker-verde-99.png +File483=nota.bal +File484=noventa.bal +File485=nuevocliente.bal +File486=nuevocliente.jpg +File487=nuevo-cliente20.png +File488=Nvo Cliente.jpg +File489=palomita_verde.png +File49=marker-azul-115.png +File490=pedido.bal +File491=planfia_logo.png +File492=principal.bal +File493=proditem.bal +File494=proditempromo.bal +File495=productos.bal +File496=promociones.bal +File497=resdia.bal +File498=ResDia.jpg +File499=resdia20.png +File5=carrito.png +File50=marker-azul-116.png +File500=resumendia.jpg +File501=salma.jpg +File502=salma.png +File503=senial.jpg +File504=sync.png +File505=tache_rojo.png +File506=Ticket dia.jpg +File507=ticketdia20.jpg +File508=ticketdia20.png +File509=ticketsdia.bal +File51=marker-azul-117.png +File510=Tiendita.jpg +File511=verde.png +File52=marker-azul-118.png +File53=marker-azul-119.png +File54=marker-azul-12.png +File55=marker-azul-120.png +File56=marker-azul-121.png +File57=marker-azul-122.png +File58=marker-azul-123.png +File59=marker-azul-124.png +File6=celltitle.bal +File60=marker-azul-125.png +File61=marker-azul-126.png +File62=marker-azul-127.png +File63=marker-azul-128.png +File64=marker-azul-129.png +File65=marker-azul-13.png +File66=marker-azul-130.png +File67=marker-azul-131.png +File68=marker-azul-132.png +File69=marker-azul-133.png +File7=cliente.bal +File70=marker-azul-134.png +File71=marker-azul-135.png +File72=marker-azul-136.png +File73=marker-azul-137.png +File74=marker-azul-138.png +File75=marker-azul-139.png +File76=marker-azul-14.png +File77=marker-azul-140.png +File78=marker-azul-141.png +File79=marker-azul-142.png +File8=clientes.bal +File80=marker-azul-143.png +File81=marker-azul-144.png +File82=marker-azul-145.png +File83=marker-azul-146.png +File84=marker-azul-147.png +File85=marker-azul-148.png +File86=marker-azul-149.png +File87=marker-azul-15.png +File88=marker-azul-150.png +File89=marker-azul-16.png +File9=desvanecido.png +File90=marker-azul-17.png +File91=marker-azul-18.png +File92=marker-azul-19.png +File93=marker-azul-2.png +File94=marker-azul-20.png +File95=marker-azul-21.png +File96=marker-azul-22.png +File97=marker-azul-23.png +File98=marker-azul-24.png +File99=marker-azul-25.png FileGroup1=Default Group FileGroup10=Default Group FileGroup100=Default Group @@ -944,7 +956,19 @@ FileGroup498=Default Group FileGroup499=Default Group FileGroup5=Default Group FileGroup50=Default Group +FileGroup500=Default Group +FileGroup501=Default Group +FileGroup502=Default Group +FileGroup503=Default Group +FileGroup504=Default Group +FileGroup505=Default Group +FileGroup506=Default Group +FileGroup507=Default Group +FileGroup508=Default Group +FileGroup509=Default Group FileGroup51=Default Group +FileGroup510=Default Group +FileGroup511=Default Group FileGroup52=Default Group FileGroup53=Default Group FileGroup54=Default Group @@ -1033,7 +1057,7 @@ Library6=bctoast Library7=bitmapcreator Library8=byteconverter Library9=camera -ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'AddApplicationText(~\n~')~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~AddApplicationText(~\n~~\n~ ~\n~ )~\n~ ~\n~ AddManifestText(~\n~ ~\n~ )~\n~ ~\n~ 'Para que se registre para abrir bases de datos~\n~ AddActivityText(main,~\n~~\n~~\n~~\n~~\n~)~\n~ +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'AddApplicationText(~\n~')~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~)~\n~''CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~ AddManifestText(~\n~~\n~)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(~\n~~\n~)~\n~AddManifestText(~\n~~\n~) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~~\n~'///////////////////////// FLP Y PUSH /////////////~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~' CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~' CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~ SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'//////////////////////////////////////////////////////~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~AddApplicationText(~\n~~\n~ ~\n~ )~\n~ ~\n~ AddManifestText(~\n~ ~\n~ )~\n~ ~\n~ Module1=appUpdater Module10=C_NuevoCliente Module11=C_Pedidos @@ -1041,20 +1065,19 @@ Module12=C_Principal Module13=C_Productos Module14=C_Promos Module15=C_RespaldoDiario -Module16=C_Subs_XXX +Module16=C_Subs Module17=C_TicketsDia Module18=C_UpdateAvailable Module19=CameraExClass2 Module2=B4XMainPage Module20=DBRequestManager Module21=FileHandler -Module22=kms_helperSubs -Module23=ManageExternalStorage -Module24=MAPA_RUTAS -Module25=NotificationService -Module26=Starter -Module27=Subs -Module28=Tracker +Module22=ManageExternalStorage +Module23=MAPA_RUTAS +Module24=NotificationService +Module25=Starter +Module26=Subs +Module27=Tracker Module3=BatteryUtilities Module4=C_Cliente Module5=C_Clientes @@ -1062,15 +1085,15 @@ Module6=C_Historico Module7=C_Mapas Module8=C_Nota Module9=C_NoVenta -NumberOfFiles=499 +NumberOfFiles=511 NumberOfLibraries=35 -NumberOfModules=28 -Version=12.8 +NumberOfModules=27 +Version=12.5 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Mariana #VersionCode: 1 - #VersionName: 4.05.16 + #VersionName: 4.04.24 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Mariana.b4a.meta b/B4A/Mariana.b4a.meta index 7e5c0e1..0c2d9cc 100644 --- a/B4A/Mariana.b4a.meta +++ b/B4A/Mariana.b4a.meta @@ -19,7 +19,6 @@ ModuleBookmarks24= ModuleBookmarks25= ModuleBookmarks26= ModuleBookmarks27= -ModuleBookmarks28= ModuleBookmarks3= ModuleBookmarks4= ModuleBookmarks5= @@ -48,7 +47,6 @@ ModuleBreakpoints24= ModuleBreakpoints25= ModuleBreakpoints26= ModuleBreakpoints27= -ModuleBreakpoints28= ModuleBreakpoints3= ModuleBreakpoints4= ModuleBreakpoints5= @@ -77,7 +75,6 @@ ModuleClosedNodes24= ModuleClosedNodes25= ModuleClosedNodes26= ModuleClosedNodes27= -ModuleClosedNodes28= ModuleClosedNodes3= ModuleClosedNodes4=2 ModuleClosedNodes5= @@ -85,6 +82,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=Starter,Service_Start,50,2,Starter,Process_Globals,32,1,Starter,Service_Create,37,2,B4XMainPage,B_SERVER_Click,728,1,B4XMainPage,i_engrane_Click,714,0,B4XMainPage,b_importarBD_Click,787,0,B4XMainPage,b_envioBD_Click,766,5,Visual Designer,login.bal,-100,3,B4XMainPage,B4XPage_Appear,296,0,B4XMainPage,B4XPage_Created,282,0 +NavigationStack=C_Nota,b_desc_Click,231,0,C_Nota,B4XPage_Appear,105,0,B4XMainPage,B4XPage_Created,173,0,Main,Activity_KeyPress,42,0,C_Principal,Class_Globals,0,0,C_Principal,p_marcascodigo_Click,2567,0,C_Principal,checaPedido,2568,0,C_Principal,B4XPage_Appear,312,0,C_Principal,B_OK_PAS_Click,2024,0,Main,Activity_ActionBarHomeClick,37,0,Main,Globals,24,0 SelectedBuild=0 -VisibleModules=2,12,4,5,6,27,22,10,28,26,16 +VisibleModules=2,12,4,5,6,26,10,27,25,8 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index 1171fc7..d262105 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -16,7 +16,7 @@ Sub Process_Globals Dim skmt As SQL Dim ph As Phone Public rp As RuntimePermissions - Dim kh As kms_helperSubs + Dim s As C_Subs Public FLP As FusedLocationProvider ' Private flpStarted As Boolean Dim reqManager As DBRequestManager @@ -40,8 +40,8 @@ End Sub Sub Service_Create 'This is the program entry point. 'This is a good place to load resources that are not specific to a single activity. - kh.Initialize(Me, "Subs") 'Inicializamos la clase Subs - skmt = kh.inicializaBD(File.DirInternal, "kmt.db") + s.Initialize(Me, "Subs") 'Inicializamos la clase Subs + skmt = s.inicializaBD(File.DirInternal, "kmt.db") gps.Initialize("GPS") Timer1.Initialize("Timer1", Interval * 1000) Timer1.Enabled = True @@ -56,7 +56,7 @@ End Sub Sub Service_Start (StartingIntent As Intent) Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases. Subs.revisaBD - If kh.traeDBReqServerDeBD(skmt) <> "N/A" Then DBReqServer = kh.traeDBReqServerDeBD(skmt) + If s.traeDBReqServerDeBD(skmt) <> "N/A" Then DBReqServer = s.traeDBReqServerDeBD(skmt) reqManager.Initialize(Me, DBReqServer) ' StartService(NotificationService) End Sub diff --git a/B4A/kms_helperSubs.bas b/B4A/kms_helperSubs.bas deleted file mode 100644 index 9ac3dab..0000000 --- a/B4A/kms_helperSubs.bas +++ /dev/null @@ -1,654 +0,0 @@ -B4A=true -Group=Default Group -ModulesStructureVersion=1 -Type=Class -Version=12.8 -@EndOfDesignText@ -Sub Class_Globals - 'These global variables will be declared once when the application starts. - 'These variables can be accessed from all modules. -' Public GZip As GZipStrings 'Usa la libreria CompressStrings -' Private su As StringUtils 'Usa la libreria StringUtils - Dim reqManager As DBRequestManager - Private EventName As String 'ignore - Private CallBack As Object 'ignore - Dim phn As Phone - Dim devModel As String - Dim db, kmt, errorLog As SQL 'Requiere la libreria "SQL" 'ignore - Dim ssid As String 'ignore - Dim reqsList As List - Dim reqError As Boolean = False - Private subsLogs As Boolean = False - Dim in As Intent - Dim intentUsado As Boolean = False -End Sub - -'You can add more parameters here. -Public Sub Initialize (vCallback As Object, vEventName As String) As Object - reqsList.Initialize - EventName = vEventName - CallBack = vCallback - db = dbInit - reqManager = reqManagerInit - Return Me -End Sub - -'Inicializa la BD con "kmt.db" en File.DirInternal, si el archivo no existe, lo copia desde File.DirAssets. -'Dispara el evento "dbOk" cuando termina. -Sub dbInit As SQL - If File.Exists(File.DirInternal, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") - db.Initialize(File.DirInternal,"kmt.db", True) - dbOk(True) -' Log(db.IsInitialized) - Return db -End Sub - -Sub dbOk(Success As Boolean) - If SubExists(CallBack, EventName & "_dbOk") Then - CallSub2(CallBack, EventName & "_dbOk", Success) - End If -End Sub - -'Inicializamos el DBReqServer. -Sub reqManagerInit As DBRequestManager - Private rm As DBRequestManager - rm.Initialize(Me, traeDBReqServerDeBD(db)) - Log($"Inicializamos reqManager con ${traeDBReqServerDeBD(db)}"$) - Return rm -End Sub - -'Reinicializamos el DBReqServer de C_Subs. -Sub reqManagerReInit - Log("reqManager ReInit") - reqManager = reqManagerInit -End Sub - -Sub envioTest - reqsList.Initialize ' Ponemos la lista de DBRequests en cero. - Private cmd As DBCommand - cmd.Initialize - cmd.Name = "select_fecha" - For i = 0 To 50 -' Sleep(200) - reqManager.ExecuteQuery(cmd, 0, $"select_fecha_${i}"$) - reqsList.Add($"select_fecha_${i}"$) - Next -End Sub - -'Dispara el evento "_envioOk" del caller. -Sub envioOk(Success As Boolean) -' Log($"_ENVIOOK_"$) - If SubExists(CallBack, EventName & "_envioOk") Then - CallSub2(CallBack, EventName & "_envioOk", Success) - End If -End Sub - -Sub JobDone(Job As HttpJob) - LogColor("C_SUBS JOBDONE - " & Job.Success, Colors.Red) - If Job.Success = False Then - Log($"Error en el request ${Job.Tag}"$) - LogColor("** " & Job.Tag & " Error: " & Job.ErrorMessage, Colors.Red) - If reqsList.IndexOf(Job.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(Job.Tag)) - reqError = True - Else - If Job.JobName = "DBRequest" Then - Dim resultado As DBResult = reqManager.HandleJob(Job) - If reqsList.IndexOf(resultado.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(resultado.Tag)) - If resultado.Tag = "select_fecha" Then - For Each records() As Object In resultado.Rows - For Each k As String In resultado.Columns.Keys - Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) - Next - Next - End If - End If - End If - Log(reqsList.Size) - If reqsList.Size = 0 Then 'Ya no hay DBReqs pendientes. - Log(reqError) - If Not(reqError) Then - envioOk(True) - Else - envioOk(False) - End If - reqError = False - Log("-= FIN =-") - End If - Job.Release -End Sub - -'Pone el valor de phn.Model en la variable global "devModel" -Sub getPhnId As String 'ignore - 'Requiere la libreria "Phone" - devModel = phn.Model - If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... - Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" - devModel = t - End If - If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model - File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId -' Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") - Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt - Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") - devModel = s -' Log("Leemos id de "&File.DirInternal&"/phnId.txt") -' Log(devModel) - End If - Return devModel -End Sub - -'Convierte una fecha al formato yyMMddHHmmss -Sub fechaKMT(fecha As String) As String 'ignore -' Log(fecha) - Dim OrigFormat As String = DateTime.DateFormat 'save orig date format - DateTime.DateFormat="yyMMddHHmmss" - Dim nuevaFecha As String=DateTime.Date(fecha) - DateTime.DateFormat=OrigFormat 'return to orig date format -' Log(nuevaFecha) - Return nuevaFecha -End Sub - -'Escribimos las coordenadas y fecha a un archivo de texto -Sub guardaInfoEnArchivo(coords As String) 'ignore - ' Cambiamos el formato de la hora - Dim OrigFormat As String=DateTime.DateFormat 'save orig date format - DateTime.DateFormat="MMM-dd HH:mm:ss" - Dim lastUpdate As String=DateTime.Date(DateTime.Now) - DateTime.DateFormat=OrigFormat 'return to orig date format - - Dim ubic As String = coords&","&lastUpdate - Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", True) - Dim s As String = ubic & CRLF - Dim t() As Byte = s.GetBytes("UTF-8") - out.WriteBytes(t, 0, t.Length) - out.Close -End Sub - -'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD -Sub guardaInfoEnBD(coords As String) 'ignore - Log("Guardamos ubicacion en BD - "&coords) - Try - Dim latlon() As String = Regex.Split("\|", coords) - If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" - If subsLogs Then Log("LatLon="&latlon) - kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) - Catch - LogColor(LastException, Colors.red) - End Try -End Sub - -'Limpiamos la tabla RUTA_GPS de la BD -Sub deleteGPS_DB 'ignore - kmt.ExecNonQuery("delete from RUTA_GPS") - kmt.ExecNonQuery("vacuum;") - ToastMessageShow("Borramos BD Coords GPS", False) -End Sub - -'Limpiamos la tabla errorLog de la BD -Sub deleteErrorLog_DB 'ignore - errorLog.ExecNonQuery("delete from errores") - errorLog.ExecNonQuery("vacuum;") - ToastMessageShow("BD Errores Borrada", False) -End Sub - -'Mandamos "coords" en un mensaje a "Sprvsr" -'Sub mandamosLoc(coords As String) 'ignore -'' Log("Iniciamos mandamosLoc "&coords) -'' Log("locRequest="&Tracker.locRequest) -' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd -' Dim t As String -' If Tracker.locRequest="Activa" Then -' If PushService.au = 1 Then -' t = "au" ' es una actualizacion -' Else -' t = "u" ' es una peticion -' End If -' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery, "mt":Main.montoActual) -' CallSub2(PushService, "mandaMensaje",params) -' Tracker.locRequest="Enviada" -' CallSubDelayed(Tracker,"CreateLocationRequest") -' End If -'End Sub - -'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" -Sub fechaInicioHoy As String 'ignore - Dim OrigFormat As String = DateTime.DateFormat 'save orig date format - DateTime.DateFormat="yyMMdd" - Private h As String = DateTime.Date(DateTime.Now)&"000000" - DateTime.DateFormat=OrigFormat 'return to orig date format - Log("Hoy="&h) - Return h -End Sub - -'Guardamos "texto" a la bitacora -Sub log2DB(texto As String) 'ignore - LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.LightGray) - kmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) -End Sub - -'Regresa verdadero si ya pasaron XX minutos de la fecha dada -Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore - If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then - Return True - Else - Return False - End If -End Sub - -'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada -Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore - Try - ' LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) - If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then - ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) - Return True - Else - ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) - Return False - End If - Catch - Log(LastException) - End Try -End Sub - -'Limpiamos la tabla "bitacora" de la BD -Sub borraLogDB 'ignore - LogColor("Borramos BD de log", Colors.Magenta) - kmt.ExecNonQuery("delete from bitacora") - kmt.ExecNonQuery("vacuum;") -End Sub - -'Monitoreamos los servicios para ver si estan activos (No pausados), y si no, los reniciamos -'Sub Monitor 'ignore -' Private monitorStatus As Boolean = True -' LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) -' If IsPaused(Tracker) Then -' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") -' StartService(Tracker) -' monitorStatus = False -' Else -' CallSubDelayed(Tracker, "revisaFLP") -' End If -' If IsPaused(PushService) Then -' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") -' StartService(PushService) -' monitorStatus = False -' Else -' revisaPushService -' End If -' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) -'End Sub - -'Convierte una fecha en formato YYMMDDHHMMSS a Ticks -Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore - Try - If fKMT.Length = 12 Then - Private parteFecha As String = fKMT.SubString2(0,6) - Private parteHora As String = fKMT.SubString(6) - Private OrigFormat As String = DateTime.DateFormat 'save original date format - DateTime.DateFormat="yymmdd" - DateTime.TimeFormat="HHmmss" - Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) - DateTime.DateFormat=OrigFormat 'return to original date format - Return ticks - Else - Log("Formato de fecha incorrecto, debe de ser 'YYMMDDHHMMSS', no '"&fKMT&"' largo="&fKMT.Length) - Return 0 - End If - Catch - Log(LastException) - LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) - Return 0 - End Try -End Sub - -Sub InstallAPK(dir As String, apk As String) 'ignore - If File.Exists(dir, apk) Then - Dim i As Intent - i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) - i.SetType("application/vnd.android.package-archive") - StartActivity(i) - End If -End Sub - -'Copia la base de datos del almacenamiento interno al externo en el directorio kmts. -Sub copiaDB(result As Boolean) 'ignore - ToastMessageShow("copiaDB", False) - If result Then - Dim p As String - If File.ExternalWritable Then - p = File.DirInternal -' Log("Externo") - Else - p = File.DirInternal -' Log("Interno") - End If - Dim theDir As String - Try - File.MakeDir(File.DirInternal,"kmts") - theDir = "/kmts" - Catch - theDir = "" - End Try - Try - File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir,"cedex_kmt.db") - File.Copy(File.DirInternal,"errorLog.db",File.DirInternal&theDir,"cedex_errorLog.db") - ToastMessageShow("BD copiada!", False) - Catch - ToastMessageShow("No se pudo hacer la copia: "&LastException, True) - End Try - Log("rootExternal="&p) - Log("File.DirInternal="&File.DirInternal) - Log("File.DirInternal="&File.DirInternal) - Else - ToastMessageShow("Sin permisos", False) - End If -End Sub - -'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados. -Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore - panel.BringToFront - panel.Visible = True - panel.Top = top - panel.Left = left -End Sub - -'Centra una etiqueta dentro de un elemento superior. -Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Centra un panel horizontalmente dentro de un elemento superior. -Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Centra un panel verticalmente dentro de un elemento superior. -Sub centraPanelV(elemento As Panel, altoElementoSuperior As Int) 'ignore - elemento.Top = Round(altoElementoSuperior/2)-(elemento.Height/2) -End Sub - -'Centra una barra de progreso dentro de un elemento superior. -Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore - elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) -End Sub - -'Regresa la fecha en el formato "MM/dd/yyyy" -Sub traeFecha As String 'ignore - DateTime.DateFormat = "MM/dd/yyyy" - Private sDate As String = DateTime.Date(DateTime.Now) - Private sTime As String = DateTime.Time(DateTime.Now) - Return sDate & sTime -End Sub - -'Guarda el nombre y version de la app en CAT_VARIABLES. -Sub guardaAppInfo(skmt As SQL) 'ignore - skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'") - skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$) - skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_VERSION', '${Application.VersionName}')"$) -End Sub - -'Muestra en el Log los campos y valores que regresan en el JobDone. -Sub logJobDoneResultados(resultado As DBResult) 'ignore - For Each records() As Object In resultado.Rows - LogColor($"====== ${resultado.Tag} - REGISTROS = ${resultado.Rows.Size}"$, Colors.RGB(215,37,0)) - For Each k As String In resultado.Columns.Keys - LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0)) - Next - Next -End Sub - -'Regresa la base de datos especificada ya inicializada. -Sub inicializaBD(ruta As String, BDName As String) As SQL 'ignore - Dim skmt As SQL - If File.Exists(ruta, BDName) = False Then - File.Copy(File.DirAssets, BDName, ruta, BDName) - LogColor($"Copiamos ${BDName} de ${File.DirAssets} a ${ruta}"$,Colors.Green) - End If - skmt.Initialize(ruta, BDName, True) - Return skmt -End Sub - -'Agrega una columna a la tabla especificada. -'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) -'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") -Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore - Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla - Private c As Cursor = db.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) - c.Position = 0 - If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos - db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) - Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) - End If - Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch - Try - db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) - Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) - Catch - Log(LastException) - End Try - End Try -End Sub - -'Regresa el DBReqServer desde CAT_VARIABLES o "N/A" si no existe. -Sub traeDBReqServerDeBD(dbx As SQL) As String 'ignore - Dim srvr As String = "N/A" - Dim rs As ResultSet = dbx.ExecQuery("select CAT_VA_VALOR from cat_variables where CAT_VA_DESCRIPCION = 'SERVER'") - If rs.RowCount > 0 Then - rs.NextRow - srvr = rs.GetString("CAT_VA_VALOR") - End If - Return srvr -End Sub - -'Regresa el valor de intervalo desde CAT_VARIABLES o "30" si no existe. -Sub traeIntervaloDeBD As String 'ignore - Dim intrvl As String = "30" - Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'intervalo'") - If rs.RowCount > 0 Then - rs.NextRow - intrvl = rs.GetString("valor") - End If - Return intrvl -End Sub - -'Regresa el valor timeout desde CAT_VARIABLES o "9000" si no existe. -Sub traeTimeoutDeBD As String 'ignore - Dim tmout As String = "9000" - Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'timeout'") - If rs.RowCount > 0 Then - rs.NextRow - tmout = rs.GetString("valor") - End If - Return tmout -End Sub - -'Crea una notificación con el "body" dado y regresa el objeto. -Sub CreateNotification (Body As String) As Notification 'ignore - Dim notification As Notification - notification.Initialize2(notification.IMPORTANCE_LOW) - notification.Icon = "icon" - notification.SetInfo("Tester", Body, Main) - Return notification -End Sub - -'Genera una notificacion con importancia alta -Sub notiHigh(title As String, body As String, id As String, activity As Object) 'ignore - activity = Main - Private notif As Notification - notif.Initialize2(notif.IMPORTANCE_HIGH) - notif.Icon = "icon" - notif.Vibrate = False - notif.Sound = False - notif.AutoCancel = True -' If logger Then Log("notiHigh: "&title) - notif.SetInfo(title, body, activity) -' Log("notiHigh SetInfo") - notif.Notify(id) -End Sub - -'Regresa el objeto de una notificacion con importancia baja -Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore - Private notification As Notification - notification.Initialize2(notification.IMPORTANCE_LOW) -' Log("notiLowReturn: "&title) - notification.Icon = "icon" - notification.Sound = False - notification.Vibrate = False - notification.SetInfo(title, Body, Main) - notification.Notify(id) -' Log("notiLowReturn SetInfo") - Return notification -End Sub - -'Regresa el almacen actual de la base de datos. -Sub traeAlmacen As String 'ignore - Private c As Cursor - Private a As String - c = db.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") - c.Position = 0 - a = C.GetString("ID_ALMACEN") - c.Close - Return a -End Sub - -'Regresa la ruta actual de la base de datos. -Sub traeRuta As String 'ignore - Private c As Cursor - Private r As String - c = db.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") - r = "0" - If c.RowCount > 0 Then - c.Position=0 - r = c.GetString("CAT_CL_RUTA") - End If - c.Close - Return r -End Sub - -'Mandamos los pedidos pendientes (pc_envio_ok <> 1). -Sub mandaPendientes 'ignore - Private logger As Boolean = False - 'PEDIDO_CLIENTE (Pendientes) - Private c As Cursor = db.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE where pc_envio_ok <> 1") - If logger Then Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) - Private almacen As String = traeAlmacen - Private ruta As String = traeRuta - If c.RowCount>0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "DELETE_PEDIDO_MARDS_PC" - cmd.Parameters = Array As Object(almacen, ruta, c.GetString("PC_CLIENTE") ) - reqManager.ExecuteCommand(cmd , "DEL_PC") - - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "insert_pedidos_MARDS" - If logger Then Log($"${c.GetString("PC_CLIENTE")}, ${almacen}"$) - 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, ruta, C.GetString("PC_COSTO_SIN"), C.GetString("PC_FACTURA")) - reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_head_${c.GetString("PC_CLIENTE")}"$) - Next - End If - - 'PEDIDO (Pendientes) - c=Starter.skmt.ExecQuery("SELECT PC_ENVIO_OK, 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 FROM pedido_cliente left join PEDIDO where pc_cliente = pe_cliente and pc_envio_ok <> 1") - If logger Then Log($"Pedido PENDIENTE: ${c.RowCount}"$) - If c.RowCount>0 Then - For i = 0 To c.RowCount - 1 - c.Position = i - Dim cmd As DBCommand - - cmd.Initialize - cmd.Name = "DELETE_PEDIDO_MARDS_PE" - cmd.Parameters = Array As Object(almacen, ruta,c.GetString("PE_CLIENTE") ) - reqManager.ExecuteCommand(cmd , "DEL_PE") - - cmd.Initialize - cmd.Name = "insert_pedido_MARDS" - 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")) - reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}"$) - Next - End If - - 'ABONOS - Dim ab As Cursor = db.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$) - If logger Then Log(ab.RowCount) - If ab.RowCount > 0 Then - For i = 0 To ab.RowCount - 1 - ab.Position = i - Dim cmd As DBCommand - cmd.Initialize - cmd.Name = "insert_abono_MARDS" - cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha") ) - reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) - If logger Then Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) - Next - End If - ab.Close -End Sub - -'Borra el pedido del cliente actual. -'Borra los registros de la tabla "pedido" y "pedido_cliente" -'Actualiza las tablas "cat_gunaprod" y "kmt_info". -Sub borraPedidoClienteActual As String - Private thisC As Cursor - thisC=Starter.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") - If thisC.RowCount>0 Then - For i=0 To thisC.RowCount -1 - thisC.Position=i - Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(thisC.GetString("PE_CANT"),thisC.GetString("PE_PROID"))) - Starter.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1)) - Next - End If - Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") - Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") - Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") - Return 1 -End Sub - -'Regresa si se debe de usar el intent de importar la base d datos desde Whatsapp. -Sub traeUsarIntentBDWA As Boolean 'ignore - Private BDWA As Boolean = False - Private x As Cursor = Starter.skmt.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'"$) - If x.RowCount > 0 Then - x.Position = 0 - If x.GetString("CAT_VA_VALOR") = "true" Then BDWA = True - End If -' Log($"cb_importarBDWA = ${BDWA}"$) - Return BDWA -End Sub - -' Se revisa si hay una intención (intent) de abrir una base de datos y si es así, entonces se importa esa base de datos. -Sub importaBDDesdeWhatsApp - Private tmpBDWA As Boolean = traeUsarIntentBDWA - If Not(in.IsInitialized) Then in = B4XPages.GetNativeParent(B4XPages.MainPage).GetStartingIntent ' Si se usa esta funcion en Mainpage, se pone "Me" en lugar de B4XPages.MainPage. - If Not(intentUsado) And in <> Null Then -' Log(in) - intentUsado = True -' Log(in.As(String)) - If in.GetData <> Null Then - Dim XmlData As String - XmlData = in.GetData - Try - Dim OutStr As OutputStream = File.OpenOutput(File.DirInternal,"kmt.db",False) - Dim InStr As InputStream = File.OpenInput("ContentDir",XmlData) - File.Copy2(InStr,OutStr) - LogColor("BD copiada a interna.", Colors.Blue) - OutStr.Close - If in.As(String).Contains("whatsapp") Then ToastMessageShow("BD cargada desde Whatsapp", False) - Catch - Log(LastException) - End Try -' ExitApplication - db.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'IMPORTAR_BD_WA'") - db.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('IMPORTAR_BD_WA', '${tmpBDWA}')"$) - Private a As Cursor = db.ExecQuery($"select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'APP_NAME'"$) - If a.RowCount > 0 Then - a.Position = 0 - ToastMessageShow($"BD de "${a.GetString("CAT_VA_VALOR")}" cargada."$, True) - End If - End If - End If -End Sub \ No newline at end of file