From b1d8327fa652e111331fd567f4b0ac886ef25c1f Mon Sep 17 00:00:00 2001 From: cheveguerra Date: Tue, 5 Sep 2023 23:57:56 -0600 Subject: [PATCH] =?UTF-8?q?C=C3=B3digo=20para=20respaldo=20diario.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/B4XMainPage.bas | 12 ++++-- B4A/C_RespaldoDiario.bas | 80 +++++++++++++++++++++++++++++++++++++--- B4A/DBRequestManager.bas | 1 + 3 files changed, 85 insertions(+), 8 deletions(-) diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index a1ad4bf..93f9f12 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -34,7 +34,7 @@ Sub Class_Globals Public pedidos As C_Pedidos Public promos As C_Promos Public historico As C_Historico - Public respaldoDiario as C_RespaldoDiario + Public rd As C_RespaldoDiario Public Provider As FileProvider 'nuevocliente -> NuevoCliente @@ -132,8 +132,11 @@ Private Sub B4XPage_Created (Root1 As B4XView) B4XPages.AddPage("Promos", promos) historico.Initialize B4XPages.AddPage("Historico", historico) - respaldoDiario.Initialize - B4XPages.AddPageAndCreate("respaldoDiario", respaldoDiario) +' respaldoDiario.Initialize +' B4XPages.AddPageAndCreate("respaldoDiario", respaldoDiario) + + rd.Initialize + ruta = Starter.ruta Provider.Initialize ' Subs.borraArribaDe100Errores ' Para Websockets @@ -222,6 +225,9 @@ Private Sub B4XPage_Created (Root1 As B4XView) End Sub Sub B4XPage_Appear + rd.respaldaPedido + rd.respaldaInventarios + rd.respaldaPaquetes If Starter.muestraProgreso = 1 Then muestraProgreso("Descargando actualización") Starter.muestraProgreso = 0 diff --git a/B4A/C_RespaldoDiario.bas b/B4A/C_RespaldoDiario.bas index bd911ed..f678f41 100644 --- a/B4A/C_RespaldoDiario.bas +++ b/B4A/C_RespaldoDiario.bas @@ -10,10 +10,21 @@ Sub Class_Globals Dim skmt, rkmt As SQL Dim rp As RuntimePermissions Dim safePath As String + Dim fechaHoy As String End Sub 'You can add more parameters here. Public Sub Initialize As Object + Log("************************** " & safePath) + safePath = rp.GetSafeDirDefaultExternal("./") + rkmt.Initialize(safePath,"rkmt.db", True) + skmt.Initialize(File.DirInternal,"kmt.db", False) + 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)"$) + 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 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)"$) + + DateTime.DateFormat = "MM/dd/yyyy" + fechaHoy = DateTime.Date(DateTime.Now) Return Me End Sub @@ -21,10 +32,69 @@ End Sub Private Sub B4XPage_Created (Root1 As B4XView) Root = Root1 'load the layout to Root - safePath = rp.GetSafeDirDefaultExternal("./") - Log("************************** " & safePath) - rkmt.Initialize(safePath,"rkmt.db", True) - skmt.Initialize(File.DirInternal,"kmt.db", false) End Sub -'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file +Sub respaldaPedido + Private inicio As String = DateTime.Now + Log("copiando pedidos ...") + Private skmtAttached As Boolean = False + rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) + Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list") + Do While rs.NextRow 'Revismos si esta montada "kmt.db" como "skmt" y si no, la montamos. + If rs.GetString("name") = "skmt1" Then skmtAttached = True + Loop + If Not(skmtAttached) Then rkmt.ExecNonQuery($"attach database '${File.Combine(File.DirInternal, "kmt.db")}' as skmt1;"$) + 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) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) + Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + +Sub respaldaInventarios + Private inicio As String = DateTime.Now + Log("copiando inventarios ...") + Private skmtAttached As Boolean = False + rkmt.ExecNonQuery($"delete from inventarios where substr(fecha, 1, 10) = '${fechaHoy}'"$) + Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list") + Do While rs.NextRow 'Revismos si esta montada "kmt.db" como "skmt" y si no, la montamos. + If rs.GetString("name") = "skmt1" Then skmtAttached = True + Loop + If Not(skmtAttached) Then rkmt.ExecNonQuery($"attach database '${File.Combine(File.DirInternal, "kmt.db")}' as skmt1;"$) + 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"$) + Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + +Sub respaldaPaquetes + Private inicio As String = DateTime.Now + Log("copiando paquetes ...") + Private skmtAttached As Boolean = False + rkmt.ExecNonQuery($"delete from paquetes where substr(fecha, 1, 10) = '${fechaHoy}'"$) + Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list") + Do While rs.NextRow 'Revismos si esta montada "kmt.db" como "skmt" y si no, la montamos. + If rs.GetString("name") = "skmt1" Then skmtAttached = True + Loop + If Not(skmtAttached) Then rkmt.ExecNonQuery($"attach database '${File.Combine(File.DirInternal, "kmt.db")}' as skmt1;"$) + 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"$) + Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +'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) + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = B4XPages.MainPage.skmt.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 + B4XPages.MainPage.skmt.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 + B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub \ No newline at end of file diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas index 43c627f..906a281 100644 --- a/B4A/DBRequestManager.bas +++ b/B4A/DBRequestManager.bas @@ -225,6 +225,7 @@ Public Sub HandleJob(Job As HttpJob) As DBResult ' Log("HandleJob: " & (DateTime.Now - start)) Return table End Sub + 'Reads a file and returns the file as a bytes array. Public Sub FileToBytes(Dir As String, FileName As String) As Byte() Dim out As OutputStream