diff --git a/.gitignore b/.gitignore
index 618d244..c9b146c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-**/Objects
-**/AutoBackups
+**/Objects/
+**/AutoBackups/
*.meta
\ No newline at end of file
diff --git a/B4A/DBCheck.b4a b/B4A/DBCheck.b4a
index 544070e..a52a271 100644
--- a/B4A/DBCheck.b4a
+++ b/B4A/DBCheck.b4a
@@ -3,19 +3,22 @@ File1=MainPage.bal
FileGroup1=Default Group
Group=Default Group
Library1=b4xpages
-Library2=core
-Library3=okhttputils2
-Library4=randomaccessfile
-Library5=sql
-Library6=byteconverter
+Library2=byteconverter
+Library3=contentresolver
+Library4=core
+Library5=okhttputils2
+Library6=randomaccessfile
+Library7=sql
+Library8=appupdating
ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~~\n~AddActivityText(main,~\n~~\n~~\n~~\n~~\n~)
Module1=|relative|..\B4XMainPage
Module2=DBRequestManager
-Module3=Starter
-Module4=Subs
+Module3=FileHandler
+Module4=Starter
+Module5=Subs
NumberOfFiles=1
-NumberOfLibraries=6
-NumberOfModules=4
+NumberOfLibraries=8
+NumberOfModules=5
Version=12.2
@EndOfDesignText@
#Region Project Attributes
diff --git a/B4A/DBCheck.b4a.meta b/B4A/DBCheck.b4a.meta
index 8fecc10..92b8166 100644
--- a/B4A/DBCheck.b4a.meta
+++ b/B4A/DBCheck.b4a.meta
@@ -3,16 +3,19 @@ ModuleBookmarks1=
ModuleBookmarks2=
ModuleBookmarks3=
ModuleBookmarks4=
+ModuleBookmarks5=
ModuleBreakpoints0=
ModuleBreakpoints1=
ModuleBreakpoints2=
ModuleBreakpoints3=
ModuleBreakpoints4=
+ModuleBreakpoints5=
ModuleClosedNodes0=2,6
-ModuleClosedNodes1=
+ModuleClosedNodes1=2
ModuleClosedNodes2=
-ModuleClosedNodes3=1
-ModuleClosedNodes4=
-NavigationStack=B4XMainPage,l_ruta2_LongClick,377,6,B4XMainPage,B4XPage_CloseRequest,375,0,B4XMainPage,b_guardaRuta_Click,392,5,B4XMainPage,JobDone,368,0,B4XMainPage,b_enviar_Click,125,0,Visual Designer,MainPage.bal,-100,6,B4XMainPage,B4XPage_Appear,109,0,Subs,panelOculto,91,0,B4XMainPage,Class_Globals,13,0,Subs,dameDiaSemana,139,0
+ModuleClosedNodes3=
+ModuleClosedNodes4=1
+ModuleClosedNodes5=
+NavigationStack=B4XMainPage,b_enviar_Click,158,0,B4XMainPage,JobDone,368,0,Subs,panelOculto,91,0,Subs,dameDiaSemana,139,0,B4XMainPage,B4XPage_CloseRequest,375,0,B4XMainPage,B4XPage_Created,51,6,Visual Designer,MainPage.bal,-100,6,B4XMainPage,Class_Globals,7,5,B4XMainPage,B4XPage_Appear,95,6,B4XMainPage,b_cargarBD_Click,398,2
SelectedBuild=0
-VisibleModules=1,4
+VisibleModules=1,5,3
diff --git a/B4A/FileHandler.bas b/B4A/FileHandler.bas
new file mode 100644
index 0000000..4343a9c
--- /dev/null
+++ b/B4A/FileHandler.bas
@@ -0,0 +1,163 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=11
+@EndOfDesignText@
+'Requiere la librería "ContentResolver" y "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/mainpage.bal b/B4A/Files/mainpage.bal
index ce6f8f1..f2a5461 100644
Binary files a/B4A/Files/mainpage.bal and b/B4A/Files/mainpage.bal differ
diff --git a/B4A/Objects/AndroidManifest.xml b/B4A/Objects/AndroidManifest.xml
index d778016..4a16608 100644
--- a/B4A/Objects/AndroidManifest.xml
+++ b/B4A/Objects/AndroidManifest.xml
@@ -56,5 +56,13 @@
android:name=".httputils2service$httputils2service_BR"
android:exported="true">
+
+
+
+
\ No newline at end of file
diff --git a/B4XMainPage.bas b/B4XMainPage.bas
index 01ca095..17405b7 100644
--- a/B4XMainPage.bas
+++ b/B4XMainPage.bas
@@ -7,11 +7,10 @@ Version=9.85
#Region Shared 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
'Ctrl + click to sync files con Github Desktop ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\
#End Region
-'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip
-
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
@@ -39,6 +38,11 @@ Sub Class_Globals
Private l_progressDialog As Label
Private p_editaRuta As Panel
Private p_editaAlmacen As Panel
+ Private b_cargarBD As Button
+ Private p_datos As Panel
+ Private p_principal As Panel
+ Private l_appInfo As Label
+ Dim empresa, appVersion As String
End Sub
Public Sub Initialize
@@ -49,8 +53,11 @@ End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
+ p_principal.Width = Root.Width
+ p_principal.Height = Root.Height
+ Subs.centraPanel(p_datos, Root.Width)
reqManager.Initialize(Me, "http://187.189.244.154:1782")
- B4XPages.SetTitle(Me, "Mariana revisión de BD")
+ B4XPages.SetTitle(Me, "Revisión de BD")
Subs.centraPanel(p_progressDialog, Root.Width)
Subs.centraPanel(p_editaRuta, Root.Width)
Subs.centraPanel(p_editaAlmacen, Root.Width)
@@ -86,14 +93,25 @@ Sub B4XPage_Appear
Log($"Existe BD: ${File.Exists(File.DirInternal, "kmt.db") }"$)
If File.Exists(File.DirInternal, "kmt.db") Then
If Not(skmt.IsInitialized) Then skmt.Initialize(File.DirInternal,"kmt.db", True)
+ Dim ai As Cursor = skmt.ExecQuery($"select CAT_VA_DESCRIPCION, CAT_VA_VALOR from cat_variables where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_VERSION'"$)
+ If ai.RowCount > 1 Then
+ For i = 0 To ai.RowCount -1
+ ai.Position = i
+ If ai.GetString("CAT_VA_DESCRIPCION") = "EMPRESA" Then empresa = ai.GetString("CAT_VA_VALOR")
+ If ai.GetString("CAT_VA_DESCRIPCION") = "APP_VERSION" Then appVersion = ai.GetString("CAT_VA_VALOR")
+ Next
+ l_appInfo.Text = $"${empresa} ${appVersion}"$
+ End If
Dim c As Cursor = skmt.ExecQuery($"select count(distinct pe_cliente) as pedidos, group_concat(distinct substr(pe_fecha, 4,2)) as diasVenta, sum(pe_costo_tot) as total, (select PE_CANT from pedido where PE_CANT = 0) as cantsEnCero, (select count(PE_CLIENTE) from pedido where printf("%d", PE_CLIENTE) <> PE_CLIENTE ) as clienteNoNumerico from pedido"$)
Log(c.RowCount)
If c.RowCount > 0 Then
c.Position = 0
l_pedidos2.Text = c.GetString("pedidos")
- l_diasVenta.Text = c.GetString("diasVenta")
- l_totalVenta.Text = "$" & NumberFormat2(c.GetString("total"), 1, 2, 2, True)
- l_cantsEnCero.Text = c.GetString("cantsEnCero")
+ l_diasVenta.Text = "N/A"
+ If c.GetString("diasVenta") <> Null Then l_diasVenta.Text = c.GetString("diasVenta")
+ If c.GetString("total") <> Null Then l_totalVenta.Text = "$" & NumberFormat2(c.GetString("total"), 1, 2, 2, True) Else l_totalVenta.Text = "0"
+ l_cantsEnCero.Text = "0"
+ If c.GetString("cantsEnCero") <> Null Then l_cantsEnCero.Text = c.GetString("cantsEnCero")
l_clienteNoNumerico.Text = c.GetString("clienteNoNumerico")
End If
Dim c As Cursor = skmt.ExecQuery("select pe_ruta from pedido")
@@ -380,6 +398,15 @@ Private Sub B4XPage_CloseRequest As ResumableSub
Return False
End Sub
+Private Sub b_cargarBD_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.
+ skmt.Initialize(File.DirInternal,"kmt.db", True) 'Reiniciliza la base de datos con la recien importada.
+ ToastMessageShow("¡BD importada!", False)
+End Sub
+
Private Sub l_ruta2_LongClick
p_editaRuta.Top = l_ruta2.top
p_editaRuta.Visible = True