Files
ADM2/B4A/C_BItacora.bas
Jose Alberto Guerra Ugalde eebc8a81c1 VERSION 6.01.20
- Se agrego un "mandaPendientes" en bitacora para cuando por problemas de red no se puede enviar el evento.
2026-01-27 16:21:28 -06:00

302 lines
14 KiB
QBasic

B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=12.8
@EndOfDesignText@
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
Dim db As SQL
Private Root2 As B4XView
Dim p_transparenteInicioFin2 As Panel
Dim b_Inicio_Fin_venta2 As Button
Dim contadorIniciarVenta, precision As Int
Dim IniVenNO, dentroDeGeocerca, enVenta As Boolean
Dim motivoNoVenta, motivoNoVisita As String
Dim banderaGeoCerca As String
Private reqManager As DBRequestManager
Private mpCorriendo As Boolean = False
Dim enviandoInfo As Boolean = False
End Sub
'You can add more parameters here.
Public Sub Initialize (vCallback As Object, vEventName As String, vRoot As B4XView, db1 As SQL, DBReqServer As String) As Object
db = db1
Root2 = vRoot
' reqManager = DBReq
reqManager.Initialize(Me, DBReqServer)
db.ExecNonQuery("CREATE TABLE IF NOT EXISTS BITACORAGPS(fechab TEXT, usuariob TEXT, almacenb TEXT, rutab TEXT, eventob TEXT, clienteb TEXT, iniciob TEXT, finb TEXT, latitudb TEXT, longitudb TEXT, precision TEXT, motivonoventa TEXT, motivonovisita TEXT, BAN_GEOB TEXT)")
agregaColumna("BITACORAGPS", "BAN_GEOB", "TEXT")
agregaColumna("BITACORAGPS", "enviado", "TEXT")
contadorIniciarVenta = 0
cargamosPanel
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
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
'En geocerca si mete la contraseña poner 0 en precision gps y si esta dentro de los 50 mts poner 1 y 2 para eventos que no lo ocupen
'Mandar fecha de sync(sysdate)
Sub mandaBitacora(fechab As String, usuariob As String, almacenb As String, rutab As String, eventob As String, clienteb As String, iniciob As String, finb As String, latitudb As String, longitudb As String, precisionb As String, motivoNoVentab As String, motivoNoVisitab As String, BAN_GEOB As String)
Log("=== " & motivoNoVisitab & "|" & eventob)
' Log("bitacora")
Private cmd As DBCommand
cmd.Initialize
cmd.Name = "mandaBitacora_ADM3"
' Log("BITACORA3")
Private nombreCliente As String = traeNombreCliente(clienteb)
If eventob = "Llega a almacen" Then
nombreCliente = "BOLETA"
clienteb = ""
finb = iniciob
End If
If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST"
If eventob = "Fin Día" Then nombreCliente = "FIN DIA"
If eventob = "Carga día" Then nombreCliente = "CARGA DIA"
If eventob = "Carga día suplencia" Then nombreCliente = traeRutasSup
If eventob <> "Termina Venta" Then
Log(56)
db.ExecNonQuery($"INSERT INTO BITACORAGPS (fechab, usuariob , almacenb , rutab , eventob , clienteb , iniciob , finb , latitudb, longitudb , precision , motivonoventa , motivonovisita, BAN_GEOB) VALUES ('${fechab}' ,'${usuariob}' , '${almacenb}' , '${rutab}' , '${eventob}' , '${clienteb}' , '${iniciob}' , '${finb}' , '${latitudb}' , '${longitudb}' , '${precisionb}' , '${motivoNoVentab}' , '${motivoNoVisitab}', '${BAN_GEOB}')"$)
Else
Log(57)
Private e As Cursor = db.ExecQuery($"select fechab from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' and eventob = 'Inicia Venta' order by fechab desc"$)
If e.RowCount > 0 Then
e.Position = 0
Log("ACTUALIZA BITACORA")
If eventob = "Termina Venta" Then
db.ExecNonQuery($"update BITACORAGPS set finb = '${finb}', latitudb = '${latitudb}', longitudb = '${longitudb}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$)
cmd.Parameters = Array As Object(finb, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab"))
else if eventob = "No Venta" Then
Log("-- NV")
db.ExecNonQuery($"update BITACORAGPS set finb = '${finb}', iniciob = '${finb}', motivonoventa = '${motivoNoVentab}', motivonovisita = '${motivoNoVisitab}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$)
Log($"update BITACORAGPS set finb = '${finb}', iniciob = '${finb}', motivonoventa = '${motivoNoVentab}', motivonovisita = '${motivoNoVisitab}' where rutab = '${rutab}' and almacenb = '${almacenb}' and usuariob = '${usuariob}' and clienteb = '${clienteb}' and fechab = '${e.GetString("fechab")}' "$)
cmd.Parameters = Array As Object(finb, motivoNoVentab, motivoNoVisitab, rutab, almacenb, usuariob, clienteb, "Inicia Venta", e.GetString("fechab"))
End If
End If
End If
If eventob <> "Inicia Venta" Then
Log(58)
Private c As Cursor = db.ExecQuery($"select * from BITACORAGPS where usuariob = '${usuariob}' and almacenb = '${almacenb}' and rutab = '${rutab}' and clienteb = '${clienteb}' order by fechab desc"$)
If c.RowCount > 0 Then
c.Position = 0
cmd.Parameters = Array As Object(c.GetString("almacenb"), c.GetString("usuariob"), c.GetString("rutab"), c.GetString("eventob"), c.GetString("clienteb"), nombreCliente, c.GetString("iniciob"), c.GetString("finb"), c.GetString("latitudb"), c.GetString("longitudb"), c.GetString("precision"), c.GetString("motivonoventa"), c.GetString("motivonovisita"), c.GetString("fechab"), c.GetString("BAN_GEOB"))
reqManager.ExecuteCommand(cmd , $"mandaBitacora_${clienteb}_${eventob}"$)
enviandoInfo = True
End If
End If
' Log("Mandamos bitacora")
End Sub
'Regresa el nombre del cliente del id dado.
Sub traeNombreCliente(id As String) As String
Private c As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE from kmt_info where CAT_CL_CODIGO = '${id}'"$)
Private n As String = "N/A"
Do While c.NextRow
n = c.GetString("CAT_CL_NOMBRE")
Loop
Return n
End Sub
'Regresa la ruta actual de la base de datos.
Sub traeRutasSup As String
Dim c As Cursor
Dim rutaSup As String = ""
' rutas = ""
c = B4XPages.MainPage.skmt.ExecQuery("SELECT RS_RUTA FROM RUTA_SUPLENCIA")
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
rutaSup = c.GetString("RS_RUTA")
Next
End If
c.Close
Log(">>> " & rutaSup)
Return rutaSup
End Sub
'Muestra u oculta el boton de inicio y fin de venta
Sub inicioFin
LogColor($">>>>>>>>>>>> XX EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue)
Log(b_Inicio_Fin_venta2.Text)
If enVenta = False Then
p_transparenteInicioFin2.BringToFront
p_transparenteInicioFin2.Visible = True
' b_Inicio_Fin_venta2.Text = "INICIAR VENTA"
Log("Hacemos visible el boton de Inicio Venta")
Else
If b_Inicio_Fin_venta2.Text <> "TERMINAR VENTA" Then
p_transparenteInicioFin2.Visible = False
' b_Inicio_Fin_venta2.Visible = False
End If
End If
End Sub
Private Sub b_Inicio_Fin_venta2_Click
Log("INICIO/FIN CLICKED")
Log(B4XPages.MainPage.lat_gps & "," & B4XPages.MainPage.lon_gps)
' b_Inicio_Fin_venta.Visible = False
' Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, Subs.traeAlmacen, Subs.traeRuta, "Pre-venta", "0", Subs.fechanormal(DateTime.Now), Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "")
contadorIniciarVenta = 0
IniVenNO = False
If dentroDeGeocerca Then precision = 1
' LogColor("-------> "&contadorIniciarVenta & " <-------", Colors.Red)
LogColor($">>>>>>>>>>>> EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue)
motivoNoVenta = ""
motivoNoVisita = ""
p_transparenteInicioFin2.Visible = False
If b_Inicio_Fin_venta2.Text = "TERMINAR VENTA" Then
mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Termina Venta", Subs.traeCliente, "", Subs.fechanormal(DateTime.Now), B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, motivoNoVisita, banderaGeoCerca)
enVenta = False
LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red)
iniciamosVenta
B4XPages.ShowPageAndRemovePreviousPages("Principal")
' guardadoventa
Else if b_Inicio_Fin_venta2.Text = "INICIAR VENTA" Then
contadorIniciarVenta = 0
IniVenNO = False
contadorIniciarVenta = contadorIniciarVenta + 1
If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta <> "NO VENTA" Then
IniVenNO = True
mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, "", "", banderaGeoCerca)
enVenta = True
LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red)
' LogColor($">>>>>> INICIA VENTA: ${Starter.enVenta} - ${Subs.traeCliente}"$, Colors.red)
Else If contadorIniciarVenta = 1 And IniVenNO = False And motivoNoVenta = "NO VENTA" Then
IniVenNO = True
mandaBitacora(Subs.fechanormal(DateTime.Now), Subs.traeUsuarioDeBD, Subs.traeAlmacen, Subs.traeRutaBitacora, "Inicia Venta", Subs.traeCliente, Subs.fechanormal(DateTime.Now), "", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, precision, motivoNoVenta, "", banderaGeoCerca)
enVenta = True
LogColor($">>>>>> EN VENTA: ${enVenta}"$, Colors.red)
Else If contadorIniciarVenta > 1 Then
p_transparenteInicioFin2.Visible = False
End If
End If
p_transparenteInicioFin2.Visible = False
LogColor($">>>>>>>>>>>> EN VENTA : ${enVenta} <<<<<<<<<<<<"$, Colors.Blue)
End Sub
'Cargamos el layout del panel.
private Sub cargamosPanel
' Log(p_transparenteInicioFin2.IsInitialized)
' Log(p_transparenteInicioFin2.)
If Not(p_transparenteInicioFin2.IsInitialized) Then
' LogColor(">>>>>>> CARGAMOS PANEL BITACORA", Colors.red)
Root2.LoadLayout("inicioFinVenta")
p_transparenteInicioFin2.Width = Root2.Width
p_transparenteInicioFin2.Height = Root2.Height
b_Inicio_Fin_venta2.top = 700
b_Inicio_Fin_venta2.Left = 5
b_Inicio_Fin_venta2.Width = Root2.Width - 20
b_Inicio_Fin_venta2.Text = "INICIAR VENTA"
p_transparenteInicioFin2.BringToFront
End If
End Sub
Sub p_transparenteInicioFin2_click
End Sub
' Ponemos el texto del boton en "INICIAR VENTA" y enVenta en Falso .
Sub iniciamosVenta
enVenta = False
b_Inicio_Fin_venta2.Text = "INICIAR VENTA"
End Sub
Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore
Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla
Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$)
c.Position = 0
If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$)
End If
' Log(1)
Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch
Try
B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$)
Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$)
Catch
Log(LastException)
End Try
Log(2)
End Try
End Sub
'Borra los datos de la tabla BITACORAGPS
Sub borraDatosBitacora
db.ExecNonQuery("DELETE FROM BITACORAGPS")
End Sub
Sub JobDone(Job As HttpJob)
Log("JOBDONE BITACORA")
If Job.JobName = "DBRequest" Then
Dim RESULT As DBResult = reqManager.HandleJob(Job)
Log($"Tag: ${RESULT.tag}, success=${Job.Success}"$)
End If
'Log(Job.Tag)
If Job.Success = False Then
' Log("JOBDONE ERROR")
LogColor("Error: " & Job.ErrorMessage, Colors.red)
Else 'If Job Success then ...
' Log("JOBDONE SUCCESS")
If Job.JobName = "DBRequest" Then
Dim RESULT As DBResult = reqManager.HandleJob(Job)
If RESULT.Tag.As(String).StartsWith("mandaBitacora") Then
For Each records() As Object In RESULT.Rows
Private temp() As String = Regex.Split("_", RESULT.Tag)
If temp.Length > 2 Then
Private cliente As String = temp(1)
Private evento As String = temp(2)
Log(cliente)
Log(evento)
db.ExecNonQuery($"update BITACORAGPS set enviado = 1 where clienteb = '${cliente}' and eventob = '${evento}'"$)
Log("==========================REGISTROS="&RESULT.Rows.size)
For Each k As String In RESULT.Columns.Keys
Log(RESULT.Tag & ": " & k & ": " & records(RESULT.Columns.Get(k)))
Next
End If
Next
enviandoInfo = False
End If
End If
' mandaBitacora
End If
End Sub
Sub mandaPendientes
LogColor("==> Entramos a mandaPendientes", Colors.red)
If Not(enviandoInfo) Then
Log("mpCorriendo=" & mpCorriendo)
mpCorriendo = True
Private ep As Cursor = db.ExecQuery("select * from BITACORAGPS where enviado is null")
Log("PENDIENTES: " & ep.RowCount)
Dim cmd As DBCommand
If ep.RowCount > 0 Then
For i = 0 To ep.RowCount - 1
ep.Position = i
Log($"Mandamos ${ep.GetString("clienteb")}, ${ep.GetString("eventob")}"$)
' mandaBitacora(ep.GetString("fechab"), ep.GetString("usuariob"), ep.GetString("almacenb"), ep.GetString("rutab"), ep.GetString("eventob"), ep.GetString("clienteb"), ep.GetString("iniciob"), ep.GetString("finb"), ep.GetString("latitudb"), ep.GetString("longitudb"), ep.GetString("precision"), ep.GetString("motivonoventa"), ep.GetString("motivonovisita"), ep.GetString("BAN_GEOB"))
Private nombreCliente As String = traeNombreCliente(ep.GetString("clienteb"))
Private eventob As String = ep.GetString("eventob")
If eventob = "Llega a almacen" Then
nombreCliente = "BOLETA"
End If
If eventob = "Salida almacen" Then nombreCliente = "CHECKLIST"
If eventob = "Fin Día" Then nombreCliente = "FIN DIA"
If eventob = "Carga día" Then nombreCliente = "CARGA DIA"
If eventob = "Carga día suplencia" Then nombreCliente = traeRutasSup
cmd.Initialize
cmd.Name = "mandaBitacora_ADM3"
cmd.Parameters = Array As Object(ep.GetString("almacenb"), ep.GetString("usuariob"), ep.GetString("rutab"), ep.GetString("eventob"), ep.GetString("clienteb"), nombreCliente, ep.GetString("iniciob"), ep.GetString("finb"), ep.GetString("latitudb"), ep.GetString("longitudb"), ep.GetString("precision"), ep.GetString("motivonoventa"), ep.GetString("motivonovisita"), ep.GetString("fechab"), ep.GetString("BAN_GEOB"))
reqManager.ExecuteCommand(cmd , $"mandaBitacora_${ep.GetString("clienteb")}_${ep.GetString("eventob")}"$)
Next
mpCorriendo = False
End If
End If
End Sub