B4A=true Group=Default Group ModulesStructureVersion=1 Type=Class Version=11.5 @EndOfDesignText@ Sub Class_Globals Private Root As B4XView 'ignore Private xui As XUI 'ignore Dim rp As RuntimePermissions Dim g As GPS Dim ruta As String Dim c As Cursor Dim reqManager As DBRequestManager Dim ime As IME Dim CANCELA As Button Dim b_guardar As Button Dim cuenta As String Dim usuario As String Dim sDate,sTime As String Dim no_cliente As String Dim no_ruta As String Dim r_4 As RadioButton Dim et_nombre As EditText Dim tgl As Toggle ' Private l_sinUbicacion As Label Private p_nuevoCliente As Panel Private Label1 As Label Private p_botones As Panel Private p_cam As Panel Private p_camara As Panel Private b_foto_inci As Button Private camEx2 As CameraExClass2 Dim frontCamera As Boolean = False Dim fototomada As String Dim ALMACEN As String Private Panel1 As Panel Private Button1 As Button Private et_direccion As EditText Private b_ubicacion As Button Dim elGiro As String = "" Private lv_giro As ListView Private l_giro As Label Private et_giro As EditText Private cb_giro As B4XComboBox Dim logger As Boolean = False Dim cargarCliente As Boolean = False Private B_FOTO As Button Dim elOtroCliente As String = "" Dim camposModificados As List dim mandarTodo as Boolean = False 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 'load the layout to Root Root.LoadLayout("nuevocliente") ruta = File.DirInternal If File.Exists(ruta, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") End If ' skmt.Initialize(ruta,"kmt.db", True) ' p_camara.Height = Root.Height ' p_camara.Width = Root.Width End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub B4XPage_Appear camposModificados.Initialize reqManager.Initialize(Me, Starter.server) If Not(Starter.gps.GPSEnabled) Then ToastMessageShow("Es necesario tener el GPS encendido", True) StartActivity(Starter.gps.LocationSettingsIntent) End If Dim losGiros As List = Subs.traeGirosLista cb_giro.SetItems(losGiros) B_FOTO.Enabled = True If cargarCliente Then Private cf As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select * from HIST_FOTO_CLIENTE where codigo In (Select cuenta from cuentaa)"$) Private cc As Cursor = B4XPages.MainPage.skmt.ExecQuery("select * from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") If cc.RowCount > 0 Then cc.Position = 0 fototomada = "" If cf.RowCount > 0 Then cf.Position = 0 fototomada = cf.GetString("NOM_FOTO") End If Log($"${cc.GetString("CAT_CL_CODIGO")}, ${cf.RowCount}, ${fototomada}"$) elOtroCliente = cc.GetString("CAT_CL_CODIGO") et_nombre.Text = cc.GetString("CAT_CL_NOMBRE") et_direccion.Text = cc.GetString("CAT_CL_CALLE1") et_nombre.Text = cc.GetString("CAT_CL_NOMBRE") ' B_FOTO.Enabled = False Log($"${losGiros.IndexOf(cc.GetString("CAT_CL_GIRO"))}, ${losGiros}, ${cc.GetString("CAT_CL_GIRO")}"$) cb_giro.SelectedIndex = losGiros.IndexOf(cc.GetString("CAT_CL_GIRO")) End If End If b_ubicacion.Text = "Buscando ubicación ..." b_guardar.Visible = False Subs.panelVisible(p_nuevoCliente, 0, 0) p_nuevoCliente.Height = Root.Height p_nuevoCliente.Width = Root.Width ' Subs.centraEtiqueta(Label1, Root.Width) ' Subs.centraEtiqueta(l_sinUbicacion, Root.Width) Subs.centraPanel(p_botones, Root.Width) ' E_NOMBRE.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) If B4XPages.MainPage.lat_gps <> "0.0" Then b_guardar.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. ' l_sinUbicacion.Visible = False End If Subs.centraPanel(Panel1, Root.Width) b_guardar.Enabled = False ' Log(losGiros.IndexOf("ABARROTES")) ' cb_giro.SelectedIndex = losGiros.IndexOf("ABARROTES") ' cb_giro. ' l_sinUbicacion.Visible = True CallSubDelayed(Tracker, "StartFLPSmall") Log($"${B4XPages.MainPage.principal.l_dia.text}, ${Starter.dia_semana}"$) End Sub Sub GPS_LocationChanged (Location1 As Location) ' LogColor($"LATITUD= ${B4XPages.MainPage.lat_gps}"$, Colors.Red) b_ubicacion.TextColor = Colors.Gray Sleep(200) b_ubicacion.TextColor = Colors.red If B4XPages.MainPage.lat_gps <> "0.0" Then b_guardar.Enabled = True 'Si hay ubicaccion, mostramos el boton de guardar. ' l_sinUbicacion.Visible = True b_ubicacion.Text = $"Precisión del GPS: ${Round2(Location1.Accuracy,1)} mts."$ End If End Sub Sub flp_LocationChanged (Location1 As Location) Log("FLP LOC CHANGED") End Sub Sub CANCELA_Click B4XPages.ShowPage("Principal") fototomada = "" et_nombre.Text = "" et_direccion.Text = "" CallSubDelayed(Tracker, "StartFLP") End Sub Sub b_guardar_Click Log("|" & fototomada & "|" & et_nombre.Text & "|" & et_direccion.Text & "|" & cb_giro.SelectedItem) If et_nombre.Text = "" Or fototomada = "null" Or fototomada = Null Or fototomada = "" Or et_direccion.Text = "" Or cb_giro.SelectedItem = "SELECCIONA UNA OPCION" Then ToastMessageShow("Se tienen que llenar todos los campos y tomar la foto para continuar" , True) else if B4XPages.MainPage.principal.l_ruta.Text = "0" Then ToastMessageShow("Es necesario cargar una ruta.", False) Else Log("entramos a b_guardar") DateTime.DateFormat = "dd/MM/yyyy" DateTime.Timeformat = "HHmmss" sDate=DateTime.Date(DateTime.Now) sTime=DateTime.Time(DateTime.Now) Log($" //////////// Date: ${sDate} - Time: ${sTime} ////////////////"$) 'Aqui creamos manualmete la hora con el separador de los 2 puntos porque en algunas versiones de android no respeta el formato "Timeformat = 'HH:mm:ss'" Private hora As String = sTime.SubString2(0,2) Private mins As String = sTime.SubString2(2,4) Private segs As String = sTime.SubString(4) sTime = hora&":"&mins&":"&segs Log("////////////// sTime: "&sTime&" ////////////////") c = B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA FROM kmt_info") c.Position=0 no_ruta= c.GetString("CAT_CL_RUTA") no_cliente= "NC" & sTime & no_ruta If cargarCliente Then no_cliente = elOtroCliente Log("++ ++ no_cliente = "&no_cliente) c.Close DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss" Private DateNC As String = DateTime.Date(DateTime.Now) If cargarCliente Then camposModificados = Subs.RemoveDuplicates(camposModificados) B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE kmt_info set CAT_CL_CODIGO = '${no_cliente}', CAT_CL_CEDIS = '${Subs.traeAlmacen}', CAT_CL_LAT = '${B4XPages.MainPage.lat_gps}', CAT_CL_LONG = '${B4XPages.MainPage.lon_gps}', CAT_CL_GIRO = '${cb_giro.SelectedItem}', CAT_CL_NOMBRE = '${Subs.escapeSQLString(et_nombre.Text)}', CAT_CL_CALLE1 = '${Subs.escapeSQLString(et_direccion.text)}', CAT_CL_ENVIO_PENDIENTE = 1, LAT_CENSADOR = '${B4XPages.MainPage.lat_gps}', LON_CENSADOR = '${B4XPages.MainPage.lon_gps}', CAMPOS_MODIFICADOS = '${Subs.list2string(camposModificados)}' where CAT_CL_CODIGO In (select cuenta from cuentaa)"$) Else B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO, CAT_CL_RUTA, CAT_CL_NOMBRE, CAT_CL_CALLE1, CAT_CL_LAT, CAT_CL_LONG, CAT_CL_FECHA_CAPTURA, CAT_CL_DIAS_VISITA, CAT_CL_ENVIO_PENDIENTE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1) ", Array As Object (no_cliente, no_ruta, et_nombre.Text, et_direccion.Text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, DateNC, Starter.dia_semana)) End If B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) ALMACEN = Subs.traeAlmacen ' If fototomada <> "" And fototomada <> Null Then B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_FOTO_CLIENTE(CODIGO, ALMACEN, RUTA, NOM_FOTO, ENVIO_PENDIENTE) VALUES(?,?,?,?,1)", Array As Object(no_cliente, ALMACEN, no_ruta, fototomada)) Log($"${no_cliente}, ${ALMACEN}, ${no_ruta}, ${fototomada}"$) ' End If mandaPendientesNuevosClientes cargarCliente = False B4XPages.ShowPage("Principal") fototomada = "" et_nombre.Text = "" et_direccion.Text = "" End If End Sub Private Sub p_nuevoCliente_Click End Sub Private Sub b_foto_inci_Click b_guardar.Enabled = False camEx2.TakePicture p_camara.Visible = False ' StopCamera2 End Sub Private Sub InitializeCamera2 rp.CheckAndRequest(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 If logger Then Log("inicializamos Camara") Else ToastMessageShow("Sin permisos de camara!!!", True) End If ' rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) ' If Result Then ' Log("Con permisos para escritura") ' Else ' ToastMessageShow("Sin permisos de escritura externa.", True) ' End If ' ' rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE) ' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) ' If Result Then ' Log("Con permisos de lectura") ' Else ' ToastMessageShow("Sin permisos de lectura externa!", True) ' End If End Sub Sub Camera1_Ready (Success As Boolean) If logger Then Log("Camara ready") If Success Then camEx2.SetJpegQuality(90) camEx2.SetContinuousAutoFocus camEx2.CommitParameters camEx2.StartPreview If logger Then Log(camEx2.GetPreviewSize) Else ToastMessageShow("Cannot open camera.", True) Log("Cannot open camera") End If End Sub Sub Camera1_PictureTaken (Data()As Byte) If logger Then 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" If logger Then Log("creado en promotoria " & Dirp & Dir & Dir2) Catch Dir2 = "" If logger Then Log("creado en raiz") End Try camEx2.SavePictureToFile(Data, Dirp&Dir, filename) camEx2.StartPreview 'restart preview Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 400, 550, 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) ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True) If logger Then Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename) p_camara.Visible = False StopCamera2 b_guardar.Enabled = True End Sub Private Sub StopCamera2 ' Capturing = False If logger Then Log("ENTRAMOS STOPCAMERA2") If logger Then Log(camEx2.IsInitialized) If camEx2.IsInitialized Then If logger Then Log("RELEASE CAMERA") camEx2.Release End If End Sub Private Sub B_FOTO_Click DateTime.DateFormat="ddMMyyyyHHmmss" ime.HideKeyboard InitializeCamera2 Subs.centraPanel(p_cam, Root.Width) Subs.panelVisible(p_camara, 0, 0) p_camara.Width = Root.Width Subs.centraBoton(b_foto_inci, Root.Width) fototomada = DateTime.Now & "_cliente.jpg" Log(fototomada) End Sub Sub B4XPage_CloseRequest As ResumableSub Log("CloseRequest NC") StopCamera2 CallSubDelayed(Tracker, "StartFLP") If p_camara.Visible Then p_camara.Visible = False Else B4XPages.ShowPage("Principal") End If Return False End Sub Private Sub b_ubicacion_Click ToastMessageShow("Buscando ubicación", False) b_ubicacion.Text = "Buscando ubicación ..." CallSubDelayed(Tracker, "StartFLPSmall") End Sub Sub JobDone(Job As HttpJob) Log(Job.Success) 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) 'Mod por CHV - 211027 If Job.JobName = "DBRequest" Then Dim resultado As DBResult = reqManager.HandleJob(Job) 'Modificamos la bandera de pendiente en kmt_info If resultado.Tag.As(String).IndexOf("guardaClienteNuevo_") > -1 Then Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+1) ' Log($"Cliente: ${cliente}"$) B4XPages.MainPage.skmt.ExecNonQuery($"update kmt_info set CAT_CL_ENVIO_PENDIENTE = 0 where CAT_CL_CODIGO = '${cliente}'"$) Log($"Cliente: ${cliente} - PENDIENTE A CERO"$) B4XPages.MainPage.skmt.ExecNonQuery($"update HIST_FOTO_CLIENTE set ENVIO_PENDIENTE = 0 where CODIGO = '${cliente}'"$) Subs.logJobDoneResultados(resultado) End If 'Modificamos la bandera de pendiente en fotos If resultado.Tag.As(String).IndexOf("insertFotoCN_") > -1 Then Subs.logJobDoneResultados(resultado) Private cliente As String= resultado.Tag cliente = cliente.SubString(cliente.IndexOf("_")+1) Log($"Cliente: ${cliente} - PENDIENTE A CERO"$) B4XPages.MainPage.skmt.ExecNonQuery($"update HIST_FOTO_CLIENTE set ENVIO_PENDIENTE = 0 where CODIGO = '${cliente}'"$) End If End If Job.Release End If End Sub Sub mandaPendientesNuevosClientes 'Enviamos Pendientes DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss" reqManager.Initialize(Me, Starter.server) Private sDateP As String = DateTime.Date(DateTime.Now) ' c = B4XPages.MainPage.skmt.ExecQuery("SELECT * from kmt_info where CAT_CL_CODIGO like 'NC%' and CAT_CL_ENVIO_PENDIENTE = '1'") c = B4XPages.MainPage.skmt.ExecQuery("Select kmt_info.*, nom_foto from kmt_info left join HIST_FOTO_CLIENTE on cat_cl_codigo = codigo where CAT_CL_CODIGO like 'NC%' and CAT_CL_ENVIO_PENDIENTE = '1'") If mandarTodo Then c = B4XPages.MainPage.skmt.ExecQuery("Select kmt_info.*, nom_foto from kmt_info left join HIST_FOTO_CLIENTE on cat_cl_codigo = codigo where CAT_CL_CODIGO like 'NC%'") Log($"Cliente Nuevo PENDIENTE: ${c.RowCount}"$) Dim fotox() As Byte Dim cmd As DBCommand Dim Dirp As String = File.DirInternal Dim Dir As String Dim Dir2 As String Dir = "/promotoriakmts" If c.RowCount > 0 Then For i = 0 To c.RowCount - 1 c.Position = i Log(c.GetString("NOM_FOTO")) If c.GetString("NOM_FOTO") <> Null And c.GetString("NOM_FOTO") <> "" And c.GetString("NOM_FOTO") <> "null" Then Log(File.Exists(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) Log($"${Dirp&Dir&Dir2},${c.GetString("NOM_FOTO")}"$) fotox = Null If File.Exists(Dirp&Dir&Dir2,c.GetString("NOM_FOTO")) Then fotox = Bit.InputStreamToBytes(File.OpenInput(Dirp&Dir&Dir2,c.GetString("NOM_FOTO"))) Dim cmd As DBCommand cmd.Initialize cmd.Name = "guardaClienteNuevo_MARDS" ' TMP_ALMACENID, TMP_RUTA, TMP_USUARIO, TMP_ID_CLIENTE, TMP_NOMBRE, TMP_DOMICILIO, TMP_FECHA_CAPTURA_MOVIL, TMP_FECHA_SINCRONIZACION, TMP_LATITUD, TMP_LONGITUD cmd.Parameters = Array As Object(Subs.traeAlmacen, c.GetString("CAT_CL_RUTA"), Subs.traeUsuarioDeBD, c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE"), c.GetString("CAT_CL_CALLE1"), c.GetString("CAT_CL_FECHA_CAPTURA"), sDateP, c.GetString("CAT_CL_LAT"), c.GetString("CAT_CL_LONG"), fotox, elGiro, Starter.dia_semana) ' Log($"${c.GetString("CAT_CL_CODIGO")}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_LAT")}, ${c.GetString("CAT_CL_LONG")}, ${c.GetString("CAT_CL_SECUENCIA")}, ${c.GetString("CAT_CL_RUTA")}, ${c.GetString("CAT_CL_DIASEMANA")}, ${c.GetString("CAT_CL_GIRO")}, ${c.GetString("CAT_CL_NOMBRE")}, ${c.GetString("CAT_CL_ATIENDE1")}, ${c.GetString("CAT_CL_CALLE")}, ${c.GetString("CAT_CL_NOINT")}, ${c.GetString("CAT_CL_NOEXT")}, ${c.GetString("CAT_CL_CALLE1")}, ${c.GetString("CAT_CL_CRUCE1")}, ${c.GetString("CAT_CL_CALLE2")}, ${c.GetString("CAT_CL_CP")}, ${c.GetString("CAT_CL_COLONIA")}, ${c.GetString("CAT_CL_MUNI")}, ${c.GetString("CAT_CL_EDO")}, ${c.GetString("CAT_CL_ESTATUS")}, ${c.GetString("CAT_CL_FECHA_CAPTURA")}, ${sDate}, ${Subs.traeUsuarioDeBD}"$) reqManager.ExecuteCommand(cmd , $"guardaClienteNuevo_${c.GetString("CAT_CL_CODIGO")}"$) cmd.Initialize cmd.Name = "guardaClientesNuevosMods_MARDS" cmd.Parameters = Array As Object(Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeAlmacen, c.GetString("CAT_CL_RUTA"), Subs.traeCliente, c.GetString("CAMPOS_MODIFICADOS")) Log($"${Subs.traeUsuarioDeBD}, ${Subs.traeAlmacen}, ${Subs.traeAlmacen}, ${c.GetString("CAT_CL_RUTA")}, ${Subs.traeCliente}, ${c.GetString("CAMPOS_MODIFICADOS")}"$) reqManager.ExecuteCommand(cmd , $"guardaClientesNuevosMods_${c.GetString("CAT_CL_CODIGO")}"$) End If Next End If End Sub Private Sub cb_giro_SelectedIndexChanged (Index As Int) elGiro = cb_giro.SelectedItem camposModificados.Add("CAT_CL_GIRO") End Sub Private Sub et_nombre_TextChanged (Old As String, New As String) camposModificados.Add("CAT_CL_NOMBRE") End Sub Private Sub et_direccion_TextChanged (Old As String, New As String) camposModificados.Add("CAT_CL_CALLE1") End Sub