26/9/23 - Cambios en RespaldoDiario

- Se modifico respaldoDiario para hacerlo mas dinámico y no tener que especificar cada una de las columnas a copiar,
This commit is contained in:
2023-09-26 02:30:12 -06:00
parent bc3e7878cc
commit 8d59b9d782
5 changed files with 113 additions and 55 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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