mirror of
https://github.com/KeymonSoft/Intmex_Multiventa.git
synced 2026-04-17 21:06:08 +00:00
Compare commits
4 Commits
6.02.20_GP
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 88fb12a277 | |||
| 028d200cc2 | |||
| fbb76fed9b | |||
| 5426e434ca |
@@ -26,8 +26,6 @@ Version=9.85
|
|||||||
'###########################################################################################################
|
'###########################################################################################################
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\
|
|
||||||
|
|
||||||
Sub Class_Globals
|
Sub Class_Globals
|
||||||
Private Root As B4XView
|
Private Root As B4XView
|
||||||
Private xui As XUI
|
Private xui As XUI
|
||||||
@@ -203,9 +201,11 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
Subs.agregaColumna("CAT_GUNAPROD", "CAT_GP_PRECIO10", "TEXT DEFAULT '0'")
|
Subs.agregaColumna("CAT_GUNAPROD", "CAT_GP_PRECIO10", "TEXT DEFAULT '0'")
|
||||||
Subs.agregaColumna("PEDIDO_CLIENTE", "PC_GUARDADO", "TEXT DEFAULT '0'")
|
Subs.agregaColumna("PEDIDO_CLIENTE", "PC_GUARDADO", "TEXT DEFAULT '0'")
|
||||||
Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_VARREQ3", "TEXT DEFAULT '0'")
|
Subs.agregaColumna("CAT_GUNAPROD2", "CAT_GP_VARREQ3", "TEXT DEFAULT '0'")
|
||||||
|
Subs.agregaColumna("HIST_VENTAS", "HVD_USUARIO", "TEXT")
|
||||||
Subs.agregaColumna("CAT_GUNAPROD2", "MARCA", "TEXT")
|
Subs.agregaColumna("CAT_GUNAPROD2", "MARCA", "TEXT")
|
||||||
Subs.agregaColumna("CAT_GUNAPROD", "MARCA", "TEXT")
|
Subs.agregaColumna("CAT_GUNAPROD", "MARCA", "TEXT")
|
||||||
|
Subs.agregaColumna("PEDIDO", "PE_ARCH", "TEXT")
|
||||||
|
Subs.agregaColumna("PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
|
||||||
|
|
||||||
c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_STAY_OUT ")
|
c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_STAY_OUT ")
|
||||||
C.Position = 0
|
C.Position = 0
|
||||||
|
|||||||
@@ -337,9 +337,7 @@ Sub B4XPage_Appear
|
|||||||
End If
|
End If
|
||||||
c.Close
|
c.Close
|
||||||
If ALMACEN = "1" Then
|
If ALMACEN = "1" Then
|
||||||
Tels.Visible = False
|
ocultamosBotonesPorGeocerca
|
||||||
gest.Visible = False
|
|
||||||
' B_GPS.Visible = False
|
|
||||||
End If
|
End If
|
||||||
If ALMACEN = "4" Then
|
If ALMACEN = "4" Then
|
||||||
' b_like.Visible = True
|
' b_like.Visible = True
|
||||||
@@ -361,12 +359,22 @@ Sub B4XPage_Appear
|
|||||||
Else
|
Else
|
||||||
' b_like.Visible = False
|
' b_like.Visible = False
|
||||||
End If
|
End If
|
||||||
If ALMACEN = "16" Or ALMACEN = "13" Then
|
If Not(Subs.geocercaActiva) And ALMACEN = "16" Or ALMACEN = "13" Then
|
||||||
|
Log("Mostramos botones venta")
|
||||||
Tels.Visible = True
|
Tels.Visible = True
|
||||||
gest.Visible = True
|
gest.Visible = True
|
||||||
|
b_ventaabordo.Visible = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If Not(Subs.geocercaActiva) Then
|
||||||
|
Log("Mostramos botones venta")
|
||||||
Tels.Visible = True
|
Tels.Visible = True
|
||||||
gest.Visible = True
|
gest.Visible = True
|
||||||
|
b_ventaabordo.Visible = True
|
||||||
|
Else
|
||||||
|
Log("Ocultamos botones venta")
|
||||||
|
ocultamosBotonesPorGeocerca
|
||||||
|
End If
|
||||||
|
|
||||||
' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA")
|
||||||
' h.Position = 0
|
' h.Position = 0
|
||||||
@@ -446,42 +454,41 @@ Sub B4XPage_disappear
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub GPS_LocationChanged (Location1 As Location)
|
Sub GPS_LocationChanged (Location1 As Location)
|
||||||
' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red)
|
LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red)
|
||||||
' If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then
|
If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then
|
||||||
' B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude
|
B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude
|
||||||
' B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude
|
B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude
|
||||||
'' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps)
|
' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps)
|
||||||
' End If
|
End If
|
||||||
B4XPages.MainPage.lat_gps = Location1.Latitude
|
|
||||||
B4XPages.MainPage.lon_gps = Location1.Longitude
|
|
||||||
|
|
||||||
Dim locTienda As Location
|
Dim l1, l2 As Location
|
||||||
locTienda.Initialize2(m_lat, m_lon)
|
l1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)
|
||||||
' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$)
|
' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$)
|
||||||
|
l2.Initialize2(m_lat, m_lon)
|
||||||
|
|
||||||
BT_QR.Enabled = True
|
BT_QR.Enabled = True
|
||||||
LA_GPS.TextColor = Colors.Blue
|
LA_GPS.TextColor = Colors.Blue
|
||||||
LA_GPS.Text = "CON UBICACION GPS"
|
LA_GPS.Text = "CON UBICACION GPS"
|
||||||
distance = Location1.DistanceTo(locTienda) 'Distancia de la ubicacion actual a coords de la tienda.
|
Log("CON UBICACION GPS")
|
||||||
Log("Distancia a tienda: " & distance)
|
' B_GPS.Enabled = True
|
||||||
If distance < 50 Then
|
'now we need the distance between our location and the target location
|
||||||
gest.Visible = True
|
distance = l1.DistanceTo(l2) 'the result is in meter
|
||||||
|
Log(distance)
|
||||||
|
Log((Subs.geocercaActiva And distance < 100))
|
||||||
|
Log(Not(Subs.geocercaActiva))
|
||||||
|
If (Subs.geocercaActiva And distance < 100) Or (Not(Subs.geocercaActiva)) Then
|
||||||
|
Log("Mostramos botones venta")
|
||||||
|
LA_GEO.TextColor = Colors.Blue
|
||||||
Tels.Visible = True
|
Tels.Visible = True
|
||||||
If la_cuenta.Text = "0" Then
|
gest.Visible = True
|
||||||
b_ventaabordo.Visible = False
|
|
||||||
Else
|
|
||||||
b_ventaabordo.Visible = True
|
b_ventaabordo.Visible = True
|
||||||
End If
|
|
||||||
Else
|
Else
|
||||||
LA_GEO.TextColor = Colors.Red
|
' LA_GEO.TextColor = Colors.Red
|
||||||
If Subs.traeGeocerca Then
|
|
||||||
ocultamosBotonesPorGeocerca
|
|
||||||
End If
|
|
||||||
End If
|
End If
|
||||||
LA_GEO.Text= $"$1.2{distance/1000} kms"$
|
LA_GEO.Text= $"$1.2{distance/1000} kms"$
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
|
B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
|
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
|
||||||
' CallSubDelayed(Tracker, "CreateLocationRequest")
|
CallSubDelayed(Tracker, "CreateLocationRequest")
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub ListView1_ItemLongClick (Position As Int, Value As Object)
|
Sub ListView1_ItemLongClick (Position As Int, Value As Object)
|
||||||
@@ -591,7 +598,7 @@ Sub Guardar_Click
|
|||||||
Log(">>>>> PONEMOS SIG TICKET")
|
Log(">>>>> PONEMOS SIG TICKET")
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido set PE_TICKET = ${Subs.traeTicketConsecutivo(Subs.traeCliente)}, PE_GUARDADO = 1 where PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_TICKET is Null"$)
|
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido set PE_TICKET = ${Subs.traeTicketConsecutivo(Subs.traeCliente)}, PE_GUARDADO = 1 where PE_CLIENTE IN (Select CUENTA from cuentaa) and PE_TICKET is Null"$)
|
||||||
End If
|
End If
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido set PE_GUARDADO = 1, PE_ENVIO_OK = 1 where PE_CLIENTE IN (Select CUENTA from cuentaa)"$)
|
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido set PE_GUARDADO = 1, PE_ENVIO_OK = 0 where PE_CLIENTE IN (Select CUENTA from cuentaa)"$)
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido_cliente set PC_GUARDADO = 1 where PC_CLIENTE IN (Select CUENTA from cuentaa)"$)
|
B4XPages.MainPage.skmt.ExecNonQuery($"update pedido_cliente set PC_GUARDADO = 1 where PC_CLIENTE IN (Select CUENTA from cuentaa)"$)
|
||||||
c.Close
|
c.Close
|
||||||
DateTime.TimeFormat = "HHmmss"
|
DateTime.TimeFormat = "HHmmss"
|
||||||
@@ -619,6 +626,12 @@ Sub Guardar_Click
|
|||||||
' LogColor($"actualizamos "${la_cuenta.text}, hora_final=${DateTime.now}"$,Colors.Red)
|
' LogColor($"actualizamos "${la_cuenta.text}, hora_final=${DateTime.now}"$,Colors.Red)
|
||||||
Subs.actualizaTET(la_cuenta.text)
|
Subs.actualizaTET(la_cuenta.text)
|
||||||
DateTime.TimeFormat = "HH:mm:ss"
|
DateTime.TimeFormat = "HH:mm:ss"
|
||||||
|
|
||||||
|
|
||||||
|
' B4XPages.MainPage.principal.enviaPedidoBatch(Subs.traeCliente)
|
||||||
|
' Sleep(2000)
|
||||||
|
|
||||||
|
|
||||||
mandaPendientes 'LO COMENTAMOS PARA PRUEBAS, ACTIVAR AL FINAL!!! - Solo envia clientes nuevos, no comentar lo que yo descomente --- javier (por que Guerra lo comento) ... ¿Que descomentaste?? --- Guerra
|
mandaPendientes 'LO COMENTAMOS PARA PRUEBAS, ACTIVAR AL FINAL!!! - Solo envia clientes nuevos, no comentar lo que yo descomente --- javier (por que Guerra lo comento) ... ¿Que descomentaste?? --- Guerra
|
||||||
mandapiezas
|
mandapiezas
|
||||||
B4XPages.MainPage.productos.reiniciarlistaProds = True
|
B4XPages.MainPage.productos.reiniciarlistaProds = True
|
||||||
@@ -1048,6 +1061,7 @@ Sub B_GUARDA_C_Click
|
|||||||
Tar.Visible = True
|
Tar.Visible = True
|
||||||
Tels.Visible = True
|
Tels.Visible = True
|
||||||
gest.Visible = True
|
gest.Visible = True
|
||||||
|
b_ventaabordo.Visible = True
|
||||||
' b_like.Visible = False
|
' b_like.Visible = False
|
||||||
Guardar.Visible = True
|
Guardar.Visible = True
|
||||||
End Sub
|
End Sub
|
||||||
@@ -1445,6 +1459,14 @@ Sub JobDone(Job As HttpJob)
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
'Guarda coords nuevas
|
||||||
|
If Job.JobName = "DBRequest" Then
|
||||||
|
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
||||||
|
If resultado.Tag = "insCoordsNuevas" Then
|
||||||
|
ToastMessageShow("Coordenadas actualizadas", False)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
'CUESTIONARIO
|
'CUESTIONARIO
|
||||||
If Job.JobName = "DBRequest" Then
|
If Job.JobName = "DBRequest" Then
|
||||||
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
||||||
@@ -1738,3 +1760,26 @@ Sub ocultamosBotonesPorGeocerca
|
|||||||
b_ventaabordo.Visible = False
|
b_ventaabordo.Visible = False
|
||||||
Tels.Visible = False
|
Tels.Visible = False
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Sub la_nombre_Click
|
||||||
|
Log("Clicked")
|
||||||
|
If Not(Subs.geocercaActiva) Then
|
||||||
|
Log("Enviando coords")
|
||||||
|
DateTime.DateFormat = "MM/dd/yyyy"
|
||||||
|
sDate=DateTime.Date(DateTime.Now)
|
||||||
|
sTime=DateTime.Time(DateTime.Now)
|
||||||
|
B4XPages.MainPage.skmt.ExecNonQuery($"update kmt_info set cat_cl_lat = '${B4XPages.MainPage.lat_gps}', cat_cl_long = '${B4XPages.MainPage.lon_gps}' where cat_cl_codigo = '${la_cuenta.text}'"$)
|
||||||
|
|
||||||
|
Dim cmd As DBCommand
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "insert_coordsNuevas_INTMEX"
|
||||||
|
cmd.Parameters = Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, Subs.traeAlmacen, Subs.traeRuta, la_cuenta.text)
|
||||||
|
' cmd.Parameters = Array As Object("1", "1", "5", "6", "CLN13478")
|
||||||
|
Log($"${Subs.traeAlmacen}, ${Subs.traeRuta},${la_cuenta.text},${B4XPages.MainPage.lat_gps},${B4XPages.MainPage.lon_gps}"$)
|
||||||
|
reqManager.ExecuteCommand(cmd , "insCoordsNuevas")
|
||||||
|
ToastMessageShow("Coordenadas actualizadas", False)
|
||||||
|
B4XPage_Appear
|
||||||
|
Else
|
||||||
|
ToastMessageShow("Geocerca activada", False)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
@@ -55,6 +55,7 @@ End Sub
|
|||||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||||
|
|
||||||
Sub B4XPage_Appear
|
Sub B4XPage_Appear
|
||||||
|
ListView1.Height = Root.Height * 0.8
|
||||||
If Not(Starter.gps.GPSEnabled) Then
|
If Not(Starter.gps.GPSEnabled) Then
|
||||||
ToastMessageShow("Es necesario tener el GPS encendido", True)
|
ToastMessageShow("Es necesario tener el GPS encendido", True)
|
||||||
StartActivity(Starter.gps.LocationSettingsIntent)
|
StartActivity(Starter.gps.LocationSettingsIntent)
|
||||||
@@ -65,8 +66,9 @@ Sub B4XPage_Appear
|
|||||||
C.Position=0
|
C.Position=0
|
||||||
Existe = C.GetString("EXISTE")
|
Existe = C.GetString("EXISTE")
|
||||||
C.Close
|
C.Close
|
||||||
c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc")
|
c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc")
|
||||||
ListView1.Clear
|
ListView1.Clear
|
||||||
|
ListView1.TwoLinesLayout.ItemHeight = 70dip
|
||||||
If c.RowCount>0 Then
|
If c.RowCount>0 Then
|
||||||
For i=0 To c.RowCount -1
|
For i=0 To c.RowCount -1
|
||||||
c.Position=i
|
c.Position=i
|
||||||
@@ -78,7 +80,7 @@ Sub B4XPage_Appear
|
|||||||
label2 = ListView1.TwoLinesLayout.SecondLabel
|
label2 = ListView1.TwoLinesLayout.SecondLabel
|
||||||
label2.TextSize = 10
|
label2.TextSize = 10
|
||||||
label2.TextColor = Colors.Blue
|
label2.TextColor = Colors.Blue
|
||||||
ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT"))
|
ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT") & CRLF & "Usuario: " & c.GetString("HVD_USUARIO"))
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
If Existe <> 0 Then
|
If Existe <> 0 Then
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
' L_CANT.Text = c.GetString("PC_NOART")
|
' L_CANT.Text = c.GetString("PC_NOART")
|
||||||
' L_TOTAL.Text = c.GetString("PC_MONTO")
|
' L_TOTAL.Text = c.GetString("PC_MONTO")
|
||||||
' End If
|
' End If
|
||||||
|
p_nota.Height = Root.Height : p_nota.Width = Root.Width
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||||
|
|||||||
@@ -315,6 +315,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
p_muestraPendientes.Left = Root.Width - p_muestraPendientes.Width - 5dip
|
p_muestraPendientes.Left = Root.Width - p_muestraPendientes.Width - 5dip
|
||||||
' p_conexion.Top = 1 : p_conexion.left = Root.width - p_conexion.width
|
' p_conexion.Top = 1 : p_conexion.left = Root.width - p_conexion.width
|
||||||
l_conexion.Top = 0 : l_conexion.left = Root.width - l_conexion.width -2
|
l_conexion.Top = 0 : l_conexion.left = Root.width - l_conexion.width -2
|
||||||
|
p_prod.Left = 0 : p_prod.Top = 0
|
||||||
|
p_mandaInfo.Top = 0 : p_mandaInfo.left = 0
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub chkIfTableExists(db As SQL, table As String) As Boolean 'ignore
|
Sub chkIfTableExists(db As SQL, table As String) As Boolean 'ignore
|
||||||
@@ -996,8 +998,9 @@ Sub cargar_Click
|
|||||||
reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos")
|
reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_hist_datos_INTMEX_2"
|
cmd.Name = "select_hist_datos_INTMEX_3"
|
||||||
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
|
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
|
||||||
|
Log($"===> ${e_ruta.text}, ${ALMACEN}"$)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
@@ -1054,7 +1057,7 @@ Sub cargar_Click
|
|||||||
reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos")
|
reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_hist_datos_INTMEX"
|
cmd.Name = "select_hist_datos_INTMEX_3"
|
||||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
||||||
|
|
||||||
@@ -1149,7 +1152,6 @@ Sub JobDone(Job As HttpJob)
|
|||||||
LogColor("###### JobError: " & Job.Tag & CRLF & Job.ErrorMessage, Colors.red)
|
LogColor("###### JobError: " & Job.Tag & CRLF & Job.ErrorMessage, Colors.red)
|
||||||
LogColor("############################################", Colors.red)
|
LogColor("############################################", Colors.red)
|
||||||
Else 'If Job Success then ...
|
Else 'If Job Success then ...
|
||||||
Log(3)
|
|
||||||
LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.RGB(0,160,0)) 'Mod por CHV - 211027
|
LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.RGB(0,160,0)) 'Mod por CHV - 211027
|
||||||
'Verificamos que el usuario guardado en BD sea VALIDO.
|
'Verificamos que el usuario guardado en BD sea VALIDO.
|
||||||
If Job.JobName = "DBRequest" Then
|
If Job.JobName = "DBRequest" Then
|
||||||
@@ -1204,7 +1206,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
If n = "OKActivo" Then
|
If n = "OKActivo" Then
|
||||||
Dim cmd As DBCommand
|
Dim cmd As DBCommand
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_ruta_INTMEX_7"
|
cmd.Name = "select_ruta_INTMEX_8"
|
||||||
cmd.Parameters = Array As Object(ALMACEN,e_ruta.text)
|
cmd.Parameters = Array As Object(ALMACEN,e_ruta.text)
|
||||||
Log($"${ALMACEN},${e_ruta.text},${imei}"$)
|
Log($"${ALMACEN},${e_ruta.text},${imei}"$)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "ruta")
|
reqManager.ExecuteQuery(cmd , 0, "ruta")
|
||||||
@@ -1463,6 +1465,26 @@ Sub JobDone(Job As HttpJob)
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' If Job.JobName = "DBRequest" Then
|
||||||
|
' Dim RESULT As DBResult = reqManager.HandleJob(Job)
|
||||||
|
' If RESULT.Tag.As(String).Contains("pedido_completo") Then 'query tag
|
||||||
|
' Subs.logJobDoneResultados(RESULT)
|
||||||
|
' For Each records() As Object In resultado.Rows
|
||||||
|
' If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then
|
||||||
|
' Private pars() As String = Regex.Split("_", RESULT.tag)
|
||||||
|
' B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1, PE_GUARDADO = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
||||||
|
' Log($"update PEDIDO set PE_ENVIO_OK = 1, PE_GUARDADO = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
||||||
|
' B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1, PC_GUARDADO = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
||||||
|
' Log($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1, PC_GUARDADO = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
||||||
|
'
|
||||||
|
' ($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(3)}'"$)
|
||||||
|
'
|
||||||
|
' End If
|
||||||
|
' Next
|
||||||
|
'' validador.iniciaValidacion
|
||||||
|
' End If
|
||||||
|
' End If
|
||||||
|
|
||||||
If Job.JobName = "DBRequest" Then
|
If Job.JobName = "DBRequest" Then
|
||||||
Dim RESULT As DBResult = reqManager.HandleJob(Job)
|
Dim RESULT As DBResult = reqManager.HandleJob(Job)
|
||||||
If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag
|
If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag
|
||||||
@@ -1814,7 +1836,9 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE"))
|
Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE"))
|
||||||
Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT"))
|
Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT"))
|
||||||
Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT"))
|
Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT"))
|
||||||
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT))
|
Dim HVD_USUARIO As String = records(RESULT.Columns.Get("USUARIO"))
|
||||||
|
Log(HVD_USUARIO)
|
||||||
|
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO) VALUES (?,?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_USUARIO))
|
||||||
Next
|
Next
|
||||||
Listo3 =1
|
Listo3 =1
|
||||||
If PB1.Progress = 0 Then
|
If PB1.Progress = 0 Then
|
||||||
@@ -2140,7 +2164,7 @@ Sub connecta_Click
|
|||||||
Log(usrT)
|
Log(usrT)
|
||||||
Log(passT)
|
Log(passT)
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_usuario_INTMEX_10"
|
cmd.Name = "select_usuario_INTMEX_11"
|
||||||
cmd.Parameters = Array As Object(usrT, passT)
|
cmd.Parameters = Array As Object(usrT, passT)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "usuarioA")
|
reqManager.ExecuteQuery(cmd , 0, "usuarioA")
|
||||||
End If
|
End If
|
||||||
@@ -3000,3 +3024,126 @@ Private Sub B_PROM_Click
|
|||||||
End If
|
End If
|
||||||
c.Close
|
c.Close
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Sub l_conexion_LongClick
|
||||||
|
' enviaPedidoBatch_PRUEBA("todos")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' 1. Recopila encabezados y detalles de pedidos locales (todos o solo los pendientes).
|
||||||
|
' 2. Genera un ID único (Arch) para vincular exactamente cada venta con sus productos.
|
||||||
|
' 3. Empaqueta todo en una lista de comandos (Batch) para enviarlo al servidor en una sola transacción.
|
||||||
|
Sub enviaPedidoBatch_PRUEBA(filtro As String)
|
||||||
|
' Creamos una lista llamada BatchCommands. Aquí vamos a guardar todas las instrucciones
|
||||||
|
' de base de datos que queremos mandar al servidor de un solo golpe (en lote o "batch").
|
||||||
|
Dim BatchCommands As List
|
||||||
|
BatchCommands.Initialize
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
|
LogColor($"### enviaPedidoBatch(${filtro})"$, Colors.red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
|
|
||||||
|
DateTime.TimeFormat = "HHmmss"
|
||||||
|
Private elFolio As String = DateTime.Time(DateTime.Now)
|
||||||
|
|
||||||
|
' Preparamos una variable para filtrar la consulta a la base de datos.
|
||||||
|
' Si el filtro no dice "Todos", armamos la condición para traer solo los pedidos que no se han enviado (PC_ENVIO_OK = 0).
|
||||||
|
Private condicion As String = ""
|
||||||
|
If filtro.ToUpperCase <> "TODOS" Then condicion = "where PC_ENVIO_OK = 0"
|
||||||
|
|
||||||
|
' Ejecutamos una consulta (Query) a la base de datos local de SQLite (skmt).
|
||||||
|
' Buscamos los ENCABEZADOS de los pedidos en la tabla PEDIDO_CLIENTE usando la condición que armamos arriba.
|
||||||
|
' El resultado se guarda en un Cursor llamado 'cx', que es como una tabla en memoria por la que podemos navegar.
|
||||||
|
Private cx As Cursor = Starter.skmt.ExecQuery($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||||
|
Log($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||||
|
Log("pedido_cliente: " & cx.RowCount)
|
||||||
|
|
||||||
|
' Reiniciamos la variable de condición para usarla ahora en el DETALLE de los pedidos.
|
||||||
|
Private condicion As String = ""
|
||||||
|
If filtro.ToUpperCase <> "TODOS" Then condicion = "where PE_ENVIO_OK = 0"
|
||||||
|
|
||||||
|
' ' Verificamos si en la tabla de envíos históricos (HIST_ENVIOS) hay registros del tipo "ABORDO" (Ventas en ruta directa).
|
||||||
|
' c = Starter.skmt.ExecQuery2("SELECT COUNT(*) as CANTIDAD FROM HIST_ENVIOS WHERE HE_TIPO = ?",Array As String("ABORDO") )
|
||||||
|
' c.Position = 0
|
||||||
|
'
|
||||||
|
' ' Si encontramos que sí hay ventas a bordo...
|
||||||
|
' If c.GetString("CANTIDAD") > 0 Then
|
||||||
|
' Log($"pe_cedis_0"$)
|
||||||
|
' ' Actualizamos la tabla PEDIDO para que los artículos del cliente "0" (que suele ser el inventario a bordo)
|
||||||
|
' ' y que no tengan un número de folio, se marquen con el almacén/cedis "RECARGA".
|
||||||
|
' Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
||||||
|
' End If
|
||||||
|
|
||||||
|
' Hacemos una actualización rápida a los registros de PEDIDO que no tengan folio (folio 0 o 1).
|
||||||
|
' Les asignamos temporalmente el 'rowid' (el número de fila interno de SQLite) como folio para identificarlos.
|
||||||
|
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
||||||
|
|
||||||
|
' Revisamos si nuestro cursor 'cx' (los encabezados de pedido) trajo algún resultado.
|
||||||
|
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
|
||||||
|
|
||||||
|
' Iniciamos un bucle (For) para recorrer cada uno de los encabezados de pedido encontrados.
|
||||||
|
For j = 0 To cx.RowCount - 1
|
||||||
|
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
|
||||||
|
' Movemos el cursor 'cx' a la posición 'j' actual del bucle.
|
||||||
|
cx.Position = j
|
||||||
|
|
||||||
|
' Generamos un identificador único (Arch) concatenando el almacén, la ruta, el cliente y la fecha/hora actual.
|
||||||
|
' Esto sirve para agrupar en el servidor el encabezado con sus respectivos detalles.
|
||||||
|
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
|
||||||
|
|
||||||
|
' Preparamos un comando de base de datos (DBCommand) para mandar al servidor.
|
||||||
|
Dim cmdHeader As DBCommand
|
||||||
|
cmdHeader.Initialize
|
||||||
|
' Asignamos el nombre del procedimiento almacenado o query que está en el servidor (jRDC2).
|
||||||
|
cmdHeader.Name = "insert_pedidos_INTMEX_arch"
|
||||||
|
' Pasamos los parámetros leyendo los datos del cursor 'cx' (encabezado) y le pasamos el ID único 'Arch'.
|
||||||
|
cmdHeader.Parameters = Array As Object(cx.GetString("PC_CLIENTE"),cx.GetString("PC_FECHA"),cx.GetString("PC_USER"),cx.GetString("PC_NOART"),cx.GetString("PC_MONTO"),cx.GetString("PC_LON"),cx.GetString("PC_LAT"),ALMACEN,l_ruta.text,cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$, Arch)
|
||||||
|
Log($"${cx.GetString("PC_CLIENTE")},${cx.GetString("PC_FECHA")},${cx.GetString("PC_USER")},${cx.GetString("PC_NOART")},${cx.GetString("PC_MONTO")},${cx.GetString("PC_LON")},${cx.GetString("PC_LAT")},${ALMACEN},${l_ruta.text},${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_FACTURA")}, ${Application.VersionName}|${elFolio}, ${Arch}"$)
|
||||||
|
' cmd.Name = "insert_pedidos5_INTMEX"
|
||||||
|
' cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), ALMACEN, l_ruta.text, c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$)
|
||||||
|
|
||||||
|
' Añadimos este comando a nuestra lista del lote (Batch).
|
||||||
|
BatchCommands.Add(cmdHeader)
|
||||||
|
|
||||||
|
' Ahora hacemos una consulta para buscar el DETALLE de este pedido (los productos individuales).
|
||||||
|
' Filtramos por la condición (si se envió o no) y lo amarramos al cliente actual del bucle (PC_CLIENTE).
|
||||||
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO ${condicion} ${(IIf(condicion = "","where", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||||
|
Log($"SELECT (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO ${condicion} ${(IIf(condicion = "","where", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||||
|
Log("Productos sin enviar: " & cPed.RowCount)
|
||||||
|
' Si hay detalles para este encabezado...
|
||||||
|
If cPed.RowCount > 0 Then
|
||||||
|
|
||||||
|
' Iniciamos un bucle interno para recorrer cada producto de este pedido.
|
||||||
|
For i = 0 To cPed.RowCount - 1
|
||||||
|
Log("==== ENVIAMOS PRODS ====")
|
||||||
|
' Movemos el cursor de detalles a la posición actual.
|
||||||
|
cPed.Position = i
|
||||||
|
|
||||||
|
' Preparamos el comando para enviar este producto al servidor.
|
||||||
|
Dim cmdDetail As DBCommand
|
||||||
|
cmdDetail.Initialize
|
||||||
|
|
||||||
|
' Si es un vendedor normal, usa el comando estándar para insertar el detalle
|
||||||
|
' y le pasa la misma variable 'Arch' para que en el servidor sepa de qué encabezado es.
|
||||||
|
cmdDetail.Name = "insert_pedido_INTMEX_arch"
|
||||||
|
cmdDetail.Parameters = Array As Object(cPed.GetString("PE_CEDIS"),ALMACEN,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"), cPed.GetString("PCNoArts"), cPed.GetString("PCMonto"), cPed.GetString("PE_TICKET"), elFolio, Arch)
|
||||||
|
Log($"ProdsPedido ==> (${cPed.GetString("PE_CEDIS")}, ${ALMACEN}, ${cPed.GetString("PE_COSTO_TOT")}, ${cPed.GetString("PE_COSTOU")}, $cPed.GetString("PE_CANT")}, ${cPed.GetString("PE_PRONOMBRE")}, ${cPed.GetString("PE_PROID")}, ${cPed.GetString("PE_CLIENTE")}, ${cPed.GetString("PE_FECHA")}, ${cPed.GetString("PE_USUARIO")}, ${cPed.GetString("PE_RUTA")}, ${cPed.GetString("PE_COSTO_SIN")}, ${cPed.GetString("PE_DESC")}, ${cPed.GetString("PE_FOLIO")}, ${cPed.GetString("PCNoArts")}, ${cPed.GetString("PCMonto")}, ${cPed.GetString("PE_TICKET")}, ${elFolio}, ${Arch}"$)
|
||||||
|
|
||||||
|
' cmd.Name = "insert_pedido5_INTMEX" 'CON TOTALES INCLUIDOS
|
||||||
|
' cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO"), c.GetString("PCNoArts"), c.GetString("PCMonto"), c.GetString("PE_TICKET"), elFolio)
|
||||||
|
|
||||||
|
' Añadimos la instrucción del producto al lote de envío.
|
||||||
|
BatchCommands.Add(cmdDetail)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
' Al terminar de empaquetar, enviamos toda la lista de instrucciones (BatchCommands) al servidor de un solo golpe.
|
||||||
|
' Se le asigna un nombre de etiqueta (Tag) para saber qué responderá el JobDone ("pedido_completo_" + id de cliente).
|
||||||
|
' (Ojo visual para el programador: Esta línea está dentro del 'If' general, pero también después de armar los batches en el bucle 'For'. Al procesar el último item del bucle cx, tomará el ID del último cliente para el Tag).
|
||||||
|
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Por buena práctica y para evitar fugas de memoria (memory leaks),
|
||||||
|
' cerramos siempre los cursores que abrimos hacia la base de datos local.
|
||||||
|
c.Close
|
||||||
|
cx.Close
|
||||||
|
End Sub
|
||||||
|
|||||||
@@ -820,7 +820,7 @@ Sub b_terminar1_Click
|
|||||||
|
|
||||||
' ListView1.AddSingleLine(cs.Color(textColor).Size(12).append(c.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c.GetString("PE_CANT")).Append(" SubTotal $"& c.GetString("PE_COSTO_TOT")).Append(" " & c.GetString("PE_FOLIO")& " " &c.GetString("PE_CEDIS")).PopAll)
|
' ListView1.AddSingleLine(cs.Color(textColor).Size(12).append(c.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c.GetString("PE_CANT")).Append(" SubTotal $"& c.GetString("PE_COSTO_TOT")).Append(" " & c.GetString("PE_FOLIO")& " " &c.GetString("PE_CEDIS")).PopAll)
|
||||||
lv_prodsPedido.AddSingleLine(cs.Color(textColor).Size(12).append(c_prods.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c_prods.GetString("PE_CANT")).Append(" SubTotal $"& c_prods.GetString("PE_COSTO_TOT")).Append(" " & c_prods.GetString("PE_FOLIO")& " " &c_prods.GetString("PE_CEDIS")).PopAll)
|
lv_prodsPedido.AddSingleLine(cs.Color(textColor).Size(12).append(c_prods.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c_prods.GetString("PE_CANT")).Append(" SubTotal $"& c_prods.GetString("PE_COSTO_TOT")).Append(" " & c_prods.GetString("PE_FOLIO")& " " &c_prods.GetString("PE_CEDIS")).PopAll)
|
||||||
Log(c_prods.GetString("PE_PRONOMBRE"))
|
' Log(c_prods.GetString("PE_PRONOMBRE"))
|
||||||
vamoaver.Add(c_prods.GetString("PE_FOLIO"))
|
vamoaver.Add(c_prods.GetString("PE_FOLIO"))
|
||||||
folio = c_prods.GetString("PE_FOLIO")
|
folio = c_prods.GetString("PE_FOLIO")
|
||||||
Next
|
Next
|
||||||
@@ -1115,7 +1115,7 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
|||||||
b_prodMenos.Enabled = False
|
b_prodMenos.Enabled = False
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
' Log(clv_prods_ll.GetValue(i))
|
' Log("|"&clv_prods_ll.GetValue(i)&"|")
|
||||||
Private precio As String=NumberFormat2(clv_prods_ll.GetValue(i).As(Map).Get("precio").As(Double),1,2,2,False)
|
Private precio As String=NumberFormat2(clv_prods_ll.GetValue(i).As(Map).Get("precio").As(Double),1,2,2,False)
|
||||||
If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant")
|
If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant")
|
||||||
l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Append("Existencias: " & clv_prods_ll.GetValue(i).As(Map).Get("almacen")).Color(0xFF017F01).Append($" $${precio}"$).Popall
|
l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Append("Existencias: " & clv_prods_ll.GetValue(i).As(Map).Get("almacen")).Color(0xFF017F01).Append($" $${precio}"$).Popall
|
||||||
@@ -1133,8 +1133,6 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
|||||||
Next
|
Next
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Sub Busca_TextChanged (Old As String, New As String)
|
Sub Busca_TextChanged (Old As String, New As String)
|
||||||
' Private inicioContador As String = DateTime.Now
|
' Private inicioContador As String = DateTime.Now
|
||||||
|
|
||||||
@@ -1269,7 +1267,12 @@ Sub LlenaProdsLL(p As ResultSet)
|
|||||||
If tipoRuta = "MAYOREO" Then
|
If tipoRuta = "MAYOREO" Then
|
||||||
LogColor("####### RUTA MAYOREO ###########", Colors.red)
|
LogColor("####### RUTA MAYOREO ###########", Colors.red)
|
||||||
' Log($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
' Log($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
||||||
Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"
|
||||||
|
select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla}
|
||||||
|
where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS'
|
||||||
|
union all
|
||||||
|
select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO10 as CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla}
|
||||||
|
where CAT_GP_PRECIO10 > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
||||||
Else
|
Else
|
||||||
LogColor("####### RUTA TRADICIONAL ###########", Colors.red)
|
LogColor("####### RUTA TRADICIONAL ###########", Colors.red)
|
||||||
Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ Public Sub Initialize As Object
|
|||||||
rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$)
|
rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$)
|
||||||
agregaColumna("pedidos", "pe_ticket", "INT")
|
agregaColumna("pedidos", "pe_ticket", "INT")
|
||||||
agregaColumna("pedidos", "pe_guardado", "TEXT")
|
agregaColumna("pedidos", "pe_guardado", "TEXT")
|
||||||
|
agregaColumna("pedidos", "pe_arch", "TEXT")
|
||||||
DateTime.DateFormat = "MM/dd/yyyy"
|
DateTime.DateFormat = "MM/dd/yyyy"
|
||||||
fechaHoy = DateTime.Date(DateTime.Now)
|
fechaHoy = DateTime.Date(DateTime.Now)
|
||||||
revisaSkmtAttached
|
revisaSkmtAttached
|
||||||
@@ -87,7 +88,7 @@ Sub respaldaPedido
|
|||||||
Log("copiando pedidos ...")
|
Log("copiando pedidos ...")
|
||||||
rkmt.BeginTransaction
|
rkmt.BeginTransaction
|
||||||
rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
||||||
rkmt.ExecNonQuery($"insert into pedidos (pe_folio, pe_desc, pe_costo_sin, pe_ruta, pe_cedis, pe_costo_tot, pe_costou, pe_cant, pe_pronombre, pe_proid, pe_cliente, pe_fecha, pe_usuario, pe_envio_ok, pe_ticket, pe_guardado) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
rkmt.ExecNonQuery($"insert into pedidos (pe_folio, pe_desc, pe_costo_sin, pe_ruta, pe_cedis, pe_costo_tot, pe_costou, pe_cant, pe_pronombre, pe_proid, pe_cliente, pe_fecha, pe_usuario, pe_envio_ok, pe_ticket, pe_guardado, pe_arch) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$)
|
||||||
rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
|
rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
|
||||||
rkmt.EndTransaction
|
rkmt.EndTransaction
|
||||||
' Log(((DateTime.Now - inicio)/1000) & " segs")
|
' Log(((DateTime.Now - inicio)/1000) & " segs")
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ End Sub
|
|||||||
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||||
|
|
||||||
Sub iniciaValidacion
|
Sub iniciaValidacion
|
||||||
Log("INICIAMOS VALIDACIONES DE PEDIDOS")
|
LogColor("##############################################", Colors.Red)
|
||||||
|
LogColor("##### INICIAMOS VALIDACIONES DE PEDIDOS", Colors.Red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
|
Sleep(2000)
|
||||||
mandaGuardados
|
mandaGuardados
|
||||||
Sleep(5000)
|
Sleep(5000)
|
||||||
revisaGuardados
|
revisaGuardados
|
||||||
@@ -74,8 +77,10 @@ Sub buscaSinEnviar As Int
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1.
|
'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1.
|
||||||
Sub mandaGuardados
|
Sub mandaGuardados0
|
||||||
Log(">>>>>>> MANDA GUARDADOS")
|
LogColor("##############################################", Colors.Red)
|
||||||
|
LogColor("#### MANDA GUARDADOS", Colors.red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
' PEDIDO_CLIENTE (Pendientes)
|
' PEDIDO_CLIENTE (Pendientes)
|
||||||
' Dim PCNoArts As String
|
' Dim PCNoArts As String
|
||||||
' Dim PCMonto As String
|
' Dim PCMonto As String
|
||||||
@@ -117,9 +122,112 @@ Sub mandaGuardados
|
|||||||
c.Close
|
c.Close
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
'Manda a web los pedidos GUARDADOS con ENVIO_OK = 0 y los pone en 1 (BATCH)
|
||||||
|
Sub mandaGuardados
|
||||||
|
' Creamos una lista llamada BatchCommands. Aquí vamos a guardar todas las instrucciones
|
||||||
|
' de base de datos que queremos mandar al servidor de un solo golpe (en lote o "batch").
|
||||||
|
Dim BatchCommands As List
|
||||||
|
BatchCommands.Initialize
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
|
LogColor($"### enviaPedidoBatch"$, Colors.red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
|
|
||||||
|
DateTime.TimeFormat = "HHmmss"
|
||||||
|
Private elFolio As String = DateTime.Time(DateTime.Now)
|
||||||
|
Private almacen As String = Subs.traeAlmacen
|
||||||
|
|
||||||
|
' Preparamos una variable para filtrar la consulta a la base de datos.
|
||||||
|
' Si el filtro no dice "Todos", armamos la condición para traer solo los pedidos que no se han enviado (PC_ENVIO_OK = 0).
|
||||||
|
' Private condicion As String = ""
|
||||||
|
' If filtro.ToUpperCase <> "TODOS" Then condicion = "where PC_ENVIO_OK = 0"
|
||||||
|
|
||||||
|
' Ejecutamos una consulta (Query) a la base de datos local de SQLite (skmt).
|
||||||
|
' Buscamos los ENCABEZADOS de los pedidos en la tabla PEDIDO_CLIENTE.
|
||||||
|
' Private cx As Cursor = Starter.skmt.ExecQuery($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||||
|
Private cx As Cursor = Starter.skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1")
|
||||||
|
' Log($"SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_ENVIO_OK FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||||
|
Log("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK < 2 and PC_GUARDADO = 1")
|
||||||
|
Log("pedido_cliente: " & cx.RowCount)
|
||||||
|
|
||||||
|
' Reiniciamos la variable de condición para usarla ahora en el DETALLE de los pedidos.
|
||||||
|
' Private condicion As String = ""
|
||||||
|
' If filtro.ToUpperCase <> "TODOS" Then condicion = "where PE_ENVIO_OK = 0"
|
||||||
|
|
||||||
|
' Revisamos si nuestro cursor 'cx' (los encabezados de pedido) trajo algún resultado.
|
||||||
|
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
|
||||||
|
|
||||||
|
' Iniciamos un bucle (For) para recorrer cada uno de los encabezados de pedido encontrados.
|
||||||
|
For j = 0 To cx.RowCount - 1
|
||||||
|
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
|
||||||
|
' Movemos el cursor 'cx' a la posición 'j' actual del bucle.
|
||||||
|
cx.Position = j
|
||||||
|
|
||||||
|
' Generamos un identificador único (Arch) concatenando el almacén, la ruta, el cliente y la fecha/hora actual.
|
||||||
|
' Esto sirve para agrupar en el servidor el encabezado con sus respectivos detalles.
|
||||||
|
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
|
||||||
|
|
||||||
|
' Preparamos un comando de base de datos (DBCommand) para mandar al servidor.
|
||||||
|
Dim cmdHeader As DBCommand
|
||||||
|
cmdHeader.Initialize
|
||||||
|
' Asignamos el nombre del procedimiento almacenado o query que está en el servidor (jRDC2).
|
||||||
|
cmdHeader.Name = "insert_pedidos_INTMEX_arch"
|
||||||
|
' Pasamos los parámetros leyendo los datos del cursor 'cx' (encabezado) y le pasamos el ID único 'Arch'.
|
||||||
|
cmdHeader.Parameters = Array As Object(cx.GetString("PC_CLIENTE"),cx.GetString("PC_FECHA"),cx.GetString("PC_USER"),cx.GetString("PC_NOART"),cx.GetString("PC_MONTO"),cx.GetString("PC_LON"),cx.GetString("PC_LAT"),almacen,B4XPages.MainPage.principal.l_ruta.text,cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$, Arch)
|
||||||
|
Log($"${cx.GetString("PC_CLIENTE")},${cx.GetString("PC_FECHA")},${cx.GetString("PC_USER")},${cx.GetString("PC_NOART")},${cx.GetString("PC_MONTO")},${cx.GetString("PC_LON")},${cx.GetString("PC_LAT")},${almacen},${B4XPages.MainPage.principal.l_ruta.text},${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_FACTURA")}, ${Application.VersionName}|${elFolio}, ${Arch}"$)
|
||||||
|
' cmd.Name = "insert_pedidos5_INTMEX"
|
||||||
|
' cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), ALMACEN, l_ruta.text, c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA"), $"${Application.VersionName}|${elFolio}"$)
|
||||||
|
|
||||||
|
' Añadimos este comando a nuestra lista del lote (Batch).
|
||||||
|
BatchCommands.Add(cmdHeader)
|
||||||
|
|
||||||
|
' Ahora hacemos una consulta para buscar el DETALLE de este pedido (los productos individuales).
|
||||||
|
' Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||||
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"Select (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where PE_ENVIO_OK < 2 And PE_GUARDADO = 1 and pe_cliente = '${cx.GetString("PC_CLIENTE")}'"$)
|
||||||
|
|
||||||
|
Log($"Select (Select PC_NOART from pedido_cliente where pe_cliente = pc_cliente) As PCNoArts, (Select PC_MONTO from pedido_cliente where pe_cliente = pc_cliente) As PCMonto, * FROM PEDIDO where PE_ENVIO_OK < 2 And PE_GUARDADO = 1 and pe_cliente = '${cx.GetString("PC_CLIENTE")}'"$)
|
||||||
|
Log("Productos sin enviar: " & cPed.RowCount)
|
||||||
|
' Si hay detalles para este encabezado...
|
||||||
|
If cPed.RowCount > 0 Then
|
||||||
|
|
||||||
|
' Iniciamos un bucle interno para recorrer cada producto de este pedido.
|
||||||
|
For i = 0 To cPed.RowCount - 1
|
||||||
|
Log("==== ENVIAMOS PRODS ====")
|
||||||
|
' Movemos el cursor de detalles a la posición actual.
|
||||||
|
cPed.Position = i
|
||||||
|
|
||||||
|
' Preparamos el comando para enviar este producto al servidor.
|
||||||
|
Dim cmdDetail As DBCommand
|
||||||
|
cmdDetail.Initialize
|
||||||
|
|
||||||
|
' Si es un vendedor normal, usa el comando estándar para insertar el detalle
|
||||||
|
' y le pasa la misma variable 'Arch' para que en el servidor sepa de qué encabezado es.
|
||||||
|
cmdDetail.Name = "insert_pedido_INTMEX_arch"
|
||||||
|
cmdDetail.Parameters = Array As Object(cPed.GetString("PE_CEDIS"),almacen,cPed.GetString("PE_COSTO_TOT"),cPed.GetString("PE_COSTOU"),cPed.GetString("PE_CANT"),cPed.GetString("PE_PRONOMBRE"),cPed.GetString("PE_PROID"),cPed.GetString("PE_CLIENTE"),cPed.GetString("PE_FECHA"),cPed.GetString("PE_USUARIO"),cPed.GetString("PE_RUTA"), cPed.GetString("PE_COSTO_SIN"),cPed.GetString("PE_DESC"),cPed.GetString("PE_FOLIO"), cPed.GetString("PCNoArts"), cPed.GetString("PCMonto"), cPed.GetString("PE_TICKET"), elFolio, Arch)
|
||||||
|
Log($"ProdsPedido ==> (${cPed.GetString("PE_CEDIS")}, ${almacen}, ${cPed.GetString("PE_COSTO_TOT")}, ${cPed.GetString("PE_COSTOU")}, $cPed.GetString("PE_CANT")}, ${cPed.GetString("PE_PRONOMBRE")}, ${cPed.GetString("PE_PROID")}, ${cPed.GetString("PE_CLIENTE")}, ${cPed.GetString("PE_FECHA")}, ${cPed.GetString("PE_USUARIO")}, ${cPed.GetString("PE_RUTA")}, ${cPed.GetString("PE_COSTO_SIN")}, ${cPed.GetString("PE_DESC")}, ${cPed.GetString("PE_FOLIO")}, ${cPed.GetString("PCNoArts")}, ${cPed.GetString("PCMonto")}, ${cPed.GetString("PE_TICKET")}, ${elFolio}, ${Arch}"$)
|
||||||
|
|
||||||
|
' Añadimos la instrucción del producto al lote de envío.
|
||||||
|
BatchCommands.Add(cmdDetail)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Al terminar de empaquetar, enviamos toda la lista de instrucciones (BatchCommands) al servidor de un solo golpe.
|
||||||
|
' Se le asigna un nombre de etiqueta (Tag) para saber qué responderá el JobDone ("pedido_completo_" + id de cliente).
|
||||||
|
' (Ojo visual para el programador: Esta línea está dentro del 'If' general, pero también después de armar los batches en el bucle 'For'. Al procesar el último item del bucle cx, tomará el ID del último cliente para el Tag).
|
||||||
|
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Por buena práctica y para evitar fugas de memoria (memory leaks),
|
||||||
|
' cerramos siempre los cursores que abrimos hacia la base de datos local.
|
||||||
|
' c.Close
|
||||||
|
cx.Close
|
||||||
|
End Sub
|
||||||
|
|
||||||
'Revisa que los pedidos con envio_ok < 2 esten completos en web y los pone en 2.
|
'Revisa que los pedidos con envio_ok < 2 esten completos en web y los pone en 2.
|
||||||
Sub revisaGuardados
|
Sub revisaGuardados
|
||||||
Log(">>>>>>> VALIDA GUARDADOS")
|
LogColor("##############################################", Colors.Red)
|
||||||
|
LogColor("##### VALIDA GUARDADOS", Colors.red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
'' Dim PCNoArts As String
|
'' Dim PCNoArts As String
|
||||||
'' Dim PCMonto As String
|
'' Dim PCMonto As String
|
||||||
Private almacen As String = Subs.traeAlmacen
|
Private almacen As String = Subs.traeAlmacen
|
||||||
@@ -180,7 +288,9 @@ End Sub
|
|||||||
'Revisa que coincidan las cantidades y montos totales de los pedidos en web y locales, y si coinciden, pone PC_ENVIO_OK en 3 (en JobDone).
|
'Revisa que coincidan las cantidades y montos totales de los pedidos en web y locales, y si coinciden, pone PC_ENVIO_OK en 3 (en JobDone).
|
||||||
'Si No coinciden, pone en CERO PC_ENVIO_OK y PE_ENVIO_OK y reinicia el proceso de validacion.
|
'Si No coinciden, pone en CERO PC_ENVIO_OK y PE_ENVIO_OK y reinicia el proceso de validacion.
|
||||||
Sub revisaCantsYMontosTotales
|
Sub revisaCantsYMontosTotales
|
||||||
Log(">>>>>>> VALIDA CANTIDADES Y MONTOS")
|
LogColor("##############################################", Colors.Red)
|
||||||
|
Logcolor("###### VALIDA CANTIDADES Y MONTOS", Colors.red)
|
||||||
|
LogColor("##############################################", Colors.Red)
|
||||||
Private almacen As String = Subs.traeAlmacen
|
Private almacen As String = Subs.traeAlmacen
|
||||||
Private laRuta As String = Subs.traeRuta
|
Private laRuta As String = Subs.traeRuta
|
||||||
c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 2 or 1") ' El uno del final es para que SIEMPRE revise las cantidades y montos, por si se borra la orden desde web, para que se envíe NUEVAMENTE.
|
c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 2 or 1") ' El uno del final es para que SIEMPRE revise las cantidades y montos, por si se borra la orden desde web, para que se envíe NUEVAMENTE.
|
||||||
@@ -230,6 +340,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Next
|
Next
|
||||||
' pedidoGuardando("Listo")
|
' pedidoGuardando("Listo")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' PEDIDOS GUARDADOS PRODS
|
' PEDIDOS GUARDADOS PRODS
|
||||||
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
||||||
If resultado.Tag.As(String).IndexOf("ins_mandaGuardados_prods_") > -1 Then
|
If resultado.Tag.As(String).IndexOf("ins_mandaGuardados_prods_") > -1 Then
|
||||||
@@ -248,6 +359,25 @@ Sub JobDone(Job As HttpJob)
|
|||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' PEDIDOS GUARDADOS BATCH
|
||||||
|
If Job.JobName = "DBRequest" Then
|
||||||
|
Dim RESULT As DBResult = reqManager.HandleJob(Job)
|
||||||
|
If RESULT.Tag.As(String).Contains("pedido_completo") Then 'query tag
|
||||||
|
Subs.logJobDoneResultados(RESULT)
|
||||||
|
For Each records() As Object In resultado.Rows
|
||||||
|
Log("AffectedRows: " & records(resultado.Columns.Get("AffectedRows")))
|
||||||
|
If records(resultado.Columns.Get("AffectedRows")).As(Int) > 0 Then
|
||||||
|
Private pars() As String = Regex.Split("_", RESULT.tag)
|
||||||
|
B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
||||||
|
Log($"update PEDIDO set PE_ENVIO_OK = 1, PE_GUARDADO = 1 where PE_CLIENTE = '${pars(2)}'"$)
|
||||||
|
B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1, PC_GUARDADO = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
||||||
|
Log($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(2)}'"$)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
' REVISA GUARDADOS PRODS
|
' REVISA GUARDADOS PRODS
|
||||||
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
Dim resultado As DBResult = reqManager.HandleJob(Job)
|
||||||
If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_prods_") > -1 Then
|
If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_prods_") > -1 Then
|
||||||
@@ -265,6 +395,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' REVISA GUARDADOS HEAD
|
' REVISA GUARDADOS HEAD
|
||||||
If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_head_") > -1 Then
|
If resultado.Tag.As(String).IndexOf("ins_revisaGuardados_head_") > -1 Then
|
||||||
Log("ins_revisaGuardados_head_")
|
Log("ins_revisaGuardados_head_")
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -164,7 +164,7 @@ Version=12.8
|
|||||||
#Region Project Attributes
|
#Region Project Attributes
|
||||||
#ApplicationLabel: Intmex
|
#ApplicationLabel: Intmex
|
||||||
#VersionCode: 1
|
#VersionCode: 1
|
||||||
#VersionName: 6.02.20 GPS
|
#VersionName: 6.03.16
|
||||||
'SupportedOrientations possible values: unspecified, landscape or portrait.
|
'SupportedOrientations possible values: unspecified, landscape or portrait.
|
||||||
#SupportedOrientations: portrait
|
#SupportedOrientations: portrait
|
||||||
#CanInstallToExternalStorage: False
|
#CanInstallToExternalStorage: False
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ ModuleClosedNodes1=
|
|||||||
ModuleClosedNodes10=
|
ModuleClosedNodes10=
|
||||||
ModuleClosedNodes11=3
|
ModuleClosedNodes11=3
|
||||||
ModuleClosedNodes12=
|
ModuleClosedNodes12=
|
||||||
ModuleClosedNodes13=
|
ModuleClosedNodes13=1,4,5
|
||||||
ModuleClosedNodes14=
|
ModuleClosedNodes14=
|
||||||
ModuleClosedNodes15=
|
ModuleClosedNodes15=
|
||||||
ModuleClosedNodes16=
|
ModuleClosedNodes16=
|
||||||
@@ -73,7 +73,7 @@ ModuleClosedNodes17=
|
|||||||
ModuleClosedNodes18=
|
ModuleClosedNodes18=
|
||||||
ModuleClosedNodes19=
|
ModuleClosedNodes19=
|
||||||
ModuleClosedNodes2=
|
ModuleClosedNodes2=
|
||||||
ModuleClosedNodes20=
|
ModuleClosedNodes20=6
|
||||||
ModuleClosedNodes21=
|
ModuleClosedNodes21=
|
||||||
ModuleClosedNodes22=
|
ModuleClosedNodes22=
|
||||||
ModuleClosedNodes23=
|
ModuleClosedNodes23=
|
||||||
@@ -91,6 +91,6 @@ ModuleClosedNodes6=
|
|||||||
ModuleClosedNodes7=
|
ModuleClosedNodes7=
|
||||||
ModuleClosedNodes8=
|
ModuleClosedNodes8=
|
||||||
ModuleClosedNodes9=
|
ModuleClosedNodes9=
|
||||||
NavigationStack=C_Cliente,Guardar_Click,619,6,C_Cliente,mandaPendientes,1277,0,Diseñador Visual,cliente.bal,-100,3,C_Cliente,Class_Globals,137,0,C_Cliente,B4XPage_Appear,238,0,C_Cliente,B4XPage_Created,209,6,C_Principal,Class_Globals,0,0,B4XMainPage,b_guardar_Click,789,0,Main,Activity_Create,29,0,B4XMainPage,Class_Globals,24,0
|
NavigationStack=C_Validador,mandaGuardados,184,5,B4XMainPage,b_enviarbd_Click,776,0,B4XMainPage,b_importarBD_Click,782,0,C_Principal,getTableColumnList,365,0,Main,Globals,25,0,Main,Process_Globals,21,0,Main,Activity_Create,33,0,Main,Activity_ActionBarHomeClick,39,0,C_Principal,Subir_Click,746,0,C_Principal,connecta_Click,2166,0,C_Principal,JobDone,1209,0
|
||||||
SelectedBuild=0
|
SelectedBuild=0
|
||||||
VisibleModules=28,2,13,20,14,29,15,4,11,21
|
VisibleModules=28,2,13,14,29,15,4,20,21
|
||||||
|
|||||||
11
B4A/Subs.bas
11
B4A/Subs.bas
@@ -1557,3 +1557,14 @@ Sub traeGeocerca As Boolean
|
|||||||
End If
|
End If
|
||||||
Return usarGeo
|
Return usarGeo
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
'Revisa si la geocerca debe de estar activa
|
||||||
|
Sub geocercaActiva As Boolean
|
||||||
|
Private resultado As Boolean = True
|
||||||
|
Private c As Cursor = Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'GEOCERCA'")
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
If c.GetString("CAT_VA_VALOR") = 0 Then resultado = False
|
||||||
|
End If
|
||||||
|
Return resultado
|
||||||
|
End Sub
|
||||||
|
|||||||
@@ -1,28 +1,127 @@
|
|||||||
# SCRIPT: _juntaBas.ps1 - Versión Saneada y Optimizada para LLM
|
# SCRIPT: _juntaBas_Master_FinalIA.ps1
|
||||||
$OutputFile="_CODIGO_COMPLETO_PARA_LLM.txt"
|
# FIX: Corregida sintaxis de comillas y concatenación de tags XML.
|
||||||
|
# OBJETIVO: Fuente de verdad para IA con navegación ultra estructurada.
|
||||||
|
|
||||||
# Eliminar el archivo anterior si existe (IMPORTANTE)
|
$ErrorActionPreference = 'SilentlyContinue'
|
||||||
Remove-Item -Path $OutputFile -ErrorAction SilentlyContinue
|
$Dir = Get-Location
|
||||||
|
$LT = [char]60; $GT = [char]62; $SL = [char]47
|
||||||
|
$NL = [Environment]::NewLine
|
||||||
|
|
||||||
Write-Host "Iniciando fusion para LLM..."
|
Write-Output '--- GENERANDO MASTER IA DEFINITIVO (FIX ESTRUCTURAL) ---'
|
||||||
|
|
||||||
# Itera sobre los archivos .bas, .b4a, .b4j
|
# 1. PARSEO DEL PROYECTO .B4A
|
||||||
Get-ChildItem -Path ".\*" -Include @("*.bas", "*.b4a", "*.b4j") | ForEach-Object {
|
$b4a = Get-ChildItem -Path ".\*" -Include "*.b4a" -Recurse | Select-Object -First 1
|
||||||
$currentFile = $_.Name
|
$Name = 'App'; $Ver = '0.0'; $ModulosValidos = @(); $Librerias = @()
|
||||||
Write-Host "Procesando: $currentFile"
|
|
||||||
|
|
||||||
# --- ENCABEZADO ESTRUCTURADO Y COMENTADO EN B4X (Agregado al archivo) ---
|
if ($b4a) {
|
||||||
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
$lines = [System.IO.File]::ReadAllLines($b4a.FullName)
|
||||||
Add-Content -Path $OutputFile -Value $"// ARCHIVO_INICIO: ${currentFile}"
|
foreach ($L in $lines) {
|
||||||
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
if ($L -match '#ApplicationLabel:\s*(.*)') { $Name = $Matches[1].Trim() }
|
||||||
|
if ($L -match '#VersionName:\s*(.*)') { $Ver = $Matches[1].Trim() }
|
||||||
# Vuelca el contenido del archivo
|
if ($L -match '^Module\d+=(.*)') {
|
||||||
Get-Content -Encoding UTF8 -Path $_.FullName -Raw | Add-Content -Path $OutputFile
|
$m = [System.IO.Path]::GetFileName($Matches[1].Trim())
|
||||||
|
if (-not $m.EndsWith(".bas") -and $m -ne "Main") { $m += ".bas" }
|
||||||
# --- DELIMITADOR DE FIN DE ARCHIVO (Agregado al archivo) ---
|
$ModulosValidos += $m
|
||||||
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
}
|
||||||
Add-Content -Path $OutputFile -Value $"// ARCHIVO_FIN: ${currentFile}"
|
if ($L -match '^Library\d+=(.*)') { $Librerias += $Matches[1].Trim() }
|
||||||
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "`nProceso terminado. Se ha creado el archivo: $OutputFile"
|
$OutName = "_" + $Name + "_" + $Ver + "_IA.md"
|
||||||
|
$OutFile = Join-Path $Dir $OutName
|
||||||
|
|
||||||
|
# 2. HEADER CON TUS INSTRUCCIONES CRÍTICAS
|
||||||
|
$CurrentDate = Get-Date -Format 'yyyy-MM-dd HH:mm'
|
||||||
|
$Header = @"
|
||||||
|
# PROYECTO: $Name
|
||||||
|
- Version: $Ver
|
||||||
|
- Fecha: $CurrentDate
|
||||||
|
- Librerias Activas: $($Librerias -join ", ")
|
||||||
|
|
||||||
|
## INSTRUCCIONES CRITICAS (B4A / BASIC4ANDROID)
|
||||||
|
0. **Integridad del Contexto:** Antes de procesar peticiones, cuenta si el numero de modulos listados en el indice coincide con los detallados en el cuerpo.
|
||||||
|
1. **Source of Truth (Codigo):** Este archivo contiene el codigo fuente ACTUAL del proyecto.
|
||||||
|
2. **Source of Truth (Librerias):** Basa tus sugerencias en la lista de 'Librerias Activas'.
|
||||||
|
3. **Anti-Alucinacion:** Antes de sugerir, VERIFICA la 'Interfaz Pública' o el código fuente del módulo.
|
||||||
|
4. **Existencia Estricta:** Si una variable/Sub no está en el texto, NO EXISTE.
|
||||||
|
5. **Formato:** Usa bloques 'vb'.
|
||||||
|
6. **Navegacion Estructural:** Usa los tags <module>, <interface> y <method> para localizar codigo.
|
||||||
|
7. **Inferencia de Datos:** Deduce la BD solo de los strings SQL presentes.
|
||||||
|
"@
|
||||||
|
|
||||||
|
Set-Content -Path $OutFile -Value $Header -Encoding UTF8
|
||||||
|
|
||||||
|
# 3. LISTAR ARCHIVOS
|
||||||
|
$files = Get-ChildItem -Path $Dir -Include *.bas,*.b4a -Recurse | Where-Object {
|
||||||
|
$_.FullName -notmatch 'Objects' -and ($_.Extension -eq '.b4a' -or $ModulosValidos -contains $_.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
# 4. INDICE DE MODULOS
|
||||||
|
Add-Content $OutFile ($NL + "## INDICE DE MODULOS" + $NL) -Encoding UTF8
|
||||||
|
foreach ($f in $files) {
|
||||||
|
$Ref = $f.Name.Replace('.', '').Replace(' ', '-').ToLower()
|
||||||
|
Add-Content $OutFile ("- [" + $f.Name + "](#modulo-" + $Ref + ")") -Encoding UTF8
|
||||||
|
}
|
||||||
|
|
||||||
|
# 5. CODIGO FUENTE ESTRUCTURADO
|
||||||
|
Add-Content $OutFile ($NL + '## CODIGO FUENTE DETALLADO' + $NL) -Encoding UTF8
|
||||||
|
|
||||||
|
foreach ($f in $files) {
|
||||||
|
Write-Host " -> $($f.Name)... " -NoNewline
|
||||||
|
$txt = [System.IO.File]::ReadAllLines($f.FullName)
|
||||||
|
|
||||||
|
# Pre-escaneo para <interface>
|
||||||
|
$Methods = @()
|
||||||
|
foreach ($line in $txt) {
|
||||||
|
if ($line.Trim() -match '^(?:Public\s+|Private\s+)?Sub\s+([\w\d_]+)') {
|
||||||
|
$Methods += $Matches[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$Ref = $f.Name.Replace('.', '').Replace(' ', '-').ToLower()
|
||||||
|
Add-Content $OutFile "$NL<module name='$($f.Name)' id='modulo-$Ref'>" -Encoding UTF8
|
||||||
|
|
||||||
|
Add-Content $OutFile " <interface>" -Encoding UTF8
|
||||||
|
foreach($m in $Methods) {
|
||||||
|
Add-Content $OutFile " <method_ref name='$m' />" -Encoding UTF8
|
||||||
|
}
|
||||||
|
Add-Content $OutFile " </interface>$NL" -Encoding UTF8
|
||||||
|
|
||||||
|
Add-Content $OutFile "```vb" -Encoding UTF8
|
||||||
|
|
||||||
|
$skip = ($f.Extension -eq '.b4a')
|
||||||
|
|
||||||
|
foreach ($l in $txt) {
|
||||||
|
$trim = $l.Trim()
|
||||||
|
|
||||||
|
if ($skip) {
|
||||||
|
if ($trim.StartsWith("#") -and -not $trim.StartsWith("#Region")) { Add-Content $OutFile $l -Encoding UTF8 }
|
||||||
|
if ($l.Contains("@EndOfDesignText@")) { $skip = $false }
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# Inicio de Método
|
||||||
|
if ($trim -match '^(?:Public\s+|Private\s+)?Sub\s+([\w\d_]+)') {
|
||||||
|
Add-Content $OutFile "<method name='$($Matches[1])'>" -Encoding UTF8
|
||||||
|
}
|
||||||
|
|
||||||
|
# Limpieza de comentarios y escritura de línea
|
||||||
|
if ($trim.StartsWith("'")) {
|
||||||
|
if (-not ($trim.StartsWith("'#") -or ($trim -match 'TODO:') -or ($trim -match 'FIX:'))) { continue }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not [string]::IsNullOrWhiteSpace($trim)) {
|
||||||
|
Add-Content $OutFile $l -Encoding UTF8
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fin de Método
|
||||||
|
if ($trim -eq "End Sub") {
|
||||||
|
Add-Content $OutFile "</method>" -Encoding UTF8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Add-Content $OutFile "```$NL</module>" -Encoding UTF8
|
||||||
|
Write-Host "OK" -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output ("--- FINALIZADO: " + $OutName + " ---")
|
||||||
Reference in New Issue
Block a user