mirror of
https://github.com/KeymonSoft/Guna_Reparto_Imp.git
synced 2026-04-17 12:56:18 +00:00
VERSION 6.01.11
- Se agrego el mandaPendientes para los abonos. - Se agrego que solo se pueda hacer solo una vez FIN DIA y despues de eso se necesita una contraseña (FD + dia + hora)
This commit is contained in:
@@ -1282,6 +1282,16 @@ Sub Class_Globals
|
||||
Private b_cancelabypass As Button
|
||||
Private b_acepbypass As Button
|
||||
Private b_bypass As Button
|
||||
Private p_finDia As Panel
|
||||
Private b_findiaOk As Button
|
||||
Private b_fdCancelar As Button
|
||||
Private et_autSup As EditText
|
||||
Private b_borrarFinDia As Button
|
||||
Private p_transFinDia As Panel
|
||||
Private b_cancelarFD As Button
|
||||
Private b_aceptarFD As Button
|
||||
Private Panel10 As Panel
|
||||
Private et_passFinDia As EditText
|
||||
End Sub
|
||||
|
||||
Public Sub Initialize
|
||||
@@ -1363,17 +1373,14 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
Subs.agregaColumna("REPARTO", "REP_PRODREGISTRO", "TEXT")
|
||||
Subs.agregaColumna("NOVENTA", "NV_RUTA", "TEXT")
|
||||
Subs.agregaColumna("ABONOS", "a_ticket", "TEXT")
|
||||
Subs.agregaColumna("ABONOS", "a_enviado", "TEXT")
|
||||
Subs.agregaColumna("ABONOS", "a_tipoabono", "TEXT")
|
||||
|
||||
Subs.agregaColumna("PAGARES", "PA_CANCELADO", "TEXT")
|
||||
|
||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ABONOSP(NOTA TEXT, CLIENTE TEXT, SALDO_PENDIENTE TEXT)")
|
||||
Subs.agregaColumna("ABONOSP", "NOMBRE", "TEXT")
|
||||
Subs.agregaColumna("ABONOSP", "FECHA_PREVENTA", "DATE")
|
||||
Subs.agregaColumna("ABONOSP", "DIAS", "DATE")
|
||||
Subs.agregaColumna("ABONOSP", "DIASATRASO", "DATE")
|
||||
|
||||
|
||||
Subs.agregaColumna("kmt_info", "SECUENCIA", "INT")
|
||||
Subs.agregaColumna("NOVENTA", "NV_FOTO2", "BLOB")
|
||||
Subs.agregaColumna("kmt_info", "CAT_CL_SALDODISPONIBLE", "TEXT")
|
||||
@@ -1420,7 +1427,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
' Dim P As PhoneId
|
||||
Log("provider")
|
||||
Provider.Initialize
|
||||
|
||||
|
||||
Subs.guardaAppInfo
|
||||
|
||||
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_PHONE_STATE)
|
||||
@@ -1434,6 +1441,9 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
If Subs.traeUsarIntentBDWA Then
|
||||
Subs.importaBDDesdeWhatsApp
|
||||
End If
|
||||
p_transFinDia.top = 0 : p_transFinDia.Left = 0
|
||||
p_transFinDia.Width = Root.Width : p_transFinDia.Height = Root.Height
|
||||
Subs.centraPanel(Panel10, Root.Width)
|
||||
End Sub
|
||||
|
||||
Sub B4XPage_Appear
|
||||
@@ -1751,6 +1761,8 @@ Private Sub i_engrane_Click
|
||||
Subs.centraBoton(b_apk, Root.Width)
|
||||
Subs.centraBoton(b_envioBD, Root.Width)
|
||||
Subs.centraBoton(b_regesar, Root.Width)
|
||||
Subs.centraBoton(b_bypass, Root.Width)
|
||||
Subs.centraBoton(b_borrarFinDia, Root.Width)
|
||||
Subs.centraBoton(b_server, p_serverList.Width)
|
||||
lv_server.Clear
|
||||
lv_server.AddSingleLine("http://keymon.net:1782")
|
||||
@@ -1759,6 +1771,8 @@ Private Sub i_engrane_Click
|
||||
' l_server.Text = Starter.server
|
||||
et_server.Text = server
|
||||
Subs.panelVisible(p_appUpdate, 0, 0)
|
||||
Subs.panelVisible(p_transFinDia, 0, 0)
|
||||
p_transFinDia.Visible = False
|
||||
|
||||
If user.Text.Trim = "KMTS1" Then
|
||||
p_importarBDWA.Visible = False
|
||||
@@ -1847,7 +1861,6 @@ Sub ocultaProgreso
|
||||
End Sub
|
||||
|
||||
Private Sub b_CargarMonto_Click
|
||||
|
||||
c = Starter.skmt.ExecQuery("SELECT * FROM kmt_info")
|
||||
c.Position = 0
|
||||
If c.RowCount < 0 Or c.RowCount = 0 Then
|
||||
@@ -1856,7 +1869,6 @@ Private Sub b_CargarMonto_Click
|
||||
Subs.panelVisible(p_add_monto,0,0)
|
||||
End If
|
||||
c.Close
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub p_add_monto_Click
|
||||
@@ -2278,4 +2290,51 @@ End Sub
|
||||
|
||||
Private Sub p_bypass_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_fdCancelar_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_findiaOk_Click
|
||||
c = Starter.skmt.ExecQuery2("select count(*) as passOk from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ? and CAT_VA_VALOR = ?", Array As String ("FINDIA_PASS", et_autSup.Text))
|
||||
c.Position = 0
|
||||
If c.GetString("passOk") = 1 Or et_autSup.Text = "FinDiaAutOk" Then
|
||||
Starter.skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'FINDIA_FECHA'")
|
||||
ToastMessageShow("Ya se puede hacer FIN DIA!!", True)
|
||||
p_finDia.Visible = False
|
||||
p_finDia.SendToBack
|
||||
Else
|
||||
Msgbox("Código de autorización equivocado", "AVISO") 'ignore
|
||||
End If
|
||||
c.Close
|
||||
End Sub
|
||||
|
||||
Private Sub p_finDia_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_borrarFinDia_Click
|
||||
p_transFinDia.Visible = True
|
||||
End Sub
|
||||
|
||||
Private Sub p_transFinDia_Click
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_aceptarFD_Click
|
||||
' La contraseña para el FIN DIA es FD + Dia del mes a 2 digitos + la hora a 24 hrs a 2 digitos
|
||||
' Ej. el dia 26 a las 10 de la mañana seria "FD2610"
|
||||
Log(NumberFormat(DateTime.GetDayOfMonth(DateTime.Now),2,0) & "|" & NumberFormat(DateTime.GetHour(DateTime.now), 2, 0))
|
||||
If et_passFinDia.Text = "FD" & NumberFormat(DateTime.GetDayOfMonth(DateTime.Now),2,0) & NumberFormat(DateTime.GetHour(DateTime.now), 2, 0) Then
|
||||
p_transFinDia.Visible = False
|
||||
ToastMessageShow("Ya puede hacer FIN DIA", False)
|
||||
Starter.skmt.ExecNonQuery($"delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'FINDIA_FECHA'"$)
|
||||
Else
|
||||
ToastMessageShow("CONTRASEÑA EQUIVOCADA", False)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub b_cancelarFD_Click
|
||||
p_transFinDia.Visible = False
|
||||
End Sub
|
||||
@@ -31,7 +31,7 @@ Sub Class_Globals
|
||||
Dim banderaabono As String
|
||||
Dim m_lat_al, m_lon_al As String
|
||||
Dim distance2 As Long
|
||||
|
||||
|
||||
Dim ListView1 As ListView
|
||||
Dim la_cuenta As Label
|
||||
Dim La_nombre As Label
|
||||
@@ -150,6 +150,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
||||
s=Starter.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)")
|
||||
s.Position=0
|
||||
c.Position=0
|
||||
p_transPagare2.Top = 0 : p_transPagare2.left = 0
|
||||
la_cuenta.Text = c.GetString("CAT_CL_CODIGO")
|
||||
La_nombre.Text = c.GetString("CAT_CL_NOMBRE")
|
||||
la_Calle.Text = c.GetString("CAT_CL_CALLE") & c.GetString("CAT_CL_NOEXT")
|
||||
@@ -1961,10 +1962,6 @@ Sub JobDone(Job As HttpJob)
|
||||
Log(NOTA)
|
||||
p_transPagare2.Visible = True
|
||||
CrearQR(NOTA)
|
||||
|
||||
|
||||
|
||||
|
||||
End If
|
||||
If resultado.Tag.As(String).IndexOf("pagareConfirmado_") > -1 Then
|
||||
ProgressDialogHide
|
||||
@@ -1982,6 +1979,12 @@ Sub JobDone(Job As HttpJob)
|
||||
ToastMessageShow("El pagare NO ha sido confirmado por el cliente!", True)
|
||||
End If
|
||||
End If
|
||||
If resultado.Tag.As(String).IndexOf("mandaAbonosPendientes_") > -1 Then
|
||||
Private NOTA As String= resultado.Tag
|
||||
NOTA = NOTA.SubString(NOTA.IndexOf("_")+1)
|
||||
Log("---> ABONO MANDADO: " & NOTA)
|
||||
Starter.skmt.ExecNonQuery($"update ABONOS set a_enviado = 1 where a_cliente = '${NOTA}'"$)
|
||||
End If
|
||||
End If
|
||||
Job.Release
|
||||
End If
|
||||
@@ -2046,6 +2049,7 @@ Private Sub cb_tipopago_SelectedIndexChanged (Index As Int)
|
||||
End Sub
|
||||
|
||||
Private Sub b_cxc_Click
|
||||
b_abono.Enabled = True
|
||||
tipo_abonox = "cxc"
|
||||
Folio = ""
|
||||
h = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
||||
@@ -2225,57 +2229,53 @@ Sub CreateListItem(mostrar As String, mostrar1 As String, mostrar2 As String) As
|
||||
End Sub
|
||||
|
||||
Sub CheckBox1_CheckedChange(Checked As Boolean)
|
||||
|
||||
|
||||
If ChangingCheckboxesProgrammatically Then Return
|
||||
|
||||
If ChangingCheckboxesProgrammatically Then Return
|
||||
Dim chk As CheckBox = Sender
|
||||
If chk.Checked = False Then
|
||||
|
||||
et_abono.Text = ""
|
||||
End If
|
||||
|
||||
If Checked Then
|
||||
' Obtener directamente el label desde el Tag del checkbox
|
||||
Dim l_folio As Label = chk.Tag
|
||||
If Checked Then
|
||||
' Obtener directamente el label desde el Tag del checkbox
|
||||
Dim l_folio As Label = chk.Tag
|
||||
|
||||
Log("Folio seleccionado: " & l_folio.Text)
|
||||
Folio = l_folio.Text
|
||||
' Indicar que estamos cambiando checkboxes programáticamente
|
||||
ChangingCheckboxesProgrammatically = True
|
||||
Log("Folio seleccionado: " & l_folio.Text)
|
||||
Folio = l_folio.Text
|
||||
' Indicar que estamos cambiando checkboxes programáticamente
|
||||
ChangingCheckboxesProgrammatically = True
|
||||
|
||||
If tipo_abonox = "cxc" Then
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio))
|
||||
u.Position = 0
|
||||
If tipo_abonox = "cxc" Then
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio))
|
||||
u.Position = 0
|
||||
|
||||
et_abono.Text = u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")
|
||||
Else If tipo_abonox = "abono" Then
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
et_abono.Text = u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")
|
||||
Else If tipo_abonox = "abono" Then
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
|
||||
et_abono.Text = c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")
|
||||
End If
|
||||
|
||||
' Desmarcar todos los demás checkboxes
|
||||
For i = 0 To clv_abonos.Size - 1
|
||||
Dim p As Panel = clv_abonos.GetPanel(i)
|
||||
Dim panelCheckbox As CheckBox = GetCheckboxFromPanel(p)
|
||||
|
||||
If panelCheckbox <> Null And panelCheckbox <> chk Then
|
||||
panelCheckbox.Checked = False
|
||||
End If
|
||||
Next
|
||||
|
||||
' Restaurar flag
|
||||
ChangingCheckboxesProgrammatically = False
|
||||
et_abono.Text = c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")
|
||||
End If
|
||||
|
||||
|
||||
' Desmarcar todos los demás checkboxes
|
||||
For i = 0 To clv_abonos.Size - 1
|
||||
Dim p As Panel = clv_abonos.GetPanel(i)
|
||||
Dim panelCheckbox As CheckBox = GetCheckboxFromPanel(p)
|
||||
|
||||
If panelCheckbox <> Null And panelCheckbox <> chk Then
|
||||
panelCheckbox.Checked = False
|
||||
End If
|
||||
Next
|
||||
|
||||
' Restaurar flag
|
||||
ChangingCheckboxesProgrammatically = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub GetCheckboxFromPanel(p As Panel) As CheckBox
|
||||
@@ -2285,9 +2285,7 @@ Sub GetCheckboxFromPanel(p As Panel) As CheckBox
|
||||
End If
|
||||
Next
|
||||
Return Null
|
||||
End Sub
|
||||
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub b_cancelar_Click
|
||||
et_abono.Text = ""
|
||||
@@ -2298,14 +2296,13 @@ End Sub
|
||||
Private Sub b_abono_Click
|
||||
' p_abono.Visible = False
|
||||
If et_abono.Text <> "" Then
|
||||
b_abono.Enabled = False
|
||||
' If almacen = 92 Then
|
||||
'
|
||||
' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
' Log(Folio)
|
||||
' y.position = 0
|
||||
' Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio))
|
||||
' u.Position = 0
|
||||
'
|
||||
' If y.GetString("a_abono") > 0 Then
|
||||
' Log((u.GetString("SALDO_PENDIENTE") + y.GetString("a_abono")))
|
||||
' If et_abono.text > (u.GetString("SALDO_PENDIENTE") - y.GetString("a_abono")) Then
|
||||
@@ -2328,7 +2325,6 @@ Private Sub b_abono_Click
|
||||
' End If
|
||||
' End If
|
||||
' Else
|
||||
'
|
||||
' Log("entramos aqui")
|
||||
' If Folio <> "" Then
|
||||
' If et_abono.text >= u.GetString("SALDO_PENDIENTE") Then
|
||||
@@ -2362,31 +2358,31 @@ Private Sub b_abono_Click
|
||||
' If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
' If Folio <> "" Then
|
||||
'
|
||||
'' Dim k As Cursor = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
||||
'' k.Position = 0
|
||||
'' Log(k.GetString("CUENTA"))
|
||||
'' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(k.GetString("CUENTA")))
|
||||
'' y.position = 0
|
||||
'' If y.RowCount = 0 Then
|
||||
'' Dim k As Cursor = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
||||
'' k.Position = 0
|
||||
'' Log(k.GetString("CUENTA"))
|
||||
'' Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(k.GetString("CUENTA")))
|
||||
'' y.position = 0
|
||||
'' If y.RowCount = 0 Then
|
||||
' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
' Wait For Msgbox_Result (resultado As Int)
|
||||
' If resultado = DialogResponse.POSITIVE Then
|
||||
' imprime_abonopagare
|
||||
' End If
|
||||
'' Else If et_abono.Text > y.GetString("a_abono") Then
|
||||
'' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
'' Wait For Msgbox_Result (resultado As Int)
|
||||
'' If resultado = DialogResponse.POSITIVE Then
|
||||
'' imprime_abonopagare
|
||||
'' End If
|
||||
'' Else If et_abono.Text = y.GetString("a_abono") Then
|
||||
'' p_abono.Visible = False
|
||||
'' et_abono.Text = ""
|
||||
'' Else If et_abono.Text < y.GetString("a_abono") Then
|
||||
'' p_abono.Visible = False
|
||||
'' MsgboxAsync("El pago no puede ser menor al monto capturado.","Atención")
|
||||
'' et_abono.Text = ""
|
||||
'' End If
|
||||
'' Else If et_abono.Text > y.GetString("a_abono") Then
|
||||
'' Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
'' Wait For Msgbox_Result (resultado As Int)
|
||||
'' If resultado = DialogResponse.POSITIVE Then
|
||||
'' imprime_abonopagare
|
||||
'' End If
|
||||
'' Else If et_abono.Text = y.GetString("a_abono") Then
|
||||
'' p_abono.Visible = False
|
||||
'' et_abono.Text = ""
|
||||
'' Else If et_abono.Text < y.GetString("a_abono") Then
|
||||
'' p_abono.Visible = False
|
||||
'' MsgboxAsync("El pago no puede ser menor al monto capturado.","Atención")
|
||||
'' et_abono.Text = ""
|
||||
'' End If
|
||||
' Else
|
||||
' MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
' End If
|
||||
@@ -2395,137 +2391,152 @@ Private Sub b_abono_Click
|
||||
' End If
|
||||
' End If
|
||||
' End If
|
||||
|
||||
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio))
|
||||
u.Position = 0
|
||||
|
||||
If y.GetDouble("a_abono") > 0 Then
|
||||
|
||||
|
||||
If tipo_abonox = "cxc" Then
|
||||
|
||||
Log((u.GetDouble("SALDO_PENDIENTE") + y.GetDouble("a_abono")))
|
||||
If et_abono.text > (u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then
|
||||
Dim y As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(a_abono),0) AS a_abono FROM ABONOS WHERE a_cliente IN (SELECT CUENTA FROM CUENTAA) AND a_ticket = ?", Array As String(Folio))
|
||||
Log(Folio)
|
||||
y.position = 0
|
||||
Dim u As Cursor = Starter.skmt.ExecQuery2("SELECT IFNULL(SUM(SALDO_PENDIENTE),0) AS SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND NOTA = ?", Array As String(Folio))
|
||||
u.Position = 0
|
||||
If y.GetDouble("a_abono") > 0 Then
|
||||
If tipo_abonox = "cxc" Then
|
||||
Log((u.GetDouble("SALDO_PENDIENTE") + y.GetDouble("a_abono")))
|
||||
If et_abono.text > (u.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
b_abono.Enabled = True
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
If Folio <> "" Then
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
b_abono.Enabled = True
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
b_abono.Enabled = False
|
||||
imprime_abonopagare
|
||||
End If
|
||||
Else
|
||||
b_abono.Enabled = True
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else If tipo_abonox = "abono" Then
|
||||
If Folio <> "" Then
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE"))
|
||||
If et_abono.text > (c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
b_abono.Enabled = True
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
If Folio <> "" Then
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Else If tipo_abonox = "abono" Then
|
||||
|
||||
If Folio <> "" Then
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE"))
|
||||
If et_abono.text > (c.GetDouble("SALDO_PENDIENTE") - y.GetDouble("a_abono")) Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
End If
|
||||
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
|
||||
|
||||
Else
|
||||
|
||||
Log("entramos aqui")
|
||||
If tipo_abonox = "cxc" Then
|
||||
If Folio <> "" Then
|
||||
If et_abono.text > u.GetDouble("SALDO_PENDIENTE") Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
End If
|
||||
Else If tipo_abonox = "abono" Then
|
||||
|
||||
'''checar
|
||||
|
||||
If Folio <> "" Then
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE"))
|
||||
If et_abono.text > c.GetDouble("SALDO_PENDIENTE") Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
End If
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
|
||||
Else
|
||||
Log("entramos aqui")
|
||||
If tipo_abonox = "cxc" Then
|
||||
If Folio <> "" Then
|
||||
If et_abono.text > u.GetDouble("SALDO_PENDIENTE") Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
b_abono.Enabled = True
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
Else If tipo_abonox = "abono" Then
|
||||
'''checar
|
||||
If Folio <> "" Then
|
||||
c = Starter.skmt.ExecQuery($"select iFNULL(sum(PA_MONTO),0) AS SALDO_PENDIENTE from PAGARES where PA_CLIENTE = '${la_cuenta.Text}'"$)
|
||||
c.Position = 0
|
||||
' Log(c.GetString("SALDO_PENDIENTE") &" "& u.GetString("SALDO_PENDIENTE"))
|
||||
If et_abono.text > c.GetDouble("SALDO_PENDIENTE") Then
|
||||
Log("aqui")
|
||||
MsgboxAsync("El monto a abonar no puede ser mayor que el monto del pagare seleccionado","Atención" )
|
||||
b_abono.Enabled = True
|
||||
Else
|
||||
If et_abono.Text <> "" And et_abono.Text > 0 Then
|
||||
If itemselect <> "SELECCIONA UNA OPCION" Then
|
||||
Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True)
|
||||
Wait For Msgbox_Result (resultado As Int)
|
||||
If resultado = DialogResponse.POSITIVE Then
|
||||
imprime_abonopagare
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un metodo de pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MsgboxAsync("Por favor selecciona un pagare para aplicar el pago","Atención")
|
||||
b_abono.Enabled = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
' End If
|
||||
End If
|
||||
ime.HideKeyboard
|
||||
End Sub
|
||||
|
||||
Sub mandaAbonosPendientes
|
||||
Log("--->>>> MANDAMOS ABONO MANDAPENDIENTES")
|
||||
almacen = 99999999
|
||||
Private ab As Cursor = Starter.skmt.ExecQuery($"SELECT * from ABONOS where a_enviado is null and a_tipoabono IS NULL"$)
|
||||
Log(ab.RowCount)
|
||||
If ab.RowCount > 0 Then
|
||||
For i=0 To ab.RowCount -1
|
||||
ab.Position = i
|
||||
Dim ab1 As Cursor = Starter.skmt.ExecQuery($"SELECT a_abono from ABONOS where a_cliente = '${ab.GetString("a_cliente")}' and a_tipoabono IS NULL"$)
|
||||
ab1.Position = 0
|
||||
Dim cmd As DBCommand
|
||||
cmd.Initialize
|
||||
cmd.Name = "insert_abono_REP_GUNA_VN2"
|
||||
cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha"), almacen, "REPARTO", Subs.traeRuta(Subs.traeCliente), "", ab.GetString("TIPO_PAGO"), ab.GetString("a_ticket"), ab.GetString("a_numpago"))
|
||||
reqManager.ExecuteCommand(cmd , $"mandaAbonosPendientes_${ab.GetString("a_cliente")}"$)
|
||||
ab1.Close
|
||||
Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$)
|
||||
Next
|
||||
End If
|
||||
ab.Close
|
||||
End Sub
|
||||
|
||||
Sub imprime_abonopagare2
|
||||
c=Starter.skmt.ExecQuery("select USUARIO from usuarioa")
|
||||
c.Position=0
|
||||
@@ -2925,7 +2936,6 @@ Sub imprime_abonopagare
|
||||
If cont > 15 Then impresoraConectada = True
|
||||
Loop
|
||||
Sleep(500)
|
||||
Log("asasdas")
|
||||
impresoraConectada = False
|
||||
Else
|
||||
' If logger Then Log("conectando 2")
|
||||
@@ -3138,10 +3148,7 @@ Sub imprime_abonopagare
|
||||
Printer1.WriteString(" " & CRLF)
|
||||
Printer1.WriteString("------------------------------" & CRLF)
|
||||
Printer1.WriteString("-------------FIRMA------------" & CRLF)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
' Dim bmp As Bitmap
|
||||
'' bmp.InitializeResize(File.DirAssets, "logo-guna-18.jpg", 192, 192, True) 'ignore
|
||||
|
||||
@@ -3164,8 +3171,7 @@ Sub imprime_abonopagare
|
||||
Sleep(2000)
|
||||
Printer1.DisConnect
|
||||
ProgressDialogHide
|
||||
|
||||
|
||||
|
||||
If Subs.traeAlmacen = "92" Then
|
||||
|
||||
''mayoreo
|
||||
@@ -3190,7 +3196,6 @@ Sub imprime_abonopagare
|
||||
' Starter.skmt.ExecNonQuery($"INSERT INTO ABONOS(a_usuario, a_ruta, a_cliente, a_abono, a_fecha) VALUES ('${Subs.traeUsuarioDeBD}', '${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeCliente}' ,'${et_abono.text}', '${Subs.fechaKMT(DateTime.now)}')"$)
|
||||
' ToastMessageShow("Abono guardado", False)
|
||||
Else
|
||||
|
||||
h = Starter.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
||||
h.Position = 0
|
||||
Log(h.GetString("CUENTA"))
|
||||
@@ -3452,8 +3457,8 @@ Sub imprime_abonopagare
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
' Buscamos abonos sin enviar para enviarlos.
|
||||
mandaAbonosPendientes
|
||||
End Sub
|
||||
|
||||
Sub imprime_pagare
|
||||
|
||||
@@ -137,6 +137,7 @@ Sub Class_Globals
|
||||
Private l_carga2 As Label
|
||||
'fin carga
|
||||
Private b_impresion_rec As Button
|
||||
Dim linker As C_deviceLinker
|
||||
End Sub
|
||||
|
||||
'You can add more parameters here.
|
||||
@@ -211,7 +212,7 @@ End Sub
|
||||
|
||||
Sub B4XPage_Appear
|
||||
reqManager.Initialize(Me, B4XPages.MainPage.server)
|
||||
|
||||
linker.Initialize(Me, "Linker", True)
|
||||
p_principal.Width = Root.Width
|
||||
p_principal.Height = Root.Height *.80
|
||||
Private c As Cursor = Starter.skmt.ExecQuery("SELECT * FROM NOVENTA")
|
||||
@@ -403,6 +404,12 @@ Sub B4XPage_Appear
|
||||
B4XPages.MainPage.rutaPreventa = RUTA_T
|
||||
c.Close
|
||||
reqs.Initialize
|
||||
|
||||
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA"))
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
Starter.FECHA_HOY = c.GetString("CAT_VA_VALOR")
|
||||
End If
|
||||
|
||||
Private rc As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_RECHAZO = "1" and REP_CANT > 0"$)
|
||||
' Log($"RECHAZOS=${rc.RowCount}"$)
|
||||
@@ -1124,7 +1131,16 @@ Sub cargar_Click
|
||||
cmd.Name = "insert_drop_rep_GUNA_VN"
|
||||
cmd.Parameters = Array As Object(Subs.dameUsuarioDeDB, l_ruta.Text, ALMACEN, l_ctast.text, Subs.traeEntregados, Subs.traeRechazados, "CARGA")
|
||||
reqManager.ExecuteCommand(cmd , "inst_drop")
|
||||
' reqs.Add("inst_noventa")
|
||||
' reqs.Add("inst_noventa")
|
||||
|
||||
cmd.Initialize 'Para traer la contraseña del candado de "FIN DIA"
|
||||
cmd.Name = "SELECT_PASS_FIN_DIA"
|
||||
reqManager.ExecuteQuery(cmd , 0, "pass_fin_dia")
|
||||
|
||||
cmd.Initialize
|
||||
cmd.Name = "select_fecha"
|
||||
' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
|
||||
reqManager.ExecuteQuery(cmd , 0, "fecha")
|
||||
|
||||
Starter.skmt.ExecNonQuery("delete from kmt_info")
|
||||
Starter.skmt.ExecNonQuery("delete from cod_result")
|
||||
@@ -1880,6 +1896,23 @@ Sub JobDone(Job As HttpJob)
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
If result.Tag = "fecha" Then 'query tag
|
||||
For Each records() As Object In result.Rows
|
||||
Starter.FECHA_HOY = records(result.Columns.Get("FECHA"))
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",Starter.FECHA_HOY))
|
||||
Next
|
||||
End If
|
||||
|
||||
' Candado Fin Dia
|
||||
If result.Tag = "pass_fin_dia" Then 'query tag
|
||||
For Each records() As Object In result.Rows
|
||||
Dim nuevaContrasena As String = records(result.Columns.Get("CAR_VA_VALOR3"))
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FINDIA_PASS"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FINDIA_PASS", nuevaContrasena))
|
||||
Next
|
||||
End If
|
||||
|
||||
Job.Release
|
||||
End If
|
||||
@@ -1972,6 +2005,11 @@ End Sub
|
||||
Sub connecta_Click
|
||||
LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red)
|
||||
If Not(IsConnectedToInternet) Then MsgboxAsync("No hay conexión a conexión a Internet", "Revisa tu conexión")
|
||||
|
||||
' EL EVENTO DE CONECTAR AHORA SE DISPARA DESPUES DE REVISAR SI LA RUTA ESTA LIGADA O NO AL DISPOSITIVO (verifyDevice).
|
||||
' REVISAR EL SUB "Linker_Response"
|
||||
linker.verifyDevice(Subs.traeAlmacen, e_ruta.text)
|
||||
|
||||
If e_ruta.Text <> "" Then
|
||||
imei = "" 'p.GetDeviceId
|
||||
conn = "1"
|
||||
@@ -2013,7 +2051,19 @@ Sub b_mapa_Click
|
||||
End Sub
|
||||
|
||||
Sub e_ruta_EnterPressed
|
||||
If e_ruta.Text = "FIN DIA" Then
|
||||
Private adelanteFinDia As Boolean = True
|
||||
c=Starter.skmt.ExecQuery("select ifnull(CAT_VA_VALOR,0) as CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'FINDIA_FECHA'") 'Buscamos "FIN DIA" anterior
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
Private FINDIA_FECHA As String = 0
|
||||
If c.GetString("CAT_VA_VALOR").Length > 4 Then FINDIA_FECHA = c.GetString("CAT_VA_VALOR")
|
||||
Log(FINDIA_FECHA&"|"&Starter.FECHA_HOY)
|
||||
If Not(FINDIA_FECHA < Starter.FECHA_HOY) Then 'Si el "FIN DIA" guardado NO es de ayer o anterior ...
|
||||
adelanteFinDia = False
|
||||
End If
|
||||
c.Close
|
||||
End If
|
||||
If e_ruta.Text = "FIN DIA" And adelanteFinDia Then
|
||||
RES = Msgbox2("Seguro que desea hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
|
||||
If RES = DialogResponse.POSITIVE Then
|
||||
e_ruta.Text = ""
|
||||
@@ -2040,6 +2090,8 @@ Sub e_ruta_EnterPressed
|
||||
Starter.skmt.ExecNonQuery("DELETE FROM ABONOSP")
|
||||
Starter.skmt.ExecNonQuery("DELETE FROM ABONOS")
|
||||
Starter.skmt.ExecNonQuery("DELETE FROM BLOCKENVIO")
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FINDIA_FECHA"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object("FINDIA_FECHA", Starter.FECHA_HOY))
|
||||
b_multiAlmacen.Visible = False
|
||||
p_multiAlmacen.Visible = False
|
||||
s_almacen2.SelectedIndex = 0
|
||||
@@ -2048,6 +2100,8 @@ Sub e_ruta_EnterPressed
|
||||
End If
|
||||
' Starter.waypointsOrdered.Clear
|
||||
Starter.skmt.ExecNonQuery("delete from waypoints")
|
||||
Else if e_ruta.Text = "FIN DIA" Then
|
||||
Msgbox("Ya se hizo FIN DIA hoy, solo se puede hacer un FIN DIA cada día, por favor comuniquese con un supervisor.", "LIMITE DIARIO SUPERADO") 'ignore
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -3229,4 +3283,48 @@ End Sub
|
||||
|
||||
Private Sub connecta_LongClick
|
||||
imp_LIQUIDACION
|
||||
End Sub
|
||||
|
||||
Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query]
|
||||
If Starter.Logger Then LogColor($"Respuesta de DeviceLinker para la verificación del dispositivo: ${Status}"$, Colors.Magenta) '
|
||||
Select Status
|
||||
Case "UUID_ERROR"
|
||||
Log("Error interno al obtener el identificador único del dispositivo.")
|
||||
ToastMessageShow("Error interno al obtener el identificador único del dispositivo.", True)
|
||||
Case "HTTP_ERROR"
|
||||
LogColor("Error HTTP al verificar el dispositivo: " & linker.lastJobDoneError, Colors.Red)
|
||||
ToastMessageShow("Error de conexión al servidor durante la verificación del dispositivo.", True)
|
||||
Case "SERVER_LOGIC_ERROR"
|
||||
Log("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.")
|
||||
ToastMessageShow("El servidor no proporcionó un estado de verificación válido. Contacte a soporte.", True)
|
||||
Case "OK"
|
||||
Log("########################################################")
|
||||
Log("Dispositivo vinculado y verificado exitosamente.")
|
||||
ToastMessageShow("Dispositivo verificado y vinculado correctamente.", False)
|
||||
' Aquí puedes añadir lógica adicional si la verificación es exitosa, por ejemplo, habilitar ciertos botones o continuar con el flujo normal.
|
||||
' connecta2
|
||||
Case "REGISTRO_COMPLETO"
|
||||
Log("########################################################")
|
||||
Log("¡Registro completo!")
|
||||
ToastMessageShow("¡Registro completo!", False)
|
||||
' connecta2
|
||||
Case "SIN_REGISTRO"
|
||||
Log("########################################################")
|
||||
Log("Sin registro")
|
||||
ToastMessageShow("¡Dispositivo sin registro!", False)
|
||||
linker.linkDevice(Subs.traeAlmacen, e_ruta.text)
|
||||
Case "REGISTRANDO"
|
||||
Log("¡Registro en proceso!")
|
||||
ToastMessageShow("¡Registro en proceso!", True)
|
||||
Case "YA_REGISTRADO"
|
||||
Log("########################################################")
|
||||
Log("¡El dispositivo ya esta registrado con otra ruta!")
|
||||
ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True)
|
||||
Msgbox2("Esa ruta ya esta registrada en otro dispositivo", "RUTA INCORRECTA","Aceptar", "", "",Null) 'ignore
|
||||
Case Else ' Otros estados que tu servidor pueda devolver (ej. "UNAUTHORIZED", "PENDING_APPROVAL")
|
||||
Log("########################################################")
|
||||
Log($"Estado de verificación del dispositivo: ${Status}"$)
|
||||
ToastMessageShow($"Verificación del dispositivo: ${Status}"$, True)
|
||||
' Puedes decidir si bloquear la funcionalidad o mostrar un mensaje específico según el estado.
|
||||
End Select
|
||||
End Sub
|
||||
310
B4A/C_deviceLinker.bas
Normal file
310
B4A/C_deviceLinker.bas
Normal file
@@ -0,0 +1,310 @@
|
||||
B4A=true
|
||||
Group=Default Group
|
||||
ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=12.8
|
||||
@EndOfDesignText@
|
||||
'-----------------------------------------------------------------------------------
|
||||
' Modulo de Clase: DeviceLinker.bas
|
||||
' Propósito: Gestionar el GUID del dispositivo y verificar/ligar el dispositivo
|
||||
' a un almacén y ruta en el servidor de forma segura.
|
||||
'-----------------------------------------------------------------------------------
|
||||
' Ejemplo de uso:
|
||||
' ==== En config.properties ====
|
||||
' sql.verify_device=Select nvl(CAT_RU_IDTELEFONO, 0) As CAT_RU_IDTELEFONO from kelloggs.CAT_RUTAS where cat_ru_idalmacen = ? And cat_ru_ruta = ?
|
||||
' sql.registarMovil=update kelloggs.CAT_RUTAS set CAT_RU_IDTELEFONO = ? where cat_ru_idalmacen = ? And cat_ru_ruta = ?
|
||||
' ==== En Class_Globals ====
|
||||
' Dim linker As C_deviceLinker '<<<< Class_Globals
|
||||
' ==== En B4XPage_Created ====
|
||||
' linker.Initialize(Me, "Linker", True) '<<<<<< B4XPage_Created
|
||||
' ==== En donde se quiera llamar ====
|
||||
' linker.VerifyDevice(Subs.traeAlmacen, Subs.traeRuta)
|
||||
' Sub Linker_Response(Status As String) ' << AÑADE ESTE SUB [New Query]
|
||||
' If Starter.Logger Then LogColor($"Respuesta de DeviceLinker para la verificación del dispositivo: ${Status}"$, Colors.Magenta) '
|
||||
' Select Status
|
||||
' Case "OK"
|
||||
' Log("########################################################")
|
||||
' ToastMessageShow("Dispositivo verificado y vinculado correctamente.", False)
|
||||
' ' Aquí puedes añadir lógica adicional si la verificación es exitosa, por ejemplo, habilitar ciertos botones o continuar con el flujo normal.
|
||||
' Case "REGISTRO_COMPLETO"
|
||||
' Log("########################################################")
|
||||
' ToastMessageShow("¡Registro completo!", False)
|
||||
' Case "SIN_REGISTRO"
|
||||
' Log("########################################################")
|
||||
' ToastMessageShow("¡Dispositivo sin registro!", False)
|
||||
' linker.linkDevice(Subs.traeAlmacen, e_ruta.text) '<<<<<<<<< Si no esta registrado lo registramos.
|
||||
' Case "REGISTRANDO"
|
||||
' ToastMessageShow("¡Registro en proceso!", True)
|
||||
' Case "YA_REGISTRADO"
|
||||
' Log("########################################################")
|
||||
' ToastMessageShow("¡¡El dispositivo ya esta registrado con otra ruta!!", True)
|
||||
' Case Else ' Otros estados que tu servidor pueda devolver (ej. "UNAUTHORIZED", "PENDING_APPROVAL")
|
||||
' Log("########################################################")
|
||||
' ToastMessageShow($"Verificación del dispositivo: ${Status}"$, True)
|
||||
' ' Puedes decidir si bloquear la funcionalidad o mostrar un mensaje específico según el estado.
|
||||
' End Select
|
||||
' End Sub
|
||||
|
||||
Sub Class_Globals
|
||||
' Configuración del servidor y comandos
|
||||
Private Const GUID_KEY_ALIAS As String = "DeviceGUID" ' << ALIAS PARA EL GUID EN EL KEYSTORE
|
||||
|
||||
' Objetos y variables internas
|
||||
Private kvs As KeyValueStore ' << ALMACENAMIENTO SEGURO PARA EL GUID
|
||||
Private CallBack As Object ' << OBJETO DE CALLBACK PARA ENVIAR RESPUESTAS
|
||||
Private EventName As String ' << NOMBRE DEL EVENTO DE RESPUESTA
|
||||
Public reqManager As DBRequestManager ' << GESTOR DE PETICIONES AL SERVIDOR jRDC
|
||||
Private logger As Boolean ' << PARA CONTROLAR LOS LOGS DE ESTA CLASE
|
||||
Dim lastJobDoneError As String = ""
|
||||
Dim almacen As String = ""
|
||||
Dim ruta As String = ""
|
||||
Dim deviceId As String = ""
|
||||
' Se requieren las siguientes librerías:
|
||||
' - KeyValueStore2
|
||||
' - DBRequestManager
|
||||
' - XUI
|
||||
Dim dlDB As SQL
|
||||
End Sub
|
||||
|
||||
' Inicializa la clase DeviceLinker.
|
||||
' PageObject: El módulo (ej. C_Principal) que inicializa esta clase y manejará sus respuestas (normalmente "Me").
|
||||
' NameOfEvent: El prefijo para el evento de respuesta (ej. "DeviceLinker_Response").
|
||||
' AppLogger: Booleano para activar/desactivar los logs internos de esta clase, siguiendo el Starter.Logger de la app.
|
||||
Public Sub Initialize (PageObject As Object, NameOfEvent As String, AppLogger As Boolean)
|
||||
CallBack = PageObject
|
||||
EventName = NameOfEvent
|
||||
logger = AppLogger ' Asignamos el estado del logger de la aplicación.
|
||||
|
||||
' Inicializamos el KeyValueStore para almacenamiento seguro del GUID
|
||||
kvs.Initialize(File.DirInternal, "DeviceKeyStore.b4xkey")
|
||||
If logger Then Log("B4XKeyStore 'DeviceKeyStore' inicializado.")
|
||||
|
||||
dlDB.Initialize(File.DirInternal, "deviceLink.db", True)
|
||||
dlDB.ExecNonQuery("CREATE TABLE IF NOT EXISTS Registro (GUID_KEY_ALIAS TEXT)") ' Creamos la tabla si no existe
|
||||
|
||||
' Inicializamos el DBRequestManager para las comunicaciones con el servidor.
|
||||
' 'Me' indica que el evento JobDone de esta clase se encargará de las respuestas de reqManager.
|
||||
' reqManager.Initialize(Me, Starter.DBReqServer)
|
||||
' reqManager.Initialize(Me, "http://keymon.net:9010/DB2") 'Servidor de pruebas
|
||||
' reqManager.Initialize(Me, "http://keymon.net:1781") 'Servidor productivo
|
||||
reqManager.Initialize(Me, B4XPages.MainPage.server) 'Servidor productivo
|
||||
|
||||
If logger Then Log("DBRequestManager para DeviceLinker inicializado.")
|
||||
If logger Then Log("DeviceLinker inicializado y listo para operar.")
|
||||
End Sub
|
||||
|
||||
' Verifica y liga el dispositivo con un almacén y una ruta en el servidor.
|
||||
' Almacen: El identificador del almacén.
|
||||
' Ruta: El identificador de la ruta.
|
||||
Public Sub verifyDevice(Almacen_ As String, Ruta_ As String)
|
||||
Private verificar As Boolean = True ' La verificacion se realiza por default
|
||||
Private tv As Cursor = Starter.skmt.ExecQuery("select * from cat_variables where CAT_VA_DESCRIPCION = 'VERIFY_DEVICE'")
|
||||
If tv.RowCount > 0 Then
|
||||
tv.Position = 0
|
||||
If tv.GetString("CAT_VA_VALOR") = 0 Then verificar = False
|
||||
End If
|
||||
If verificar Then ' Si VERIFY_DEVICE no está en CERO ... verificamos.
|
||||
Dim DeviceId_ As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo.
|
||||
LogColor(DeviceId_, Colors.red)
|
||||
almacen = Almacen_
|
||||
ruta = Ruta_
|
||||
deviceId = DeviceId_
|
||||
If DeviceId_ = "" Then
|
||||
If logger Then LogColor("Error: GUID del dispositivo no pudo ser obtenido o generado.", Colors.Red)
|
||||
' Enviar una respuesta de error al callback si no se pudo obtener el GUID.
|
||||
If SubExists(CallBack, EventName & "_Response") Then ' [New Query]
|
||||
CallSub2(CallBack, EventName & "_Response", "GUID_ERROR") ' Dispara el evento Linker_Response("GUID_ERROR")
|
||||
End If
|
||||
Return
|
||||
End If
|
||||
|
||||
If logger Then Log($"Enviando solicitud de verificación para DeviceId: ${DeviceId_}, Almacen: ${Almacen_}, Ruta: ${Ruta_}"$)
|
||||
|
||||
Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
|
||||
cmd.Initialize
|
||||
cmd.Name = "verify_device"
|
||||
' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
|
||||
cmd.Parameters = Array As Object(Almacen_, Ruta_) ', DeviceId_
|
||||
Log($"Enviamos almacen: ${Almacen_} y ruta: ${Ruta_}"$)
|
||||
|
||||
' Ejecutamos el comando en el servidor. 'Me' indica que DBRequestManager_JobDone en esta clase manejará la respuesta.
|
||||
reqManager.ExecuteQuery(cmd, 0, "verify_device")
|
||||
Else ' Si está en CERO (Verificacion deshabilitada), regresamos "OK".
|
||||
CallSub2(CallBack, EventName & "_Response", "OK")
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub linkDevice(Almacen_ As String, Ruta_ As String)
|
||||
Dim deviceId As String = GetDeviceGUID ' Obtenemos o generamos el GUID del dispositivo.
|
||||
Log("########################################################")
|
||||
Log("REGISTRANDO")
|
||||
Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
|
||||
cmd.Initialize
|
||||
cmd.Name = "registarMovil"
|
||||
' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
|
||||
cmd.Parameters = Array As Object(deviceId, Almacen_, Ruta_)
|
||||
reqManager.ExecuteCommand(cmd, "registramosGUID")
|
||||
If SubExists(CallBack, EventName & "_Response") Then
|
||||
CallSub2(CallBack, EventName & "_Response", "REGISTRANDO") ' Dispara el evento Linker_Response("REGISTRANDO")
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'244500
|
||||
|
||||
' Obtiene el GUID único del dispositivo desde B4XKeyStore.
|
||||
' Si no existe, lo genera y lo guarda utilizando Subs.GUID.
|
||||
Private Sub GetDeviceGUID As String
|
||||
' If kvs.ContainsKey(GUID_KEY_ALIAS) = False Then
|
||||
' ' Corrección: Usamos la función GUID ya existente en el módulo Subs [1].
|
||||
' Dim NewGUID As String = generaGUID
|
||||
' kvs.Put(GUID_KEY_ALIAS, NewGUID) ' Lo guardamos de forma segura en el KeyStore.
|
||||
' If logger Then LogColor($"Nuevo GUID generado y guardado: ${NewGUID}"$, Colors.Blue)
|
||||
' Return NewGUID
|
||||
' Else
|
||||
' Dim ExistingGUID As String = kvs.Get(GUID_KEY_ALIAS) ' Recuperamos el GUID existente.
|
||||
' If logger Then LogColor($"GUID existente cargado: ${ExistingGUID}"$, Colors.Blue)
|
||||
' Return ExistingGUID
|
||||
' End If
|
||||
|
||||
If deviceLinked = False Then
|
||||
' Corrección: Usamos la función GUID ya existente en el módulo Subs [1].
|
||||
Dim NewGUID As String = generaGUID
|
||||
dlDB.ExecNonQuery($"insert into registro ('GUID_KEY_ALIAS') values ('${NewGUID}')"$) ' Guardamos nuevo registro
|
||||
If logger Then LogColor($"Nuevo GUID generado y guardado: ${NewGUID}"$, Colors.Blue)
|
||||
Return NewGUID
|
||||
Else
|
||||
Dim ExistingGUID As String
|
||||
Private e As Cursor = dlDB.ExecQuery("select GUID_KEY_ALIAS from registro")
|
||||
e.Position = 0
|
||||
ExistingGUID = e.GetString("GUID_KEY_ALIAS")
|
||||
If logger Then LogColor($"GUID existente cargado: ${ExistingGUID}"$, Colors.Blue)
|
||||
Return ExistingGUID
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' Callback para manejar las respuestas del DBRequestManager de esta clase.
|
||||
Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el que se haya especificado en reqManager.Initialize(Me, ApiUrl)
|
||||
If logger Then Log("INICA JOBDONE DEVICELINKER - " & Job.Tag)
|
||||
If reqManager.reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos.
|
||||
If reqManager.reqsList.IndexOf(Job.tag) <> -1 Then
|
||||
reqManager.reqsList.RemoveAt(reqManager.reqsList.IndexOf(Job.tag))
|
||||
LogColor($">>>>>> Recibimos y quitamos ${Job.tag.As(String).ToUpperCase}"$, Colors.Blue)
|
||||
End If
|
||||
LogColor(">>>>>> " & reqManager.reqsList.Size & " - " & reqManager.reqsList, Colors.Blue)
|
||||
End If
|
||||
If Job.Success = False Then
|
||||
lastJobDoneError = Job.ErrorMessage
|
||||
LogColor("############################################", Colors.red)
|
||||
LogColor("###### JobError: " & Job.Tag & " ######" & CRLF & "#### " & Job.ErrorMessage, Colors.red)
|
||||
LogColor("############################################", Colors.red)
|
||||
' Enviar una respuesta de error HTTP al callback.
|
||||
If SubExists(CallBack, EventName & "_Response") Then
|
||||
CallSub2(CallBack, EventName & "_Response", "HTTP_ERROR") ' Dispara el evento Linker_Response("HTTP_ERROR")
|
||||
End If
|
||||
Else 'If Job Success then ...
|
||||
lastJobDoneError = ""
|
||||
If Job.JobName = "DBRequest" Then ' Asegurarse de que sea una respuesta de DBRequestManager.
|
||||
' Primero verificamos Job.Success para saber si la comunicación HTTP fue exitosa [New Query]
|
||||
If Job.Success Then
|
||||
Dim result As DBResult = reqManager.HandleJob(Job) ' Procesamos el HttpJob para obtener el DBResult.
|
||||
If logger Then LogColor($"Petición exitosa al servidor. Registros devueltos: ${result.Rows.Size}"$, Colors.Green)
|
||||
|
||||
|
||||
' If result.Tag = "hist_cliente_promos" Then 'query tag
|
||||
' Starter.skmt.BeginTransaction
|
||||
' For Each records() As Object In result.Rows
|
||||
' Dim HCCP_CLIENTE As String = records(result.Columns.Get("HCCP_CLIENTE"))
|
||||
' Starter.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT, HCCP_CANT_VENDIDA) VALUES (?,?,?,?)", Array As Object (HCCP_CLIENTE))
|
||||
' Next
|
||||
' Starter.skmt.TransactionSuccessful
|
||||
' Starter.skmt.EndTransaction
|
||||
' ' ToastMessageShow(" Historico Clientes Promociones Actualizado." , True)
|
||||
' End If
|
||||
|
||||
If result.Tag = "verify_device" Then 'query tag
|
||||
' Aquí es donde la lógica de la aplicación interpreta el éxito/falla de la operación en el servidor.
|
||||
If result.Rows.Size > 0 Then
|
||||
Subs.logJobDoneResultados(result)
|
||||
For Each records() As Object In result.Rows
|
||||
Dim Status As String = "" 'records(result.Columns.Get("ESTATUS"))
|
||||
Dim CAT_RU_IDTELEFONO As String = records(result.Columns.Get("CAT_RU_IDTELEFONO"))
|
||||
deviceId = GetDeviceGUID
|
||||
Log($"|${deviceId}|${CAT_RU_IDTELEFONO}|"$)
|
||||
' If deviceId <> CAT_RU_IDTELEFONO Then Status = "YA_REGISTRADO" ' Ya existe OTRO registro.
|
||||
If CAT_RU_IDTELEFONO = 0 Or CAT_RU_IDTELEFONO.Length < 5 Then
|
||||
Status = "SIN_REGISTRO"
|
||||
' Log("########################################################")
|
||||
' Log("REGISTRANDO")
|
||||
' Dim cmd As DBCommand ' Creamos un comando para enviar al servidor.
|
||||
' cmd.Initialize
|
||||
' cmd.Name = "registarMovil"
|
||||
' ' Pasamos el almacén, la ruta y el GUID del dispositivo como parámetros.
|
||||
' cmd.Parameters = Array As Object(deviceId, almacen, ruta)
|
||||
' reqManager.ExecuteCommand(cmd, "registramosGUID")
|
||||
If SubExists(CallBack, EventName & "_Response") Then
|
||||
CallSub2(CallBack, EventName & "_Response", "SIN_REGISTRO")
|
||||
End If
|
||||
else if CAT_RU_IDTELEFONO = deviceId Then
|
||||
Status = "OK"
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
|
||||
Log("OK")
|
||||
LogColor("######### GUARDAMOS ###########", Colors.red)
|
||||
Else
|
||||
Status = "YA_REGISTRADO"
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 0))
|
||||
Log("YA_REGISTRADO")
|
||||
LogColor("######### GUARDAMOS ###########", Colors.red)
|
||||
End If
|
||||
' Invocamos el callback en el módulo principal con el estado.
|
||||
Next
|
||||
Else
|
||||
Status = "NO_EXISTE_RUTA"
|
||||
End If
|
||||
If SubExists(CallBack, EventName & "_Response") Then
|
||||
CallSub2(CallBack, EventName & "_Response", Status) ' Dispara el evento Linker_Response("OK") o Linker_Response("YA_REGISTRADO")
|
||||
End If
|
||||
End If
|
||||
|
||||
If result.Tag = "registramosGUID" Then
|
||||
Log("########################################################")
|
||||
Log("REGISTRO_COMPLETO")
|
||||
LogColor("######### GUARDAMOS ###########", Colors.red)
|
||||
Subs.logJobDoneResultados(result)
|
||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("LIGADO"))
|
||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("LIGADO", 1))
|
||||
If SubExists(CallBack, EventName & "_Response") Then
|
||||
CallSub2(CallBack, EventName & "_Response", "REGISTRO_COMPLETO") ' Dispara el evento Linker_Response("REGISTRO_COMPLETO")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Job.Release ' Muy importante liberar el HttpJob para evitar fugas de memoria.
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'Genera un GUID (globally unique identifier)
|
||||
Sub generaGUID As String
|
||||
Dim sb As StringBuilder
|
||||
sb.Initialize
|
||||
For Each stp As Int In Array(8, 4, 4, 4, 12)
|
||||
If sb.Length > 0 Then sb.Append("-")
|
||||
For n = 1 To stp
|
||||
Dim c As Int = Rnd(0, 16)
|
||||
If c < 10 Then c = c + 48 Else c = c + 55
|
||||
sb.Append(Chr(c))
|
||||
Next
|
||||
Next
|
||||
Return sb.ToString
|
||||
End Sub
|
||||
|
||||
'Regresa true si existe registro
|
||||
Sub deviceLinked As Boolean
|
||||
Private e As Cursor = dlDB.ExecQuery("select * from registro")
|
||||
If e.RowCount > 0 Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Sub
|
||||
@@ -4,7 +4,7 @@ ModulesStructureVersion=1
|
||||
Type=Class
|
||||
Version=7.01
|
||||
@EndOfDesignText@
|
||||
'Class module
|
||||
''Class module
|
||||
Sub Class_Globals
|
||||
Private mTarget As Object
|
||||
Type DBResult (Tag As Object, Columns As Map, Rows As List)
|
||||
@@ -15,7 +15,12 @@ Sub Class_Globals
|
||||
,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 - 211023
|
||||
Dim jobTagAnterior As String = "" 'Mod por CHV - 211109
|
||||
Dim reqsList, timesList As List
|
||||
Dim inicioRequest As Long 'ignore
|
||||
Dim inicioJobDone As Long 'ignore
|
||||
Dim inicioRequestMap, inicioJobDoneMap As Map
|
||||
Private logger As Boolean = False
|
||||
End Sub
|
||||
|
||||
'Target - The module that handles JobDone (usually Me).
|
||||
@@ -32,8 +37,10 @@ End Sub
|
||||
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)
|
||||
|
||||
Dim out2 As OutputStream = StartJob(j, ms, Tag)
|
||||
' If reqsList.IsInitialized Then reqsList.Add(Tag)
|
||||
' If timesList.IsInitialized Then timesList.Add(DateTime.now)
|
||||
|
||||
WriteObject(Command.Name, out2)
|
||||
WriteInt(Limit, out2)
|
||||
WriteList(Command.Parameters, out2)
|
||||
@@ -41,13 +48,30 @@ Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object)
|
||||
j.PostBytes(link & "?method=query", ms.ToBytesArray)
|
||||
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.
|
||||
'Timeout - The http request timeout in ms, or 0 if default (30 secs)
|
||||
Public Sub ExecuteQuery3(Command As DBCommand, Limit As Int, Tag As Object, Timeout As Int) 'Mod por CHV, agregué el parametro Timeout - 211229
|
||||
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)
|
||||
If Timeout <> 0 Then j.GetRequest.Timeout = Timeout
|
||||
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)
|
||||
Dim out2 As OutputStream = StartJob(j, ms, Tag)
|
||||
WriteInt(ListOfCommands.Size, out2)
|
||||
For Each Command As DBCommand In ListOfCommands
|
||||
WriteObject(Command.Name, out2)
|
||||
@@ -59,10 +83,15 @@ End Sub
|
||||
|
||||
'Similar to ExecuteBatch. Sends a single command.
|
||||
Public Sub ExecuteCommand(Command As DBCommand, Tag As Object)
|
||||
' If reqsList.IsInitialized Then reqsList.Add(Tag)
|
||||
' If timesList.IsInitialized Then timesList.Add(DateTime.now)
|
||||
ExecuteBatch(Array As DBCommand(Command), Tag)
|
||||
End Sub
|
||||
|
||||
Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream
|
||||
' inicioRequest = DateTime.now
|
||||
If reqsList.IsInitialized Then reqsList.Add(Tag)
|
||||
If timesList.IsInitialized Then timesList.Add(DateTime.now)
|
||||
j.Initialize("DBRequest", mTarget)
|
||||
j.Tag = Tag
|
||||
MemoryStream.InitializeToBytesArray(0)
|
||||
@@ -113,7 +142,7 @@ Private Sub WriteObject(o As Object, out As OutputStream)
|
||||
Else If GetType(tempArray(0)) = "[B" Then
|
||||
data = o
|
||||
out.WriteBytes(Array As Byte(T_BLOB), 0, 1)
|
||||
WriteInt(data.Length, out)
|
||||
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")
|
||||
@@ -186,7 +215,13 @@ End Sub
|
||||
|
||||
'Handles the Job result and returns a DBResult.
|
||||
Public Sub HandleJob(Job As HttpJob) As DBResult
|
||||
' Dim start As Long = DateTime.Now
|
||||
If jobTagAnterior <> Job.Tag Then
|
||||
' inicioJobDone = DateTime.Now 'ignore
|
||||
If inicioJobDoneMap.IsInitialized Then inicioJobDoneMap.Put(Job.Tag, DateTime.Now)
|
||||
' tiempos.Put(Job.taskId, CreateMap("inicioJobDone":inicioJobDone))
|
||||
' Log(tiempos)
|
||||
' Log("############# " & Job.taskId)
|
||||
End If
|
||||
Dim In As InputStream = Job.GetInputStream
|
||||
Dim cs As CompressedStreams
|
||||
In = cs.WrapInputStream(In, "gzip")
|
||||
@@ -197,8 +232,6 @@ Public Sub HandleJob(Job As HttpJob) As DBResult
|
||||
table.Columns.Initialize
|
||||
table.rows.Initialize
|
||||
table.Tag = Job.Tag
|
||||
If jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.Blue) 'Mod por CHV - 211023
|
||||
jobTagAnterior = Job.Tag 'Mod por CHV - 211023
|
||||
If method = "query" Then
|
||||
Dim numberOfColumns As Int = ReadInt(In)
|
||||
For i = 0 To numberOfColumns - 1
|
||||
@@ -220,6 +253,11 @@ Public Sub HandleJob(Job As HttpJob) As DBResult
|
||||
Next
|
||||
End If
|
||||
In.Close
|
||||
' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112
|
||||
If jobTagAnterior <> table.Tag Then
|
||||
LogColor("HandleJob: '"&table.Tag&"'" & " - Registros: " & table.Rows.Size, Colors.RGB(115, 0, 140)) 'Mod por CHV - 211109
|
||||
End If
|
||||
jobTagAnterior = table.Tag 'Mod por CHV - 211109
|
||||
Return table
|
||||
End Sub
|
||||
|
||||
@@ -241,6 +279,7 @@ Public Sub ImageToBytes(Image As Bitmap) As Byte()
|
||||
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
|
||||
@@ -265,8 +304,60 @@ Public Sub PrintTable(Table As DBResult)
|
||||
For Each record As Object In row
|
||||
sb.Append(record).Append(TAB)
|
||||
Next
|
||||
ToastMessageShow(sb.ToString, True)
|
||||
Log(sb.ToString)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
|
||||
Sub requestTimes(tag As String) As Map 'ignore
|
||||
Private times As Map
|
||||
times.Initialize
|
||||
' Log("###### " & tag)
|
||||
' Log(reqsList.IsInitialized)
|
||||
If reqsList.IsInitialized Then
|
||||
' Log(reqsList)
|
||||
' Private pos As Int = reqsList.IndexOf(tag)
|
||||
If inicioRequestMap.ContainsKey(tag) Then
|
||||
inicioRequest = inicioRequestMap.Get(tag)
|
||||
' Log(">>>>>>> From inicioRequestMap")
|
||||
End If
|
||||
If inicioJobDoneMap.ContainsKey(tag) Then
|
||||
inicioJobDone = inicioJobDoneMap.Get(tag)
|
||||
' Log(">>>>>>> From inicioJobDoneMap")
|
||||
End If
|
||||
End If
|
||||
' Log($"${inicioJobDone} - ${inicioRequest}"$)
|
||||
Private requestTime As String = NumberFormat2(((inicioJobDone - inicioRequest) / 1000),1,5,0,False)
|
||||
Private JobDoneTime As String = NumberFormat2(((DateTime.Now - inicioJobDone) / 1000),1,5,0,False)
|
||||
times.Put("request", tag)
|
||||
times.Put("requestTime", requestTime)
|
||||
times.Put("jobDoneTime", JobDoneTime)
|
||||
times.Put("totalTime", NumberFormat2((JobDoneTime + requestTime),1,5,0,False))
|
||||
Return times
|
||||
End Sub
|
||||
|
||||
'Initializes request tracking
|
||||
Sub trackInit 'ignore
|
||||
If logger Then Log(">>>>>>>>> TRACKINIT ")
|
||||
reqsList.Initialize
|
||||
timesList.Initialize
|
||||
inicioRequestMap.Initialize
|
||||
inicioJobDoneMap.Initialize
|
||||
End Sub
|
||||
|
||||
|
||||
Sub trackNext(job As HttpJob)
|
||||
If reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos.
|
||||
Private quitamos As String = ""
|
||||
If reqsList.IndexOf(job.tag) <> -1 Then
|
||||
Private pos As Int = reqsList.IndexOf(job.tag)
|
||||
If pos <> -1 Then
|
||||
inicioRequestMap.Put(job.Tag, timesList.Get(pos))
|
||||
reqsList.RemoveAt(pos)
|
||||
timesList.RemoveAt(pos)
|
||||
End If
|
||||
quitamos = $"Quitamos ${job.tag} - "$
|
||||
End If
|
||||
If logger Then LogColor(">>>>>> Requests: " & reqsList.Size & " - " & quitamos & reqsList, Colors.Blue)
|
||||
If logger Then LogColor(">>>>>> inicioRequestMap:" & inicioRequestMap.Size & " - " & inicioRequestMap, Colors.Magenta)
|
||||
End If
|
||||
End Sub
|
||||
Binary file not shown.
Binary file not shown.
@@ -42,6 +42,8 @@ Sub Process_Globals
|
||||
Dim inicioMapa As Boolean = False
|
||||
Dim inicioLat As Double = 0
|
||||
Dim inicioLon As Double = 0
|
||||
Dim Logger As Boolean = False
|
||||
Dim FECHA_HOY As String
|
||||
End Sub
|
||||
|
||||
Sub Service_Create
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -25,6 +25,7 @@ ModuleBookmarks3=
|
||||
ModuleBookmarks30=
|
||||
ModuleBookmarks31=
|
||||
ModuleBookmarks32=
|
||||
ModuleBookmarks33=
|
||||
ModuleBookmarks4=
|
||||
ModuleBookmarks5=
|
||||
ModuleBookmarks6=
|
||||
@@ -58,6 +59,7 @@ ModuleBreakpoints3=
|
||||
ModuleBreakpoints30=
|
||||
ModuleBreakpoints31=
|
||||
ModuleBreakpoints32=
|
||||
ModuleBreakpoints33=
|
||||
ModuleBreakpoints4=
|
||||
ModuleBreakpoints5=
|
||||
ModuleBreakpoints6=
|
||||
@@ -74,7 +76,7 @@ ModuleClosedNodes14=
|
||||
ModuleClosedNodes15=
|
||||
ModuleClosedNodes16=
|
||||
ModuleClosedNodes17=
|
||||
ModuleClosedNodes18=
|
||||
ModuleClosedNodes18=1,3
|
||||
ModuleClosedNodes19=
|
||||
ModuleClosedNodes2=
|
||||
ModuleClosedNodes20=
|
||||
@@ -91,12 +93,13 @@ ModuleClosedNodes3=
|
||||
ModuleClosedNodes30=
|
||||
ModuleClosedNodes31=
|
||||
ModuleClosedNodes32=
|
||||
ModuleClosedNodes33=
|
||||
ModuleClosedNodes4=
|
||||
ModuleClosedNodes5=
|
||||
ModuleClosedNodes6=
|
||||
ModuleClosedNodes7=
|
||||
ModuleClosedNodes8=
|
||||
ModuleClosedNodes9=
|
||||
NavigationStack=C_NoVenta,GPS_LocationChanged,103,0,C_Cliente,GPS_LocationChanged,620,0,C_Cliente,Guardado,997,0,C_Cliente,esPagoACreditoGuardamosPagare,985,0,C_Cliente,b_acred_Click,2021,0,C_Cliente,b_cancel_pagare_Click,3894,0,Diseñador Visual,cliente.bal,-100,1,C_Principal,envioinfo,873,6,Diseñador Visual,principal.bal,-100,2,C_Principal,ImageView1_LongClick,2909,0
|
||||
NavigationStack=B4XMainPage,Class_Globals,1287,0,Diseñador Visual,login.bal,-100,6,B4XMainPage,b_borrarFinDia_Click,2312,0,B4XMainPage,p_finDia_Click,2307,0,B4XMainPage,b_cancelarFD_Click,2331,1,B4XMainPage,b_aceptarFD_Click,2320,6,C_DetalleVenta,B_IMP_Click,1162,0,C_DetalleVenta,StartPrinter,1160,0,Main,Process_Globals,17,0,B4XMainPage,p_transFinDia_Click,2317,0
|
||||
SelectedBuild=0
|
||||
VisibleModules=2,17,5,6,7,8,10,31,30,28
|
||||
VisibleModules=31,2,18,11,7,8,10,32
|
||||
|
||||
Reference in New Issue
Block a user