- Se corrigio el codigo de la encuesta para que guarde almacen y ruta en la base de datos.

- Se puso una validacion al salir de cliente, para que si hay campos modificados y no se han guardado, mande un aviso.
This commit is contained in:
2024-02-26 15:32:40 -06:00
parent c600d9e044
commit 20fee54acb
9 changed files with 69 additions and 23 deletions

View File

@@ -148,7 +148,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GIROS (id TEXT, descripcion TEXT)")
' skmt.ExecNonQuery("drop table kmt_info")
skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS kmt_info (CAT_CL_FOTO BLOB, CAT_CL_NUM_SERIEFISICO TEXT, CAT_CL_MTOCOMPRA TEXT, CAT_CL_CEDIS TEXT, CAT_CL_LAT TEXT, CAT_CL_LONG TEXT, CAT_CL_FBAJA TEXT, CAT_CL_FALTA TEXT, CAT_CL_CP TEXT, CAT_CL_EDO TEXT, CAT_CL_MUNI TEXT, CAT_CL_COLONIA TEXT, CAT_CL_CALLE2 TEXT, CAT_CL_CALLE1 TEXT, CAT_CL_NOINT TEXT, CAT_CL_NOEXT TEXT, CAT_CL_CALLE TEXT, CAT_CL_EMAIL TEXT, CAT_CL_TELEFONO TEXT, CAT_CL_ATIENTE2 TEXT, CAT_CL_ATIENDE1 TEXT, CAT_CL_NOMBRE TEXT, CAT_CL_GIRO TEXT, CAT_CL_DIAS_VISITA TEXT, CAT_CL_TIPO_RUTA TEXT, CAT_CL_RUTA TEXT, CAT_CL_CODIGO TEXT, gestion NUMERIC, CAT_CL_DIASEMANA TEXT, CAT_CL_SECUENCIA INT)")
skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CUESTIONARIO (Q_IDCLIENTE TEXT, Q_IDPREGUNTA TEXT, Q_PREGUNTA TEXT, Q_IDRESPUESTA TEXT, Q_RESPUESTA TEXT, Q_FECHA TEXT)")
' skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CUESTIONARIO (Q_IDCLIENTE TEXT, Q_IDPREGUNTA TEXT, Q_PREGUNTA TEXT, Q_IDRESPUESTA TEXT, Q_RESPUESTA TEXT, Q_FECHA TEXT)")
Subs.agregaColumna("kmt_info", "CAT_CL_CRUCE1", "TEXT")
Subs.agregaColumna("kmt_info", "CAT_CL_ESTATUS", "TEXT")
Subs.agregaColumna("kmt_info", "CAT_CL_ENVIO_PENDIENTE", "TEXT")

View File

@@ -340,7 +340,7 @@ Private Sub Timer2_Tick
End Sub
Sub GPS_LocationChanged (Location1 As Location)
LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red)
' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red)
' Log($"${Tracker.FLP.GetLastKnownLocation.Latitude}, ${Tracker.FLP.GetLastKnownLocation.Longitude}"$)
If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then
B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude
@@ -365,6 +365,17 @@ Sub GPS_LocationChanged (Location1 As Location)
End Sub
Private Sub B4XPage_CloseRequest As ResumableSub
Log(">>>>> MODIFiCADOS: " & camposModificados)
If camposModificados.Size > 0 Then
res = Msgbox2("Hay campos modificados que no se han guardado, estas seguro que desas salir?", "AVISO", "Salir sin guardar", "Regresar", "", Null) 'ignore
If res = DialogResponse.POSITIVE Then
Log("POSITIVO")
Return True
Else
Log("NEGATIVO")
Return False
End If
End If
' BACK key pressed
q.encuestaIniciada = False
q.ocultPanelPregunta
@@ -717,6 +728,10 @@ Private Sub et_diaSemana_TextChanged (Old As String, New As String)
camposModificados.Add("CAT_CL_DIAS_VISITA")
End Sub
Private Sub et_telefono_TextChanged (Old As String, New As String)
camposModificados.Add("CAT_CL_TELEFONO")
End Sub
Private Sub cb_diaSemana_SelectedIndexChanged (Index As Int)
camposModificados.Add("CAT_CL_DIAS_VISITA")
End Sub
@@ -727,9 +742,10 @@ Sub q_preguntaContestada(m As Map)
' If q.IsInitialized Then Log($"${q.encuestaIniciada}|${q.preguntaActual}"$)
' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta.
m.Get("panel").As(Panel).RemoveView 'Quitamos le panel de la pregunta
DateTime.DateFormat = "yyyyMMdd"
DateTime.DateFormat = "dd/MM/yyyy"
DateTime.TimeFormat = "HH:mm:ss"
skmt.ExecNonQuery($"delete from CUESTIONARIO where Q_IDCLIENTE = '${Subs.traeCliente}' and Q_IDPREGUNTA = '${m.Get("idPregunta")}'"$)
skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${Subs.traeCliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)}')"$)
skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${Subs.traeRuta}', '${Subs.traeAlmacen}', '${Subs.traeCliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)} ${DateTime.time(DateTime.now)}')"$)
Select Case m.Get("idPregunta")
Case "1"
If m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then
@@ -829,4 +845,4 @@ Private Sub l_cuestionario_LongClick
skmt.ExecNonQuery($"delete from CUESTIONARIO where Q_IDCLIENTE = '${Subs.traeCliente}'"$)
B4XPage_Appear
End If
End Sub
End Sub

View File

@@ -14,7 +14,7 @@ Sub Class_Globals
Private CallBack As Object 'ignore
Private vPreguntaActual As String
Private db As SQL
Private clienteAnt As String = ""
' Private clienteAnt As String = ""
Dim panelSombra As Panel 'Panel de sombra.
End Sub
@@ -25,6 +25,9 @@ Public Sub Initialize (vCallback As Object, vEventName As String, vRoot As B4XVi
CallBack = vCallback
db = skmt
vPreguntaActual = 0
db.ExecNonQuery("CREATE TABLE IF NOT EXISTS CUESTIONARIO (Q_RUTA TEXT, Q_ALMACEN TEXT, Q_IDCLIENTE TEXT, Q_IDPREGUNTA TEXT, Q_PREGUNTA TEXT, Q_IDRESPUESTA TEXT, Q_RESPUESTA TEXT, Q_FECHA TEXT, Q_ENVIO_OK INTEGER DEFAULT 0)")
agregaColumna("CUESTIONARIO", "Q_RUTA", "TEXT")
agregaColumna("CUESTIONARIO", "Q_ALMACEN", "TEXT")
Return Me
End Sub
@@ -61,7 +64,7 @@ End Sub
' End Sub
'###########################################
Sub agregaPregunta(id As String, pregunta As String, respuestas As List)
encuestaIniciada = True
encuestaIniciada = True
vPreguntaActual = id
bAceptarPregunta.Initialize("bAceptarPregunta")
@@ -103,8 +106,9 @@ Sub agregaPregunta(id As String, pregunta As String, respuestas As List)
panelX.top = (Root2.Height / 3) - (panelX.Height / 2)
panelSombra.Width = Root2.Width
panelSombra.Height = Root2.Height
panelSombra.BringToFront
panelSombra.Elevation = 100
panelSombra.BringToFront
' panelSombra.Elevation = 0
End Sub
private Sub preguntaContestada(Success As Map) 'ignore
@@ -124,7 +128,7 @@ Private Sub bAceptarPregunta_Click
encuestaIniciada = True
Private m As Map = Sender.As(Button).tag.As(Map) 'Recibimos el id de la pregunta, el id de la respuesta, el texto de la respuesta y el objeto del panelSombra para poder ocultarlo.
preguntaContestada(m)
'' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta.
'' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta.
' m.Get("panel").As(Panel).RemoveView
' If m.Get("idPregunta") = "1" And m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then
' Log("Tiendajon / Ventana / Kiosko")
@@ -150,4 +154,25 @@ End Sub
'Oculta el anel de la pregunta.
Sub ocultPanelPregunta
If panelSombra.IsInitialized Then panelSombra.RemoveView
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 = db.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
db.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
db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$)
Catch
Log(LastException)
End Try
End Try
End Sub

View File

@@ -84,7 +84,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' skmt.Initialize(ruta,"kmt.db", True)
' p_camara.Height = Root.Height
' p_camara.Width = Root.Width
q.Initialize(Me, "q", Root, B4XPages.MainPage.skmt)
q.Initialize(Me, "q", Root, Starter.skmt)
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
@@ -108,7 +108,7 @@ Sub B4XPage_Appear
et_telefono.Text = ""
et_email.Text = ""
Log($"CargarCliente: ${cargarCliente}"$)
' Log($"CargarCliente: ${cargarCliente}"$)
reqManager.Initialize(Me, Starter.server)
If Not(Starter.gps.GPSEnabled) Then
ToastMessageShow("Es necesario tener el GPS encendido", True)
@@ -143,8 +143,9 @@ Sub B4XPage_Appear
cb_giro.SelectedIndex = losGiros.IndexOf(cc.GetString("CAT_CL_GIRO"))
End If
Else
DateTime.DateFormat = "HH:mm:ss"
sTime=DateTime.Time(DateTime.Now)
no_cliente= "NC" & sTime & no_ruta
no_cliente= "NC" & sTime & ":" & Subs.traeRuta
B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA")
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente))
Log(no_cliente)
@@ -201,7 +202,7 @@ Sub B4XPage_Appear
l_cuestionario.Height = su.MeasureMultilineTextHeight(l_cuestionario, l_cuestionario.Text)
End If
End If
Log($"${(Not(q.encuestaIniciada) And Not(cargarCliente))} | ${Not(hayCuestionario)}"$)
' Log($"${(Not(q.encuestaIniciada) And Not(cargarCliente))} | ${Not(hayCuestionario)}"$)
If (Not(q.encuestaIniciada) And Not(cargarCliente)) Or (Not(hayCuestionario)) Then
Log("Mostramos encuesta")
q.agregaPregunta("1", "¿Se puede acceder al negocio o está enrejado?", Array As String("No, está enrejado o no se tiene acceso", "Si se pude acceder"))
@@ -535,9 +536,10 @@ Sub q_preguntaContestada(m As Map)
' If q.IsInitialized Then Log($"${q.encuestaIniciada}|${q.preguntaActual}"$)
' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta.
m.Get("panel").As(Panel).RemoveView 'Quitamos le panel de la pregunta
DateTime.DateFormat = "yyyyMMdd"
DateTime.DateFormat = "dd/MM/yyyy"
DateTime.TimeFormat = "HH:mm:ss"
B4XPages.MainPage.skmt.ExecNonQuery($"delete from CUESTIONARIO where Q_IDCLIENTE = '${Subs.traeCliente}' and Q_IDPREGUNTA = '${m.Get("idPregunta")}'"$)
B4XPages.MainPage.skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${no_cliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)}')"$)
B4XPages.MainPage.skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${Subs.traeRuta}', '${Subs.traeAlmacen}', '${Subs.traeCliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)} ${DateTime.time(DateTime.now)}')"$)
Select Case m.Get("idPregunta")
Case "1"
If m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then
@@ -596,10 +598,10 @@ Sub ajustaTamano
' Log("xx: " & sv_clientesDatos.Panel.Height)
' Log($"${b_guardaCambios.Top} + 350"$)
If l_cuestionario.Visible Then
Log("visible")
' Log("visible")
p_botones.Top = l_cuestionario.Top + l_cuestionario.Height + 20
Else
Log("INVisible")
' Log("INVisible")
p_botones.Top = b_ubicacion.Top + b_ubicacion.Height + 20
End If
p_nuevoCliente.Height = p_botones.Top + 350

View File

@@ -598,6 +598,7 @@ Sub JobDone(Job As HttpJob)
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_ALMACEN As String = records(RESULT.Columns.Get("CAT_CL_IDALMACEN"))
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"))
@@ -636,7 +637,7 @@ Sub JobDone(Job As HttpJob)
' Log(records(RESULT.Columns.Get("CAT_CL_CUESTIONARIO")))
' Log($"${CAT_CL_CODIGO}"$)
For i = 1 To cuestionario.Length - 1 Step 4
B4XPages.MainPage.skmt.ExecNonQuery($"insert into cuestionario (Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${CAT_CL_CODIGO}', '${cuestionario(i)}', '${cuestionario(i+1)}', '${cuestionario(i+2)}', '${cuestionario(i+3)}', '${qFecha}')"$)
B4XPages.MainPage.skmt.ExecNonQuery($"insert into cuestionario (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${CAT_CL_RUTA}', '${CAT_CL_ALMACEN}', '${CAT_CL_CODIGO}', '${cuestionario(i)}', '${cuestionario(i+1)}', '${cuestionario(i+2)}', '${cuestionario(i+3)}', '${qFecha}')"$)
' Log($"${i} - ${qFecha}, ${cuestionario(i)}, ${cuestionario(i+1)}, ${cuestionario(i+2)}, ${cuestionario(i+3)}"$)
Next
End If
@@ -708,7 +709,7 @@ Sub JobDone(Job As HttpJob)
Log(records(RESULT.Columns.Get("HCC_CUESTIONARIO")))
' Log($"${CAT_CL_CODIGO}"$)
For i = 1 To cuestionario.Length - 1 Step 4
B4XPages.MainPage.skmt.ExecNonQuery($"insert into cuestionario (Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${CAT_CL_CODIGO}', '${cuestionario(i)}', '${cuestionario(i+1)}', '${cuestionario(i+2)}', '${cuestionario(i+3)}', '${qFecha}')"$)
B4XPages.MainPage.skmt.ExecNonQuery($"insert into cuestionario (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${CAT_CL_RUTA}', '${CAT_CL_CEDIS}', '${CAT_CL_CODIGO}', '${cuestionario(i)}', '${cuestionario(i+1)}', '${cuestionario(i+2)}', '${cuestionario(i+3)}', '${qFecha}')"$)
Log($"${i} - ${qFecha}, ${cuestionario(i)}, ${cuestionario(i+1)}, ${cuestionario(i+2)}, ${cuestionario(i+3)}"$)
Next
End If

View File

@@ -753,7 +753,7 @@ Version=12.8
#Region Project Attributes
#ApplicationLabel: Mariana Censos
#VersionCode: 1
#VersionName: 4.02.14.1
#VersionName: 4.02.24
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False

View File

@@ -43,12 +43,12 @@ ModuleClosedNodes15=
ModuleClosedNodes16=4,5,6,10,13,17,18,19
ModuleClosedNodes2=
ModuleClosedNodes3=
ModuleClosedNodes4=7,10,11,14,15,16,17,18,20,21,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44
ModuleClosedNodes4=
ModuleClosedNodes5=
ModuleClosedNodes6=
ModuleClosedNodes7=
ModuleClosedNodes8=9,13,14,17,18
ModuleClosedNodes9=1
NavigationStack=C_NuevoCliente,Class_Globals,30,0,C_NuevoCliente,B4XPage_Appear,132,0,Visual Designer,nuevoClienteDatos.bal,-100,6,C_Clientes,Mods,0,0,C_Clientes,BUSCA_TextChanged,202,0,C_Clientes,sc_result,239,0,C_Clientes,calc_ean_checksum,254,0,C_Cliente,B4XPage_Appear,305,0,Main,Process_Globals,18,0,C_NuevoCliente,cb_giro_SelectedIndexChanged,512,0,C_Cliente,b_guardaCambios_Click,388,0
NavigationStack=C_Cliente,et_colonia_TextChanged,695,0,C_Cliente,ajustaTamano,818,0,C_Cliente,et_NoInt_TextChanged,679,0,C_Cliente,et_diaSemana_TextChanged,712,0,Visual Designer,clienteDatos.bal,-100,2,C_Cliente,et_telefono_TextChanged,715,0,C_Cliente,et_NoExt_TextChanged,684,0,C_Cliente,GPS_LocationChanged,356,0,C_Cliente,B4XPage_CloseRequest,360,6,B4XMainPage,B4XPage_Created,125,0,C_Principal,JobDone,710,0
SelectedBuild=0
VisibleModules=2,14,6,9,4,8,5,15,7,16

View File

@@ -14,6 +14,7 @@ Sub Process_Globals
'These variables can be accessed from all modules.
Public gps As GPS
Dim ph As Phone
Dim skmt As SQL
Public rp As RuntimePermissions
Public FLP As FusedLocationProvider
' Private flpStarted As Boolean
@@ -54,6 +55,7 @@ Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
Subs.revisaBD
' Log(marcaCel)
skmt.Initialize(File.DirInternal,"kmt.db", True)
reqManager.Initialize(Me, server)
End Sub

View File

@@ -161,7 +161,7 @@ End Sub
Sub flp_LocationChanged (Location1 As Location)
' ToastMessageShow("Loc changed", False)
Log($"Loc changed TRACKER:${Location1.Longitude}, ${Location1.Latitude}, ${Location1.Accuracy}"$)
' Log($"Loc changed TRACKER:${Location1.Longitude}, ${Location1.Latitude}, ${Location1.Accuracy}"$)
B4XPages.MainPage.lat_gps = Location1.Latitude
B4XPages.MainPage.lon_gps = Location1.Longitude
UUGCoords = Location1