Files
Mariana_Censos/B4A/C_NuevoCliente.bas
Jose Alberto Guerra Ugalde 2a3a701d3c 26/2/23 - Cuestionario para clientes
- Se agregó el cuestionario popup al entrar a un cliente.
- FALTA PONERLO EN LOS CLIENTES NUEVOS
2023-12-26 16:54:12 -06:00

429 lines
17 KiB
QBasic

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
Private et_atiende As EditText
Private et_telefono As EditText
Private et_email As EditText
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 = ""
et_atiende.Text = ""
et_telefono.Text = ""
et_email.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")
Log($"CargarCliente: ${cargarCliente}"$)
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, LAT_CENSADOR, LON_CENSADOR, CAT_CL_ENVIO_PENDIENTE, CAT_CL_TELEFONO, CAT_CL_ATIENDE1, CAT_CL_EMAIL) 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, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, et_atiende.Text, et_telefono.Text, et_email.Text))
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