From 970144b6264297f4e63f0f9e2415f6d0fdca3eeb Mon Sep 17 00:00:00 2001 From: cvaldes1201 Date: Mon, 22 Jul 2024 16:27:59 -0600 Subject: [PATCH] ... --- B4A/B4XMainPage.bas | 11 + B4A/C_Cheklist.bas | 803 ++++++++++++++++++++++++++++++++++ B4A/C_Principal.bas | 147 ++++++- B4A/CameraExClass.bas | 290 ++++++++++++ B4A/Files/alert2.png | Bin 0 -> 632 bytes B4A/Files/atras.png | Bin 0 -> 3208 bytes B4A/Files/atras1.png | Bin 0 -> 6372 bytes B4A/Files/check2.bal | Bin 0 -> 40154 bytes B4A/Files/checklist.bal | Bin 0 -> 3088 bytes B4A/Files/derecha.png | Bin 0 -> 8551 bytes B4A/Files/derecha1.png | Bin 0 -> 5956 bytes B4A/Files/frintal.png | Bin 0 -> 3236 bytes B4A/Files/frontal1.gif | Bin 0 -> 5004 bytes B4A/Files/frontal1.png | Bin 0 -> 7491 bytes B4A/Files/izquierda.png | Bin 0 -> 8613 bytes B4A/Files/izquierda1.png | Bin 0 -> 6486 bytes B4A/Files/mainpage.bal | Bin 13030 -> 13030 bytes B4A/Files/principal.bal | Bin 10204 -> 10786 bytes B4A/Guna CartaPorte.b4a | 79 +++- B4A/Guna CartaPorte.b4a.meta | 19 +- B4A/ManageExternalStorage.bas | 81 ++++ B4A/Subs.bas | 21 + 22 files changed, 1417 insertions(+), 34 deletions(-) create mode 100644 B4A/C_Cheklist.bas create mode 100644 B4A/CameraExClass.bas create mode 100644 B4A/Files/alert2.png create mode 100644 B4A/Files/atras.png create mode 100644 B4A/Files/atras1.png create mode 100644 B4A/Files/check2.bal create mode 100644 B4A/Files/checklist.bal create mode 100644 B4A/Files/derecha.png create mode 100644 B4A/Files/derecha1.png create mode 100644 B4A/Files/frintal.png create mode 100644 B4A/Files/frontal1.gif create mode 100644 B4A/Files/frontal1.png create mode 100644 B4A/Files/izquierda.png create mode 100644 B4A/Files/izquierda1.png create mode 100644 B4A/ManageExternalStorage.bas 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 0000000000000000000000000000000000000000..44d3b7e651884f30ca0811371860a2c872077175 GIT binary patch literal 632 zcmV-;0*C#HP)a1y& zFeNaQ#z>D?Pp5~l@C6?oy~8sZU}IxI;&C5S^*RX4g3j(P>{qMnPinP$E4E$LLaawd zxnek%yAhe62RbqWgdrq^ANpD6_~aynggAY^(YRg~;@v0DbNvqNboym@YHBGwJq<@$ z?d@$S@9ezE?CmWRJ#%Duc*B^R3lx$242WOzK{1WrMjcw z-v5w}lckIWi}Lw_qDo3|mHN%`gnbxlHnWuTVAa-E_dYWdfCP^HQ;1ED$MadV-M-B| z?^qsqIKpekS=WQ}^2EeiLaAF}ZRSx95_bDVsrP40^RXUWeHWs5EgHQPk}^fGlYhI? z7ZShfA-TfX#^p-oQ5`+#S+9lSo8#jTvz$LL94Eq1h#qt#kt9MPaAUF7$5v}~!Lru$ zkBjl^|Gm>9vFC}z*(-*zl%(`RoYGSo*q8FFDMYE@IB%cY_Ge7}ISA*k00RI&q3etP SUq&PV0000oxwhr{f`Pln- zdPfj@d`@nPOzdnN(Sdm4=-60Y9gvZc6-JH}iA1-P?-mvncXz*zjk`57Gb0oV%PT7T z-@m8Pa+{l5Ha0eDE#^LMuB(LF+d6Eve+$@w@@y{{O#ZF4tGYPxl ztY}=5@HC^z^P6M}-|Z0IBtyR^VicMxkLZo$+CKM%zI*0mOxK0nPG`|CgQUnvP=vnD zqC18{-y%;;;eGqUy*aOeF`)`0``iW7Ao~iUz^`kZY(Zj4n-}q1zWXz`R3;^FY@pHB8Ne#q$Bv>c|S!T4i(GRzqGC>qx5ln860)N8l zYLV~r-S*@4qQGS2DfZc|_GJ+dyi&)UIflR^89S~m4y<4-w6m!wI`M(%D43b)KOsFe zjKN_UJiK)&-%S%*dB&%b!V6n|v=HuFG2 z4pMIj7@`9urm_!fSoBuFIz%7pVkiNz0ifWQNL45>(EV}5?nGv!D`Gr>mgP6$!z;#O z3Yi3qTVceb1e(PgP|Q0ND$+r#lab?Tl-OW-u-OzZe4k}gd?RZQxz^`Z-GSWg+6UAb z@YhBA$)yjHc&-v+qtr3J>96r$h;`7NrqcDH#YwWybIM@h%io!2mo$Oc>!5$W*{BnD z{IHH{rEPKpjm+ocYrnWpG{*<0%eR{C^+TOmn5szD#0G}N{Pal|n8j8%aN;EtfaXVq z2!YK+iF;W-P!uFEO#OIa_4e3Hc`doYnMKCp!U^Tf9a9VW_H{y?nLKvDx!1^9w z!`n<|c$6;i#8Bowl9o(?v0T0Nu>-G4rM)iC&=AEB#TBD(T$HG!C`GVxFbVeoZ;G#7 zT09!{wai6ki;K#$37Jn_$s5(G)Zo?A!q4R6k>e2gS-D|KL=pmaNfI>j{ZIm3J*(zV zCT{H;GTj<`>5gYeu2<%lHiMy73V|=&m2t+RTtb6uULD9eEh#V))ZEW}HQpEai$zrn z=|K$@1qGh_?dVABe6~U=GH3AS_L0T6atx&vOa1|mkUTlDTvdmBj``K>YeQ}m(}nKg zG@0R(nXlV}d&7HV$?!U96Pq&jc&T#DLVI9Ci*IcZo8$OtcBFI*l#pWz%^NHA{=Sn-0^TkkvVK*!=-uU&yHQ5=Ex3~n={^XfXs z<-QW6#O`161wDQ0Vmswfs(Sz|Hg(U|nzz%W^Kg zalOgxeWILVHln|8Gz1hY^BV)4gkfZn{=G5or^!dYbVeb zu2rqEblAQ+z5vawn5|8SDyuPk`Ko(=_03(*7Df9OYg5!@wRc}mCT{)uq)VEybLz#M ztIxy6Oh28nLQHU+Q))&dGi=3&e1CV__pov`T=WB6Gyh3AI2>lYbD)59k4c~O9e*9b zj%Sj@>NBpD2gD~sYMIDY@S@oHM_oN?Fz4X2M&S;k!0c;=1(YWB#|mq$WiN!*``R_W zV4_TjMSLcC>=BPyNf`A9fPtctMw2dfw?L`M=(hUJ)b6#W?l(l`i5UAm;ij>)y~&tX3TA;PcZKt%e;%z_Jy_RCQ^V z1+P7vXWl9ds&%OVbM7uJ2K z_vg=TGm_wum=9wv+MkUui8udqUY23}sq9#%Y@N zX^30yMWY(2Zoi|pABni%;Q0GA-3;n?329EI7-BV&QA@K%_NpADB5bvPr3vJUTT;< z)gdwhFP?-5dX^g|wEjPab#T_4EqyA0MOR?IC=#->ZGU$p$#v-KPx#rpXr2SddeF?+mdeBkJ% zuqubtjIOl^?z#-)SH08a2>pPumY=R4x|MeiSDI|FLu_5;9aBRg%wDx4HHPX;zPY8` zYknh_G;K4R8t*u$b>0Q(qx5EE*m=Ylp0GND)j&Q67SYcIowbK5!oD3NSaB!h%OezW zikh8~PZps9LXtzex~G=kWF0Yf{zU6}Crb?gK_DB?OR-I!!Y_VT3(}-AQTc(IIR1{v zDTO*YV46U=sQ9EL`baKgQnxUHUe#IehSkkb?nQH(6p*Np`qqZkN@XFkq~?}YQydBo z?QSp{IxZYJD+PH217BiJQ*s4V6dd2h+?XTAuS*AVZBr;0LJF>!t)()zK$FwC5gQY) z1apeu?J{&NbP<%DXXeJCG{AvBr{n$Cq(D7Fub41diooBD>*N-1T7mj0O)BclB{e|& zR6TfTYQ7UAdb?Z9E5vLCRRD4)4}8}^Aa|SGOFzNoFHd*sW$b}>cAg<{Sa2$B_TDN% z*}yg~rt<7!N*N41HVH?3){XjROu%r{SdGYZr+N{u?nHpyb3{diIX=S-0+sJ)I^NKC z0@-OA33XG2%A}!SI`PW82QaA5ZS?GYn`}LZJp|cln_M_}Mb#7uK246i|6_l_^jqW%w0cLU`qO}jGDTnd8D&eFRl4ulFG!OB=`bAB5~yzKX0pC5cQ0{*x#C8-f*y+ z1y7}Dw7RVgL>f*I8IimXP>QwE<~2y{-Ldf_yi3JdNQIA-X?0JH8k~nC3x1C>woT*a z_2s7XpT8?UtMRvRIjLloM1_%0;$LD@ljM#IPgy&p#!z=+jo$mZOVu9kNc!t)#jnBwH(re+WL=6{k9zt2;2gO+)g07{{d znHXPE?>m%=m?+3%O4t1%Y&yIZx&a>bcc<8Le&&41iBNk_`og28l9{eUL4nenvq2EH z?^W%OI~rYj;=6|T)7pAoc~!cR1S&vf3){Q)>JmSc>2Gk5G#}+`P?a=Hu(y^5Ib8lw zo6r>#=s5xQYezqAYdD|1=`9ZcS|%*lFOHL0x-)y%l2X-4!PW+ZSSrdc>(9=;r=~@D zvOsM7>O>TtEAxLIC>BPR1Sg;M>=ZAzWXS@E(8$h^hFa$m&Y&U-ju7>yeimbmcLD{D z(NR{{chJ3`mC6DI+Ryg-@9n?&zrcTF|Kjsgmhxbdu&%j}H$2a+%x&6!m^Iqgvf_+K G{67H>8H7#% literal 0 HcmV?d00001 diff --git a/B4A/Files/atras1.png b/B4A/Files/atras1.png new file mode 100644 index 0000000000000000000000000000000000000000..25e195c1a5b885b202e5f7d575d3b3094b813f86 GIT binary patch literal 6372 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/checklist.bal b/B4A/Files/checklist.bal new file mode 100644 index 0000000000000000000000000000000000000000..9462b176865fb0c0df6d66c8e4f1a976bbb34861 GIT binary patch literal 3088 zcmb_dO>7%g5MGlwV46~XS_r=le<5vClcfBHpT5KOzUfAqfyUz~k zsZuYffK*he;>xuk#H9xgoH#(EaDo#O5}de##DSanzFF_uR@{gREY0lf%$s>L-^{Gj zmSvquS=OC+_Ji&K<;upXJ7(i<$l3ViY@n)D9rQuBytLvQ|1MgO)r|4IHd~}f!&Y4? ztF_%cbXs}ZZJwb;-g%K6QGucy)|YH${P13SER+M^br&7I-gIMnEhU5ShrH!?8+Z?> z7epJAydA{2v7CX-D7!%XodfOvkSFN3P+Z@-@#gT!kyR@r#<;aiYS3djsi@hIx+d-rgI}76d<*>9-)sH}$URI$~&Q9ylS@m>~J*AC`5oY!V=eogu4{XYF)|7F4 zZ@L!9lgZnGT35@i9_kW&x@pT!`K}+tZx7&PHg@YY5xX+a5-eTUo++p`&1>QuiQr1j zbFmy#bs})1Xit@@8Kad!a$b%E_Id;f78GQ__8~m-Y z>OOj7UHoD!BlylbrZVLR=w}!kIAzOzVCz5%YrURj;>4{i4n<`?y|yi$wA9u0WOCx=d*~)%qD|humE-!1W-d>7dI@EQ*Auj~{0pR0gg|0(0L03aGHe(j6M_38ru!gByuA?8seRx* z_k*QuFn(`D7>ET9u4p)VQUJ%KSqT#2hqC8UGLV(w;!5iKA+#zQjMc2@aZn%2c>*Mn zq8b~G#*?uIPpkJSuyjgFei~wuf#mc(G((`&UkD)x@JgxVIs}1&UeAE~1rNfO;31WM z0!>m*gohN)*ezi25&=U&?31`slK2url2#Il=Qvqb?=V;d3^!4LISAp_fVl>bPGAl} zLnN&>ghue1q>>;c!0<`|<|Hx@V0d^ZV19u;DMx^b3jf!@OyH&@n% z)N@x~0->yPxtFP#080>*e%jDTKZ%s|^E(KyfW%!I%Yd!Mvdyo8($;IjUkA?|1xwao zlA0XYF;E{iupx_a4Rbw3(=^x&h2vmJAKO-iNwrqR!!;Ta^>-soZ2$F5-+J%EO(ACg4e>pTnM%(*{iEs?Z?EDF`qFKuGTX0m4qez@Z6I Ir({|G0E=1a?f?J) literal 0 HcmV?d00001 diff --git a/B4A/Files/derecha.png b/B4A/Files/derecha.png new file mode 100644 index 0000000000000000000000000000000000000000..58a1e82a2ac20415233307508e7ffcf834da30cb GIT binary patch literal 8551 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/derecha1.png b/B4A/Files/derecha1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3087bdac331a0cf6296581eb864a5776847a8b GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/frintal.png b/B4A/Files/frintal.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c6420bd8c04f8d81e2c8197a3fe391613505f6 GIT binary patch literal 3236 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/frontal1.png b/B4A/Files/frontal1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed81e390e95a28ee555dd3963b9506c1a4433c6 GIT binary patch literal 7491 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/izquierda.png b/B4A/Files/izquierda.png new file mode 100644 index 0000000000000000000000000000000000000000..bb268dc798221809fc180aca37b487871257414f GIT binary patch literal 8613 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/izquierda1.png b/B4A/Files/izquierda1.png new file mode 100644 index 0000000000000000000000000000000000000000..20b153413bf82b7c6cc3cb8494d2234cfdaa806c GIT binary patch literal 6486 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 My!yKeka@^|064~V1^@s6 literal 0 HcmV?d00001 diff --git a/B4A/Files/mainpage.bal b/B4A/Files/mainpage.bal index 080445ae617a071be14e84bf69d6d997211c2d1a..06da2e7ff6b690cc3bf6bd7d7e9259fb733ac3c6 100644 GIT binary patch delta 29 jcmaEs`Yd$=t042tsZ%G{3u|sR6!c~SaW>Zrr^^EXxIGI* delta 29 icmaEs`Yd$=s~|H21H#1=tfiz2bbfNXIfmH=W&B(@Y1TN;TigT$5vvgH^U zCjVyQWmKBX%AC#Ew7HP^61$`slDj#9ikv|n$jK}&*=*09=s5n>yNg zyc(0m6uwXXEq9G82x>m#`pIt<4JW_jd5nyUHm^|0 zXJp*HSwbzJkx7hka;Lf_WBq1c1vW;;hRF|kr6%hsngLmSET~W}N&^ Q(O~jf84)(1T?~v206&C4yZ`_I delta 339 zcmZ1!a>t*Sm4SgFgPDPW3rH(XV3U%WTYF z!pJB(S%fLNo*Sr&2Z(urm=B2gfmi^EEr`SxLShReu|YP$^oj!6Vn8eo#1cqsNhG!u zf~~|Ljo>iI0NJuYEC_ePiSTIS8y`{bWTY!_5u~*BKc_HcKc4Gcu(!Y|d5AV`OC8d`Bgpkx_oL bk6Jz>Qx(JHz3P^e|A>i97La9OVq^dS&$28W 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