diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 23848dc..b37f997 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -5,7 +5,7 @@ Type=Class Version=9.85 @EndOfDesignText@ #Region Shared Files -#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files" +'#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files" 'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True 'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip '########################################################################################################### @@ -25,6 +25,7 @@ Version=9.85 Sub Class_Globals Private Root As B4XView Private xui As XUI +' Dim ks As kms_helperSubs Public login As B4XMainPage Public principal As C_Principal Public clientes As C_Clientes @@ -209,13 +210,6 @@ Private Sub B4XPage_Created (Root1 As B4XView) End If C.Close l_version.Text = Application.VersionName - 'este codigo es para lo del menu -' PopupMenu.Initialize("PopupMenu", b_menu) -' PopupMenu.AddMenuItem(0, 0, "View") -' PopupMenu.AddMenuItem(1, 1, "Edit") -' PopupMenu.AddMenuItem(2, 2, "Details") -' PopupMenu.AddMenuItem(3, 3, "Remove") - ' menu fin montoActual = 0 clientesTotal = 0 clientesVenta = 0 @@ -301,7 +295,7 @@ Sub B4XPage_Appear ' LogColor($"Si hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Green) c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) c.Position =0 - Dim sDate, sTime As String + Dim sDate, sTime As String 'ignore DateTime.DateFormat = "yyyyMMdd" sDate=DateTime.Date(DateTime.Now) ' If sDate > "20220701" Then @@ -338,7 +332,15 @@ Sub B4XPage_Appear ' b_notifAccess.TextColor = Colors.White ' b_notifAccess.Text = "Permisos Activos" End If +' ks.Initialize(Me, "ks") +' ks.vacuum +' ks.centraEtiqueta(l_version, Root.Width) End Sub + +Sub ks_etiquetaCentrada(success As Boolean) + If success Then Log("Etiqueta Centrada") Else Log("Etiqueta Centrada") +End Sub + 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub Entrar_Click diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas index 2b438d1..8b54794 100644 --- a/B4A/C_Principal.bas +++ b/B4A/C_Principal.bas @@ -312,9 +312,9 @@ Sub B4XPage_Appear ' 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. - rd.respaldaPedido - rd.respaldaInventarios - rd.respaldaPaquetes + rd.respalda_pedido + rd.respalda_cat_gunaprod + rd.respalda_cat_detalle_paq nvo_cliente.Enabled = False HORAINGRESO ="000000" Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2) diff --git a/B4A/C_RespaldoDiario.bas b/B4A/C_RespaldoDiario.bas index a873dc6..cf0baaf 100644 --- a/B4A/C_RespaldoDiario.bas +++ b/B4A/C_RespaldoDiario.bas @@ -28,18 +28,17 @@ Public Sub Initialize As Object Dir = "" ' Log("creado en raiz") End Try -' safePath = rp.GetSafeDirDefaultExternal("./") safePath = Dirp & Dir - private name = rkmt.Initialize(safePath,"md.rkmt.km", True) skmt.Initialize(File.DirInternal,"kmt.db", False) - '############################################################################################################# - '################ REVISAR QUE COLUMNAS SON NECESARIAS PARA CADA CASO ################################### - '############################################################################################################# - rkmt.ExecNonQuery($"create table if not exists pedidos (pe_folio NUMERIC, pe_desc NUMERIC, pe_costo_sin TEXT, pe_ruta TEXT, pe_cedis TEXT, pe_costo_tot NUMERIC, pe_costou NUMERIC, pe_cant NUMERIC, pe_pronombre TEXT, pe_proid TEXT, pe_cliente TEXT, pe_fecha TEXT, pe_usuario TEXT, pe_envio_ok TEXT)"$) - rkmt.ExecNonQuery($"create table if not exists inventarios (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, 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_tipoprod2 TEXT, fecha TEXT)"$) -' rkmt.ExecNonQuery($"create table if not exists inventarios2 (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, 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_tipoprod2 TEXT, fecha TEXT)"$) - rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$) +' rkmt.ExecNonQuery($"create table if not exists pedidos (pe_folio NUMERIC, pe_desc NUMERIC, pe_costo_sin TEXT, pe_ruta TEXT, pe_cedis TEXT, pe_costo_tot NUMERIC, pe_costou NUMERIC, pe_cant NUMERIC, pe_pronombre TEXT, pe_proid TEXT, pe_cliente TEXT, pe_fecha TEXT, pe_usuario TEXT, pe_envio_ok TEXT)"$) +' rkmt.ExecNonQuery($"create table if not exists inventarios (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, 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_tipoprod2 TEXT, fecha TEXT)"$) +'' rkmt.ExecNonQuery($"create table if not exists inventarios2 (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, 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_tipoprod2 TEXT, fecha TEXT)"$) +' rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$) + If chkIfTableExists(skmt, "PEDIDO") Then rkmt.ExecNonQuery($"create table if not exists PEDIDO (${getTableColumnList(skmt, "PEDIDO")}, FECHA TEXT)"$) + If chkIfTableExists(skmt, "CAT_DETALLES_PAQ") Then rkmt.ExecNonQuery($"create table if not exists CAT_DETALLES_PAQ (${getTableColumnList(skmt, "CAT_DETALLES_PAQ")}, FECHA TEXT)"$) + If chkIfTableExists(skmt, "CAT_GUNAPROD") Then rkmt.ExecNonQuery($"create table if not exists CAT_GUNAPROD (${getTableColumnList(skmt, "CAT_GUNAPROD")}, FECHA TEXT)"$) + If chkIfTableExists(skmt, "CAT_GUNAPROD2") Then rkmt.ExecNonQuery($"create table if not exists CAT_GUNAPROD2 (${getTableColumnList(skmt, "CAT_GUNAPROD2")}, FECHA TEXT)"$) DateTime.DateFormat = "MM/dd/yyyy" fechaHoy = DateTime.Date(DateTime.Now) revisaSkmtAttached @@ -52,10 +51,12 @@ Private Sub B4XPage_Created (Root1 As B4XView) 'load the layout to Root End Sub +'Revisa si esta montada "kmt.db" como "skmt1" y si no, la monta +'Para que "rkmt" vea a "skmt", es necesario montarla (attach). Sub revisaSkmtAttached skmtAttached = False Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list") - Do While rs.NextRow 'Revisamos si esta montada "kmt.db" como "skmt" y si no, la montamos. + Do While rs.NextRow 'Revisamos si esta montada "kmt.db" como "skmt1" y si no, la montamos. If rs.GetString("name") = "skmt1" Then skmtAttached = True Loop If Not(skmtAttached) Then @@ -65,44 +66,46 @@ Sub revisaSkmtAttached End Sub 'Copia la tabla PEDIDO a rkmt.db en la tarjeta del celular. -Sub respaldaPedido +Sub respalda_pedido Private inicio As String = DateTime.Now - Log("copiando pedidos ...") +' Log("Copiando PEDIDO ...") + Private lasCols As String = getTableColumnListName(skmt, "PEDIDO") rkmt.BeginTransaction - rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) - rkmt.ExecNonQuery($"insert into pedidos (pe_folio, pe_desc, pe_costo_sin, pe_ruta, pe_cedis, pe_costo_tot, pe_costou, pe_cant, pe_pronombre, pe_proid, pe_cliente, pe_fecha, pe_usuario, pe_envio_ok) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"delete from PEDIDO where FECHA = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into PEDIDO (${lasCols}, FECHA) select ${lasCols}, '${fechaHoy}' as FECHA from skmt1.PEDIDO where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! rkmt.EndTransaction Log(((DateTime.Now - inicio)/1000) & " segs") End Sub 'Copia la tabla CAT_GUNAPRODS a rkmt.db en la tarjeta del celular. -Sub respaldaInventarios - Log($"Borrando de fecha ${fechaHoy}"$) +Sub respalda_cat_gunaprod Private inicio As String = DateTime.Now - Log("copiando inventarios ...") -' rkmt.ExecNonQuery($"delete from inventarios where substr(fecha, 1, 10) = '${fechaHoy}'"$) +' Log("Copiando CAT_GUNAPROD ...") + Private lasCols As String = getTableColumnListName(skmt, "CAT_GUNAPROD") + lasCols = lasCols.Replace(", CAT_GP_IMG", "") 'Quitamos la imagen del respaldo. rkmt.BeginTransaction - rkmt.ExecNonQuery($"delete from inventarios where fecha = '${fechaHoy}'"$) - rkmt.ExecNonQuery($"insert into inventarios (cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, fecha) select cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, '${fechaHoy}' as fecha from skmt1.cat_gunaprod"$) + rkmt.ExecNonQuery($"delete from CAT_GUNAPROD where FECHA = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into CAT_GUNAPROD (${lasCols}, FECHA) select ${lasCols}, '${fechaHoy}' as FECHA from skmt1.CAT_GUNAPROD"$) rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! rkmt.EndTransaction Log(((DateTime.Now - inicio)/1000) & " segs") End Sub 'Copia la tabla CAT_DETALLE_PAQ a rkmt.db en la tarjeta del celular. -Sub respaldaPaquetes +Sub respalda_cat_detalle_paq Private inicio As String = DateTime.Now - Log("copiando paquetes ...") +' Log("Copiando CAT_DETALLES_PAQ ...") + Private lasCols As String = getTableColumnListName(skmt, "CAT_DETALLES_PAQ") rkmt.BeginTransaction -' rkmt.ExecNonQuery($"delete from paquetes where substr(fecha, 1, 10) = '${fechaHoy}'"$) - rkmt.ExecNonQuery($"delete from paquetes where fecha = '${fechaHoy}'"$) - rkmt.ExecNonQuery($"insert into paquetes (cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, fecha) select cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, '${fechaHoy}' as fecha from skmt1.cat_detalles_paq"$) + rkmt.ExecNonQuery($"delete from CAT_DETALLES_PAQ where fecha = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into CAT_DETALLES_PAQ (${lasCols}, FECHA) select ${lasCols}, '${fechaHoy}' as FECHA from skmt1.CAT_DETALLES_PAQ"$) rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! rkmt.EndTransaction Log(((DateTime.Now - inicio)/1000) & " segs") End Sub +'Realiza un "vacuum" de la base de datos "rkmt". Sub vacuum Log("Vacuum") rkmt.ExecNonQuery("vacuum;") @@ -111,20 +114,73 @@ 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 +Sub agregaColumna(db As SQL, 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 = Starter.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + 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 - Starter.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + 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 - Starter.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + 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 los nombres y tipos de las columnas de una tabla dada. +Sub getTableColumnList(db As SQL, table As String) As String 'ignore + Private l As String = "" + If chkIfTableExists(db, table) Then + Private c As Cursor = db.ExecQuery($"pragma table_info(${table})"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + If l.Length = 0 Then + l = $"${c.GetString("name")} ${c.GetString("type")}"$ + Else + l = $"${l}, ${c.GetString("name")} ${c.GetString("type")}"$ + End If + Next + End If + Else + Return "No existe la tabla." + End If + c.Close + Return l +End Sub + +'Regresa solo los nombres de las columnas de una tabla dada. +Sub getTableColumnListName(db As SQL, table As String) As String 'ignore + Private l As String = "" + If chkIfTableExists(db, table) Then + Private c As Cursor = db.ExecQuery($"pragma table_info(${table})"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + If l.Length = 0 Then + l = $"${c.GetString("name")}"$ + Else + l = $"${l}, ${c.GetString("name")}"$ + End If + Next + End If + Else + Return "No existe la tabla." + End If + c.Close + Return l +End Sub + +'Revisa si una tabla dada existe en una base de datos dada, regresa true o false. +Sub chkIfTableExists(db As SQL, table As String) As Boolean 'ignore + Private t As Boolean = False 'ignore + Private c As Cursor = db.ExecQuery($"SELECT name FROM sqlite_master WHERE type='table' AND name='${table}'"$) + If c.RowCount > 0 Then t = True + c.Close + Return t End Sub \ No newline at end of file diff --git a/B4A/Mariana.b4a b/B4A/Mariana.b4a index c88c5c6..acb4ce6 100644 --- a/B4A/Mariana.b4a +++ b/B4A/Mariana.b4a @@ -702,17 +702,17 @@ Library13=googlemapsextras Library14=gps Library15=javaobject Library16=json -Library17=okhttputils2 -Library18=phone -Library19=preoptimizedclv +Library17=phone +Library18=preoptimizedclv +Library19=randomaccessfile Library2=b4xpages -Library20=randomaccessfile -Library21=replyauto -Library22=serial -Library23=sql -Library24=togglelibrary -Library25=xcustomlistview -Library26=xui +Library20=replyauto +Library21=serial +Library22=sql +Library23=togglelibrary +Library24=xcustomlistview +Library25=xui +Library26=kms_helpersubs Library3=baqrcode Library4=batteryprogressview Library5=bitmapcreator diff --git a/B4A/Mariana.b4a.meta b/B4A/Mariana.b4a.meta index 7e7699f..7f709de 100644 --- a/B4A/Mariana.b4a.meta +++ b/B4A/Mariana.b4a.meta @@ -64,13 +64,13 @@ ModuleClosedNodes16= ModuleClosedNodes17= ModuleClosedNodes18= ModuleClosedNodes19= -ModuleClosedNodes2= +ModuleClosedNodes2=4 ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= ModuleClosedNodes23= ModuleClosedNodes24=9,10,11 -ModuleClosedNodes25= +ModuleClosedNodes25=48,49,50,51,52,53,54,55,56,57,58,59,60,61 ModuleClosedNodes26= ModuleClosedNodes3= ModuleClosedNodes4=15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36 @@ -79,6 +79,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=Starter,reinicializaReqManager,122,0,B4XMainPage,JobDone,481,0,B4XMainPage,muestraProgreso,676,0,B4XMainPage,i_engrane_Click,690,0,B4XMainPage,ocultaProgreso,681,0,C_RespaldoDiario,Class_Globals,9,0,C_RespaldoDiario,Initialize,26,2,B4XMainPage,Entrar_LongClick,714,0,Starter,ENVIA_ULTIMA_GPS,74,0,B4XMainPage,lv_server_ItemClick,719,3 +NavigationStack=C_Subs,dbOk,37,0,C_Subs,Initialize,20,0,B4XMainPage,ks_etiquetaCentrada,334,3,B4XMainPage,B4XPage_Appear,328,4,B4XMainPage,Class_Globals,21,5,C_RespaldoDiario,Class_Globals,2,0,C_RespaldoDiario,Initialize,23,0 SelectedBuild=0 -VisibleModules=2,24,23,12,16,25,13,15,6,8 +VisibleModules=2,12,24,23,16,25,15,13,6,8