From d4cfc2bf68a5f3ee2df745c2d9b2d473b0aa7b7c Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Sat, 21 Oct 2023 15:23:06 -0600 Subject: [PATCH] =?UTF-8?q?21/10/23=20-=20Importaci=C3=B3n=20de=20BD=20en?= =?UTF-8?q?=20engrane.=20-=20Se=20agreg=C3=B3=20en=20el=20engrane,=20la=20?= =?UTF-8?q?opci=C3=B3n=20de=20importar=20una=20base=20de=20datos,=20el=20b?= =?UTF-8?q?ot=C3=B3n=20solo=20aparece=20cuando=20en=20el=20campo=20de=20us?= =?UTF-8?q?uario=20esta=20el=20texto=20"KMTS1".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 26 ++++++- B4A/C_CheckList.bas | 2 +- B4A/C_Cliente.bas | 8 +- B4A/C_Principal.bas | 19 ++++- B4A/FileHandler.bas | 162 ++++++++++++++++++++++++++++++++++++++++ B4A/Files/login.bal | Bin 15183 -> 16137 bytes B4A/Files/principal.bal | Bin 68639 -> 69054 bytes B4A/KelloggsV4.b4a | 23 +++--- B4A/KelloggsV4.b4a.meta | 11 ++- B4A/Starter.bas | 2 +- B4A/Subs.bas | 4 +- B4A/kms_helperSubs.bas | 6 +- 12 files changed, 232 insertions(+), 31 deletions(-) create mode 100644 B4A/FileHandler.bas diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 124397c..7b24e8c 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -20,7 +20,6 @@ Version=9.85 '########################################################################################################### #End Region - 'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\ Sub Class_Globals @@ -102,10 +101,13 @@ Sub Class_Globals Private et_cargaLocal As EditText Private b_cargaLocalOk As Button Private b_cargaLocalCancelar As Button + Private p_botones As Panel + Private b_importarBD As Button End Sub Public Sub Initialize B4XPages.GetManager.LogEvents = True + kh.Initialize(Me, "kh") #if not(DEBUG) Starter.logger = False #end if @@ -117,7 +119,6 @@ Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 ' Root.LoadLayout("MainPage") Root.LoadLayout("login") - kh.Initialize(Me, "kh") B4XPages.SetTitle(Me, "Kelloggs Preventa") login.Initialize B4XPages.AddPage("Login", login) @@ -151,7 +152,6 @@ Private Sub B4XPage_Created (Root1 As B4XView) B4XPages.AddPage("CheckList", checklist) Panel1.Top = 0 : Panel1.left = 0 ruta = Starter.ruta - ruta = File.DirInternal Starter.tiempos.Initialize Dim sDate, sTime As String DateTime.DateFormat = "yyyyMMdd" @@ -170,7 +170,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_EXHIBIDORES2 (HIST_EX_ID_CLIENTE TEXT, HIST_EX_TIPO TEXT, HIST_EX_CANT TEXT)") Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_PROMO_WHATS(HIST_CLIENTE TEXT, HIST_RESPUESTA_PROMO)") Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_RMI(CAT_GP_ID TEXT,CAT_GP_NOMBRE TEXT,CAT_GP_PRECIO TEXT)") - Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS BITACORAGPS(usuariob TEXT, almacenb TEXT, rutab TEXT, eventob TEXT, clienteb TEXT, iniciob TEXT, finb TEXT, latitudb TEXT, longitudb TEXT, precision TEXT, motivonoventa TEXT, motivonovisita TEXT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS BITACORAGPS(fechab TEXT, usuariob TEXT, almacenb TEXT, rutab TEXT, eventob TEXT, clienteb TEXT, iniciob TEXT, finb TEXT, latitudb TEXT, longitudb TEXT, precision TEXT, motivonoventa TEXT, motivonovisita TEXT)") ''' PARA LO DE DOE--- Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GUNAPROD_DOE (CAT_GP_ID TEXT,CAT_GP_NOMBRE TEXT,CAT_GP_IMP1 TEXT,CAT_GP_IMP2 TEXT,CAT_GP_PRECIO TEXT,CAT_GP_CLASIF TEXT,CAT_GP_STS TEXT,CAT_GP_TIPO TEXT,CAT_GP_SUBTIPO TEXT,CAT_GP_IMG TEXT,CAT_GP_ALMACEN TEXT,CAT_GP_TIPOPROD TEXT,CAT_GP_INICIATIVA TEXT,CAT_GP_DEV TEXT,CAT_GP_CODPROMO TEXT)") @@ -179,6 +179,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER") kh.agregaColumna(Starter.skmt, "USUARIOA", "FECHA", "TEXT") + kh.guardaAppInfo(Starter.skmt) ' Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna "IMPRESION" en la tabla ' c=Starter.skmt.ExecQuery("SELECT COUNT(*) AS fCol FROM pragma_table_info('kmt_info') WHERE name='IMPRESION'") @@ -316,6 +317,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) ' If Result Then Log("Tenemos permisos de bluetooth.") ' Log("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") ' Log("Check phone state: " & rp.Check(rp.PERMISSION_READ_PHONE_STATE)) + kh.centraPanel(p_botones, Root.Width) End Sub Sub B4XPage_Appear @@ -587,6 +589,7 @@ Sub ImageView4_Click Panel1.Top = (Root.Height/2) - (Panel1.Height/2) Panel1.Elevation = 100 Panel1.BringToFront + If user.Text = "KMTS1" Then b_importarBD.Visible = True Else b_importarBD.Visible = False End Sub Private Sub ImageView4_LongClick @@ -698,4 +701,19 @@ End Sub Private Sub b_cargaLocalCancelar_Click p_cargaLocal.Visible = False +End Sub + +Private Sub b_importarBD_Click + Private FH As FileHandler + FH.Initialize + Wait For (FH.Load) Complete (Result As LoadResult) 'Abre un fileManager para seleccionar la base de datos a importar. + 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. + Private c As Cursor = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'APP_NAME'") + If c.RowCount > 1 Then + c.Position = 0 + ToastMessageShow($"BD de ${c.GetString("APP_NAME")} importada!"$, True) + Else + ToastMessageShow($"¡BD importada!"$, True) + End If End Sub \ No newline at end of file diff --git a/B4A/C_CheckList.bas b/B4A/C_CheckList.bas index 3468940..0395c90 100644 --- a/B4A/C_CheckList.bas +++ b/B4A/C_CheckList.bas @@ -562,7 +562,7 @@ Sub Bt_GuardarCheck_Click OK_CheckList = 1 Msgbox("DATOS GUARDADOS CON EXITO ","") 'ignore 'Proyecto gps - Subs.bitacora(B4XPages.MainPage.principal.usuario,Subs.traeAlmacen,B4XPages.MainPage.principal.l_ruta.Text,"Salida almacen", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),Starter.lat_gps,Starter.lon_gps,"2","","") + Subs.bitacora(Subs.fechanormal(DateTime.Now),B4XPages.MainPage.principal.usuario,Subs.traeAlmacen,B4XPages.MainPage.principal.l_ruta.Text,"Salida almacen", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),Starter.lat_gps,Starter.lon_gps,"2","","") Subs.iniciaActividad("Principal") ' B4XPages.ShowPage("Principal") End If diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 6533943..c9bc699 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -278,7 +278,7 @@ Sub Class_Globals Dim RMI_VALOR As String Dim errorImpresora As Int = 0 Private b_inicioFinVenta As Button - dim dentroDeGeocerca as Boolean = False + Dim dentroDeGeocerca As Boolean = False End Sub 'You can add more parameters here. @@ -3440,7 +3440,7 @@ Sub Bt_GuardarBoleta_Click ' If Logger Then Log($"${RutaBoleta},${Id_Almacen},${EDT_CANMIL.Text},${EDT_CANQUIN.Text},${EDT_CANDOS.Text},${EDT_CANCIEN.Text},${EDT_CANCIN.Text},${EDT_CANVEIN.Text}"$) ' If Logger Then Log($"${RutaBoleta},${Id_Almacen},${EDT_CANVEINTE.Text},${EDT_CANDIEZ.Text},${EDT_CANCI.Text},${EDT_CANDO.Text},${EDT_CANUN.Text},${EDT_CANCEN.Text}"$) Msgbox("Datos Guardados ","Listo") 'ignore - Subs.bitacora(usuario, Id_Almacen, ruta_tienda, "Llega a almacen", la_cuenta.text, Subs.fechanormal(DateTime.Now), "", Starter.lat_gps, Starter.lon_gps, "2", "", "") + Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario, Id_Almacen, ruta_tienda, "Llega a almacen", la_cuenta.text, Subs.fechanormal(DateTime.Now), "", Starter.lat_gps, Starter.lon_gps, "2", "", "") End Sub Sub B_E_NEXT_Click @@ -3884,12 +3884,12 @@ Private Sub b_inicioFinVenta_Click Private precision As Int = 0 If dentroDeGeocerca Then precision = 1 If Starter.enVenta Then - Subs.bitacora(usuario, Id_Almacen, ruta_tienda, "Termina Venta", la_cuenta.text, "", Subs.fechanormal(DateTime.Now), Starter.lat_gps, Starter.lon_gps, precision, "", "") + Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario, Id_Almacen, ruta_tienda, "Termina Venta", la_cuenta.text, "", Subs.fechanormal(DateTime.Now), Starter.lat_gps, Starter.lon_gps, precision, "", "") Starter.enVenta = False Subs.iniciaActividad("principal") B4XPages.ShowPageAndRemovePreviousPages("Principal") Else - Subs.bitacora(usuario, Id_Almacen, ruta_tienda, "Inicia Venta", la_cuenta.text, Subs.fechanormal(DateTime.Now), "", Starter.lat_gps, Starter.lon_gps, precision, "", "") + Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario, Id_Almacen, ruta_tienda, "Inicia Venta", la_cuenta.text, Subs.fechanormal(DateTime.Now), "", Starter.lat_gps, Starter.lon_gps, precision, "", "") Starter.enVenta = True End If b_inicioFinVenta.Visible = False diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 3a9c6d6..9db30ba 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -188,6 +188,7 @@ Sub Class_Globals Public BluetoothState, ConnectionState As Boolean Private ion As Object Private p_centrado As Panel + Private l_version As Label End Sub 'You can add more parameters here. @@ -203,6 +204,7 @@ Private Sub B4XPage_Created (Root1 As B4XView) 'load the layout to Root Root.LoadLayout("principal") EJECUTANDO=1 + l_version.Text = Application.VersionName ' Dim ruta As String img2.Visible =False ' ruta = File.DirInternal @@ -2200,7 +2202,7 @@ Sub B_OK_PAS_Click P1.SendToBack 'Proyecto gps - Subs.bitacora(usuario,ALMACEN,l_ruta.Text,"Carga día", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),Starter.lat_gps,Starter.lon_gps,"2","","") + Subs.bitacora(Subs.fechanormal(DateTime.Now),usuario,ALMACEN,l_ruta.Text,"Carga día", "",Subs.fechanormal(DateTime.Now),Subs.fechanormal(DateTime.Now),Starter.lat_gps,Starter.lon_gps,"2","","") 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 @@ -3166,3 +3168,18 @@ Sub GetBA As Object Dim jo As JavaObject = Me Return jo.RunMethod("getBA", Null) End Sub + +Private Sub connecta_LongClick + cmd.Initialize + Private c As Cursor = Starter.skmt.ExecQuery("select * from bitacoraGPS") +' If c.RowCount > 0 Then +' cmd.Name = "borraBitacora" +' cmd.Parameters = Array As Object(c.GetString("almacenb"), c.GetString("rutab"), c.GetString("usuariob"), c.GetString("almacenb")) +' +' End If + +' cmd.Name = "mandaBitacora" +'' TMP_ALMACEN, TMP_RUTA, TMP_USUARIO, TMP_FECHA_SINC, TMP_ID_CLIENTE, TMP_EVENTO, TMP_INICIO, TMP_FINAL, TMP_LATITUD, TMP_LONGITUD, TMP_MOTIVO_NO_VENTA, TMP_MOTIVO_NO_VISITA, TMP_NOMBRE_CLIENTE,TMP_PRESICION +' cmd.Parameters = Array As Object( ALMACEN, cliente, evento, fecha, e_ruta.text, ) +' reqManager.ExecuteQuery(cmd , 0, "HIST_ENCUESTA2") +End Sub \ No newline at end of file diff --git a/B4A/FileHandler.bas b/B4A/FileHandler.bas new file mode 100644 index 0000000..a9529f8 --- /dev/null +++ b/B4A/FileHandler.bas @@ -0,0 +1,162 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11 +@EndOfDesignText@ +'Requiere la librería "ContentResolver" y "FileProvider" o "AppUpdating" +' +'Copiar este codigo al boton_Click que se quiere que importe la base de datos. +' +' Private Sub b_importarBD_Click +' Private FH As FileHandler +' FH.Initialize +' Wait For (FH.Load) Complete (Result As LoadResult) 'Abre un fileManager para seleccionar la base de datos a importar. +' 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 + +Sub Class_Globals + #if B4A + Private ion As Object + Private OldIntent As Intent + #end if + Type LoadResult (Success As Boolean, Dir As String, FileName As String, RealName As String, Size As Long, Modified As Long, MimeType As String) +End Sub + +Public Sub Initialize + +End Sub + +#if B4A +Public Sub SaveAs (Source As InputStream, MimeType As String, Title As String) As ResumableSub + Dim intent As Intent + intent.Initialize("android.intent.action.CREATE_DOCUMENT", "") + intent.AddCategory("android.intent.category.OPENABLE") + intent.PutExtra("android.intent.extra.TITLE", Title) + intent.SetType(MimeType) + StartActivityForResult(intent) + Wait For ion_Event (MethodName As String, Args() As Object) + If -1 = Args(0) Then 'resultCode = RESULT_OK + Dim result As Intent = Args(1) + Dim jo As JavaObject = result + Dim ctxt As JavaObject + Dim out As OutputStream = ctxt.InitializeContext.RunMethodJO("getContentResolver", Null).RunMethod("openOutputStream", Array(jo.RunMethod("getData", Null))) + File.Copy2(Source, out) + out.Close + Return True + End If + Return False +End Sub + +Public Sub Load As ResumableSub + Dim cc As ContentChooser + cc.Initialize("cc") + cc.Show("application/octet-stream", "Choose text file") + Wait For CC_Result (Success As Boolean, Dir As String, FileName As String) + Log($"***************************${CRLF}${Dir}${CRLF} ${FileName}"$) + Dim res As LoadResult = CreateLoadResult(Success, Dir, FileName) + Log($"***************************${CRLF}${res.FileName}${CRLF} ${res}"$) + If res.Success Then ExtractInformationFromURI(res.FileName, res) + Return res +End Sub + +Private Sub StartActivityForResult(i As Intent) + Dim jo As JavaObject = GetBA + ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null) + jo.RunMethod("startActivityForResult", Array(ion, i)) +End Sub + +Private Sub GetBA As Object + Return Me.As(JavaObject).RunMethod("getBA", Null) +End Sub + +Private Sub ExtractInformationFromURI (Uri As String, res As LoadResult) + Try + + Dim resolver As ContentResolver + resolver.Initialize("") + Dim u As Uri + u.Parse(Uri) + Dim rs As ResultSet = resolver.Query(u, Null, "", Null, "") + If rs.NextRow Then + Dim columns As B4XSet = B4XCollections.CreateSet + For i = 0 To rs.ColumnCount - 1 + columns.Add(rs.GetColumnName(i)) + Next + If columns.Contains("_display_name") Then res.RealName = rs.GetString("_display_name") + If columns.Contains("_size") Then res.Size = rs.GetLong("_size") + If columns.Contains("last_modified") Then res.Modified = rs.GetLong("last_modified") + If columns.Contains("mime_type") Then res.MimeType = rs.GetString("mime_type") + End If + rs.Close + + Catch + Log("error extracting information from file provider") + Log(LastException) + End Try +End Sub + +Public Sub CheckForReceivedFiles As LoadResult + Dim Activity As Activity = B4XPages.GetNativeParent(B4XPages.MainPage) + If IsRelevantIntent(Activity.GetStartingIntent) Then + Dim in As Intent = Activity.GetStartingIntent + Dim uri As String + If in.HasExtra("android.intent.extra.STREAM") Then + uri = in.As(JavaObject).RunMethod("getParcelableExtra", Array("android.intent.extra.STREAM")) + Else + uri = in.GetData + End If + Dim res As LoadResult = CreateLoadResult(True, "ContentDir", uri) + ExtractInformationFromURI(res.FileName, res) + Return res + End If + Return CreateLoadResult(False, "", "") +End Sub + +Private Sub IsRelevantIntent(in As Intent) As Boolean + If in.IsInitialized And in <> OldIntent And in.Action = in.ACTION_VIEW Then + OldIntent = in + Return True + End If + Return False +End Sub + +#else if B4i +Public Sub SaveAs(ParentPage As Object, AnchorView As Object, Text As String) As ResumableSub + Dim avc As ActivityViewController + avc.Initialize("avc", Array(Text)) + avc.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For avc_Complete (Success As Boolean, ActivityType As String) + Return Success +End Sub + +Public Sub Load (ParentPage As Object, AnchorView As Object) As ResumableSub + Dim DocumentPicker As DocumentPickerViewController + DocumentPicker.InitializeImport("picker", Array("public.text")) + DocumentPicker.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For Picker_Complete (Success As Boolean, URLs As List) + If Success And URLs.Size > 0 Then + Return UrlToLoadResult(URLs.Get(0)) + End If + Return CreateLoadResult(False, "", "") +End Sub + +Public Sub UrlToLoadResult(url As String) As LoadResult + Dim res As LoadResult = CreateLoadResult(IIf(File.Exists(url, ""), True, False), url, "") + res.RealName = res.Dir.SubString(res.Dir.LastIndexOf("/") + 1) + res.Size = File.Size(res.Dir, "") + Return res +End Sub +#end if + +Private Sub CreateLoadResult (Success As Boolean, Dir As String, FileName As String) As LoadResult + Dim t1 As LoadResult + t1.Initialize + t1.Success = Success + t1.Dir = Dir + t1.FileName = FileName + Return t1 +End Sub + diff --git a/B4A/Files/login.bal b/B4A/Files/login.bal index f14f1bcaf94aee4e8ea679e8ab642c663c262c03..c4815d98bb4d14dd535acd78b51616cda0783145 100644 GIT binary patch delta 1197 zcmZ{iUr19?9LMkPZdSYPdfhZ#+jMs&Th7ftn9j|FGJ~w7DM3`knj#sP8%ye;QV25t zW$I5Gv9une9%@|jx$q?@=&>M(o_dy^qJs51SGL{B_2GN&_nh-PpL@>l_xpTvdR#2w zIL=FhK;OWkxL#%^GZ4LYJrPfi#gbj!nT-?BW}?MJbRa$!A04_O(xf308yy-spNu6E zLrKO^=j?1EIv7h{jh%@P#;}?9f{YjV*$D&f7)cVTjAS8MNxAiM&3c8#?;~GHsv_Am zen0sf$4=fsa+0bwzNX+0aIV6HlQrI*^LW?b2pyuChvX&IX}nM4>&fSS?az7Ty&(kf zO!;e!?gl4j_So>Pxl=648(uVb;V*O4wLQgqiPF;>Iop5kSijuWt@MfOmWo%|Y?i$Y zPQljmz{x8P*S}r3B0Df0Y*U6k$9dsCh43WPB)S7FrUzuFNF^AMY{DctmNgLYwBL?T z0&%#6?wW4kaKdH7@fs1PQEv6qI28!`K2Ru2v_U;{gd9sV80iA)P1rt5H2gt}-HyGo zq?~MW1I%EVaV0YZjIEl8j0_NHiCA1_gZM z?!exLpD>pP&QZ{I;KO1dtA`$N)FNQIy-JBT2>|nX;=B&=Q8BS^2jX|@YmC(0frUJ5 zK?k;247;TdQ@;4>0haQlB^?qLlUDUfC u!=-feNANeK@m+01N*7%!g>lIPPcakj!55)>u&TzeHx}x>6|+V$YySb7&EEF_ delta 1032 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 delta 9712 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 diff --git a/B4A/KelloggsV4.b4a b/B4A/KelloggsV4.b4a index 3d1e5b5..537d0fc 100644 --- a/B4A/KelloggsV4.b4a +++ b/B4A/KelloggsV4.b4a @@ -151,17 +151,18 @@ Module19=DownloadService Module2=C_CheckList Module20=errorManager Module21=EscPosPrinter -Module22=foto -Module23=kms_helperSubs -Module24=ManageExternalStorage -Module25=MAPA_RUTAS -Module26=Mods -Module27=NotificationService -Module28=SD_Spinner -Module29=Starter +Module22=FileHandler +Module23=foto +Module24=kms_helperSubs +Module25=ManageExternalStorage +Module26=MAPA_RUTAS +Module27=Mods +Module28=NotificationService +Module29=SD_Spinner Module3=C_Cliente -Module30=Subs -Module31=Tracker +Module30=Starter +Module31=Subs +Module32=Tracker Module4=C_Clientes Module5=C_Historico Module6=C_Mapas @@ -170,7 +171,7 @@ Module8=C_NoVenta Module9=C_NuevoCliente NumberOfFiles=53 NumberOfLibraries=30 -NumberOfModules=31 +NumberOfModules=32 Version=12.5 @EndOfDesignText@ #Region Project Attributes diff --git a/B4A/KelloggsV4.b4a.meta b/B4A/KelloggsV4.b4a.meta index c9f7611..492379b 100644 --- a/B4A/KelloggsV4.b4a.meta +++ b/B4A/KelloggsV4.b4a.meta @@ -24,6 +24,7 @@ ModuleBookmarks29= ModuleBookmarks3= ModuleBookmarks30= ModuleBookmarks31= +ModuleBookmarks32= ModuleBookmarks4= ModuleBookmarks5= ModuleBookmarks6= @@ -56,6 +57,7 @@ ModuleBreakpoints29= ModuleBreakpoints3= ModuleBreakpoints30= ModuleBreakpoints31= +ModuleBreakpoints32= ModuleBreakpoints4= ModuleBreakpoints5= ModuleBreakpoints6= @@ -78,8 +80,8 @@ ModuleClosedNodes2= ModuleClosedNodes20= ModuleClosedNodes21=20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39 ModuleClosedNodes22= -ModuleClosedNodes23=9,11,13,15 -ModuleClosedNodes24= +ModuleClosedNodes23= +ModuleClosedNodes24=9,11,13,15 ModuleClosedNodes25= ModuleClosedNodes26= ModuleClosedNodes27= @@ -88,12 +90,13 @@ ModuleClosedNodes29= ModuleClosedNodes3=24 ModuleClosedNodes30= ModuleClosedNodes31= +ModuleClosedNodes32= ModuleClosedNodes4= ModuleClosedNodes5= ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=Visual Designer,login.bal,-100,1,Visual Designer,principal.bal,-100,1,C_Cliente,B_E_NEXT_Click,3442,0,C_Cliente,Class_Globals,245,0,C_Cliente,B4XPage_Appear,624,6,C_Principal,Class_Globals,0,0,Visual Designer,cliente.bal,-100,3,C_Cliente,Bt_GuardarBoleta_Click,3421,5,C_Cliente,B_CERRAR_I_Click,3417,0,C_Cliente,B_Regresar_Click,2707,0,C_Cliente,B4XPage_CloseRequest,740,0 +NavigationStack=B4XMainPage,Initialize,108,0,kms_helperSubs,guardaAppInfo,513,2,kms_helperSubs,string2date,508,0,C_Cliente,B4XPage_Created,296,0,Visual Designer,login.bal,-100,1,C_Principal,EnableBluetooth,3151,0,C_Principal,Class_Globals,185,0,Visual Designer,principal.bal,-100,6,C_Principal,B4XPage_Created,197,4,B4XMainPage,B4XPage_Created,188,6 SelectedBuild=0 -VisibleModules=1,29,11,23,30,14,3,18 +VisibleModules=1,30,11,24,31,14,3,18,2,22 diff --git a/B4A/Starter.bas b/B4A/Starter.bas index b28907f..e35e410 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -16,7 +16,7 @@ Sub Process_Globals Dim s As C_Subs Dim reqManager As DBRequestManager Dim skmt, errorLog As SQL - Dim ruta As String + Dim ruta As String = File.DirInternal Public BluetoothState As Boolean Dim btAdmin As BluetoothAdmin Dim intentosImpresora As Int = 0 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 54edfd9..9550253 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -1548,8 +1548,8 @@ End Sub 'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen 'Mandar fecha de sync(sysdate) -Sub bitacora(usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precision As String, motivonoventa As String, motivonovisita As String ) +Sub bitacora(fechab As String, usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precision As String, motivonoventa As String, motivonovisita As String ) Log("bitacora") - Starter.skmt.ExecNonQuery($"INSERT INTO BITACORAGPS (usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb , longitudb , precision , motivonoventa , motivonovisita) VALUES ('${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precision}' , '${motivonoventa}' , '${motivonovisita}')"$) + Starter.skmt.ExecNonQuery($"INSERT INTO BITACORAGPS (fechab, usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb , longitudb , precision , motivonoventa , motivonovisita) VALUES ('${fechab}' ,'${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precision}' , '${motivonoventa}' , '${motivonovisita}')"$) End Sub \ No newline at end of file diff --git a/B4A/kms_helperSubs.bas b/B4A/kms_helperSubs.bas index 6fc9e54..e51694e 100644 --- a/B4A/kms_helperSubs.bas +++ b/B4A/kms_helperSubs.bas @@ -515,9 +515,9 @@ End Sub 'Guarda el nombre y version de la app en CAT_VARIABLES. Sub guardaAppInfo(db 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}')"$) + db.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'") + db.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$) + db.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.