8/9/23 - Código para respaldo diario

Se agregó una clase para el respaldo diario en una base de datos en SDCARD/kmts, para usar el almacenamiento externo es necesario usar la clase "ManageExternalStorage".
This commit is contained in:
2023-09-08 01:11:34 -06:00
parent d0c13fc15e
commit 62b422dd5d
6 changed files with 167 additions and 45 deletions

View File

@@ -91,6 +91,8 @@ Sub Class_Globals
Private b_enviarbd As Button
Private b_importarBD As Button
Dim ime As IME
Dim MES1 As ManageExternalStorage
Dim device As Phone
End Sub
Public Sub Initialize
@@ -142,7 +144,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
LogColor("copiamos kmt.db de "&File.DirAssets & " a " & ruta,Colors.Green)
End If
Log(ruta)
' Log(ruta)
skmt.Initialize(ruta,"kmt.db", True)
Subs.guardaAppInfo(skmt)
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)")
@@ -172,11 +174,11 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' reqManager.Initialize(Me, server)
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")
' 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
@@ -217,7 +219,27 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' Else
' ToastMessageShow("No permission", True)
' End If
MES1.Initialize(Me, "MES1")
' get the device SDK version
Dim SdkVersion As Int = device.SdkVersion
' Choose which permission to request in order to access external storgage
If SdkVersion < 30 Then
' Log("SDK = " & SdkVersion & " : Requesting WRITE_EXTERNAL_STORAGE permission")
Dim rp As RuntimePermissions
rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Implicit read capability if granted
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
' Log($"PERMISSION_WRITE_EXTERNAL_STORAGE = ${Result}"$)
Else
' Log("SDK = " & SdkVersion & " : Requesting MANAGE_EXTERNAL_STORAGE permission")
' Log("On Entry MANAGE_EXTERNAL_STORAGE = " & MES1.HasPermission)
If Not(MES1.HasPermission) Then
MsgboxAsync("This app requires access to all files, please enable the option", "Manage All Files")
Wait For Msgbox_Result(Res As Int)
' Log("Getting permission")
MES1.GetPermission
Wait For MES_StorageAvailable
End If
End If
End Sub
Sub B4XPage_Appear

View File

@@ -235,7 +235,7 @@ Sub B4XPage_Appear
ToastMessageShow("Es necesario tener el GPS encendido", True)
StartActivity(Starter.gps.LocationSettingsIntent)
End If
Log("appear")
' Log("appear")
cb_factura.Checked = False
p_abono.Visible = False
Subs.centraPanel(p_abono, Root.Width)
@@ -492,7 +492,7 @@ Sub Guardar_Click
c.Close
c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
c.Position=0
Log("xxxxxxxxxxxxxxx " & c.GetString("CUANTOS"))
' Log("xxxxxxxxxxxxxxx " & c.GetString("CUANTOS"))
If c.GetString("CUANTOS") > 0 Then
Private cbFactura As Int = 0
If cb_factura.Checked Then cbFactura = 1
@@ -864,12 +864,12 @@ Sub mandaPendientes
ab.Close
'CLIENTES NUEVOS
Log("Entre aqui")
' Log("Entre aqui")
Dim bb As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from CLIENTE_NUEVO where CN_enviado is null"$)
Dim cb As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ID_ALMACEN from CAT_ALMACEN")
cb.Position = 0
Log("Entre aqui x2")
Log(bb.RowCount)
' Log("Entre aqui x2")
' Log(bb.RowCount)
If bb.RowCount > 0 Then
For i=0 To bb.RowCount -1
bb.Position = i
@@ -915,7 +915,6 @@ Sub JobDone(Job As HttpJob)
Private cliente As String= resultado.Tag
cliente = cliente.SubString(cliente.IndexOf("_")+24)
Log($"Cliente1:${cliente}"$)
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)))

View File

@@ -11,12 +11,25 @@ Sub Class_Globals
Dim rp As RuntimePermissions
Dim safePath As String
Dim fechaHoy As String
Dim skmtAttached As Boolean = False
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
Log("************************** " & safePath)
safePath = rp.GetSafeDirDefaultExternal("./")
' Log("************************** " & safePath)
Dim Dirp As String = File.DirRootExternal
Dim Dir As String
Dim Dir2 As String
Try
File.MakeDir(Dirp,"/kmts")
Dir = "/kmts"
' Log("creado en kmts " & Dirp & Dir)
Catch
Dir = ""
' Log("creado en raiz")
End Try
' safePath = rp.GetSafeDirDefaultExternal("./")
safePath = Dirp & Dir
rkmt.Initialize(safePath,"rkmt.km", 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)"$)
@@ -24,6 +37,7 @@ Public Sub Initialize As Object
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)
revisaSkmtAttached
Return Me
End Sub
@@ -33,33 +47,42 @@ Private Sub B4XPage_Created (Root1 As B4XView)
'load the layout to Root
End Sub
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.
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;"$)
skmtAttached = True
End If
End Sub
'Copia la tabla PEDIDO a rkmt.db en la tarjeta del celular.
Sub respaldaPedido
Private inicio As String = DateTime.Now
Log("copiando pedidos ...")
Private skmtAttached As Boolean = False
rkmt.BeginTransaction
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}'"$)
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}"$)
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($"delete from inventarios where substr(fecha, 1, 10) = '${fechaHoy}'"$)
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.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
rkmt.EndTransaction
Log(((DateTime.Now - inicio)/1000) & " segs")
End Sub
@@ -67,14 +90,12 @@ 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.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.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
rkmt.EndTransaction
Log(((DateTime.Now - inicio)/1000) & " segs")
End Sub

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,79 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=10.7
@EndOfDesignText@
' Version 1.00
#Event: StorageAvailable
Sub Class_Globals
Private ion As Object
Private mCallback As Object
Private mEventName As String
End Sub
' This pretty trivial class is modelled on (plagiarised from!) Erel's ExternalStorage class
' It applies to devices implementing SDK30 and later
' It allows apps to access the internal 'external' storage as was possible on earlier Android versions ussing traditional file I/O
' You must manually add 'AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)' to the manifest
' You must ensure that you provide the package name of your app in Sub GetPermission
' This class uses the MANAGE_APP_ALL_FILES_ACCESS_PERMISSION intent action to direct users to a system settings page
' They must enable the option on that page to give permission
'Initializes the object
Public Sub Initialize (Callback As Object, EventName As String)
mCallback = Callback
mEventName = EventName
End Sub
' Determine if the app already has MANAGE_EXTERNAL_STORAGE call Environment.isExternalStorageManager()
' Return True if this app already has MANAGE_EXTERNAL_STORAGE permission
Public Sub HasPermission As Boolean
Dim has As Boolean
Dim jo As JavaObject
jo.InitializeStatic("android.os.Environment")
has = jo.RunMethod("isExternalStorageManager", Null)
Return has
End Sub
' Check whether this app has MANAGE_EXTERNAL_STORAGE permission
' If not show the user a dialog to enable MANAGE_EXTERNAL_STORAGE permission for this app
' Raises the StorageAvailable event in the calling activity when complete
Public Sub GetPermission
If HasPermission Then
RaiseEvent
Return
End If
Dim in As Intent
' Be sure to reference your app package name in "pakageg:xxx"
in.Initialize("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION", $"package:${Application.PackageName}"$)
StartActivityForResult(in)
End Sub
Private Sub RaiseEvent
Log("Calling : " & mEventName & "_StorageAvailable")
CallSubDelayed(mCallback, mEventName & "_StorageAvailable")
End Sub
Private Sub ion_Event (MethodName As String, Args() As Object) As Object
RaiseEvent
Return Null
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 As Object(ion, i))
End Sub
Private Sub GetBA As Object
Dim jo As JavaObject = Me
Return jo.RunMethod("getBA", Null)
End Sub

View File

@@ -924,7 +924,7 @@ End Sub
'Revisa si tenemos los productos variables requeridos para la promoción (mapa).
'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion.
Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As Boolean 'ignore
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub.
If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial.
Private totalProdsVariables As Int = 0
Private totalProdsVariables2 As Int = 0
@@ -951,7 +951,7 @@ Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As
If thisLog Then Log("Total prods variables2=" & totalProdsVariables2 & ", requeridos2=" & promoMap.Get("prodsVariables2Requeridos"))
Private res As Boolean = False
Log($"${totalProdsVariables2} >= ${promoMap.Get("prodsVariables2Requeridos")}"$)
' Log($"${totalProdsVariables2} >= ${promoMap.Get("prodsVariables2Requeridos")}"$)
If totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE
If totalProdsVariables2 >= promoMap.Get("prodsVariables2Requeridos") Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE
@@ -1274,7 +1274,7 @@ Sub pedidoGuardado As Boolean
g.Position=0
If g.GetString("gestion") = "2" Then guardado = True
End If
Log($"Guardado=${guardado}"$)
' Log($"Guardado=${guardado}"$)
Return guardado
End Sub