diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..618d244
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+**/Objects
+**/AutoBackups
+*.meta
\ No newline at end of file
diff --git a/B4A/C_cliente.bas b/B4A/C_cliente.bas
new file mode 100644
index 0000000..1733c05
--- /dev/null
+++ b/B4A/C_cliente.bas
@@ -0,0 +1,717 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=12.2
+@EndOfDesignText@
+Sub Class_Globals
+ Private Root As B4XView 'ignore
+ Private xui As XUI 'ignore
+ Private ScrollView1 As ScrollView
+ Private Panel1 As Panel
+ Dim IME As IME
+ Private p_cuestionario As Panel
+ Private paneltop As Panel
+ Private camEx2 As CameraExClass2
+ 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"
+ Dim nombrefoto4 As String = "0"
+ Dim nombrefoto5 As String = "0"
+ Dim nombrefoto6 As String = "0"
+ Dim nombrefoto7 As String = "0"
+ Dim nombrefoto8 As String = "0"
+ Private p_camara As Panel
+ Private teclado As IME
+ Private ImageView1 As ImageView
+ Private ImageView2 As ImageView
+ Private ImageView3 As ImageView
+ Private ImageView4 As ImageView
+ Private ImageView5 As ImageView
+ Private ImageView6 As ImageView
+ Private ImageView7 As ImageView
+ Private ImageView8 As ImageView
+ Private ImageView9 As ImageView
+ Private RadioButton1 As RadioButton
+ Private RadioButton2 As RadioButton
+ Private RadioButton3 As RadioButton
+ Private RadioButton4 As RadioButton
+ Private RadioButton5 As RadioButton
+ Private RadioButton6 As RadioButton
+ Private RadioButton7 As RadioButton
+ Private RadioButton8 As RadioButton
+ Private RadioButton9 As RadioButton
+ Private RadioButton10 As RadioButton
+ Private RadioButton11 As RadioButton
+ Private RadioButton12 As RadioButton
+ Private RadioButton13 As RadioButton
+ Private RadioButton14 As RadioButton
+ Private RadioButton15 As RadioButton
+ Private RadioButton16 As RadioButton
+ Private RadioButton17 As RadioButton
+ Private RadioButton18 As RadioButton
+ Private EditText1 As EditText
+ Private EditText2 As EditText
+ Private EditText3 As EditText
+ Private EditText4 As EditText
+ Private EditText5 As EditText
+ Private EditText6 As EditText
+ Private EditText7 As EditText
+ Private EditText8 As EditText
+ Private EditText9 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
+ Private Label2 As Label
+ Private Label4 As Label
+ Private Label6 As Label
+ Private Label8 As Label
+ Private Label10 As Label
+ Private Label12 As Label
+ Private Label14 As Label
+ Private Label16 As Label
+ Private Label18 As Label
+ Dim c As Cursor
+ Dim d As Cursor
+ Dim e As Cursor
+ Dim fototomada As String
+ Dim timer As Timer
+ Dim timer2 As Timer
+ Dim reqManager As DBRequestManager
+ Private l_ubicacion As Label
+ Dim mlat As String
+ Dim mlon As String
+ Dim logger As Boolean = False
+ Dim laDist As Float
+ Private ubicacion As Location
+ Dim l1, l2 As Location
+ Dim distance As Long
+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("cliente")
+ reqManager.Initialize(Me, Starter.DBReqServer)
+ IME.Initialize("IME")
+ IME.AddHeightChangedEvent
+ IME_HeightChanged(100%y, 0)
+ 'load the layout to Root
+ ScrollView1.height = Root.Height - Panel1.Height
+
+ ScrollView1.Panel.LoadLayout("p_cuest")
+ ScrollView1.Panel.Height = p_cuestionario.Height
+ Log(Starter.latitud & " , " & Starter.longitud)
+ p_camara.Height = Root.Height
+ p_camara.Width = Root.Width
+ p_camara.Visible = False
+End Sub
+
+
+Sub B4XPage_Appear
+ Log(Starter.latitud & " , " & Starter.longitud)
+ c = Starter.skmt.ExecQuery("SELECT latitud, longitud FROM CUENTAA")
+ c.Position = 0
+ mlat=0
+ mlon=0
+ If c.GetString("latitud") <> "" Then
+ mlat = c.GetString("latitud")
+ mlon = c.GetString("longitud")
+ End If
+ c.Close
+
+ If Not(Starter.GPS.GPSEnabled) Then
+ ToastMessageShow("Debe Activar el GPS del Equipo.", True)
+ StartActivity(Starter.GPS.LocationSettingsIntent)
+ Else
+ Starter.GPS.Start(0, 0)
+ If Starter.ubicacionActual.Latitude <> 0 Then GPS_LocationChanged(Starter.ubicacionActual)
+ End If
+
+End Sub
+
+Sub GPS_LocationChanged (Location1 As Location)
+
+' ubicacion.Initialize
+' ubicacion.Latitude = mlat
+' ubicacion.Longitude = mlon
+' If logger Then Log($"${Location1.Latitude}, ${Location1.Longitude}, ${Location1.Accuracy}"$)
+' laDist = Location1.DistanceTo(ubicacion)
+' l_ubicacion.Text = $"Dist: $1.0{laDist} mts."$
+
+ l1.Initialize2(Starter.latitud,Starter.longitud)
+ l2.Initialize2(mlat, mlon)
+ distance = l1.DistanceTo(l2) ' resultado en metros
+' Log (distance)
+' Log(mlat & " , " & mlon)
+' Log(Starter.latitud & " , " & Starter.longitud)
+ l_ubicacion.Text = $"Dist: $1.0{distance} mts."$
+ If laDist > 50 Then l_ubicacion.TextColor = Colors.Red Else l_ubicacion.TextColor = Colors.Blue
+
+End Sub
+
+'tomar foto
+
+Private Sub InitializeCamera2
+ Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA)
+ Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
+ If Result Then
+ camEx2.Initialize(p_cam, frontCamera, Me, "Camera1")
+ frontCamera = camEx2.Front
+ Log("inicializamos Camara")
+ Else
+ ToastMessageShow("No permission!!!", True)
+ End If
+ 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!!!", 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!!!", True)
+ End If
+End Sub
+
+Sub Camera1_Ready (Success As Boolean)
+ Log("Camara ready")
+ If Success Then
+ camEx2.SetJpegQuality(90)
+ camEx2.SetContinuousAutoFocus
+ camEx2.CommitParameters
+ camEx2.StartPreview
+ Log(camEx2.GetPreviewSize)
+ Else
+ ToastMessageShow("Cannot open camera.", True)
+ Log("Cannot open camera")
+ End If
+End Sub
+
+Private Sub ImageView1_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto = DateTime.Now & "_planograma.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto
+End Sub
+
+Private Sub ImageView2_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto1 = DateTime.Now & "_catalogo.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto1
+End Sub
+
+Private Sub ImageView3_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto2 = DateTime.Now & "_presenciaanaqel.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto2
+End Sub
+
+Private Sub ImageView4_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto3 = DateTime.Now & "_exhibicion.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto3
+End Sub
+
+Private Sub ImageView5_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto4 = DateTime.Now & "_cabecera.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto4
+End Sub
+
+Private Sub ImageView6_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto5 = DateTime.Now & "_innovacion.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto5
+End Sub
+
+Private Sub ImageView7_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto6 = DateTime.Now & "_abasto.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto6
+End Sub
+
+Private Sub ImageView8_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto7 = DateTime.Now & "_foods.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto7
+End Sub
+
+Private Sub ImageView9_Click
+' foto = 2
+ DateTime.DateFormat="ddMMyyyyHHmmss"
+ InitializeCamera2
+ p_camara.Visible = True
+ nombrefoto8 = DateTime.Now & "_pc.jpg"
+ teclado.HideKeyboard
+ fototomada = nombrefoto8
+End Sub
+
+
+Private Sub p_camara_Click
+
+End Sub
+
+
+Private Sub b_foto_inci_Click
+ camEx2.TakePicture
+ p_camara.Visible = False
+' StopCamera2
+End Sub
+
+Sub Camera1_PictureTaken (Data()As Byte)
+ 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,"/promotoriakmts")
+ Dir = "/promotoriakmts"
+ 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
+
+ camEx2.SavePictureToFile(Data, Dirp&Dir, filename)
+ camEx2.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
+
+
+ If nombrefoto <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ 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, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ 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, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ 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, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView4.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto3)
+ End If
+
+ If nombrefoto4 <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView5.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto4)
+ End If
+
+ If nombrefoto5 <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView6.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto5)
+ End If
+
+ If nombrefoto6 <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView7.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto6)
+ End If
+
+ If nombrefoto7 <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView8.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto7)
+ End If
+
+ If nombrefoto8 <> 0 Then
+ Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 300, 450, True)
+ Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False)
+ img.WriteToStream(out, 100, "PNG")
+ out.Close
+ ImageView9.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto8)
+ End If
+ StopCamera2
+
+End Sub
+
+Private Sub StopCamera2
+' Capturing = False
+ If camEx2.IsInitialized Then
+ camEx2.Release
+ End If
+End Sub
+
+Private Sub b_guardar_Click
+ If EditText1.Text <> "" And nombrefoto <> 0 And RadioButton1.Checked = True Or RadioButton2.Checked = True Then
+ If RadioButton1.Checked Then p1 = "Satisfactorio"
+ If RadioButton2.Checked Then p1 = "Incompleto"
+' Log(nombrefoto)
+
+ If EditText2.Text <> "" And nombrefoto1 <> 0 And RadioButton3.Checked = True Or RadioButton4.Checked = True Then
+ If RadioButton3.Checked Then p2 = "Satisfactorio"
+ If RadioButton4.Checked Then p2 = "Incompleto"
+
+ If EditText3.Text <> "" And nombrefoto2 <> 0 And RadioButton5.Checked = True Or RadioButton6.Checked = True Then
+ If RadioButton5.Checked Then p3 = "Satisfactorio"
+ If RadioButton6.Checked Then p3 = "Incompleto"
+
+ If EditText4.Text <> "" And nombrefoto3 <> 0 And RadioButton7.Checked = True Or RadioButton8.Checked = True Then
+ If RadioButton7.Checked Then p4 = "Satisfactorio"
+ If RadioButton8.Checked Then p4 = "Incompleto"
+
+ If EditText5.Text <> "" And nombrefoto4 <> 0 And RadioButton9.Checked = True Or RadioButton10.Checked = True Then
+ If RadioButton9.Checked Then p5 = "Satisfactorio"
+ If RadioButton10.Checked Then p5 = "Incompleto"
+
+ If EditText6.Text <> "" And nombrefoto5 <> 0 And RadioButton11.Checked = True Or RadioButton12.Checked = True Then
+ If RadioButton11.Checked Then p6 = "Satisfactorio"
+ If RadioButton12.Checked Then p6 = "Incompleto"
+
+ If EditText7.Text <> "" And nombrefoto6 <> 0 And RadioButton13.Checked = True Or RadioButton14.Checked = True Then
+ If RadioButton13.Checked Then p7 = "Satisfactorio"
+ If RadioButton14.Checked Then p7 = "Incompleto"
+
+ If EditText8.Text <> "" And nombrefoto7 <> 0 And RadioButton15.Checked = True Or RadioButton16.Checked = True Then
+ If RadioButton15.Checked Then p8 = "Satisfactorio"
+ If RadioButton16.Checked Then p8 = "Incompleto"
+
+ If EditText9.Text <> "" And nombrefoto8 <> 0 And RadioButton17.Checked = True Or RadioButton18.Checked = True Then
+ If RadioButton17.Checked Then p9 = "Satisfactorio"
+ If RadioButton18.Checked Then p9 = "Incompleto"
+
+
+
+
+
+ If distance > 50 Then
+
+ c = Starter.skmt.ExecQuery("SELECT cuenta FROM CUENTAA")
+ c.Position = 0
+
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label2.Text,p1,EditText1.Text,nombrefoto))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label4.Text,p2,EditText2.Text,nombrefoto1))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label6.Text,p3,EditText3.Text,nombrefoto2))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label8.Text,p4,EditText4.Text,nombrefoto3))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label10.Text,p5,EditText5.Text,nombrefoto4))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label12.Text,p6,EditText6.Text,nombrefoto5))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label14.Text,p7,EditText7.Text,nombrefoto6))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label16.Text,p8,EditText8.Text,nombrefoto7))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label18.Text,p9,EditText9.Text,nombrefoto8))
+ Starter.skmt.ExecNonQuery("UPDATE CUENTAA SET asignado = '0'")
+ Starter.skmt.ExecNonQuery2("UPDATE DATOS_CLIENTE SET ESTATUS = 1 WHERE CAT_CL_CODIGO = ?", Array As String(c.GetString("cuenta")))
+ MsgboxAsync("Datos guardados","Atención")
+
+ Dim cmd As DBCommand
+ d = Starter.skmt.ExecQuery("SELECT CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO FROM HIST_PREGUNTAS")
+ e = Starter.skmt.ExecQuery("SELECT RUTA FROM CARGA")
+ e.Position = 0
+ Log("estoy aqui")
+ For i = 0 To d.RowCount - 1
+ d.Position = i
+ Log("estoy aqui 2")
+ cmd.Initialize
+ cmd.Name = "delete_hist_promotoria_INTMEX"
+ cmd.Parameters = Array As Object(Starter.almacen, e.GetString("RUTA"),B4XPages.MainPage.user,d.GetString("CLIENTE"),d.GetString("CATEGORIA"))
+ B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "delete")
+ Next
+
+ c.Close
+ d.Close
+ e.Close
+
+ timer.Initialize("Timerconteo",20000)
+ timer.Enabled = True
+
+ Timerconteo_tick
+ guardado
+ B4XPages.ShowPage ("principal")
+
+ Else if distance < 50 Then
+
+ Dim result As Int
+ result = Msgbox2("Estas fuera de rango de check-in. ¿Deseas enviar la información?", "Atención","Si","","No",Null)
+ If result = DialogResponse.POSITIVE Then
+
+ c = Starter.skmt.ExecQuery("SELECT cuenta FROM CUENTAA")
+ c.Position = 0
+
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label2.Text,p1,EditText1.Text,nombrefoto))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label4.Text,p2,EditText2.Text,nombrefoto1))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label6.Text,p3,EditText3.Text,nombrefoto2))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label8.Text,p4,EditText4.Text,nombrefoto3))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label10.Text,p5,EditText5.Text,nombrefoto4))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label12.Text,p6,EditText6.Text,nombrefoto5))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label14.Text,p7,EditText7.Text,nombrefoto6))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label16.Text,p8,EditText8.Text,nombrefoto7))
+ Starter.skmt.ExecNonQuery2("INSERT INTO HIST_PREGUNTAS(CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO) VALUES(?,?,?,?,?)", Array As Object(c.GetString("cuenta"),Label18.Text,p9,EditText9.Text,nombrefoto8))
+ Starter.skmt.ExecNonQuery("UPDATE CUENTAA SET asignado = '0'")
+ Starter.skmt.ExecNonQuery2("UPDATE DATOS_CLIENTE SET ESTATUS = 1 WHERE CAT_CL_CODIGO = ?", Array As String(c.GetString("cuenta")))
+ MsgboxAsync("Datos guardados","Atención")
+
+ Dim cmd As DBCommand
+ d = Starter.skmt.ExecQuery("SELECT CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO FROM HIST_PREGUNTAS")
+ e = Starter.skmt.ExecQuery("SELECT RUTA FROM CARGA")
+ e.Position = 0
+ Log("estoy aqui")
+ For i = 0 To d.RowCount - 1
+ d.Position = i
+ Log("estoy aqui 2")
+ cmd.Initialize
+ cmd.Name = "delete_hist_promotoria_INTMEX"
+ cmd.Parameters = Array As Object(Starter.almacen, e.GetString("RUTA"),B4XPages.MainPage.user,d.GetString("CLIENTE"),d.GetString("CATEGORIA"))
+ B4XPages.MainPage.reqManager.ExecuteCommand(cmd , "delete")
+ Next
+
+ c.Close
+ d.Close
+ e.Close
+
+ timer2.Initialize("Timerconteo",20000)
+ timer2.Enabled = True
+
+ Timerconteo2_tick
+ guardado
+ B4XPages.ShowPage ("principal")
+
+ Else If result = DialogResponse.NEGATIVE Then
+
+ End If
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de la Categoria PC", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de la Categoria Foods", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Abasto", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Innovacion", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Cabecera", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Exhibicion adicional", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Presencia Anaquel", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos de Catalogo", "Atención")
+ End If
+ Else
+ MsgboxAsync("Completa todos los campos del Planograma", "Atención")
+ End If
+ teclado.HideKeyboard
+End Sub
+
+Sub IME_HeightChanged(NewHeight As Int, OldHeight As Int)
+ paneltop.Top = NewHeight - paneltop.Height
+ ScrollView1.Height = paneltop.Top - ScrollView1.Top
+End Sub
+
+Private Sub B4XPage_CloseRequest As ResumableSub
+
+ If p_camara.Visible = True Then
+ p_camara.Visible = False
+ StopCamera2
+ Else
+ B4XPages.ShowPage("principal")
+ End If
+
+' Return True
+ Return False
+End Sub
+
+Sub guardado
+ RadioButton1.Checked = False
+ RadioButton2.Checked = False
+ RadioButton3.Checked = False
+ RadioButton4.Checked = False
+ RadioButton5.Checked = False
+ RadioButton6.Checked = False
+ RadioButton7.Checked = False
+ RadioButton8.Checked = False
+ RadioButton9.Checked = False
+ RadioButton10.Checked = False
+ RadioButton11.Checked = False
+ RadioButton12.Checked = False
+ RadioButton13.Checked = False
+ RadioButton14.Checked = False
+ RadioButton15.Checked = False
+ RadioButton16.Checked = False
+ RadioButton17.Checked = False
+ RadioButton18.Checked = False
+ EditText1.Text = ""
+ EditText2.Text = ""
+ EditText3.Text = ""
+ EditText4.Text = ""
+ EditText5.Text = ""
+ EditText6.Text = ""
+ EditText7.Text = ""
+ EditText8.Text = ""
+ EditText9.Text = ""
+ ImageView1.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView2.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView3.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView4.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView5.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView6.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView7.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView8.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ ImageView9.Bitmap = LoadBitmap(File.DirAssets,"camara1.png")
+ nombrefoto = 0
+ nombrefoto1 = 0
+ nombrefoto2 = 0
+ nombrefoto3 = 0
+ nombrefoto4 = 0
+ nombrefoto5 = 0
+ nombrefoto6 = 0
+ nombrefoto7 = 0
+ nombrefoto8 = 0
+End Sub
+
+Sub Timerconteo_tick
+ Dim fotox() As Byte
+ Dim cmd As DBCommand
+ c = Starter.skmt.ExecQuery("SELECT cuenta, latitud, longitud FROM CUENTAA")
+ d = Starter.skmt.ExecQuery("SELECT CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO FROM HIST_PREGUNTAS")
+ e = Starter.skmt.ExecQuery("SELECT RUTA FROM CARGA")
+ c.Position = 0
+ e.Position = 0
+ Dim Dirp As String = File.DirInternal
+ Dim Dir As String
+ Dim Dir2 As String
+ Dir = "/promotoriakmts"
+ Dir2 = "/reduccion"
+
+ For i = 0 To d.RowCount - 1
+ d.Position = i
+ Log(File.Exists(Dirp&Dir&Dir2,d.GetString("NOMBRE_FOTO")))
+ fotox = Bit.InputStreamToBytes(File.OpenInput(Dirp&Dir&Dir2,d.GetString("NOMBRE_FOTO")))
+ cmd.Initialize
+ cmd.Name = "insert_promotoria_INTMEX"
+ cmd.Parameters = Array As Object(Starter.almacen, e.GetString("RUTA"),B4XPages.MainPage.user,d.GetString("CLIENTE"),d.GetString("CATEGORIA"),d.GetString("PREGUNTA1"),d.GetString("COMENTARIOS"),fotox,c.GetString("latitud"),c.GetString("longitud"),c.GetString("lalitud"),c.GetString("longitud"))
+ B4XPages.MainPage.reqManager.ExecuteCommand(cmd, $"insert_promotoria_${d.GetString("CLIENTE")}_${d.GetString("CATEGORIA")}"$)
+ Next
+
+ c.Close
+ d.Close
+ e.Close
+ timer.Enabled = False
+End Sub
+
+Sub Timerconteo2_tick
+ Dim fotox() As Byte
+ Dim cmd As DBCommand
+ c = Starter.skmt.ExecQuery("SELECT cuenta, latitud, longitud FROM CUENTAA")
+ d = Starter.skmt.ExecQuery("SELECT CLIENTE, CATEGORIA, PREGUNTA1, COMENTARIOS, NOMBRE_FOTO FROM HIST_PREGUNTAS")
+ e = Starter.skmt.ExecQuery("SELECT RUTA FROM CARGA")
+ c.Position = 0
+ e.Position = 0
+ Dim Dirp As String = File.DirInternal
+ Dim Dir As String
+ Dim Dir2 As String
+ Dir = "/promotoriakmts"
+ Dir2 = "/reduccion"
+
+ For i = 0 To d.RowCount - 1
+ d.Position = i
+ Log(File.Exists(Dirp&Dir&Dir2,d.GetString("NOMBRE_FOTO")))
+ fotox = Bit.InputStreamToBytes(File.OpenInput(Dirp&Dir&Dir2,d.GetString("NOMBRE_FOTO")))
+ cmd.Initialize
+ cmd.Name = "insert_promotoria_INTMEX"
+ cmd.Parameters = Array As Object(Starter.almacen, e.GetString("RUTA"),B4XPages.MainPage.user,d.GetString("CLIENTE"),d.GetString("CATEGORIA"),d.GetString("PREGUNTA1"),d.GetString("COMENTARIOS"),fotox,c.GetString("latitud"),c.GetString("longitud"), Starter.latitud, Starter.longitud)
+ B4XPages.MainPage.reqManager.ExecuteCommand(cmd, $"insert_promotoria_${d.GetString("CLIENTE")}_${d.GetString("CATEGORIA")}"$)
+ Next
+
+ c.Close
+ d.Close
+ e.Close
+ timer2.Enabled = False
+End Sub
+
+'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
\ No newline at end of file
diff --git a/B4A/C_principal.bas b/B4A/C_principal.bas
new file mode 100644
index 0000000..a130fca
--- /dev/null
+++ b/B4A/C_principal.bas
@@ -0,0 +1,190 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=12.2
+@EndOfDesignText@
+Sub Class_Globals
+ Private Root As B4XView 'ignore
+ Private xui As XUI 'ignore
+ Private CustomListView1 As CustomListView
+ Dim cmd As DBCommand
+ Private teclado As IME
+ Private e_ruta As EditText
+ Dim ALMACEN As String
+ Dim reqManager As DBRequestManager
+ Dim trabajos = 0 As Int
+ Private l_ruta As Label
+ Private p_clientes As Panel
+ Private nombrecliente As Label
+ Private numerocliente As Label
+ Private direccion As Label
+ Private p_datosclie As Panel
+ Dim c As Cursor
+ Dim d As Cursor
+ Dim ruta As String
+ Dim e As Cursor
+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("principal")
+ 'load the layout to Root
+ ALMACEN = Starter.almacen
+ reqManager.Initialize(Me, Starter.DBReqServer)
+ p_clientes.Visible = False
+End Sub
+
+
+Sub B4XPage_Appear
+ e = Starter.skmt.ExecQuery("SELECT USUARIO, RUTA FROM CARGA WHERE CARGADO = 1")
+ e.Position = 0
+ If e.RowCount = 1 Then
+ l_ruta.Text = e.GetString("RUTA")
+ p_clientes.Visible = True
+ c=Starter.skmt.ExecQuery("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from DATOS_CLIENTE WHERE ESTATUS = '0' ORDER BY CAT_CL_CODIGO ")
+ CustomListView1.Clear
+ For i = 0 To c.RowCount - 1
+ c.Position = i
+ CustomListView1.Add(CreateListItem(c.GetString("CAT_CL_NOMBRE"),c.GetString("CAT_CL_CALLE"),c.GetString("CAT_CL_CODIGO")),i)
+ Next
+ c.Close
+ End If
+End Sub
+
+'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
+
+Private Sub b_carga_Click
+ trabajos = 0
+ cmd.Initialize
+ cmd.Name = "select_cat_clientes_INTMEXP"
+ cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
+ reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
+ trabajos = trabajos + 1
+ ProgressDialogShow ("Cargando")
+ Log(Starter.latitud & " " & Starter.longitud)
+ teclado.HideKeyboard
+ ruta = e_ruta.Text
+ l_ruta.Text = ruta
+ e_ruta.Text = ""
+End Sub
+
+Sub CreateListItem(mostrar As String, mostrar1 As String, mostrar2 As String) As Panel
+ Dim p As B4XView = xui.CreatePanel("")
+ p.SetLayoutAnimated(0, 0, 0, 1, 220)
+ p.LoadLayout("datos_cliente")
+ p.Height= 60dip
+' p.Width = clv_orden.GetBase.Width
+ nombrecliente.Text = mostrar
+ direccion.Text = mostrar1
+ numerocliente.Text = mostrar2
+ p_datosclie.Tag = mostrar2
+' cxc.Text = mostrar3
+' Log(p.Width)
+ Return p
+End Sub
+
+Sub JobDone(Job As HttpJob)
+ If Job.Success = False Then
+ ToastMessageShow("Error: " & Job.ErrorMessage, True)
+ Else
+ LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green)
+
+ If Job.JobName = "DBRequest" Then
+ Dim result As DBResult = reqManager.HandleJob(Job)
+
+ If result.Tag = "kmt_datos" Then 'query tag
+ trabajos = trabajos - 1
+ Starter.skmt.ExecNonQuery("delete from DATOS_CLIENTE")
+ Starter.skmt.ExecNonQuery("delete from HIST_PREGUNTAS")
+' Starter.skmt.ExecNonQuery("delete from CARGA")
+ Starter.skmt.ExecNonQuery2("UPDATE CARGA SET CARGADO = '1' WHERE USUARIO = ?", Array As Object(B4XPages.MainPage.user))
+ Starter.skmt.ExecNonQuery2("UPDATE CARGA SET RUTA = ? WHERE USUARIO = ?", Array As Object(ruta, B4XPages.MainPage.user))
+ For Each records() As Object In result.Rows
+ Dim CAT_CL_CODIGO As String = records(result.Columns.Get("CAT_CL_CODIGO"))
+ Dim CAT_CL_RUTA As String = records(result.Columns.Get("CAT_CL_RUTA"))
+ Dim CAT_CL_NOMBRE As String = records(result.Columns.Get("CAT_CL_NOMBRE"))
+ Dim CAT_CL_ATIENDE1 As String = records(result.Columns.Get("CAT_CL_ATIENDE1"))
+ Dim CAT_CL_ATIENTE2 As String = records(result.Columns.Get("CAT_CL_ATIENTE2"))
+ Dim CAT_CL_TELEFONO As String = records(result.Columns.Get("CAT_CL_TELEFONO"))
+ Dim CAT_CL_EMAIL As String = records(result.Columns.Get("CAT_CL_EMAIL"))
+ Dim CAT_CL_CALLE As String = records(result.Columns.Get("CAT_CL_CALLE"))
+ Dim CAT_CL_NOEXT As String = records(result.Columns.Get("CAT_CL_NOEXT"))
+ Dim CAT_CL_NOINT As String = records(result.Columns.Get("CAT_CL_NOINT"))
+ Dim CAT_CL_CALLE1 As String = records(result.Columns.Get("CAT_CL_CALLE1"))
+ Dim CAT_CL_CALLE2 As String = records(result.Columns.Get("CAT_CL_CALLE2"))
+ Dim CAT_CL_COLONIA As String = records(result.Columns.Get("CAT_CL_COLONIA"))
+ Dim CAT_CL_MUNI As String = records(result.Columns.Get("CAT_CL_MUNI"))
+ Dim CAT_CL_EDO As String = records(result.Columns.Get("CAT_CL_EDO"))
+ Dim CAT_CL_CP As String = records(result.Columns.Get("CAT_CL_CP"))
+ Dim CAT_CL_LONG As String = records(result.Columns.Get("CAT_CL_LONG"))
+ Dim CAT_CL_LAT As String = records(result.Columns.Get("CAT_CL_LAT"))
+ Starter.skmt.ExecNonQuery2("INSERT INTO DATOS_CLIENTE(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT, ESTATUS) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_CL_CODIGO, CAT_CL_RUTA, CAT_CL_NOMBRE, CAT_CL_ATIENDE1, CAT_CL_ATIENTE2, CAT_CL_TELEFONO, CAT_CL_EMAIL, CAT_CL_CALLE, CAT_CL_NOEXT, CAT_CL_NOINT, CAT_CL_CALLE1, CAT_CL_CALLE2, CAT_CL_COLONIA, CAT_CL_MUNI, CAT_CL_EDO, CAT_CL_CP, CAT_CL_LONG, CAT_CL_LAT,"0"))
+ Next
+ p_clientes.Visible = True
+ c=Starter.skmt.ExecQuery("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from DATOS_CLIENTE WHERE ESTATUS = '0' ORDER BY CAT_CL_CODIGO ")
+ CustomListView1.Clear
+ For i = 0 To c.RowCount - 1
+ c.Position = i
+ CustomListView1.Add(CreateListItem(c.GetString("CAT_CL_NOMBRE"),c.GetString("CAT_CL_CALLE"),c.GetString("CAT_CL_CODIGO")),i)
+ Next
+ c.Close
+ End If
+
+ End If
+
+ If trabajos = 0 Then
+ ProgressDialogHide
+' l_ruta.Text = e_ruta.Text
+' e_ruta.Text = ""
+ p_clientes.Visible = True
+ End If
+
+ End If
+End Sub
+
+
+
+Private Sub p_datosclie_Click
+
+ Dim index As Int = CustomListView1.GetItemFromView(Sender)
+ Dim pnl As B4XView = CustomListView1.GetPanel(index).GetView(0)
+ Private lb As Label = pnl.GetView(0)
+ Log(lb.Text)
+
+ c = Starter.skmt.ExecQuery2("SELECT cuenta FROM CUENTAA WHERE cuenta = ?", Array As String (lb.Text))
+ d = Starter.skmt.ExecQuery("SELECT asignado FROM CUENTAA")
+ c.Position = 0
+ d.position = 0
+
+ If d.rowcount = 0 Then
+ Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?,?,?,?)", Array As Object(lb.Text,1,Starter.latitud,Starter.longitud))
+ B4XPages.ShowPage ("cliente")
+ Log(Starter.latitud & Starter.longitud)
+ Log("1")
+ Else if c.RowCount = 0 And d.GetString("asignado") = 0 Then
+ Starter.skmt.ExecNonQuery("delete from CUENTAA")
+ Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?,?,?,?)", Array As Object(lb.Text,1,Starter.latitud,Starter.longitud))
+ B4XPages.ShowPage ("cliente")
+ Log(Starter.latitud & Starter.longitud)
+ Log("2")
+ Else if c.RowCount = 0 And d.GetString("asignado") = "1" Then
+ MsgboxAsync("Tienes que hacer check out del cliente anterior","Atención")
+ Log("3")
+ Else if c.RowCount = 1 And d.GetString("asignado") = "1" Then
+ B4XPages.ShowPage ("cliente")
+ Log("4")
+
+ End If
+
+ c.Close
+ d.Close
+
+End Sub
+
diff --git a/B4A/CameraExClass2.bas b/B4A/CameraExClass2.bas
new file mode 100644
index 0000000..bc84bf4
--- /dev/null
+++ b/B4A/CameraExClass2.bas
@@ -0,0 +1,399 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=6
+@EndOfDesignText@
+'Class module
+'version 1.30
+'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
+ 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
+ Log("findCamera")
+ 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)
+ Log(r.target)
+ Log(numberOfCameras)
+ 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
+ Log("facing: " & r.GetField("facing") & ", " & cameraValue)
+ 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
+'Uncomment this sub if you need to handle the Preview event
+'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 GetSupportedPreviewSizes As CameraSize()
+ r.target = parameters
+ Dim list1 As List = r.RunMethod("getSupportedPreviewSizes")
+ 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 SetPreviewSize(Width As Int, Height As Int)
+ r.target = parameters
+ r.RunMethod3("setPreviewSize", Width, "java.lang.int", Height, "java.lang.int")
+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
+
+'Returns a list with the supported preview fps. Each item in the list is an array of two ints (minimum value and maximum value).
+Public Sub GetSupportedPreviewFpsRange As List
+ r.target = parameters
+ Return r.RunMethod("getSupportedPreviewFpsRange")
+End Sub
+'Returns the current preview fps range.
+'Range is a two elements array. The minimum value and maximum value will be stored in this array.
+Public Sub GetPreviewFpsRange(Range() As Int)
+ r.target = parameters
+ r.RunMethod4("getPreviewFpsRange", Array As Object(Range), Array As String("[I"))
+End Sub
+
+Public Sub SetPreviewFpsRange(MinValue As Int, MaxValue As Int)
+ r.target = parameters
+ r.RunMethod4("setPreviewFpsRange", Array As Object(MinValue, MaxValue), _
+ Array As String("java.lang.int", "java.lang.int"))
+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
+
+Public Sub GetSupportedPictureFormats As List
+ r.target = parameters
+ Return r.RunMethod("getSupportedPictureFormats")
+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
+
+Public Sub IsZoomSupported As Boolean
+ r.target = parameters
+ Return r.RunMethod("isZoomSupported")
+End Sub
+
+Public Sub GetMaxZoom As Int
+ r.target = parameters
+ Return r.RunMethod("getMaxZoom")
+End Sub
+
+Public Sub getZoom() As Int
+ r.target = parameters
+ Return r.RunMethod("getZoom")
+End Sub
+
+Public Sub setZoom(ZoomValue As Int)
+ r.target = parameters
+ r.RunMethod2("setZoom", ZoomValue, "java.lang.int")
+End Sub
+
+Public Sub getExposureCompensation As Int
+ r.target = parameters
+ Return r.RunMethod("getExposureCompensation")
+End Sub
+
+Public Sub setExposureCompensation(v As Int)
+ r.target = parameters
+ r.RunMethod2("setExposureCompensation", v, "java.lang.int")
+End Sub
+
+Public Sub getMinExposureCompensation As Int
+ r.target = parameters
+ Return r.RunMethod("getMinExposureCompensation")
+End Sub
+
+Public Sub getMaxExposureCompensation As Int
+ r.target = parameters
+ Return r.RunMethod("getMaxExposureCompensation")
+End Sub
+
+Public Sub SetFaceDetectionListener
+ Dim jo As JavaObject = nativeCam
+ Dim e As Object = jo.CreateEvent("android.hardware.Camera.FaceDetectionListener", "FaceDetection", Null)
+ jo.RunMethod("setFaceDetectionListener", Array(e))
+End Sub
+
+Private Sub FaceDetection_Event (MethodName As String, Args() As Object) As Object
+ Dim faces() As Object = Args(0)
+ For Each f As Object In faces
+ Dim jo As JavaObject = f
+ Dim faceRect As Rect = jo.GetField("rect")
+ Log(faceRect)
+ Next
+ Return Null
+End Sub
+
+
+
+Public Sub StartFaceDetection
+ Dim jo As JavaObject = nativeCam
+ jo.RunMethod("startFaceDetection", Null)
+End Sub
+
+Public Sub StopFaceDetection
+ Dim jo As JavaObject = nativeCam
+ jo.RunMethod("stopFaceDetection", Null)
+End Sub
+
diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas
new file mode 100644
index 0000000..31298ba
--- /dev/null
+++ b/B4A/DBRequestManager.bas
@@ -0,0 +1,272 @@
+B4A=true
+Group=Default Group
+ModulesStructureVersion=1
+Type=Class
+Version=6.8
+@EndOfDesignText@
+''Class module
+
+'' Requiere accesRandom File y requiere compressStrings, byte converter y okhhtputuils2
+Sub Class_Globals
+ Private mTarget As Object
+ Type DBResult (Tag As Object, Columns As Map, Rows As List)
+ Type DBCommand (Name As String, Parameters() As Object)
+ Private link As String
+ Private bc As ByteConverter
+ Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _
+ ,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte
+ Private VERSION As Float = 0.9
+ Private tempArray(1) As Object
+ Dim jobTagAnterior As String = "" 'Mod por CHV - 211109
+End Sub
+
+'Target - The module that handles JobDone (usually Me).
+'ConnectorLink - URL of the Java server.
+Public Sub Initialize (Target As Object, ConnectorLink As String)
+ mTarget = Target
+ link = ConnectorLink
+End Sub
+
+'Sends a query request.
+'Command - Query name and parameters.
+'Limit - Maximum rows to return or 0 for no limit.
+'Tag - An object that will be returned in the result.
+Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object)
+ Dim j As HttpJob
+ Dim ms As OutputStream
+ Dim out2 As OutputStream = StartJob(j,ms, Tag)
+
+ WriteObject(Command.Name, out2)
+ WriteInt(Limit, out2)
+ WriteList(Command.Parameters, out2)
+ out2.Close
+ j.PostBytes(link & "?method=query", ms.ToBytesArray)
+End Sub
+
+'Executes a batch of (non-select) commands.
+'ListOfCommands - List of the commands that will be executes.
+'Tag - An object that will be returned in the result.
+Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object)
+ Dim j As HttpJob
+ Dim ms As OutputStream
+ Dim out2 As OutputStream = StartJob(j,ms, Tag)
+ WriteInt(ListOfCommands.Size, out2)
+ For Each Command As DBCommand In ListOfCommands
+ WriteObject(Command.Name, out2)
+ WriteList(Command.Parameters, out2)
+ Next
+ out2.Close
+ j.PostBytes(link & "?method=batch", ms.ToBytesArray)
+End Sub
+
+'Similar to ExecuteBatch. Sends a single command.
+Public Sub ExecuteCommand(Command As DBCommand, Tag As Object)
+ ExecuteBatch(Array As DBCommand(Command), Tag)
+End Sub
+
+Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream
+ j.Initialize("DBRequest", mTarget)
+ j.Tag = Tag
+ MemoryStream.InitializeToBytesArray(0)
+ Dim compress As CompressedStreams
+ Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip")
+ WriteObject(VERSION, out)
+ Return out
+End Sub
+
+Private Sub WriteList(Parameters As List, out As OutputStream)
+ Dim data() As Byte
+ If Parameters = Null Or Parameters.IsInitialized = False Then
+ Dim Parameters As List
+ Parameters.Initialize
+ End If
+ data = bc.IntsToBytes(Array As Int(Parameters.Size))
+ out.WriteBytes(data, 0, data.Length)
+ For Each o As Object In Parameters
+ WriteObject(o, out)
+ Next
+End Sub
+
+Private Sub WriteObject(o As Object, out As OutputStream)
+ Dim data() As Byte
+ tempArray(0) = o
+ If tempArray(0) = Null Then
+ out.WriteBytes(Array As Byte(T_NULL), 0, 1)
+ Else If tempArray(0) Is Short Then
+ out.WriteBytes(Array As Byte(T_SHORT), 0, 1)
+ data = bc.ShortsToBytes(Array As Short(o))
+ Else If tempArray(0) Is Int Then
+ out.WriteBytes(Array As Byte(T_INT), 0, 1)
+ data = bc.IntsToBytes(Array As Int(o))
+ Else If tempArray(0) Is Float Then
+ out.WriteBytes(Array As Byte(T_FLOAT), 0, 1)
+ data = bc.FloatsToBytes(Array As Float(o))
+ Else If tempArray(0) Is Double Then
+ out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1)
+ data = bc.DoublesToBytes(Array As Double(o))
+ Else If tempArray(0) Is Long Then
+ out.WriteBytes(Array As Byte(T_LONG), 0, 1)
+ data = bc.LongsToBytes(Array As Long(o))
+ Else If tempArray(0) Is Boolean Then
+ out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1)
+ Dim b As Boolean = 0
+ Dim data(1) As Byte
+ If b Then data(0) = 1 Else data(0) = 0
+ Else If GetType(tempArray(0)) = "[B" Then
+ data = o
+ out.WriteBytes(Array As Byte(T_BLOB), 0, 1)
+ WriteInt(data.Length, out)
+ Else 'If o Is String Then (treat all other values as string)
+ out.WriteBytes(Array As Byte(T_STRING), 0, 1)
+ data = bc.StringToBytes(o, "UTF8")
+ WriteInt(data.Length, out)
+ End If
+ If data.Length > 0 Then out.WriteBytes(data, 0, data.Length)
+End Sub
+
+Private Sub ReadObject(In As InputStream) As Object
+ Dim data(1) As Byte
+ In.ReadBytes(data, 0, 1)
+ Select data(0)
+ Case T_NULL
+ Return Null
+ Case T_SHORT
+ Dim data(2) As Byte
+ Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0)
+ Case T_INT
+ Dim data(4) As Byte
+ Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
+ Case T_LONG
+ Dim data(8) As Byte
+ Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0)
+ Case T_FLOAT
+ Dim data(4) As Byte
+ Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0)
+ Case T_DOUBLE
+ Dim data(8) As Byte
+ Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0)
+ Case T_BOOLEAN
+ Dim b As Byte = ReadByte(In)
+ Return b = 1
+ Case T_BLOB
+ Dim len As Int = ReadInt(In)
+ Dim data(len) As Byte
+ Return ReadBytesFully(In, data, data.Length)
+ Case Else
+ Dim len As Int = ReadInt(In)
+ Dim data(len) As Byte
+ ReadBytesFully(In, data, data.Length)
+ Return BytesToString(data, 0, data.Length, "UTF8")
+ End Select
+End Sub
+
+Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte()
+ Dim count = 0, read As Int
+ Do While count < Len And read > -1
+ read = In.ReadBytes(Data, count, Len - count)
+ count = count + read
+ Loop
+ Return Data
+End Sub
+
+Private Sub WriteInt(i As Int, out As OutputStream)
+ Dim data() As Byte
+ data = bc.IntsToBytes(Array As Int(i))
+ out.WriteBytes(data, 0, data.Length)
+End Sub
+
+Private Sub ReadInt(In As InputStream) As Int
+ Dim data(4) As Byte
+ Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0)
+End Sub
+
+Private Sub ReadByte(In As InputStream) As Byte
+ Dim data(1) As Byte
+ In.ReadBytes(data, 0, 1)
+ Return data(0)
+End Sub
+
+'Handles the Job result and returns a DBResult.
+Public Sub HandleJob(Job As HttpJob) As DBResult
+ Dim start As Long = DateTime.Now 'ignore
+ Dim In As InputStream = Job.GetInputStream
+ Dim cs As CompressedStreams
+ In = cs.WrapInputStream(In, "gzip")
+ Dim serverVersion As Float = ReadObject(In) 'ignore
+ Dim method As String = ReadObject(In)
+ Dim table As DBResult
+ table.Initialize
+ table.Columns.Initialize
+ table.rows.Initialize
+ table.Tag = Job.Tag
+ If jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.Blue) 'Mod por CHV - 211109
+ jobTagAnterior = Job.Tag 'Mod por CHV - 211109
+ If method = "query" Then
+ Dim numberOfColumns As Int = ReadInt(In)
+ For i = 0 To numberOfColumns - 1
+ table.Columns.Put(ReadObject(In), i)
+ Next
+ Do While ReadByte(In) = 1
+ Dim rowObjects(numberOfColumns) As Object
+ table.rows.Add(rowObjects)
+ For col = 0 To numberOfColumns - 1
+ Dim o As Object = ReadObject(In)
+ rowObjects(col) = o
+ Next
+ Loop
+ Else If method = "batch" Then
+ table.Columns.Put("AffectedRows", 0)
+ Dim rows As Int = ReadInt(In)
+ For i = 0 To rows - 1
+ table.rows.Add(Array As Object(ReadInt(In)))
+ Next
+ End If
+ In.Close
+' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112
+ Return table
+End Sub
+'Reads a file and returns the file as a bytes array.
+Public Sub FileToBytes(Dir As String, FileName As String) As Byte()
+ Dim out As OutputStream
+ out.InitializeToBytesArray(0)
+ Dim In As InputStream = File.OpenInput(Dir, FileName)
+ File.Copy2(In, out)
+ out.Close
+ Return out.ToBytesArray
+End Sub
+'Converts an image to a bytes array (for BLOB fields).
+Public Sub ImageToBytes(Image As Bitmap) As Byte()
+ Dim out As OutputStream
+ out.InitializeToBytesArray(0)
+ Image.WriteToStream(out, 100, "JPEG")
+ out.Close
+ Return out.ToBytesArray
+End Sub
+'Converts a bytes array to an image (for BLOB fields).
+Public Sub BytesToImage(bytes() As Byte) As Bitmap
+ Dim In As InputStream
+ In.InitializeFromBytesArray(bytes, 0, bytes.Length)
+ Dim bmp As Bitmap
+ bmp.Initialize2(In)
+ Return bmp
+End Sub
+'Prints the table to the logs.
+Public Sub PrintTable(Table As DBResult)
+ Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size)
+ Dim sb As StringBuilder
+ sb.Initialize
+ For Each col In Table.Columns.Keys
+ sb.Append(col).Append(TAB)
+ Next
+ Log(sb.ToString)
+ For Each row() As Object In Table.Rows
+ Dim sb As StringBuilder
+ sb.Initialize
+ For Each record As Object In row
+ sb.Append(record).Append(TAB)
+ Next
+ ToastMessageShow(sb.ToString, True)
+ Next
+End Sub
+
+
\ No newline at end of file
diff --git a/B4A/Files/camara.ai b/B4A/Files/camara.ai
new file mode 100644
index 0000000..55a7f00
--- /dev/null
+++ b/B4A/Files/camara.ai
@@ -0,0 +1,338 @@
+%PDF-1.6
%
+1 0 obj
<>/OCGs[18 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
+
+
+
+
+ xmp.did:7fa98f89-b13d-164c-860f-c482f9fa880e
+ uuid:81f31a60-e036-410c-87fa-d0bced80e2f1
+ xmp.did:7fa98f89-b13d-164c-860f-c482f9fa880e
+ proof:pdf
+
+
+
+ EmbedByReference
+
+ C:\Users\USUARIO\Desktop\intmex promotoria\Intmex-Promotoria\B4A\Files\camara.png
+ 0
+ 0
+
+
+
+
+
+
+
+ C:\Users\USUARIO\Desktop\intmex promotoria\Intmex-Promotoria\B4A\Files\camara.png
+ 0
+ 0
+
+
+
+
+
+
+
+ saved
+ xmp.iid:7fa98f89-b13d-164c-860f-c482f9fa880e
+ 2023-05-15T16:58:50-06:00
+ Adobe Illustrator 25.4 (Windows)
+ /
+
+
+
+ application/pdf
+
+
+ camara
+
+
+ Adobe Illustrator 25.4 (Windows)
+ 2023-05-15T16:58:52-05:00
+ 2023-05-15T16:58:53-06:00
+ 2023-05-15T16:58:53-06:00
+
+
+
+ 256
+ 188
+ JPEG
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAvAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FUHrGq2ek6ZdaleP6dtaRSTStRjRY0LtsoY9F7DJQgZEAdWMpACy+bvzM/5yS1W4vJLHyhL
9WtI6Uv+KSerVY2/uriDkvFuS9d+ubzS9mgC58/x3F1mfWkmovHbvzd5hu5jNcXfORurenEOgA6B
R4ZshhiOQcI5JFR/xFrH/LR/wif804fDijjLv8Rax/y0f8In/NOPhxXjLv8AEWsf8tH/AAif804+
HFeMu/xFrH/LR/wif804+HFeMu/xFrH/AC0f8In/ADTj4cV4y7/EWsf8tH/CJ/zTj4cV4yvh80a7
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
+
+
+
+ 1
+ True
+ False
+
+ 55.329936
+ 80.891720
+ Millimeters
+
+
+
+ Cyan
+ Magenta
+ Yellow
+ Black
+
+
+
+
+
+ Grupo de muestras por defecto
+ 0
+
+
+
+ Document
+ AIRobin
+ Adobe PDF library 16.00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endstream
endobj
3 0 obj
<>
endobj
5 0 obj
<>/Resources<>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/Properties<>/XObject<>>>/Thumb 25 0 R/TrimBox[0.0 0.0 156.841 229.299]/Type/Page>>
endobj
20 0 obj
<>stream
+HwVu6PprqV*w6PH/242P AsC=#cCSsC=CK3hr.gK>W /P3@ T
+endstream
endobj
21 0 obj
<>
endobj
25 0 obj
<>stream
+8;Xp,IAd0A%Nn.Si]n4\o/M[PU)^+X5dW7N&"("iX9r)MWX>aF=k26l(ofP\1=t-N
+fZ;Hki\jOAA4XT\U(@;/!);-O,Q~>
+endstream
endobj
26 0 obj
[/Indexed/DeviceRGB 255 27 0 R]
endobj
27 0 obj
<>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream
endobj
24 0 obj
<>stream
+H P?=Vi@nV"c+h@P5 X=upms0*]UM.`0JʊK/ymͺxnT/2QTf.h*Xz-.:> 'bâp>Yel`bxVhV;a$KbsX.7W rZec\v}uo'$l4Ej8'^<]jxl6K
`#ꂾoCvPM4!
+endstream
endobj
22 0 obj
[/Indexed/DeviceRGB 1 29 0 R]
endobj
28 0 obj
<>/Filter/FlateDecode/Height 87/Intent/RelativeColorimetric/Length 845/Name/X/Subtype/Image/Type/XObject/Width 120>>stream
+Hԗ} + IJ H@[GWJ=#$0p6Å7_aW)r
bg 6ZrÃw-jB,pn%.YBg4%Xa4
A!+Fj0َ]7>ᆠIh{^=n8kr'5FKc^S9rW3kgp@SY
+YN1vRT 1