diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas
index 48b4b43..b000e7a 100644
--- a/B4A/B4XMainPage.bas
+++ b/B4A/B4XMainPage.bas
@@ -28,6 +28,7 @@ Sub Class_Globals
Dim cmd As DBCommand
Dim skmt As SQL
Public principal As C_Principal
+ Public checklist As C_Cheklist
Private i_engrane As ImageView
Private b_entrar As Button
Private l_version As Label
@@ -45,6 +46,7 @@ Sub Class_Globals
Dim server As String = ""
Private et_server As EditText
Private p_Main As Panel
+ Dim rp As RuntimePermissions
End Sub
Public Sub Initialize
@@ -57,6 +59,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Root.LoadLayout("MainPage")
principal.Initialize
B4XPages.AddPage("Principal", principal)
+ checklist.Initialize
+ B4XPages.AddPage("checklist",checklist)
If File.Exists(File.DirInternal, "kmt.db") = False Then
File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db")
End If
@@ -64,6 +68,13 @@ Private Sub B4XPage_Created (Root1 As B4XView)
skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'FECHA'")
Subs.guardaAppInfo
l_version.Text = Application.VersionName
+ skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CHECKLIST2(USUARIO TEXT, PLACA TEXT, FECHA_CAPTURA TEXT, TARJETA_CIRCULACION TEXT, POLIZA_SEGURO TEXT, LICENCIA_CONDUCIR TEXT, LIMPIA_EXTERNA TEXT, LIMPIA_INTERNA TEXT, TRIANGULO TEXT, GATO TEXT, LLANTA_REFACCION TEXT, CARROCERIA TEXT, CARROCERIA_COMENTARIOS TEXT, LUCES TEXT, LUCES_COMENTARIOS TEXT, CONDICION_PLACAS TEXT, CONDICION_PLACAS_COMENTARIOS TEXT, CONDICION_LLANTAS_DEL_DER TEXT, CONDICION_LLANTAS_DEL_IZQ TEXT, CONDICION_LLANTAS_TRASERA_DER TEXT, CONDICION_LLANTAS_TRASERA_IZQ TEXT, ACEITE TEXT, ANTICONGELANTE TEXT, FRENOS TEXT, AIRE TEXT, FUGAS TEXT, COMETARIOS_FUGAS TEXT, FOTO1 BLOB, FOTO12 BLOB, FOTO3 BLOB, FOTO4 BLOB, KILIMETRAJE TEXT, RUTA TEXT)")
+ skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CHECADO_CHECK(CHECADO TEXT)")
+ skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PLACAS(PLACA TEXT)")
+ skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTAA (RUTAA TEXT)")
+ Subs.agregaColumna("kmt_info","limitecredito","TEXT")
+ Subs.agregaColumna("kmt_info","SALDODISP","TEXT")
+ Subs.agregaColumna("kmt_info","BCREDITO","TEXT")
End Sub
Sub B4XPage_Appear
diff --git a/B4A/C_Cheklist.bas b/B4A/C_Cheklist.bas
new file mode 100644
index 0000000..a067a1b
--- /dev/null
+++ b/B4A/C_Cheklist.bas
@@ -0,0 +1,803 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=12.5
+@EndOfDesignText@
+Sub Class_Globals
+ Private Root As B4XView 'ignore
+ Private xui As XUI 'ignore
+ Private p_check As Panel
+ Private sv_datos As ScrollView
+
+ Private camEx As CameraExClass
+ Dim frontCamera As Boolean = False
+ Private p_cam As Panel
+ Dim nombrefoto As String = "0"
+ Dim nombrefoto1 As String = "0"
+ Dim nombrefoto2 As String = "0"
+ Dim nombrefoto3 As String = "0"
+ Private p_camara As Panel
+ Private teclado As IME
+ Dim fototomada As String
+ Private ImageView1 As ImageView
+ Private ImageView3 As ImageView
+ Private ImageView2 As ImageView
+ Private ImageView4 As ImageView
+ Private b_foto As Button
+ Dim device As Phone
+ Dim MES1 As ManageExternalStorage
+ Dim x As Int = 0
+ Private rb_docsi1 As RadioButton
+ Private rb_docno1 As RadioButton
+ Private rb_docsi2 As RadioButton
+ Private rb_docno2 As RadioButton
+ Private rb_docsi3 As RadioButton
+ Private rb_docno3 As RadioButton
+ Private rb_docsi4 As RadioButton
+ Private rb_docno4 As RadioButton
+ Private rb_docsi5 As RadioButton
+ Private rb_docno5 As RadioButton
+ Private rb_docsi6 As RadioButton
+ Private rb_docno6 As RadioButton
+ Private rb_docsi7 As RadioButton
+ Private rb_docno7 As RadioButton
+ Private rb_docsi8 As RadioButton
+ Private rb_docno8 As RadioButton
+ Private rb_docsi9 As RadioButton
+ Private rb_docno9 As RadioButton
+ Private rb_docsi10 As RadioButton
+ Private rb_docno10 As RadioButton
+ Private rb_docsi11 As RadioButton
+ Private rb_docno11 As RadioButton
+ Private rb_docsi12 As RadioButton
+ Private rb_docno12 As RadioButton
+ Private rb_docsi13 As RadioButton
+ Private rb_docno13 As RadioButton
+ Private rb_docsi14 As RadioButton
+ Private rb_docno14 As RadioButton
+ Private rb_docsi15 As RadioButton
+ Private rb_docno15 As RadioButton
+ Private rb_docsi16 As RadioButton
+ Private rb_docno16 As RadioButton
+ Private rb_docsi17 As RadioButton
+ Private rb_docno17 As RadioButton
+ Private rb_docsi18 As RadioButton
+ Private rb_docno18 As RadioButton
+ Private rb_docsi19 As RadioButton
+ Private rb_docno19 As RadioButton
+ Private et_carroceria As EditText
+ Private et_luces As EditText
+ Private et_placas As EditText
+ Private et_liquidos As EditText
+
+ Dim p1 As String
+ Dim p2 As String
+ Dim p3 As String
+ Dim p4 As String
+ Dim p5 As String
+ Dim p6 As String
+ Dim p7 As String
+ Dim p8 As String
+ Dim p9 As String
+ Dim p10 As String
+ Dim p11 As String
+ Dim p12 As String
+ Dim p13 As String
+ Dim p14 As String
+ Dim p15 As String
+ Dim p16 As String
+ Dim p17 As String
+ Dim p18 As String
+ Dim p19 As String
+ Private cb_izqdel As B4XComboBox
+ Private cb_derdel As B4XComboBox
+ Private cb_izqatras As B4XComboBox
+ Private cb_deratras As B4XComboBox
+ Dim itemselect1 As String
+ Dim itemselect2 As String
+ Dim itemselect3 As String
+ Dim itemselect4 As String
+ Dim foto1() As Byte
+ Dim foto2() As Byte
+ Dim foto3() As Byte
+ Dim foto4() As Byte
+ Dim c As Cursor
+ Dim reqManager As DBRequestManager
+ Private l_placa As Label
+ Private et_km As EditText
+ Private logo As ImageView
+End Sub
+
+'You can add more parameters here.
+Public Sub Initialize As Object
+ Return Me
+End Sub
+
+'This event will be called once, before the page becomes visible.
+Private Sub B4XPage_Created (Root1 As B4XView)
+ Root = Root1
+ Root.LoadLayout("checklist")
+
+ sv_datos.Height = Root.Height
+ sv_datos.Width = Root.Width
+ sv_datos.Panel.LoadLayout("check2")
+ sv_datos.Panel.Height = p_check.Height
+ p_check.Width = Root.Width
+ p_camara.Width = Root.Width
+ p_camara.Height = Root.Height
+
+
+ Dim items As List
+ items.Initialize
+ items.Add("100%")
+ items.Add("75%")
+ items.Add("50%")
+ items.Add("25%")
+ cb_deratras.SetItems(items)
+ cb_izqatras.SetItems(items)
+ cb_derdel.SetItems(items)
+ cb_izqdel.SetItems(items)
+ itemselect1 = "100%"
+ itemselect2 = "100%"
+ itemselect3 = "100%"
+ itemselect4 = "100%"
+
+ reqManager.Initialize(Me, B4XPages.MainPage.server)
+End Sub
+
+Private Sub B4XPage_Appear
+ c = B4XPages.MainPage.skmt.ExecQuery("SELECT PLACA FROM PLACAS")
+ c.Position = 0
+ Log(c.GetString("PLACA"))
+ l_placa.Text = c.GetString("PLACA")
+ c.Close
+ B4XPages.MainPage.rp.CheckAndRequest(B4XPages.MainPage.rp.PERMISSION_CAMERA)
+ Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
+ If Result Then
+' camEx.Initialize(p_cam, frontCamera, Me, "Camera1")
+' frontCamera = camEx.Front
+ Log("inicializamos Camara")
+ Else
+ ToastMessageShow("No permission Camara!!!", 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("Esta aplicación requiere acceso a todos los archivos, habilite la opción", "Administrar todos los archivos")
+ Wait For Msgbox_Result(Res As Int)
+ Log("Getting permission")
+ MES1.GetPermission
+ Wait For MES_StorageAvailable
+ End If
+ End If
+ p_camara.Visible = False
+
+
+' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
+' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
+' If Result Then
+' Log("conpermisos para escritura")
+' Else
+' ToastMessageShow("No permission Escritura!!!", True)
+' End If
+'
+' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_EXTERNAL_STORAGE)
+' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
+' If Result Then
+' Log("conpermisos para escritura")
+' Else
+' ToastMessageShow("No permission Lectura!!!", True)
+' End If
+
+
+End Sub
+
+Private Sub B4XPage_CloseRequest As ResumableSub
+ ' BACK key pressed
+ If p_camara.visible Then
+ p_camara.visible = False
+ StopCamera2
+ Else
+ B4XPages.ShowPage("principal")
+ End If
+ ' Returning False signals the system to handle the key
+ Return False
+End Sub
+
+Private Sub InitializeCamera2
+ B4XPages.MainPage.rp.CheckAndRequest(B4XPages.MainPage.rp.PERMISSION_CAMERA)
+ Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
+ If Result Then
+ camEx.Initialize(p_cam, frontCamera, Me, "Camera1")
+ frontCamera = camEx.Front
+ Log("inicializamos Camara")
+ Else
+ ToastMessageShow("No permission Camara!!!", True)
+ End If
+End Sub
+
+Sub Camera1_Ready (Success As Boolean)
+ Log("Camara ready")
+ If Success Then
+ camEx.SetJpegQuality(90)
+ camEx.SetContinuousAutoFocus
+ camEx.CommitParameters
+ camEx.StartPreview
+ Log(camEx.GetPreviewSize)
+ Else
+ ToastMessageShow("Cannot open camera.", True)
+ Log("Cannot open camera")
+ End If
+End Sub
+
+Sub Camera1_PictureTaken (Data()As Byte)
+ If x = 1 Then
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ nombrefoto = DateTime.Now & "_FOTO1.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto
+
+ Else If x = 2 Then
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ nombrefoto1 = DateTime.Now & "_FOTO2.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto1
+
+ Else If x = 3 Then
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ nombrefoto2 = DateTime.Now & "_FOTO3.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto2
+
+ Else If x = 4 Then
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ nombrefoto3 = DateTime.Now & "_FOTO4.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto3
+
+ End If
+
+ Log("tome foto")
+ Dim filename As String = fototomada
+ Dim Dirp As String = File.DirInternal
+ Dim Dir As String
+ Dim Dir2 As String
+ Try
+ File.MakeDir(Dirp,"/md")
+ Dir = "/md"
+ Log("creado en promotoria " & Dirp & Dir)
+ Catch
+ Dir = ""
+ Log("creado en raiz")
+ End Try
+
+ Try
+ File.MakeDir(Dirp & Dir,"/reduccion")
+ Dir2 = "/reduccion"
+ Log("creado en promotoria " & Dirp & Dir & Dir2)
+ Catch
+ Dir = ""
+ Log("creado en raiz")
+ End Try
+
+ camEx.SavePictureToFile(Data, Dirp&Dir, filename)
+ camEx.StartPreview 'restart preview
+' ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True)
+ Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename)
+ p_camara.Visible = False
+
+ Log(nombrefoto)
+ Log(nombrefoto1)
+ Log(nombrefoto2)
+ Log(nombrefoto3)
+
+ If nombrefoto <> "0" Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, True)
+ img.WriteToStream(out, 100, "PNG")
+' foto1 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto)
+
+ out.Close
+ ImageView1.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto)
+
+ End If
+
+ If nombrefoto1 <> "0" Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+' foto2 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto1)
+
+ out.Close
+ ImageView2.Bitmap = LoadBitmap(File.DirInternal & Dir& Dir2,nombrefoto1)
+ End If
+
+ If nombrefoto2 <> "0" Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+' foto3 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto2)
+
+ out.Close
+ ImageView3.Bitmap = LoadBitmap(File.DirInternal & Dir& Dir2,nombrefoto2)
+ End If
+
+ If nombrefoto3 <> "0" Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+' foto4 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3)
+
+ out.Close
+ ImageView4.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto3)
+ End If
+
+ StopCamera2
+
+End Sub
+
+Private Sub p_camara_Click
+
+End Sub
+
+Private Sub b_foto_Click
+ camEx.TakePicture
+ p_camara.Visible = False
+' StopCamera2
+End Sub
+
+Private Sub StopCamera2
+' Capturing = False
+ If camEx.IsInitialized Then
+ camEx.Release
+ End If
+End Sub
+
+Private Sub ImageView1_Click
+
+ x = 1
+ InitializeCamera2
+ p_camara.Visible = True
+
+End Sub
+
+Private Sub ImageView2_Click
+
+ x = 2
+ InitializeCamera2
+ p_camara.Visible = True
+
+End Sub
+
+Private Sub ImageView3_Click
+
+ x = 3
+ InitializeCamera2
+ p_camara.Visible = True
+
+End Sub
+
+Private Sub ImageView4_Click
+
+ x = 4
+ InitializeCamera2
+ p_camara.Visible = True
+
+End Sub
+
+Private Sub rb_docno1_CheckedChange(Checked As Boolean)
+ p1 = "No"
+End Sub
+
+Private Sub rb_docsi1_CheckedChange(Checked As Boolean)
+ p1 = "Si"
+End Sub
+
+Private Sub rb_docno2_CheckedChange(Checked As Boolean)
+ p2 = "No"
+End Sub
+
+Private Sub rb_docsi2_CheckedChange(Checked As Boolean)
+ p2 = "Si"
+End Sub
+
+Private Sub rb_docno3_CheckedChange(Checked As Boolean)
+ p3 = "No"
+End Sub
+
+Private Sub rb_docsi3_CheckedChange(Checked As Boolean)
+ p3 = "Si"
+End Sub
+
+Private Sub rb_docno4_CheckedChange(Checked As Boolean)
+ p4 = "No"
+End Sub
+
+Private Sub rb_docsi4_CheckedChange(Checked As Boolean)
+ p4 = "Si"
+End Sub
+
+Private Sub rb_docno5_CheckedChange(Checked As Boolean)
+ p5 = "No"
+End Sub
+
+Private Sub rb_docsi5_CheckedChange(Checked As Boolean)
+ p5 = "Si"
+End Sub
+
+Private Sub rb_docno6_CheckedChange(Checked As Boolean)
+ p6 = "No"
+End Sub
+
+Private Sub rb_docsi6_CheckedChange(Checked As Boolean)
+ p6 = "Si"
+End Sub
+
+Private Sub rb_docno7_CheckedChange(Checked As Boolean)
+ p7 = "No"
+End Sub
+
+Private Sub rb_docsi7_CheckedChange(Checked As Boolean)
+ p7 = "Si"
+End Sub
+
+Private Sub rb_docno8_CheckedChange(Checked As Boolean)
+ p8 = "No"
+End Sub
+
+Private Sub rb_docsi8_CheckedChange(Checked As Boolean)
+ p8 = "Si"
+End Sub
+
+Private Sub rb_docno9_CheckedChange(Checked As Boolean)
+ p9 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi9_CheckedChange(Checked As Boolean)
+ p9 = "Correcto"
+End Sub
+
+Private Sub rb_docno11_CheckedChange(Checked As Boolean)
+ p11 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi11_CheckedChange(Checked As Boolean)
+ p11 = "Correcto"
+End Sub
+
+Private Sub rb_docno13_CheckedChange(Checked As Boolean)
+ p13 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi13_CheckedChange(Checked As Boolean)
+ p13 = "Correcto"
+End Sub
+
+Private Sub rb_docno15_CheckedChange(Checked As Boolean)
+ p15 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi15_CheckedChange(Checked As Boolean)
+ p15 = "Correcto"
+End Sub
+
+Private Sub rb_docno16_CheckedChange(Checked As Boolean)
+ p16 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi16_CheckedChange(Checked As Boolean)
+ p16 = "Correcto"
+End Sub
+
+Private Sub rb_docno17_CheckedChange(Checked As Boolean)
+ p17 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi17_CheckedChange(Checked As Boolean)
+ p17 = "Correcto"
+End Sub
+
+Private Sub rb_docno18_CheckedChange(Checked As Boolean)
+ p18 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi18_CheckedChange(Checked As Boolean)
+ p18 = "Correcto"
+End Sub
+
+Private Sub rb_docno19_CheckedChange(Checked As Boolean)
+ p19 = "Incorrecto"
+End Sub
+
+Private Sub rb_docsi19_CheckedChange(Checked As Boolean)
+ p19 = "Correcto"
+End Sub
+
+Private Sub cb_izqdel_SelectedIndexChanged (Index As Int)
+ itemselect1 = cb_izqdel.SelectedItem
+ Log(itemselect1)
+End Sub
+
+Private Sub cb_izqatras_SelectedIndexChanged (Index As Int)
+ itemselect2 = cb_izqatras.SelectedItem
+ Log(itemselect2)
+End Sub
+
+Private Sub cb_derdel_SelectedIndexChanged (Index As Int)
+ itemselect3 = cb_derdel.SelectedItem
+ Log(itemselect3)
+End Sub
+
+Private Sub cb_deratras_SelectedIndexChanged (Index As Int)
+ itemselect4 = cb_deratras.SelectedItem
+ Log(itemselect4)
+End Sub
+
+Private Sub b_guardar_Click
+
+ Dim Dirp As String = File.DirInternal
+ Dim Dir As String
+ Dim Dir2 As String
+ Try
+ File.MakeDir(Dirp,"/md")
+ Dir = "/md"
+ Log("creado en promotoria " & Dirp & Dir)
+ Catch
+ Dir = ""
+ Log("creado en raiz")
+ End Try
+
+ Try
+ File.MakeDir(Dirp & Dir,"/reduccion")
+ Dir2 = "/reduccion"
+ Log("creado en promotoria " & Dirp & Dir & Dir2)
+ Catch
+ Dir = ""
+ Log("creado en raiz")
+ End Try
+
+ DateTime.TimeFormat="HH:mm:ss"
+ DateTime.DateFormat="dd/MM/yyyy"
+ Dim checkdate As String = DateTime.Date(DateTime.Now)
+ Dim checktime As String = DateTime.Time(DateTime.Now)
+ If et_km.Text <> "" Then
+ If rb_docno1.Checked Or rb_docsi1.Checked Then
+ If rb_docno2.Checked Or rb_docsi2.Checked Then
+ If rb_docno3.Checked Or rb_docsi3.Checked Then
+ If rb_docno4.Checked Or rb_docsi4.Checked Then
+ If rb_docno5.Checked Or rb_docsi5.Checked Then
+ If rb_docno6.Checked Or rb_docsi6.Checked Then
+ If rb_docno7.Checked Or rb_docsi7.Checked Then
+ If rb_docno8.Checked Or rb_docsi8.Checked Then
+ If rb_docno9.Checked Or rb_docsi9.Checked Then
+ If (rb_docno9.Checked And et_carroceria.Text <> "") Or (rb_docsi9.Checked And et_carroceria.Text = "") Then
+ If rb_docno11.Checked Or rb_docsi11.Checked Then
+ If (rb_docno11.Checked And et_luces.Text <> "") Or (rb_docsi11.Checked And et_luces.Text = "") Then
+ If rb_docno13.Checked Or rb_docsi13.Checked Then
+ If (rb_docno13.Checked And et_placas.Text <> "") Or (rb_docsi13.Checked And et_placas.Text = "") Then
+ If rb_docno15.Checked Or rb_docsi15.Checked Then
+ If rb_docno16.Checked Or rb_docsi16.Checked Then
+ If rb_docno17.Checked Or rb_docsi17.Checked Then
+ If rb_docno18.Checked Or rb_docsi18.Checked Then
+ If rb_docno19.Checked Or rb_docsi19.Checked Then
+ If et_liquidos.Text <> "" And (rb_docno15.Checked Or rb_docno16.Checked Or rb_docno17.Checked Or rb_docno18.Checked Or rb_docno19.Checked) Or et_liquidos.Text = "" And (rb_docsi15.Checked And rb_docsi16.Checked And rb_docsi17.Checked And rb_docsi18.Checked And rb_docsi19.Checked) Then
+ If nombrefoto <> "0" And nombrefoto1 <> "0" And nombrefoto2 <> "0" And nombrefoto3 <> "0" Then
+ c = B4XPages.MainPage.skmt.ExecQuery("SELECT RUTAA FROM RUTAA")
+ c.Position = 0
+ Private rutacheck As String = c.GetString("RUTAA")
+ c.Close
+ B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM CHECKLIST2")
+ B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CHECKLIST2(USUARIO, PLACA, FECHA_CAPTURA, TARJETA_CIRCULACION , POLIZA_SEGURO, LICENCIA_CONDUCIR, LIMPIA_EXTERNA, LIMPIA_INTERNA, TRIANGULO, GATO, LLANTA_REFACCION, CARROCERIA, CARROCERIA_COMENTARIOS, LUCES, LUCES_COMENTARIOS, CONDICION_PLACAS, CONDICION_PLACAS_COMENTARIOS, CONDICION_LLANTAS_DEL_DER, CONDICION_LLANTAS_DEL_IZQ, CONDICION_LLANTAS_TRASERA_DER, CONDICION_LLANTAS_TRASERA_IZQ, ACEITE, ANTICONGELANTE, FRENOS, AIRE, FUGAS, COMETARIOS_FUGAS, FOTO1, FOTO12, FOTO3, FOTO4, KILIMETRAJE,RUTA) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",Array As Object(B4XPages.MainPage.usuario,l_placa.Text,checkdate&" "&checktime,p1,p2,p3,p4,p5,p6,p7,p8,p9,et_carroceria.Text,p11,et_luces.Text,p13,et_placas.Text,itemselect1,itemselect2,itemselect3,itemselect4,p15,p16,p17,p18,p19,et_liquidos.Text,File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto1),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto2),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3), et_km.Text, rutacheck))
+
+
+ mandaPendientes
+
+ rb_docno1.Checked = False
+ rb_docno2.Checked = False
+ rb_docno3.Checked = False
+ rb_docno4.Checked = False
+ rb_docno5.Checked = False
+ rb_docno6.Checked = False
+ rb_docno7.Checked = False
+ rb_docno8.Checked = False
+ rb_docno9.Checked = False
+ rb_docno11.Checked = False
+ rb_docno13.Checked = False
+ rb_docno15.Checked = False
+ rb_docno16.Checked = False
+ rb_docno17.Checked = False
+ rb_docno18.Checked = False
+ rb_docno19.Checked = False
+
+ rb_docsi1.Checked = False
+ rb_docsi2.Checked = False
+ rb_docsi3.Checked = False
+ rb_docsi4.Checked = False
+ rb_docsi5.Checked = False
+ rb_docsi6.Checked = False
+ rb_docsi7.Checked = False
+ rb_docsi8.Checked = False
+ rb_docsi9.Checked = False
+ rb_docsi11.Checked = False
+ rb_docsi13.Checked = False
+ rb_docsi15.Checked = False
+ rb_docsi16.Checked = False
+ rb_docsi17.Checked = False
+ rb_docsi18.Checked = False
+ rb_docsi19.Checked = False
+
+ cb_deratras.SelectedIndex = 0
+ cb_derdel.SelectedIndex = 0
+ cb_izqatras.SelectedIndex = 0
+ cb_izqdel.SelectedIndex = 0
+
+ et_carroceria.Text = ""
+ et_liquidos.Text = ""
+ et_luces.Text = ""
+ et_placas.Text = ""
+
+ ImageView1.Bitmap = LoadBitmap(File.DirAssets,"frontal1.png")
+ ImageView2.Bitmap = LoadBitmap(File.DirAssets,"derecha1.png")
+ ImageView3.Bitmap = LoadBitmap(File.DirAssets,"atras1.png")
+ ImageView4.Bitmap = LoadBitmap(File.DirAssets,"izquierda1.png")
+
+ nombrefoto = "0"
+ nombrefoto1 = "0"
+ nombrefoto2 = "0"
+ nombrefoto3 = "0"
+
+ B4XPages.ShowPage("Principal")
+ Else
+ MsgboxAsync("Favor de tomar todas las fotos","Atención")
+ End If
+ Else
+ MsgboxAsync("Especifica Fugas o detallaes en los liquidos","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Fugas","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Aire","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Frenos","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Anticongelante","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Aceite","Atención")
+ End If
+ Else
+ MsgboxAsync("Especifica daños en las condiciones de placas","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Conciciones de placas de Correcto","Atención")
+ End If
+ Else
+ MsgboxAsync("Especifica daños en las luces","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Funcionamiento de luces de Correcto","Atención")
+ End If
+ Else
+ MsgboxAsync("Especifica daños en la carrocería","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Carrocería de Buen estado","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Seguridad y refación de Llanta de refacción","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Seguridad y refación de gato","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Seguridad y refación de Triagulo reflectante","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Limpieza unidad interna","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Limpieza unidad externa","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Documentación viegnte de Licencia de conducir","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Documentación viegnte de Póliza de seguro","Atención")
+ End If
+ Else
+ MsgboxAsync("Seleeciona una opción en Documentación viegnte de tarjeta de circulación","Atención")
+ End If
+ Else
+ MsgboxAsync("Captura el kilometraje inicial.","Atención")
+ End If
+
+End Sub
+
+Sub mandaPendientes
+ Log("MandaPendientes")
+ 'PEDIDO (Pendientes)
+ c=B4XPages.MainPage.skmt.ExecQuery("SELECT USUARIO, PLACA, FECHA_CAPTURA, TARJETA_CIRCULACION , POLIZA_SEGURO, LICENCIA_CONDUCIR, LIMPIA_EXTERNA, LIMPIA_INTERNA, TRIANGULO, GATO, LLANTA_REFACCION, CARROCERIA, CARROCERIA_COMENTARIOS, LUCES, LUCES_COMENTARIOS, CONDICION_PLACAS, CONDICION_PLACAS_COMENTARIOS, CONDICION_LLANTAS_DEL_DER, CONDICION_LLANTAS_DEL_IZQ, CONDICION_LLANTAS_TRASERA_DER, CONDICION_LLANTAS_TRASERA_IZQ, ACEITE, ANTICONGELANTE, FRENOS, AIRE, FUGAS, COMETARIOS_FUGAS, FOTO1, FOTO12, FOTO3, FOTO4 FROM CHECKLIST2")
+ Log($"Pedido PENDIENTE: ${c.RowCount}"$)
+ If c.RowCount > 0 Then
+ For i = 0 To c.RowCount -1
+ c.Position=i
+ Dim cmd As DBCommand
+
+ foto1 = c.GetBlob("FOTO1")
+ foto2 = c.GetBlob("FOTO12")
+ foto3 = c.GetBlob("FOTO3")
+ foto4 = c.GetBlob("FOTO4")
+
+ cmd.Initialize
+ cmd.Name = "insert_CHECK_GUNA"
+ cmd.Parameters = Array As Object(C.GetString("USUARIO"),C.GetString("PLACA"),C.GetString("FECHA_CAPTURA"),C.GetString("TARJETA_CIRCULACION"),C.GetString("POLIZA_SEGURO"),C.GetString("LICENCIA_CONDUCIR"),C.GetString("LIMPIA_EXTERNA"),C.GetString("LIMPIA_INTERNA"),C.GetString("TRIANGULO"),C.GetString("GATO"), C.GetString("LLANTA_REFACCION"),C.GetString("CARROCERIA"),c.GetString("CARROCERIA_COMENTARIOS"),c.GetString("LUCES"),c.GetString("LUCES_COMENTARIOS"),c.GetString("CONDICION_PLACAS"),c.GetString("CONDICION_PLACAS_COMENTARIOS"))'c.GetString("CONDICION_PLACAS_INCORRECTO"),c.GetString("CONDICION_PLACAS_COMENTARIOS"),c.GetString("CONDICION_LLANTAS_DEL_DER"),c.GetString("CONDICION_LLANTAS_DEL_IZQ"),c.GetString("CONDICION_LLANTAS_TRASERA_DER"),c.GetString("CONDICION_LLANTAS_TRASERA_IZQ"),c.GetString("ACEITE"),c.GetString("ANTICONGELANTE"),c.GetString("FRENOS"),c.GetString("AIRE"),c.GetString("FUGAS"),c.GetString("COMETARIOS_FUGAS"),foto1,foto2,foto3,foto4,B4XPages.MainPage.principal.ALMACEN)
+ reqManager.ExecuteCommand(cmd , $"ins_checkliPendientes_head_${c.GetString("USUARIO")}"$)
+ Next
+ End If
+End Sub
+
+Sub JobDone(Job As HttpJob)
+ Log("JOBDONE CLIENTE . " & Job.Success)
+ If Job.Success = False Then
+' ToastMessageShow("Error: " & Job.ErrorMessage, True)
+' LogColor("JobDone Error: '" & reqManager.HandleJob(Job).tag, Colors.red) 'Mod por CHV - 211027
+ LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.Blue)
+ Else
+ LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green)
+ If Job.JobName = "DBRequest" Then
+ Dim resultado As DBResult = reqManager.HandleJob(Job)
+ If resultado.Tag.As(String).IndexOf("ins_checkliPendientes_head_") > -1 Then
+ Private cliente As String= resultado.Tag
+ cliente = cliente.SubString(cliente.IndexOf("_")+24)
+ Log($"Cliente1:${cliente}"$)
+
+ c=B4XPages.MainPage.skmt.ExecQuery("SELECT USUARIO, PLACA, FECHA_CAPTURA, TARJETA_CIRCULACION , POLIZA_SEGURO, LICENCIA_CONDUCIR, LIMPIA_EXTERNA, LIMPIA_INTERNA, TRIANGULO, GATO, LLANTA_REFACCION, CARROCERIA, CARROCERIA_COMENTARIOS, LUCES, LUCES_COMENTARIOS, CONDICION_PLACAS, CONDICION_PLACAS_COMENTARIOS, CONDICION_LLANTAS_DEL_DER, CONDICION_LLANTAS_DEL_IZQ, CONDICION_LLANTAS_TRASERA_DER, CONDICION_LLANTAS_TRASERA_IZQ, ACEITE, ANTICONGELANTE, FRENOS, AIRE, FUGAS, COMETARIOS_FUGAS, FOTO1, FOTO12, FOTO3, FOTO4, KILIMETRAJE, RUTA FROM CHECKLIST2")
+ Log($"Pedido PENDIENTE: ${c.RowCount}"$)
+ If c.RowCount > 0 Then
+ For i = 0 To c.RowCount -1
+ c.Position=i
+ Dim cmd As DBCommand
+
+ foto1 = c.GetBlob("FOTO1")
+ foto2 = c.GetBlob("FOTO12")
+ foto3 = c.GetBlob("FOTO3")
+ foto4 = c.GetBlob("FOTO4")
+
+ cmd.Initialize
+ cmd.Name = "update_CHECK_GUNA"
+ cmd.Parameters = Array As Object(c.GetString("CONDICION_LLANTAS_DEL_DER"),c.GetString("CONDICION_LLANTAS_DEL_IZQ"),c.GetString("CONDICION_LLANTAS_TRASERA_DER"),c.GetString("CONDICION_LLANTAS_TRASERA_IZQ"),c.GetString("ACEITE"),c.GetString("ANTICONGELANTE"),c.GetString("FRENOS"),c.GetString("AIRE"),c.GetString("FUGAS"),c.GetString("COMETARIOS_FUGAS"),foto1,foto2,foto3,foto4,Subs.traeAlmacen, C.GetString("KILIMETRAJE"),C.GetString("RUTA"), C.GetString("USUARIO"),C.GetString("PLACA"),C.GetString("FECHA_CAPTURA"))
+ reqManager.ExecuteCommand(cmd , "update")
+ Next
+ End If
+
+ 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)))
+ Next
+ Next
+ B4XPages.MainPage.skmt.ExecNonQuery("UPDATE CHECADO_CHECK set CHECADO = 1 ")
+ B4XPages.MainPage.principal.checachek
+ End If
+ End If
+
+ Job.Release
+ End If
+
+End Sub
diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas
index c7df2d0..2fc52e3 100644
--- a/B4A/C_Principal.bas
+++ b/B4A/C_Principal.bas
@@ -39,6 +39,12 @@ Sub Class_Globals
Private et_ruta As EditText
Private l_ruta1 As Label
Private l_almacen As Label
+ Dim b As Cursor
+ Private b_check As Button
+ Dim reqManager As DBRequestManager
+ Dim cmd As DBCommand
+ Dim c As Cursor
+ Dim RES As String
End Sub
'You can add more parameters here.
@@ -55,6 +61,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
End Sub
Sub B4XPage_Appear
+ reqManager.Initialize(Me, Subs.traeDBReqServer)
+ b_check.visible = True
Subs.centraPanel(p_botones, Root.Width)
b_verCartaPorte.Enabled = False
If File.Exists(File.DirInternal,"cartaPorte.pdf") Then
@@ -66,9 +74,19 @@ Sub B4XPage_Appear
End If
End If
b_descargaCartaPorte.Enabled = False
- et_ruta.Text = "131"
+' et_ruta.Text = "131"
l_almacen.Text= Subs.traeAlmacen
et_ruta.RequestFocus
+
+ c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM CHECADO_CHECK")
+
+ If c.RowCount = 0 Then
+ b_check.Visible = False
+
+ Else
+ b_check.Visible = True
+ End If
+ checachek
End Sub
Sub B4XPage_CloseRequest As ResumableSub
@@ -121,6 +139,17 @@ Private Sub b_descargaCartaPorte_Click
' VALIDAR_INFO
End If
End If
+
+ cmd.Initialize
+ cmd.Name = "select_cat_placa_guna"
+ cmd.Parameters = Array As Object(Subs.traeAlmacen,et_ruta.Text)
+ reqManager.ExecuteQuery(cmd , 0, "placa")
+
+' cmd.Initialize
+' cmd.Name = "select_cat_kmt_info_guna"
+' cmd.Parameters = Array As Object(almacen,et_ruta.Text)
+' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
+
End Sub
'Descarga del servidor el PDF de la carta porte del dia de hoy y la
@@ -134,7 +163,7 @@ Sub descargaCartaPorte
Private rutaX As String = et_ruta.text 'rutaPreventa
Private almacenX As String = Subs.traeAlmacen
'#################################
- Private almacenX As String = "2" 'almacen
+' Private almacenX As String = "2" 'almacen
'#################################
Private cartaPortePDF As String = $"CPORTE${almacenX}_${rutaX}.pdf"$
@@ -144,7 +173,8 @@ Sub descargaCartaPorte
Private pdfServer As String = "keymon.lat"
If DBReqServer.IndexOf("10.0.0.205") > -1 Then pdfServer = "10.0.0.205"
' Log(pdfServer)
- pdfURL = $"https://${pdfServer}/CartaPorteKelloggs/CartaPorteMovil${DateTime.Date(DateTime.now)}/${cartaPortePDF}"$
+ Log(DateTime.Date(DateTime.now))
+ pdfURL = $"https://${pdfServer}/CartaPorteGuna/CartaPorteMovil${DateTime.Date(DateTime.now)}/${cartaPortePDF}"$
LogColor(pdfURL,Colors.Red)
' Log("Iniciamos wait for descargaCartaPorteyProgreso")
Wait For (descargaCartaPorteyProgreso(pdfURL)) Complete (Success As Boolean)
@@ -220,9 +250,13 @@ Sub descargaCartaPorteyProgreso (urlx As String) As ResumableSub
ToastMessageShow("Carta Porte descargada exitosamente!!", False)
b_verCartaPorte.Enabled = True
-
- ' AQUI VA EL CODIGO DE CARTA PORTE DSCARGADA
-
+ ' AQUI VA EL CODIGO DE CARTA PORTE DESCARGADA!!!!!
+ B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA")
+ B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTAA(RUTAA) VALUES (?)", Array As Object (et_ruta.TEXT))
+ cmd.Initialize
+ cmd.Name = "insert_checkcp_GUNA"
+ cmd.Parameters = Array As Object(Subs.traeAlmacen,et_ruta.Text,B4XPages.MainPage.usuario)
+ reqManager.ExecuteCommand(cmd , $"ins_checkcpPendientes_head_${usuario}"$)
Subs.panelOculto(p_downloadPDF)
' p_progress1.Visible = False
@@ -349,4 +383,105 @@ Private Sub et_ruta_TextChanged (Old As String, New As String)
Else
b_descargaCartaPorte.Enabled = False
End If
+End Sub
+
+Sub checachek
+ b = B4XPages.MainPage.skmt.ExecQuery("SELECT CHECADO FROM CHECADO_CHECK")
+ If b.RowCount > 0 Then
+ b.Position = 0
+ If b.GetString("CHECADO") = 0 Then
+ b_check.Visible = True
+ Else If b.GetString("CHECADO") = 1 Then
+ b_check.Visible =False
+ End If
+ b.Close
+ End If
+End Sub
+
+Private Sub b_check_Click
+ B4XPages.ShowPage("checklist")
+End Sub
+
+Sub et_ruta_EnterPressed
+If et_ruta.Text = "FIN DIA" Then
+ RES = Msgbox2("Seguro que desea hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
+ If RES = DialogResponse.POSITIVE Then
+ et_ruta.Text = ""
+
+ B4XPages.MainPage.skmt.ExecNonQuery("delete from CHECADO_CHECK")
+ B4XPages.MainPage.skmt.ExecNonQuery("delete from CHECKLIST2")
+ B4XPages.MainPage.skmt.ExecNonQuery("delete from PLACAS")
+' Starter.skmt.ExecNonQuery("delete from kmt_info")
+
+ B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA")
+ B4XPage_Appear
+ End If
+' Starter.waypointsOrdered.Clear
+
+ End If
+End Sub
+
+Sub JobDone(Job As HttpJob)
+Log("JOBDONE CLIENTE . " & Job.Success)
+ If Job.Success = False Then
+' ToastMessageShow("Error: " & Job.ErrorMessage, True)
+' LogColor("JobDone Error: '" & reqManager.HandleJob(Job).tag, Colors.red) 'Mod por CHV - 211027
+ Else
+ LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027
+
+ If Job.JobName = "DBRequest" Then
+ Dim RESULT As DBResult = reqManager.HandleJob(Job)
+ If RESULT.Tag = "placa" Then 'query tag
+ B4XPages.MainPage.skmt.ExecNonQuery("delete from PLACAS")
+ For Each records() As Object In RESULT.Rows
+ Dim placa As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+ B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PLACAS(PLACA) VALUES (?)", Array As Object (placa))
+ B4XPage_Appear
+ Next
+ End If
+ End If
+
+' If Job.JobName = "DBRequest" Then
+' Dim RESULT As DBResult = reqManager.HandleJob(Job)
+' If RESULT.Tag = "kmt_datos" Then 'query tag
+' For Each records() As Object In RESULT.Rows
+'
+' Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_DIAS_VISITA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_LIMITECREDITO As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' Dim CAT_CL_SALDODISPONIBLE As String = records(RESULT.Columns.Get("CAT_VE_PLACAS"))
+' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(PLACA) VALUES (?)", Array As Object (placa))
+' Next
+' End If
+' End If
+
+ c = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM CHECADO_CHECK")
+ c.Position = 0
+ If c.GetString("CUANTOS") = 0 Then
+ B4XPages.MainPage.skmt.ExecNonQuery2("insert into CHECADO_CHECK (CHECADO) VALUES(?)", Array As String("0"))
+
+ Else If c.GetString("CUANTOS") = 1 Then
+
+ End If
+
+ End If
End Sub
\ No newline at end of file
diff --git a/B4A/CameraExClass.bas b/B4A/CameraExClass.bas
new file mode 100644
index 0000000..1743551
--- /dev/null
+++ b/B4A/CameraExClass.bas
@@ -0,0 +1,290 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=7.01
+@EndOfDesignText@
+
+'Class module
+'version 1.20
+'See this page for the list of constants:
+'http://developer.android.com/intl/fr/reference/android/hardware/Camera.Parameters.html
+'Note that you should use the constant values instead of the names.
+Sub Class_Globals
+ Private nativeCam As Object
+ Private cam As Camera
+ Private r As Reflector
+ Private target As Object
+ Private event As String
+ Public Front As Boolean
+ Type CameraInfoAndId (CameraInfo As Object, Id As Int)
+ Type CameraSize (Width As Int, Height As Int)
+ Private parameters As Object
+End Sub
+
+Public Sub Initialize (Panel1 As Panel, FrontCamera As Boolean, TargetModule As Object, EventName As String)
+ target = TargetModule
+ event = EventName
+ Front = FrontCamera
+ Dim id As Int
+ id = FindCamera(Front).id
+ If id = -1 Then
+ Front = Not(Front) 'try different camera
+ id = FindCamera(Front).id
+ If id = -1 Then
+ ToastMessageShow("No camera found.", True)
+ Return
+ End If
+ End If
+ cam.Initialize2(Panel1, "camera", id)
+End Sub
+
+Private Sub FindCamera (frontCamera As Boolean) As CameraInfoAndId
+ Dim ci As CameraInfoAndId
+ Dim cameraInfo As Object
+ Dim cameraValue As Int
+ If frontCamera Then cameraValue = 1 Else cameraValue = 0
+ cameraInfo = r.CreateObject("android.hardware.Camera$CameraInfo")
+ Dim numberOfCameras As Int = r.RunStaticMethod("android.hardware.Camera", "getNumberOfCameras", Null, Null)
+ For i = 0 To numberOfCameras - 1
+ r.RunStaticMethod("android.hardware.Camera", "getCameraInfo", Array As Object(i, cameraInfo), _
+ Array As String("java.lang.int", "android.hardware.Camera$CameraInfo"))
+ r.target = cameraInfo
+ If r.GetField("facing") = cameraValue Then
+ ci.cameraInfo = r.target
+ ci.Id = i
+ Return ci
+ End If
+ Next
+ ci.id = -1
+ Return ci
+End Sub
+
+Private Sub SetDisplayOrientation
+ r.target = r.GetActivity
+ r.target = r.RunMethod("getWindowManager")
+ r.target = r.RunMethod("getDefaultDisplay")
+ r.target = r.RunMethod("getRotation")
+ Dim previewResult, result, degrees As Int = r.target * 90
+ Dim ci As CameraInfoAndId = FindCamera(Front)
+ r.target = ci.CameraInfo
+ Dim orientation As Int = r.GetField("orientation")
+ If Front Then
+ previewResult = (orientation + degrees) Mod 360
+ result = previewResult
+ previewResult = (360 - previewResult) Mod 360
+ Else
+ previewResult = (orientation - degrees + 360) Mod 360
+ result = previewResult
+ Log(previewResult)
+ End If
+ r.target = nativeCam
+ r.RunMethod2("setDisplayOrientation", previewResult, "java.lang.int")
+ r.target = parameters
+ r.RunMethod2("setRotation", result, "java.lang.int")
+ CommitParameters
+End Sub
+
+Private Sub Camera_Ready (Success As Boolean)
+ If Success Then
+ r.target = cam
+ nativeCam = r.GetField("camera")
+ r.target = nativeCam
+ parameters = r.RunMethod("getParameters")
+ SetDisplayOrientation
+ Else
+ Log("success = false, " & LastException)
+ End If
+ CallSub2(target, event & "_ready", Success)
+End Sub
+
+Sub Camera_Preview (Data() As Byte)
+ If SubExists(target, event & "_preview") Then
+ CallSub2(target, event & "_preview", Data)
+ End If
+End Sub
+Public Sub TakePicture
+ cam.TakePicture
+End Sub
+
+Private Sub Camera_PictureTaken (Data() As Byte)
+ CallSub2(target, event & "_PictureTaken", Data)
+End Sub
+
+Public Sub StartPreview
+ cam.StartPreview
+End Sub
+
+Public Sub StopPreview
+ cam.StopPreview
+End Sub
+
+Public Sub Release
+ cam.Release
+End Sub
+
+'Saves the data received from PictureTaken event
+Public Sub SavePictureToFile(Data() As Byte, Dir As String, FileName As String)
+ Dim out As OutputStream = File.OpenOutput(Dir, FileName, False)
+ out.WriteBytes(Data, 0, Data.Length)
+ out.Close
+End Sub
+
+Public Sub SetParameter(Key As String, Value As String)
+ r.target = parameters
+ r.RunMethod3("set", Key, "java.lang.String", Value, "java.lang.String")
+End Sub
+
+Public Sub GetParameter(Key As String) As String
+ r.target = parameters
+ Return r.RunMethod2("get", Key, "java.lang.String")
+End Sub
+
+Public Sub CommitParameters
+ Try
+ r.target = nativeCam
+ r.RunMethod4("setParameters", Array As Object(parameters), Array As String("android.hardware.Camera$Parameters"))
+ Catch
+ ToastMessageShow("Error setting parameters.", True)
+ Log(LastException)
+ End Try
+End Sub
+
+Public Sub GetColorEffect As String
+ Return GetParameter("effect")
+End Sub
+
+Public Sub SetColorEffect(Effect As String)
+ SetParameter("effect", Effect)
+End Sub
+
+Public Sub GetSupportedPicturesSizes As CameraSize()
+ r.target = parameters
+ Dim list1 As List = r.RunMethod("getSupportedPictureSizes")
+ Dim cs(list1.Size) As CameraSize
+ For i = 0 To list1.Size - 1
+ r.target = list1.Get(i)
+ cs(i).Width = r.GetField("width")
+ cs(i).Height = r.GetField("height")
+ Next
+ Return cs
+End Sub
+
+Public Sub SetPictureSize(Width As Int, Height As Int)
+ r.target = parameters
+ r.RunMethod3("setPictureSize", Width, "java.lang.int", Height, "java.lang.int")
+End Sub
+
+Public Sub SetJpegQuality(Quality As Int)
+ r.target = parameters
+ r.RunMethod2("setJpegQuality", Quality, "java.lang.int")
+End Sub
+
+Public Sub SetFlashMode(Mode As String)
+ r.target = parameters
+ r.RunMethod2("setFlashMode", Mode, "java.lang.String")
+End Sub
+
+Public Sub GetFlashMode As String
+ r.target = parameters
+ Return r.RunMethod("getFlashMode")
+End Sub
+
+Public Sub GetSupportedFlashModes As List
+ r.target = parameters
+ Return r.RunMethod("getSupportedFlashModes")
+End Sub
+
+Public Sub GetSupportedColorEffects As List
+ r.target = parameters
+ Return r.RunMethod("getSupportedColorEffects")
+End Sub
+
+Public Sub GetPreviewSize As CameraSize
+ r.target = parameters
+ r.target = r.RunMethod("getPreviewSize")
+ Dim cs As CameraSize
+ cs.Width = r.GetField("width")
+ cs.Height = r.GetField("height")
+ Return cs
+End Sub
+
+Public Sub GetPictureSize As CameraSize
+ r.target = parameters
+ r.target = r.RunMethod("getPictureSize")
+ Dim cs As CameraSize
+ cs.Width = r.GetField("width")
+ cs.Height = r.GetField("height")
+ Return cs
+End Sub
+
+'Converts a preview image formatted in YUV format to JPEG.
+'Note that you should not save every preview image as it will slow down the whole process.
+Public Sub PreviewImageToJpeg(data() As Byte, quality As Int) As Byte()
+ Dim size, previewFormat As Object
+ r.target = parameters
+ size = r.RunMethod("getPreviewSize")
+ previewFormat = r.RunMethod("getPreviewFormat")
+ r.target = size
+ Dim width = r.GetField("width"), height = r.GetField("height") As Int
+ Dim yuvImage As Object = r.CreateObject2("android.graphics.YuvImage", _
+ Array As Object(data, previewFormat, width, height, Null), _
+ Array As String("[B", "java.lang.int", "java.lang.int", "java.lang.int", "[I"))
+ r.target = yuvImage
+ Dim rect1 As Rect
+ rect1.Initialize(0, 0, r.RunMethod("getWidth"), r.RunMethod("getHeight"))
+ Dim out As OutputStream
+ out.InitializeToBytesArray(100)
+ r.RunMethod4("compressToJpeg", Array As Object(rect1, quality, out), _
+ Array As String("android.graphics.Rect", "java.lang.int", "java.io.OutputStream"))
+ Return out.ToBytesArray
+End Sub
+
+Public Sub GetSupportedFocusModes As List
+ r.target = parameters
+ Return r.RunMethod("getSupportedFocusModes")
+End Sub
+
+Public Sub SetContinuousAutoFocus
+ Dim modes As List = GetSupportedFocusModes
+ If modes.IndexOf("continuous-picture") > -1 Then
+ SetFocusMode("continuous-picture")
+ Else If modes.IndexOf("continuous-video") > -1 Then
+ SetFocusMode("continuous-video")
+ Else
+ Log("Continuous focus mode is not available")
+ End If
+End Sub
+
+Public Sub SetFocusMode(Mode As String)
+ r.target = parameters
+ r.RunMethod2("setFocusMode", Mode, "java.lang.String")
+End Sub
+
+Public Sub GetFocusDistances As Float()
+ Dim F(3) As Float
+ r.target = parameters
+ r.RunMethod4("getFocusDistances", Array As Object(F), Array As String("[F"))
+ Return F
+End Sub
+'This method should only be called if you need to immediately release the camera.
+'For example if you need to start another application that depends on the camera.
+Public Sub CloseNow
+ cam.Release
+ r.target = cam
+ r.RunMethod2("releaseCameras", True, "java.lang.boolean")
+End Sub
+'Calls AutoFocus and then takes the picture if focus was successfull.
+Public Sub FocusAndTakePicture
+ cam.AutoFocus
+End Sub
+Private Sub Camera_FocusDone (Success As Boolean)
+ If Success Then
+ TakePicture
+ Else
+ Log("AutoFocus error.")
+ End If
+End Sub
+
+
+
diff --git a/B4A/Files/alert2.png b/B4A/Files/alert2.png
new file mode 100644
index 0000000..44d3b7e
Binary files /dev/null and b/B4A/Files/alert2.png differ
diff --git a/B4A/Files/atras.png b/B4A/Files/atras.png
new file mode 100644
index 0000000..1a5af22
Binary files /dev/null and b/B4A/Files/atras.png differ
diff --git a/B4A/Files/atras1.png b/B4A/Files/atras1.png
new file mode 100644
index 0000000..25e195c
Binary files /dev/null and b/B4A/Files/atras1.png differ
diff --git a/B4A/Files/check2.bal b/B4A/Files/check2.bal
new file mode 100644
index 0000000..b983ac0
Binary files /dev/null and b/B4A/Files/check2.bal differ
diff --git a/B4A/Files/checklist.bal b/B4A/Files/checklist.bal
new file mode 100644
index 0000000..9462b17
Binary files /dev/null and b/B4A/Files/checklist.bal differ
diff --git a/B4A/Files/derecha.png b/B4A/Files/derecha.png
new file mode 100644
index 0000000..58a1e82
Binary files /dev/null and b/B4A/Files/derecha.png differ
diff --git a/B4A/Files/derecha1.png b/B4A/Files/derecha1.png
new file mode 100644
index 0000000..ed3087b
Binary files /dev/null and b/B4A/Files/derecha1.png differ
diff --git a/B4A/Files/frintal.png b/B4A/Files/frintal.png
new file mode 100644
index 0000000..b0c6420
Binary files /dev/null and b/B4A/Files/frintal.png differ
diff --git a/B4A/Files/frontal1.gif b/B4A/Files/frontal1.gif
new file mode 100644
index 0000000..06306db
Binary files /dev/null and b/B4A/Files/frontal1.gif differ
diff --git a/B4A/Files/frontal1.png b/B4A/Files/frontal1.png
new file mode 100644
index 0000000..5ed81e3
Binary files /dev/null and b/B4A/Files/frontal1.png differ
diff --git a/B4A/Files/izquierda.png b/B4A/Files/izquierda.png
new file mode 100644
index 0000000..bb268dc
Binary files /dev/null and b/B4A/Files/izquierda.png differ
diff --git a/B4A/Files/izquierda1.png b/B4A/Files/izquierda1.png
new file mode 100644
index 0000000..20b1534
Binary files /dev/null and b/B4A/Files/izquierda1.png differ
diff --git a/B4A/Files/mainpage.bal b/B4A/Files/mainpage.bal
index 080445a..06da2e7 100644
Binary files a/B4A/Files/mainpage.bal and b/B4A/Files/mainpage.bal differ
diff --git a/B4A/Files/principal.bal b/B4A/Files/principal.bal
index 0c3e840..54ee82f 100644
Binary files a/B4A/Files/principal.bal and b/B4A/Files/principal.bal differ
diff --git a/B4A/Guna CartaPorte.b4a b/B4A/Guna CartaPorte.b4a
index 4b2643a..27a3487 100644
--- a/B4A/Guna CartaPorte.b4a
+++ b/B4A/Guna CartaPorte.b4a
@@ -1,44 +1,77 @@
Build1=Default,gunaCartaPorte.keymon.lat,HU2_PUBLIC
-File1=engraneactual.png
-File2=kmt.db
-File3=logo guna_192x192.png
-File4=logo-guna-18.png
-File5=MainPage.bal
-File6=mainpage0.bal
-File7=principal.bal
+File1=alert2.png
+File10=frontal1.gif
+File11=frontal1.png
+File12=izquierda.png
+File13=izquierda1.png
+File14=kmt.db
+File15=logo guna_192x192.png
+File16=logo-guna-18.png
+File17=MainPage.bal
+File18=mainpage0.bal
+File19=principal.bal
+File2=atras.png
+File3=atras1.png
+File4=check2.bal
+File5=checklist.bal
+File6=derecha.png
+File7=derecha1.png
+File8=engraneactual.png
+File9=frintal.png
FileGroup1=Default Group
+FileGroup10=Default Group
+FileGroup11=Default Group
+FileGroup12=Default Group
+FileGroup13=Default Group
+FileGroup14=Default Group
+FileGroup15=Default Group
+FileGroup16=Default Group
+FileGroup17=Default Group
+FileGroup18=Default Group
+FileGroup19=Default Group
FileGroup2=Default Group
FileGroup3=Default Group
FileGroup4=Default Group
FileGroup5=Default Group
FileGroup6=Default Group
FileGroup7=Default Group
+FileGroup8=Default Group
+FileGroup9=Default Group
Group=Default Group
Library1=appupdating
+Library10=randomaccessfile
+Library11=sql
+Library12=xcustomlistview
+Library13=xui
+Library14=xui views
+Library15=runtimepermissions
Library2=b4xpages
Library3=byteconverter
-Library4=compressstrings
-Library5=core
-Library6=fileprovider
-Library7=pdfium
-Library8=randomaccessfile
-Library9=sql
-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~SetApplicationAttribute(android:usesCleartextTraffic, "true")
+Library4=camera
+Library5=compressstrings
+Library6=core
+Library7=fileprovider
+Library8=ime
+Library9=pdfium
+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~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText()~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\n~'/////////////// FLP y FBMessageing MOD Inicia /////////////////////~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.FirebaseAnalytics)~\n~'CreateResourceFromFile(Macro, FirebaseNotifications.FirebaseNotifications)~\n~'SetServiceAttribute(Tracker, android:foregroundServiceType, "location")~\n~'/////////////// FLP y FBMessageing MOD Termina /////////////////////~\n~~\n~'Si al cargar un mapa de google mande este error "java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion". agregar la siguiente linea:~\n~AddApplicationText()~\n~~\n~'/////////////////////// App Updating ////////////////~\n~ AddManifestText(~\n~ )~\n~ AddApplicationText(~\n~ ~\n~ ~\n~ ~\n~ )~\n~ CreateResource(xml, provider_paths,~\n~ ~\n~ ~\n~ ~\n~ ~\n~ ~\n~ )~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~AddManifestText()~\n~~\n~AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~AddPermission(android.permission.INSTALL_PACKAGES)~\n~AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~CreateResourceFromFile(Macro, JhsIceZxing1.CaturePortrait)~\n~ ~\n~SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText(~\n~ ~\n~ )~\n~ AddPermission(android.permission.MANAGE_EXTERNAL_STORAGE)~\n~ SetApplicationAttribute(android:allowBackup, "false")~\n~ ~\n~ ~\n~ AddManifestText(~\n~ )~\n~ AddPermission(android.permission.READ_EXTERNAL_STORAGE)
Module1=B4XMainPage
-Module2=C_Principal
-Module3=C_updateAvailable
-Module4=DBRequestManager
-Module5=Starter
-Module6=Subs
-NumberOfFiles=7
-NumberOfLibraries=9
-NumberOfModules=6
+Module2=C_Cheklist
+Module3=C_Principal
+Module4=C_updateAvailable
+Module5=CameraExClass
+Module6=DBRequestManager
+Module7=ManageExternalStorage
+Module8=Starter
+Module9=Subs
+NumberOfFiles=19
+NumberOfLibraries=15
+NumberOfModules=9
Version=12.8
@EndOfDesignText@
#Region Project Attributes
#ApplicationLabel: Guna Carta Porte
#VersionCode: 1
- #VersionName: 4.05.28
+ #VersionName: 4.06.01
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
diff --git a/B4A/Guna CartaPorte.b4a.meta b/B4A/Guna CartaPorte.b4a.meta
index 24f7b4d..0a5fad6 100644
--- a/B4A/Guna CartaPorte.b4a.meta
+++ b/B4A/Guna CartaPorte.b4a.meta
@@ -5,6 +5,9 @@ ModuleBookmarks3=
ModuleBookmarks4=
ModuleBookmarks5=
ModuleBookmarks6=
+ModuleBookmarks7=
+ModuleBookmarks8=
+ModuleBookmarks9=
ModuleBreakpoints0=
ModuleBreakpoints1=
ModuleBreakpoints2=
@@ -12,13 +15,19 @@ ModuleBreakpoints3=
ModuleBreakpoints4=
ModuleBreakpoints5=
ModuleBreakpoints6=
+ModuleBreakpoints7=
+ModuleBreakpoints8=
+ModuleBreakpoints9=
ModuleClosedNodes0=
ModuleClosedNodes1=
-ModuleClosedNodes2=5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22
-ModuleClosedNodes3=
+ModuleClosedNodes2=
+ModuleClosedNodes3=5,9,10,11,12,13,14,15,16,17,18,19,20,21,24
ModuleClosedNodes4=
-ModuleClosedNodes5=1
+ModuleClosedNodes5=
ModuleClosedNodes6=
-NavigationStack=Subs,traeAlmacen,274,0,C_Principal,et_ruta_TextChanged,337,6,C_Principal,b_descargaCartaPorte_Click,113,0,C_Principal,Class_Globals,35,0,Visual Designer,MainPage.bal,-100,4,Visual Designer,principal.bal,-100,6,C_Principal,B4XPage_CloseRequest,78,0,C_Principal,B4XPage_Created,49,0,C_Principal,B4XPage_Appear,66,6,C_Principal,descargaCartaPorte,127,6
+ModuleClosedNodes7=
+ModuleClosedNodes8=1
+ModuleClosedNodes9=
+NavigationStack=C_Cheklist,JobDone,776,2,C_Principal,checachek,370,0,B4XMainPage,JobDone,174,0,C_Principal,b_check_Click,387,0,C_Cheklist,B4XPage_Created,135,0,C_Cheklist,B4XPage_Appear,199,0,C_Principal,Class_Globals,43,6,C_Principal,et_ruta_EnterPressed,410,1,C_Principal,B4XPage_Appear,74,5,C_Principal,JobDone,432,6
SelectedBuild=0
-VisibleModules=1,2,6
+VisibleModules=1,3,9,2,5,7
diff --git a/B4A/ManageExternalStorage.bas b/B4A/ManageExternalStorage.bas
new file mode 100644
index 0000000..7f0a197
--- /dev/null
+++ b/B4A/ManageExternalStorage.bas
@@ -0,0 +1,81 @@
+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
+
diff --git a/B4A/Subs.bas b/B4A/Subs.bas
index 3547c5e..e35a63c 100644
--- a/B4A/Subs.bas
+++ b/B4A/Subs.bas
@@ -283,4 +283,25 @@ Sub traeAlmacen As String 'ignore
a = C.GetString("ID_ALMACEN")
c.Close
Return a
+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
+ 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