mirror of
https://github.com/KeymonSoft/Kelloggs_v4.git
synced 2026-04-20 03:29:14 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10a2c84997 | |||
| af1f4b9ead | |||
| af9ea44b95 | |||
| 426e8b0c87 | |||
| 5124f6c5a1 | |||
| 4e69087ff2 | |||
| 4a5fc4dd05 | |||
| 64a80661e8 | |||
| 96838bf61b | |||
| 7e19a197a1 | |||
| 64e9e6b389 | |||
| 63df3fbf39 | |||
| e72a1381d5 | |||
| 367ff75966 | |||
| 2ec2e9acb3 | |||
| 246437fc98 | |||
| 67e0b906dc | |||
| d7e6643f15 | |||
| cc5261c67f | |||
| cc36c6c1da | |||
| 441fe0c5fb | |||
| 136df88646 | |||
| f0116e375d | |||
| 409c224820 | |||
| 72ce7c8806 | |||
| 7a88acaf4c | |||
| 749cf6e7fe |
@@ -18,8 +18,11 @@ Version=9.85
|
|||||||
'###################### PUSH TORTOISE GIT #########################################################
|
'###################### PUSH TORTOISE GIT #########################################################
|
||||||
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2
|
'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2
|
||||||
'###########################################################################################################
|
'###########################################################################################################
|
||||||
|
'###################### PUSH TORTOISE GIT CON TAG ##################################################
|
||||||
|
'Ctrl + clic para Git: ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=-ExecutionPolicy&Args=Bypass&Args=-File&Args=..\_git_tag.ps1&Args=%22%PROJECT%%22&Args=%22%PROJECT_NAME%%22
|
||||||
|
'###########################################################################################################
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\
|
'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\
|
||||||
|
|
||||||
Sub Class_Globals
|
Sub Class_Globals
|
||||||
@@ -121,6 +124,7 @@ Sub Class_Globals
|
|||||||
Private Label4 As Label
|
Private Label4 As Label
|
||||||
Private clicked As Int = 0
|
Private clicked As Int = 0
|
||||||
Dim linker As C_deviceLinker
|
Dim linker As C_deviceLinker
|
||||||
|
Dim aud As C_Auditoria
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Sub Initialize
|
Public Sub Initialize
|
||||||
@@ -167,6 +171,12 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VERSIONES (VERSION TEXT, FECHA TEXT)")
|
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VERSIONES (VERSION TEXT, FECHA TEXT)")
|
||||||
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_INVENTARIO(CI_IDPROD TEXT, CI_INVENTARIO TEXT)")
|
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_INVENTARIO(CI_IDPROD TEXT, CI_INVENTARIO TEXT)")
|
||||||
''' FIN DOE
|
''' FIN DOE
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_NOTIFICACIONES(CN_CODIGO TEXT, CN_ID TEXT,CN_CLIENTE TEXT, CN_NOTIFICACION TEXT)")
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE TABLE If Not EXISTS HIST_NOTIFICACIONES (HN_CODIGO TEXT, HN_ID TEXT, HN_FECHA TEXT)")
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE TABLE If Not EXISTS CAT_GUNAPROD5 (CAT_GP_ID TEXT, CAT_GP_ALMACEN TEXT)")
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_proid ON PEDIDO(PE_PROID)")
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_cliente ON PEDIDO(PE_CLIENTE)")
|
||||||
|
Starter.skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_cat5_id ON CAT_GUNAPROD5(CAT_GP_ID)")
|
||||||
kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER")
|
kh.agregaColumna(Starter.skmt, "kmt_info", "IMPRESION", "INTEGER")
|
||||||
kh.agregaColumna(Starter.skmt, "kmt_info", "CREDITO", "INTEGER")
|
kh.agregaColumna(Starter.skmt, "kmt_info", "CREDITO", "INTEGER")
|
||||||
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ENVIADO", "INTEGER DEFAULT 0")
|
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ENVIADO", "INTEGER DEFAULT 0")
|
||||||
@@ -183,6 +193,10 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD2", "CAT_GP_PROMOCION", "TEXT")
|
kh.agregaColumna(Starter.skmt, "CAT_GUNAPROD2", "CAT_GP_PROMOCION", "TEXT")
|
||||||
kh.agregaColumna(Starter.skmt, "TREND_SPENDING", "TIPO", "TEXT")
|
kh.agregaColumna(Starter.skmt, "TREND_SPENDING", "TIPO", "TEXT")
|
||||||
kh.agregaColumna(Starter.skmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
kh.agregaColumna(Starter.skmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
||||||
|
kh.agregaColumna(Starter.skmt, "PEDIDO", "PE_ARCH", "TEXT")
|
||||||
|
kh.agregaColumna(Starter.skmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
|
||||||
|
kh.agregaColumna(Starter.skmt, "PEDIDO3", "PE_ARCH", "TEXT")
|
||||||
|
aud.Initialize(Starter.skmt)
|
||||||
Root = Root1
|
Root = Root1
|
||||||
' Root.LoadLayout("MainPage")
|
' Root.LoadLayout("MainPage")
|
||||||
Root.LoadLayout("login")
|
Root.LoadLayout("login")
|
||||||
@@ -400,6 +414,7 @@ End Sub
|
|||||||
|
|
||||||
Sub B4XPage_Appear
|
Sub B4XPage_Appear
|
||||||
Log(">>>>>> APPEAR - INICIAMOS MAIN PAGE <<<<<<<<<")
|
Log(">>>>>> APPEAR - INICIAMOS MAIN PAGE <<<<<<<<<")
|
||||||
|
aud.guarda($"Entrada a Login"$)
|
||||||
linker.Initialize(Me, "Linker", True)
|
linker.Initialize(Me, "Linker", True)
|
||||||
clicked = 0
|
clicked = 0
|
||||||
If Not(MES1.IsInitialized) Then MES1.Initialize(Me, "MES1")
|
If Not(MES1.IsInitialized) Then MES1.Initialize(Me, "MES1")
|
||||||
@@ -1065,7 +1080,7 @@ Private Sub ImageView1_LongClick
|
|||||||
reqManagerX.Initialize(Me, "http://keymon.net:9010/SALMA")
|
reqManagerX.Initialize(Me, "http://keymon.net:9010/SALMA")
|
||||||
Private cmdX As DBCommand
|
Private cmdX As DBCommand
|
||||||
cmdX.Initialize
|
cmdX.Initialize
|
||||||
cmdX.Name = "traeConexion4"
|
cmdX.Name = "update_usuario_guna_nobajas"
|
||||||
cmdX.Parameters = Array As Object("CDAZA", 2, 3, 4)
|
cmdX.Parameters = Array As Object("CDAZA", 2, 3, 4)
|
||||||
reqManagerX.ExecuteQuery(cmdX, 0, "prueba")
|
reqManagerX.ExecuteQuery(cmdX, 0, "prueba")
|
||||||
|
|
||||||
|
|||||||
80
B4A/C_Auditoria.bas
Normal file
80
B4A/C_Auditoria.bas
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
B4A=true
|
||||||
|
Group=Default Group
|
||||||
|
ModulesStructureVersion=1
|
||||||
|
Type=Class
|
||||||
|
Version=12.8
|
||||||
|
@EndOfDesignText@
|
||||||
|
Sub Class_Globals
|
||||||
|
Private Root As B4XView 'ignore
|
||||||
|
Private xui As XUI 'ignore
|
||||||
|
Dim audb As SQL
|
||||||
|
Dim ruta As String = File.DirInternal
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'You can add more parameters here.
|
||||||
|
Public Sub Initialize(db As SQL) As Object
|
||||||
|
If Not(audb.IsInitialized) Then audb.Initialize(ruta,"kmt.db", True)
|
||||||
|
audb = db
|
||||||
|
audb.ExecNonQuery("CREATE TABLE IF NOT EXISTS auditoria(almacen text, ruta text, usuario text, cliente text, evento text, fecha text, lat text, lon text)")
|
||||||
|
Return Me
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'This event will be called once, before the page becomes visible.
|
||||||
|
Private Sub B4XPage_Created (Root1 As B4XView)
|
||||||
|
Root = Root1
|
||||||
|
'load the layout to Root
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
|
||||||
|
|
||||||
|
Sub guarda(evento As String)
|
||||||
|
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||||
|
audb.ExecNonQuery2("insert into auditoria (almacen, ruta, usuario, cliente, evento, fecha, lat, lon) values (?, ?, ?, ?, ?, ?, ?, ?)", Array As String(traeAlmacen, traeRuta, traeUsuarioDeBD, traeCliente, evento, DateTime.Date(DateTime.Now)))
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Regresa el almacen actual de la base de datos.
|
||||||
|
Sub traeAlmacen As String 'ignore
|
||||||
|
Private c As Cursor
|
||||||
|
Private a As String
|
||||||
|
c = audb.ExecQuery("select ID_ALMACEN from CAT_ALMACEN")
|
||||||
|
c.Position = 0
|
||||||
|
a = C.GetString("ID_ALMACEN")
|
||||||
|
c.Close
|
||||||
|
Return a
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Regresa la ruta actual de la base de datos.
|
||||||
|
Sub traeRuta As String 'ignore
|
||||||
|
Private c As Cursor
|
||||||
|
Private r As String
|
||||||
|
c = audb.ExecQuery("select CAT_CL_RUTA from kmt_info limit 1")
|
||||||
|
r = "0"
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position=0
|
||||||
|
r = c.GetString("CAT_CL_RUTA")
|
||||||
|
End If
|
||||||
|
c.Close
|
||||||
|
Return r
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Regresa el usuario de la tabla USUARIOA
|
||||||
|
Sub traeUsuarioDeBD As String 'ignore
|
||||||
|
Private c As Cursor
|
||||||
|
Private u As String = "SinUsuario"
|
||||||
|
c = audb.ExecQuery("select USUARIO from usuarioa")
|
||||||
|
c.Position=0
|
||||||
|
If c.RowCount > 0 Then u = c.GetString("USUARIO")
|
||||||
|
c.Close
|
||||||
|
Return u
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Trae el cliente de CUENTAA
|
||||||
|
Sub traeCliente As String 'ignore
|
||||||
|
Private c As Cursor
|
||||||
|
Private cl As String
|
||||||
|
c = audb.ExecQuery("Select CUENTA from cuentaa")
|
||||||
|
c.Position = 0
|
||||||
|
cl = c.GetString("CUENTA")
|
||||||
|
c.Close
|
||||||
|
Return cl
|
||||||
|
End Sub
|
||||||
@@ -11,6 +11,7 @@ Sub Class_Globals
|
|||||||
Dim g As GPS
|
Dim g As GPS
|
||||||
Dim kh As kms_helperSubs
|
Dim kh As kms_helperSubs
|
||||||
Dim reqManager As DBRequestManager
|
Dim reqManager As DBRequestManager
|
||||||
|
Dim cmd As DBCommand
|
||||||
Dim ruta As String
|
Dim ruta As String
|
||||||
Dim clie_id As String
|
Dim clie_id As String
|
||||||
Dim sDate,sTime As String
|
Dim sDate,sTime As String
|
||||||
@@ -48,6 +49,8 @@ Sub Class_Globals
|
|||||||
Dim C1 As Cursor
|
Dim C1 As Cursor
|
||||||
Dim C3 As Cursor
|
Dim C3 As Cursor
|
||||||
Dim C4, C5, C6, C8 As Cursor
|
Dim C4, C5, C6, C8 As Cursor
|
||||||
|
Dim c2 As Cursor
|
||||||
|
Dim S2 As Cursor
|
||||||
Dim RMI As String
|
Dim RMI As String
|
||||||
Dim ListView1 As ListView
|
Dim ListView1 As ListView
|
||||||
Dim la_cuenta As Label
|
Dim la_cuenta As Label
|
||||||
@@ -79,9 +82,6 @@ Sub Class_Globals
|
|||||||
Dim Guardar As Button
|
Dim Guardar As Button
|
||||||
' Dim NUEVO As Button
|
' Dim NUEVO As Button
|
||||||
Dim l_total As Label
|
Dim l_total As Label
|
||||||
Dim c2 As Cursor
|
|
||||||
Dim S2 As Cursor
|
|
||||||
Private s As Cursor
|
|
||||||
Dim res As String
|
Dim res As String
|
||||||
Private HIST As Button
|
Private HIST As Button
|
||||||
Private MONTO_COMPRA As String
|
Private MONTO_COMPRA As String
|
||||||
@@ -295,6 +295,12 @@ Sub Class_Globals
|
|||||||
Private e_comm As EditText
|
Private e_comm As EditText
|
||||||
Private p_infoGral2 As Panel
|
Private p_infoGral2 As Panel
|
||||||
Dim indicePregunta As Int
|
Dim indicePregunta As Int
|
||||||
|
Private p_transparenciaNoti As Panel
|
||||||
|
Private p_Notificacion As Panel
|
||||||
|
Private l_notificacionTexto As Label
|
||||||
|
Private l_notificacionTitulo As Label
|
||||||
|
Private b_notificacion As Button
|
||||||
|
Dim reqManagerW As DBRequestManagerW
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
'You can add more parameters here.
|
'You can add more parameters here.
|
||||||
@@ -375,6 +381,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
Else
|
Else
|
||||||
RutaBoleta=Starter.rutaV
|
RutaBoleta=Starter.rutaV
|
||||||
End If
|
End If
|
||||||
|
If s.IsInitialized Then s.Close
|
||||||
End If
|
End If
|
||||||
c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
@@ -390,7 +397,6 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
c.Close
|
c.Close
|
||||||
Panel_INV_A.Left = 0 : Panel_INV_A.top = 0
|
Panel_INV_A.Left = 0 : Panel_INV_A.top = 0
|
||||||
Panel10.Left = 0 : Panel10.top = 0
|
Panel10.Left = 0 : Panel10.top = 0
|
||||||
If s.IsInitialized Then s.Close
|
|
||||||
' Log("################# PERMISOS BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
' Log("################# PERMISOS BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||||
' Log("Permisos BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
' Log("Permisos BT: " & Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||||
' Log("REVISAMOS PERMISOS DE BT")
|
' Log("REVISAMOS PERMISOS DE BT")
|
||||||
@@ -403,6 +409,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
|
||||||
|
B4XPages.MainPage.aud.guarda($"Entrada a Cliente"$)
|
||||||
indicePregunta = 0
|
indicePregunta = 0
|
||||||
b_noVenta.Enabled = False
|
b_noVenta.Enabled = False
|
||||||
Log("NoVenta False")
|
Log("NoVenta False")
|
||||||
@@ -411,7 +418,7 @@ Sub B4XPage_Appear
|
|||||||
clienteId = kh.traeCliente
|
clienteId = kh.traeCliente
|
||||||
P_DOE.Visible = False
|
P_DOE.Visible = False
|
||||||
dentroDeGeocerca = False
|
dentroDeGeocerca = False
|
||||||
|
|
||||||
' Log($"TOTAL VENTA: ${kh.traeTotalCliente}"$)
|
' Log($"TOTAL VENTA: ${kh.traeTotalCliente}"$)
|
||||||
B_VENTA.Visible = False
|
B_VENTA.Visible = False
|
||||||
b_noVenta.Visible = False
|
b_noVenta.Visible = False
|
||||||
@@ -421,11 +428,12 @@ Sub B4XPage_Appear
|
|||||||
' Log(Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
' Log(Starter.rp.Check("android.permission.BLUETOOTH_CONNECT"))
|
||||||
|
|
||||||
reqManager.Initialize(Me, Starter.DBReqServer)
|
reqManager.Initialize(Me, Starter.DBReqServer)
|
||||||
|
reqManagerW.Initialize
|
||||||
usarGeocerca = kh.traeUsarGeocerca
|
usarGeocerca = kh.traeUsarGeocerca
|
||||||
|
|
||||||
'Para el almacen 12 (GDL) no se usa la geocerca
|
'Para el almacen 12 (GDL) no se usa la geocerca
|
||||||
' If kh.traeAlmacen = 12 Then usarGeocerca = False
|
' If kh.traeAlmacen = 12 Then usarGeocerca = False
|
||||||
|
|
||||||
' Log(Subs.traeUltimaActividadBD)
|
' Log(Subs.traeUltimaActividadBD)
|
||||||
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
@@ -494,10 +502,8 @@ Sub B4XPage_Appear
|
|||||||
l_atiende.Text = "N/A"
|
l_atiende.Text = "N/A"
|
||||||
If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then l_atiende.Text = c.GetString("CAT_CL_ATIENDE1")
|
If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then l_atiende.Text = c.GetString("CAT_CL_ATIENDE1")
|
||||||
l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2")
|
l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2")
|
||||||
|
|
||||||
l_segmento2.text = "N/A"
|
l_segmento2.text = "N/A"
|
||||||
If c.GetString("CAT_CL_SEGMENTO") <> Null Then l_segmento2.text = c.GetString("CAT_CL_SEGMENTO")
|
If c.GetString("CAT_CL_SEGMENTO") <> Null Then l_segmento2.text = c.GetString("CAT_CL_SEGMENTO")
|
||||||
|
|
||||||
b_inicioFinVenta.Text = "INICIAR VENTA"
|
b_inicioFinVenta.Text = "INICIAR VENTA"
|
||||||
b_inicioFinVenta.BringToFront
|
b_inicioFinVenta.BringToFront
|
||||||
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
||||||
@@ -509,7 +515,7 @@ Sub B4XPage_Appear
|
|||||||
b_inicioFinVenta.Visible = False
|
b_inicioFinVenta.Visible = False
|
||||||
End If
|
End If
|
||||||
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
' LogColor(">>>>>> EN VENTA: " & Starter.enVenta, Colors.red)
|
||||||
|
|
||||||
' LONGITUD = 0
|
' LONGITUD = 0
|
||||||
' If c.GetString("CAT_CL_LONG") <> Null And c.GetString("CAT_CL_LONG") <> "null" And IsNumber(c.GetString("CAT_CL_LONG")) Then LONGITUD = c.GetString("CAT_CL_LONG")
|
' If c.GetString("CAT_CL_LONG") <> Null And c.GetString("CAT_CL_LONG") <> "null" And IsNumber(c.GetString("CAT_CL_LONG")) Then LONGITUD = c.GetString("CAT_CL_LONG")
|
||||||
' LATITUD = 0
|
' LATITUD = 0
|
||||||
@@ -799,6 +805,7 @@ Sub B4XPage_Appear
|
|||||||
MsgboxAsync($"Promo por monto "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" agregada."$,"AVISO")
|
MsgboxAsync($"Promo por monto "${Subs.traeProdNombre(mPromoXMonto.Get("id"))}" agregada."$,"AVISO")
|
||||||
B4XPage_Appear
|
B4XPage_Appear
|
||||||
End If
|
End If
|
||||||
|
dp.Close
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Private ppm As Cursor = Starter.skmt.ExecQuery($"select (select ifnull(sum(PE_COSTO_TOT),0) from pedido where CAT_PA_ID <> pe_cedis) as CT, ifnull((select pe_cedis from pedido where pe_cedis = CAT_PA_ID), 0) as existe, * from PROMOS_COMP where CAT_PA_TIPO_PROMONTO = '1' and CT < cast(cat_pa_precio1 as integer)"$) 'Traemos las promos por monto donde la venta es menor al precio1 para borrarlas.
|
Private ppm As Cursor = Starter.skmt.ExecQuery($"select (select ifnull(sum(PE_COSTO_TOT),0) from pedido where CAT_PA_ID <> pe_cedis) as CT, ifnull((select pe_cedis from pedido where pe_cedis = CAT_PA_ID), 0) as existe, * from PROMOS_COMP where CAT_PA_TIPO_PROMONTO = '1' and CT < cast(cat_pa_precio1 as integer)"$) 'Traemos las promos por monto donde la venta es menor al precio1 para borrarlas.
|
||||||
@@ -817,10 +824,41 @@ Sub B4XPage_Appear
|
|||||||
B4XPage_Appear
|
B4XPage_Appear
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
ppm.Close
|
||||||
If Not(Subs.revisaHora) Then
|
If Not(Subs.revisaHora) Then
|
||||||
Log("***************** HORA INCORRECTA")
|
Log("***************** HORA INCORRECTA")
|
||||||
MsgboxAsync("La hora del equipo NO coincide con la hora del servidor, es necesario corregirla", "AVISO IMPORTANTE")
|
MsgboxAsync("La hora del equipo NO coincide con la hora del servidor, es necesario corregirla", "AVISO IMPORTANTE")
|
||||||
End If
|
End If
|
||||||
|
c = Starter.skmt.ExecQuery($"select * from cat_notificaciones where CN_CLIENTE = '${Subs.traeCliente}'"$)
|
||||||
|
Log("###############################################################")
|
||||||
|
Log(c.RowCount)
|
||||||
|
Log("###############################################################")
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
l_notificacionTexto.Text = c.GetString("CN_NOTIFICACION")
|
||||||
|
p_transparenciaNoti.Top = 0 : p_transparenciaNoti.Left = 0
|
||||||
|
p_transparenciaNoti.Height = Root.Height
|
||||||
|
p_transparenciaNoti.Width = Root.Width
|
||||||
|
Subs.centraPanel(p_Notificacion, Root.Width)
|
||||||
|
p_transparenciaNoti.Visible = True
|
||||||
|
Log(c.GetString("CN_ID") & "|" & c.GetString("CN_CODIGO"))
|
||||||
|
b_notificacion.Tag = c.GetString("CN_ID") & "|" & c.GetString("CN_CODIGO")
|
||||||
|
p_transparenciaNoti.BringToFront
|
||||||
|
End If
|
||||||
|
c.Close
|
||||||
|
|
||||||
|
' Este codigo es para hacer que el Label de las notificaciones tenga SCROLLVERTICAL.
|
||||||
|
Dim labeljo, scrollerjo As JavaObject
|
||||||
|
labeljo = l_notificacionTexto
|
||||||
|
scrollerjo.InitializeNewInstance("android.text.method.ScrollingMovementMethod", Null)
|
||||||
|
labeljo.RunMethod("setMovementMethod", Array(scrollerjo)) ' Asigna el método de movimiento para permitir scroll
|
||||||
|
labeljo.RunMethod("setHorizontallyScrolling", Array(False)) ' CAMBIO: Para scroll vertical, esto DEBE ser False
|
||||||
|
labeljo.RunMethod("setVerticalScrollBarEnabled", Array(True)) ' Opcional: Forzar a que el scroll sea vertical explícitamente si el contenido es grande
|
||||||
|
' Forzar el scroll al inicio (0,0)
|
||||||
|
Sleep(0)
|
||||||
|
' El primer 0 es la posición X (horizontal), el segundo es la posición Y (vertical)
|
||||||
|
labeljo.RunMethod("scrollTo", Array(0, 0))
|
||||||
|
'Termina codigo de label horzontal
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Printer1_Connected (Success As Boolean)
|
Sub Printer1_Connected (Success As Boolean)
|
||||||
@@ -896,7 +934,7 @@ Sub GPS_LocationChanged (Location1 As Location)
|
|||||||
If c.RowCount > 0 Then
|
If c.RowCount > 0 Then
|
||||||
gps_boton_doe = c.GetString("CAT_CL_EMAIL")
|
gps_boton_doe = c.GetString("CAT_CL_EMAIL")
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
' gest.Visible = True
|
' gest.Visible = True
|
||||||
' gps_boton_doe ="1"
|
' gps_boton_doe ="1"
|
||||||
' LogColor($"Distancia actual: ${distance}"$, Colors.Blue)
|
' LogColor($"Distancia actual: ${distance}"$, Colors.Blue)
|
||||||
@@ -909,6 +947,7 @@ Sub GPS_LocationChanged (Location1 As Location)
|
|||||||
clienteConPromo = x.GetString("clienteConPromo")
|
clienteConPromo = x.GetString("clienteConPromo")
|
||||||
' Log($"${x.GetString("clienteConPromo")}"$)
|
' Log($"${x.GetString("clienteConPromo")}"$)
|
||||||
End If
|
End If
|
||||||
|
x.Close
|
||||||
' If pgs_boton_noventa = "1" Then b_noVenta.Visible = True
|
' If pgs_boton_noventa = "1" Then b_noVenta.Visible = True
|
||||||
' If gps_boton_doe ="1" Then b_whats.Visible = True
|
' If gps_boton_doe ="1" Then b_whats.Visible = True
|
||||||
|
|
||||||
@@ -982,6 +1021,7 @@ Sub DATOS_Click
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Guardar_Click
|
Sub Guardar_Click
|
||||||
|
B4XPages.MainPage.aud.guarda($"Guarda Venta Cliente"$)
|
||||||
DateTime.DateFormat = "MM/dd/yyyy"
|
DateTime.DateFormat = "MM/dd/yyyy"
|
||||||
sDate=DateTime.Date(DateTime.Now)
|
sDate=DateTime.Date(DateTime.Now)
|
||||||
sTime=DateTime.Time(DateTime.Now)
|
sTime=DateTime.Time(DateTime.Now)
|
||||||
@@ -1002,7 +1042,7 @@ Sub Guardar_Click
|
|||||||
Starter.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)")
|
Starter.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)")
|
||||||
Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
|
Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)")
|
||||||
If logger Then LogColor($"Insertamos coordenadas en pedido: ${Starter.lon_gps}, ${Starter.lat_gps}"$, Colors.Magenta)
|
If logger Then LogColor($"Insertamos coordenadas en pedido: ${Starter.lon_gps}, ${Starter.lat_gps}"$, Colors.Magenta)
|
||||||
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps))
|
Starter.skmt.ExecNonQuery2("insert into pedido_cliente(PC_RUTA, PC_ALMACEN, PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(Subs.traeAlmacen, Subs.traeRuta, clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), Starter.lon_gps, Starter.lat_gps))
|
||||||
Log("Actualizamos gestion")
|
Log("Actualizamos gestion")
|
||||||
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
||||||
End If
|
End If
|
||||||
@@ -1044,6 +1084,8 @@ Sub Guardar_Click
|
|||||||
b_inicioFinVenta.Text = "TERMINAR VENTA"
|
b_inicioFinVenta.Text = "TERMINAR VENTA"
|
||||||
Log("RESPALDO")
|
Log("RESPALDO")
|
||||||
kh.RD_respaldoBatch
|
kh.RD_respaldoBatch
|
||||||
|
|
||||||
|
' Subir_Pedido_Con_Integridad(clie_id)
|
||||||
|
|
||||||
mandaPendientes
|
mandaPendientes
|
||||||
|
|
||||||
@@ -1060,8 +1102,9 @@ Sub Guardar_Click
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub mandaPendientes
|
Sub mandaPendientes
|
||||||
B4XPages.MainPage.principal.enviaPedido(Null)
|
' B4XPages.MainPage.principal.enviaPedido(Null)
|
||||||
B4XPages.MainPage.principal.enviaPedidoCliente(Null)
|
' B4XPages.MainPage.principal.enviaPedidoCliente(Null)
|
||||||
|
B4XPages.MainPage.principal.enviaPedidoBatch(Null)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub NUEVO_Click
|
Sub NUEVO_Click
|
||||||
@@ -1171,12 +1214,13 @@ Sub B_IMP_Click
|
|||||||
C3.Position=0
|
C3.Position=0
|
||||||
a_venta = C3.GetString("CANTIDAD")
|
a_venta = C3.GetString("CANTIDAD")
|
||||||
a_VENTA_F = C3.GetString("TOTAL")
|
a_VENTA_F = C3.GetString("TOTAL")
|
||||||
|
C3.Close
|
||||||
Else
|
Else
|
||||||
a_venta = 0
|
a_venta = 0
|
||||||
a_VENTA_F = 0
|
a_VENTA_F = 0
|
||||||
End If
|
End If
|
||||||
C4.Close
|
C4.Close
|
||||||
|
|
||||||
C4=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from pedido where substr(pe_pronombre,1,6) = ? AND PE_PROID = ? ", Array As String("CAMBIO", s.GetString("CAT_GP_ID")))
|
C4=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from pedido where substr(pe_pronombre,1,6) = ? AND PE_PROID = ? ", Array As String("CAMBIO", s.GetString("CAT_GP_ID")))
|
||||||
C4.Position=0
|
C4.Position=0
|
||||||
If C4.GetString("CUANTOS") > 0 Then
|
If C4.GetString("CUANTOS") > 0 Then
|
||||||
@@ -1193,6 +1237,10 @@ Sub B_IMP_Click
|
|||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
s.Close
|
s.Close
|
||||||
|
If S1.IsInitialized Then S1.Close
|
||||||
|
If S3.IsInitialized Then S3.Close
|
||||||
|
If S2.IsInitialized Then S2.Close
|
||||||
|
If C4.IsInitialized Then C4.Close
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub B_IMP2_Click
|
Sub B_IMP2_Click
|
||||||
@@ -1317,6 +1365,7 @@ Sub Imprime_ticket
|
|||||||
cr.Position = 0
|
cr.Position = 0
|
||||||
If cr.GetInt("CREDITO") = 1 Then formaPago = "Crédito"
|
If cr.GetInt("CREDITO") = 1 Then formaPago = "Crédito"
|
||||||
End If
|
End If
|
||||||
|
cr.Close
|
||||||
If la_cuenta.Text = "0" Then
|
If la_cuenta.Text = "0" Then
|
||||||
LogColor(123, Colors.red)
|
LogColor(123, Colors.red)
|
||||||
Try
|
Try
|
||||||
@@ -3945,6 +3994,7 @@ Sub revisaPromoEspecial As Map
|
|||||||
y.Position = 0
|
y.Position = 0
|
||||||
nombreProd = y.GetString("nombreProd")
|
nombreProd = y.GetString("nombreProd")
|
||||||
End If
|
End If
|
||||||
|
y.Close
|
||||||
Log("El cliente tiene asignada la promo especial.")
|
Log("El cliente tiene asignada la promo especial.")
|
||||||
Private p As Cursor
|
Private p As Cursor
|
||||||
p=Starter.skmt.ExecQuery("select count(*) as hayInventario from CAT_GUNAPROD where CAT_GP_ALMACEN > 0 and CAT_GP_ID = " & x.GetString("CPM_PROID"))
|
p=Starter.skmt.ExecQuery("select count(*) as hayInventario from CAT_GUNAPROD where CAT_GP_ALMACEN > 0 and CAT_GP_ID = " & x.GetString("CPM_PROID"))
|
||||||
@@ -4419,4 +4469,156 @@ Sub revisaExistenciasDOE As Boolean 'ignore
|
|||||||
' 1, "LECHE ALL BRAN NUEZ 236ML", "1008027228"
|
' 1, "LECHE ALL BRAN NUEZ 236ML", "1008027228"
|
||||||
' 1, "LECHE CHOCO MELVIN 236ML", "1008013799"
|
' 1, "LECHE CHOCO MELVIN 236ML", "1008013799"
|
||||||
Return suficiente
|
Return suficiente
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub p_transparenciaNoti_Click
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub b_notificacion_Click
|
||||||
|
Private tag As String = Sender.As(Button).Tag
|
||||||
|
Log("-" & tag & "-")
|
||||||
|
Private tag1() As String = Regex.Split("\|", tag)
|
||||||
|
Log(tag1.Length & "-" & tag1(0) & "-" & tag1(1))
|
||||||
|
Private CODIGO As String = tag1(0)
|
||||||
|
Private ID As String = tag1(1)
|
||||||
|
p_transparenciaNoti.Visible = False
|
||||||
|
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||||
|
Starter.skmt.ExecNonQuery($"insert into HIST_NOTIFICACIONES (HN_CODIGO, HN_ID, HN_FECHA) values ('${CODIGO}', '${ID}', '${DateTime.Date(DateTime.Now)}')"$)
|
||||||
|
Log(123)
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "updateHistNotificacionesMotivo"
|
||||||
|
cmd.Parameters = Array As Object("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId)
|
||||||
|
reqManager.ExecuteCommand(cmd , "updateHistNotificacionesMotivo")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Subrutina principal para subir pedidos con validación de integridad ARCH
|
||||||
|
' Llama a esto desde tu botón Subir_Click
|
||||||
|
' Devuelve un ResumableSub que puedes esperar con Wait For
|
||||||
|
Sub Subir_Pedido_Con_Integridad(cliente As String) As ResumableSub
|
||||||
|
|
||||||
|
Log("--- Iniciando Envío Seguro para Cliente: " & cliente & " ---")
|
||||||
|
|
||||||
|
' 1. Generar ARCH (Identificador Único del Paquete)
|
||||||
|
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cliente & "_" & DateTime.Now
|
||||||
|
|
||||||
|
' 2. Marcar registros pendientes con este ARCH localmente
|
||||||
|
' CORRECCIÓN CRÍTICA: El orden es (Valor_a_Asignar, Filtro) -> (Arch, cliente)
|
||||||
|
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO SET PE_ARCH = ? WHERE PE_CLIENTE = ? AND PE_ENVIADO = 0"$, Array As Object(Arch, cliente))
|
||||||
|
Starter.skmt.ExecNonQuery2($"UPDATE PEDIDO_CLIENTE SET PC_ARCH = ? WHERE PC_CLIENTE = ? AND PC_ENVIADO = 0"$, Array As Object(Arch, cliente))
|
||||||
|
|
||||||
|
' 3. Contar qué vamos a enviar
|
||||||
|
Dim cCheck As Cursor = Starter.skmt.ExecQuery($"SELECT COUNT(*) as total FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
|
||||||
|
cCheck.Position = 0
|
||||||
|
Dim TotalProductosLocal As Int = cCheck.GetInt("total")
|
||||||
|
cCheck.Close
|
||||||
|
|
||||||
|
If TotalProductosLocal = 0 Then
|
||||||
|
Log("Nada pendiente para enviar con este ARCH.")
|
||||||
|
Return "Vacio"
|
||||||
|
End If
|
||||||
|
|
||||||
|
Log($"Total a enviar: ${TotalProductosLocal} productos. ID Paquete: ${Arch}"$)
|
||||||
|
|
||||||
|
Dim envioCorrecto As Boolean = True
|
||||||
|
|
||||||
|
' 4. Enviar Encabezados (PEDIDO_CLIENTE)
|
||||||
|
Log("Enviando encabezado con ARCH: " & Arch)
|
||||||
|
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_ENVIADO, PC_ARCH FROM PEDIDO_CLIENTE WHERE PC_ARCH = '${Arch}'"$)
|
||||||
|
|
||||||
|
If cx.RowCount > 0 Then
|
||||||
|
For i = 0 To cx.RowCount - 1
|
||||||
|
cx.Position = i
|
||||||
|
Dim cmd As DBCommand
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "insert_pedidos_KELL_arch"
|
||||||
|
|
||||||
|
cmd.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"), cx.GetString("PC_ALMACEN"), cx.GetString("PC_RUTA"), cx.GetString("PC_COSTO_SIN"), cx.GetString("PC_ARCH"))
|
||||||
|
Log($"insert_pedidos_KELL_arch: ${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")}, ${cx.GetString("PC_ALMACEN")}, ${cx.GetString("PC_RUTA")}, ${cx.GetString("PC_COSTO_SIN")}, ${cx.GetString("PC_ARCH")}"$)
|
||||||
|
|
||||||
|
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "header_envio")
|
||||||
|
|
||||||
|
Wait For header_envio_Completed (ResultHeader As TResultado)
|
||||||
|
|
||||||
|
If ResultHeader.Success = False Then
|
||||||
|
Log("Error crítico enviando encabezado: " & ResultHeader.ErrorMessage)
|
||||||
|
envioCorrecto = False
|
||||||
|
Exit
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
cx.Close
|
||||||
|
End If
|
||||||
|
|
||||||
|
If envioCorrecto = False Then
|
||||||
|
Msgbox("Error al enviar encabezado del pedido. Intente nuevamente.", "Error de Conexión")
|
||||||
|
Return "Error PC"
|
||||||
|
End If
|
||||||
|
|
||||||
|
' 5. Enviar Detalles (PEDIDO)
|
||||||
|
Log("Enviando detalle con ARCH: " & Arch)
|
||||||
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO WHERE PE_ARCH = '${Arch}'"$)
|
||||||
|
|
||||||
|
If cPed.RowCount > 0 Then
|
||||||
|
For i = 0 To cPed.RowCount - 1
|
||||||
|
cPed.Position = i
|
||||||
|
Dim cmd As DBCommand
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "insert_pedido_KELL_arch"
|
||||||
|
|
||||||
|
cmd.Parameters = Array As Object(cPed.GetString("PE_CEDIS"), Subs.traeAlmacen, 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("PE_TIPO"), cPed.GetString("PE_ARCH"))
|
||||||
|
|
||||||
|
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "detalle_envio")
|
||||||
|
|
||||||
|
Wait For detalle_envio_Completed (ResultDet As TResultado)
|
||||||
|
|
||||||
|
If ResultDet.Success = False Then
|
||||||
|
Log("Error enviando producto " & cPed.GetString("PE_PRONOMBRE"))
|
||||||
|
envioCorrecto = False
|
||||||
|
Exit
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
cPed.Close
|
||||||
|
End If
|
||||||
|
|
||||||
|
If envioCorrecto = False Then
|
||||||
|
Return "Error PE"
|
||||||
|
End If
|
||||||
|
|
||||||
|
' 6. VALIDACIÓN FINAL
|
||||||
|
Log("Validando integridad con Oracle...")
|
||||||
|
|
||||||
|
Dim cmdVal As DBCommand
|
||||||
|
cmdVal.Initialize
|
||||||
|
cmdVal.Name = "validar_integridad_arch"
|
||||||
|
cmdVal.Parameters = Array As Object(Arch, TotalProductosLocal)
|
||||||
|
|
||||||
|
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmdVal, Me, "validacion_integridad")
|
||||||
|
Wait For validacion_integridad_Completed (ResultVal As TResultado)
|
||||||
|
|
||||||
|
If ResultVal.Success Then
|
||||||
|
Dim estado As String = ""
|
||||||
|
For Each row() As Object In ResultVal.resultado.Rows
|
||||||
|
estado = row(ResultVal.resultado.Columns.Get("ESTADO"))
|
||||||
|
Next
|
||||||
|
|
||||||
|
If estado = "COMPLETO" Then
|
||||||
|
Log("¡Validación Exitosa! Marcando pedido como enviado.")
|
||||||
|
|
||||||
|
' Marcamos como enviado localmente usando el ARCH
|
||||||
|
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_ENVIADO = 1 WHERE PE_ARCH = ?", Array As Object(Arch))
|
||||||
|
Starter.skmt.ExecNonQuery2("UPDATE PEDIDO_CLIENTE SET PC_ENVIADO = 1 WHERE PC_ARCH = ?", Array As Object(Arch))
|
||||||
|
|
||||||
|
ToastMessageShow("Pedido enviado y verificado correctamente", False)
|
||||||
|
Return "Validado OK"
|
||||||
|
Else
|
||||||
|
Log("ERROR DE INTEGRIDAD: El servidor reporta " & estado)
|
||||||
|
Msgbox("El servidor recibió datos incompletos. El pedido NO se marcó como enviado. Por favor intente subir de nuevo.", "Error de Integridad")
|
||||||
|
Return "Error Validacion"
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Log("Error al ejecutar query de validación: " & ResultVal.ErrorMessage)
|
||||||
|
Msgbox("No se pudo verificar el pedido por error de red. Intente de nuevo.", "Error de Red")
|
||||||
|
Return "Error Validacion (Red)"
|
||||||
|
End If
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
@@ -50,6 +50,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Historico")
|
||||||
L_CANT.Text =""
|
L_CANT.Text =""
|
||||||
L_TOTAL.Text=""
|
L_TOTAL.Text=""
|
||||||
c=Starter.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)")
|
c=Starter.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)")
|
||||||
|
|||||||
@@ -54,6 +54,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Mapas")
|
||||||
GPS.Initialize("GPS")
|
GPS.Initialize("GPS")
|
||||||
Log(1)
|
Log(1)
|
||||||
rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
|
rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
|
||||||
|
|||||||
@@ -46,6 +46,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a No Venta")
|
||||||
e_comm.Text=""
|
e_comm.Text=""
|
||||||
lat_gps = 0
|
lat_gps = 0
|
||||||
lon_gps = 0
|
lon_gps = 0
|
||||||
@@ -86,6 +87,7 @@ Sub GUARDA_Click
|
|||||||
Else
|
Else
|
||||||
motivo = "NO ESTA EL ENCARGADO"
|
motivo = "NO ESTA EL ENCARGADO"
|
||||||
End If
|
End If
|
||||||
|
B4XPages.MainPage.aud.guarda($"Guarda No Venta: ${motivo}"$)
|
||||||
usuario = Subs.traeUsuarioDeBD
|
usuario = Subs.traeUsuarioDeBD
|
||||||
If B4XPages.MainPage.cliente.IsInitialized Then
|
If B4XPages.MainPage.cliente.IsInitialized Then
|
||||||
B4XPages.MainPage.cliente.motivoNoVenta = motivo
|
B4XPages.MainPage.cliente.motivoNoVenta = motivo
|
||||||
|
|||||||
@@ -99,6 +99,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Nota")
|
||||||
If kh.clienteConDOE And l_tipoPedido.IsInitialized Then
|
If kh.clienteConDOE And l_tipoPedido.IsInitialized Then
|
||||||
l_tipoPedido.Visible = True
|
l_tipoPedido.Visible = True
|
||||||
Else
|
Else
|
||||||
@@ -265,6 +266,7 @@ Sub borra_Click
|
|||||||
If folio = "0" Or 1 = 1 Then 'Si el folio es 0 o el cliente actual es "abordo", los deja borrar. - Mod por CHV 220512 'Para que el abordo borre siempre agregar -> " Or Subs.clienteActual = "0""
|
If folio = "0" Or 1 = 1 Then 'Si el folio es 0 o el cliente actual es "abordo", los deja borrar. - Mod por CHV 220512 'Para que el abordo borre siempre agregar -> " Or Subs.clienteActual = "0""
|
||||||
result = Msgbox2($"¿Seguro que desea borrar el pedido${textoExtra}?"$,"Cancelar pedido", "Si", "", "No", LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
|
result = Msgbox2($"¿Seguro que desea borrar el pedido${textoExtra}?"$,"Cancelar pedido", "Si", "", "No", LoadBitmap(File.DirAssets,"alert2.png")) 'ignore
|
||||||
If result = DialogResponse.POSITIVE Then
|
If result = DialogResponse.POSITIVE Then
|
||||||
|
B4XPages.MainPage.aud.guarda($"Borrar Nota Ok"$)
|
||||||
' c = Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_TIPO, PE_CEDIS FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ")
|
' c = Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_TIPO, PE_CEDIS FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ")
|
||||||
' If c.RowCount>0 Then
|
' If c.RowCount>0 Then
|
||||||
' For i=0 To c.RowCount -1
|
' For i=0 To c.RowCount -1
|
||||||
|
|||||||
@@ -51,6 +51,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a NuevoCliente")
|
||||||
b_guardar.Visible = False
|
b_guardar.Visible = False
|
||||||
b_guardar.Enabled = False
|
b_guardar.Enabled = False
|
||||||
permitirCtesNuevos = True
|
permitirCtesNuevos = True
|
||||||
|
|||||||
@@ -309,6 +309,10 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
kh.centraPanel(Panel2, Root.Width)
|
kh.centraPanel(Panel2, Root.Width)
|
||||||
kh.centraPanel(Panel1, Root.Width)
|
kh.centraPanel(Panel1, Root.Width)
|
||||||
kh.centraPanel(p_botonesResumen, Root.Width)
|
kh.centraPanel(p_botonesResumen, Root.Width)
|
||||||
|
p_transparente.Top = 0 : p_transparente.left = 0
|
||||||
|
p_transparente.Height = Root.Height : p_transparente.Width = Root.Width
|
||||||
|
' PNL_ACCESO.Top = 0 : PNL_ACCESO.left = 0
|
||||||
|
' PNL_ACCESO.Height = Root.Height : PNL_ACCESO.Width = Root.Width
|
||||||
' kh.centraPanel(Panel7, Root.Width)
|
' kh.centraPanel(Panel7, Root.Width)
|
||||||
' kh.centraPanel(PNL_ACCESO, Root.Width)
|
' kh.centraPanel(PNL_ACCESO, Root.Width)
|
||||||
|
|
||||||
@@ -324,6 +328,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Principal")
|
||||||
' Log(Subs.traeDiaSemana)
|
' Log(Subs.traeDiaSemana)
|
||||||
linker.Initialize(Me, "Linker", True)
|
linker.Initialize(Me, "Linker", True)
|
||||||
Starter.errorConnDBReq = False
|
Starter.errorConnDBReq = False
|
||||||
@@ -564,7 +569,7 @@ Sub B4XPage_Appear
|
|||||||
NUEVO.Enabled = True
|
NUEVO.Enabled = True
|
||||||
B_PROXIMA.Enabled = True
|
B_PROXIMA.Enabled = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'############# Deshabilitamos botones para validacion de ruta y vinculo #########
|
'############# Deshabilitamos botones para validacion de ruta y vinculo #########
|
||||||
c = Starter.skmt.ExecQuery("select count(*) as cuantos from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'LIGADO' and CAT_VA_VALOR = 1")
|
c = Starter.skmt.ExecQuery("select count(*) as cuantos from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'LIGADO' and CAT_VA_VALOR = 1")
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
@@ -595,6 +600,9 @@ Sub B4XPage_Appear
|
|||||||
If n.GetString("cuantos") >= kh.traeMaxClientesNuevos Then NUEVO.Enabled = False
|
If n.GetString("cuantos") >= kh.traeMaxClientesNuevos Then NUEVO.Enabled = False
|
||||||
' LogColor(">>>>>>>> REVISAMOS GUID <<<<<<<<<", Colors.red)
|
' LogColor(">>>>>>>> REVISAMOS GUID <<<<<<<<<", Colors.red)
|
||||||
' Subs.generaGUID_EnExterno
|
' Subs.generaGUID_EnExterno
|
||||||
|
|
||||||
|
|
||||||
|
Subs.RecalcularInventario
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub trabajar_Click
|
Sub trabajar_Click
|
||||||
@@ -623,7 +631,6 @@ Sub trabajar_Click
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Subir_Click
|
Sub Subir_Click
|
||||||
|
|
||||||
' Buscamos los clientes que tienen pedido y NO estan impresos.
|
' Buscamos los clientes que tienen pedido y NO estan impresos.
|
||||||
Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
|
Private t As Cursor = Starter.skmt.ExecQuery("Select cat_cl_codigo from kmt_info where impresion = 0 and cat_cl_codigo not in (select ci_cuenta from cliente_impreso) and cat_cl_codigo in (select distinct pe_cliente from pedido)")
|
||||||
If t.RowCount > 0 Then
|
If t.RowCount > 0 Then
|
||||||
@@ -635,9 +642,8 @@ Sub Subir_Click
|
|||||||
' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
|
' Msgbox2Async($"El pedido del cliente ${t.GetString("CAT_CL_CODIGO")} no está impreso, se va a borrar"$, "PEDIDO NO IMPRESO", "Aceptar", "", "", Null, True)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Sleep(1000)
|
Sleep(1000)
|
||||||
|
|
||||||
CARGA = "SUBIR"
|
CARGA = "SUBIR"
|
||||||
' P1.Visible = True
|
' P1.Visible = True
|
||||||
trabajar.Visible = False
|
trabajar.Visible = False
|
||||||
@@ -692,6 +698,18 @@ Sub Subir_Click
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
Private hn As Cursor = Starter.skmt.ExecQuery($"select distinct HN_CODIGO, HN_ID from hist_notificaciones"$)
|
||||||
|
If hn.RowCount > 0 Then
|
||||||
|
For i = 0 To hn.RowCount - 1
|
||||||
|
hn.Position = i
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "borraHistNotificaciones"
|
||||||
|
cmd.Parameters = Array As Object( hn.GetString("HN_CODIGO"), hn.GetString("HN_ID"))
|
||||||
|
reqManager.ExecuteCommand(cmd , "borraHistNotificaciones_"&hn.GetString("HN_CODIGO")&"_"&hn.GetString("HN_ID"))
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
hn.Close
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub cargar_Click
|
Sub cargar_Click
|
||||||
@@ -810,6 +828,7 @@ Sub cargar_Click
|
|||||||
Starter.skmt.ExecNonQuery("delete from DESC_CLIENTES")
|
Starter.skmt.ExecNonQuery("delete from DESC_CLIENTES")
|
||||||
Starter.skmt.ExecNonQuery("delete from CAT_ENCUESTA_PREGUNTA")
|
Starter.skmt.ExecNonQuery("delete from CAT_ENCUESTA_PREGUNTA")
|
||||||
Starter.skmt.ExecNonQuery("delete from CAT_PROMO_MONTO")
|
Starter.skmt.ExecNonQuery("delete from CAT_PROMO_MONTO")
|
||||||
|
Starter.skmt.ExecNonQuery("delete from CAT_NOTIFICACIONES")
|
||||||
''' PEDIDO DOE
|
''' PEDIDO DOE
|
||||||
Starter.skmt.ExecNonQuery("delete from CAT_GUNAPROD_DOE")
|
Starter.skmt.ExecNonQuery("delete from CAT_GUNAPROD_DOE")
|
||||||
Starter.skmt.ExecNonQuery("delete from PEDIDO_DOE")
|
Starter.skmt.ExecNonQuery("delete from PEDIDO_DOE")
|
||||||
@@ -1029,17 +1048,17 @@ Sub cargar_Click
|
|||||||
cmd.Name = "select_cat_clientes_guna_KELL2"
|
cmd.Name = "select_cat_clientes_guna_KELL2"
|
||||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||||
' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
|
' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_hist_datos_KELL"
|
cmd.Name = "select_hist_datos_KELL"
|
||||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN,e_ruta.text, ALMACEN)
|
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN,e_ruta.text, ALMACEN)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
reqManager.ExecuteQuery(cmd , 0, "hist_datos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_hist_promos_KELL"
|
cmd.Name = "select_hist_promos_KELL"
|
||||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "hist_promos")
|
reqManager.ExecuteQuery(cmd , 0, "hist_promos")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_hist_cliente_promos_KELL"
|
cmd.Name = "select_hist_cliente_promos_KELL"
|
||||||
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
|
||||||
@@ -1156,18 +1175,23 @@ Sub cargar_Click
|
|||||||
cmd.Name = "select_pedido_doe"
|
cmd.Name = "select_pedido_doe"
|
||||||
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
||||||
reqManager.ExecuteQuery(cmd , 0, "pedido_doe")
|
reqManager.ExecuteQuery(cmd , 0, "pedido_doe")
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_cat_gunaprod_doe"
|
cmd.Name = "select_cat_gunaprod_doe"
|
||||||
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
cmd.Parameters = Array As Object( ALMACEN,e_ruta.text )
|
||||||
reqManager.ExecuteQuery(cmd , 0, "cat_gunaprod_doe")
|
reqManager.ExecuteQuery(cmd , 0, "cat_gunaprod_doe")
|
||||||
''' FIN DOE
|
''' FIN DOE
|
||||||
|
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_cat_devoluciones_KELL"
|
cmd.Name = "select_cat_devoluciones_KELL"
|
||||||
cmd.Parameters = Array As Object(ALMACEN)
|
cmd.Parameters = Array As Object(ALMACEN)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "prods_rmi")
|
reqManager.ExecuteQuery(cmd , 0, "prods_rmi")
|
||||||
|
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "selectNotificaciones"
|
||||||
|
cmd.Parameters = Array As Object(ALMACEN, e_ruta.Text)
|
||||||
|
reqManager.ExecuteQuery(cmd , 0, "selectNotificaciones")
|
||||||
|
|
||||||
cargar.Visible = False
|
cargar.Visible = False
|
||||||
Subir.Visible = False
|
Subir.Visible = False
|
||||||
trabajar.Visible=False
|
trabajar.Visible=False
|
||||||
@@ -1525,6 +1549,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
||||||
' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV"))
|
' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV"))
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
||||||
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD5(CAT_GP_ID,CAT_GP_ALMACEN) VALUES (?,?)", Array As Object (CAT_GP_ID,CAT_GP_ALMACEN))
|
||||||
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_DEV,CAT_GP_CODPROMO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD,"0"))
|
||||||
Next
|
Next
|
||||||
Starter.skmt.TransactionSuccessful
|
Starter.skmt.TransactionSuccessful
|
||||||
@@ -1569,6 +1594,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN"))
|
Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN"))
|
||||||
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD"))
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
||||||
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD5(CAT_GP_ID,CAT_GP_ALMACEN) VALUES (?,?)", Array As Object (CAT_GP_ID,CAT_GP_ALMACEN))
|
||||||
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD))
|
||||||
Next
|
Next
|
||||||
Starter.skmt.TransactionSuccessful
|
Starter.skmt.TransactionSuccessful
|
||||||
@@ -1849,6 +1875,19 @@ Sub JobDone(Job As HttpJob)
|
|||||||
PB2.Progress = 100
|
PB2.Progress = 100
|
||||||
S_CP.Text = "VALIDANDO"
|
S_CP.Text = "VALIDANDO"
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If RESULT.Tag.As(String).StartsWith("pedido_completo_") Then 'query tag
|
||||||
|
For Each records() As Object In RESULT.Rows
|
||||||
|
Private temp() As String = Regex.Split("_", RESULT.Tag)
|
||||||
|
' Log(temp(2))
|
||||||
|
If temp.Length > 1 Then
|
||||||
|
Starter.skmt.ExecNonQuery($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
|
||||||
|
Log($"update pedido_cliente set pc_enviado = 1 where pc_cliente = '${temp(2)}'"$)
|
||||||
|
Starter.skmt.ExecNonQuery($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||||
|
Log($"update pedido set pe_enviado = 1 where pe_cliente = '${temp(2)}'"$)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
If RESULT.Tag = "version" Then 'query tag
|
If RESULT.Tag = "version" Then 'query tag
|
||||||
connecta.TextColor = Colors.White
|
connecta.TextColor = Colors.White
|
||||||
@@ -1885,9 +1924,12 @@ Sub JobDone(Job As HttpJob)
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
If RESULT.Tag = "ruta" Then 'query tag
|
If RESULT.Tag = "ruta" Then 'query tag
|
||||||
|
Log(654)
|
||||||
|
Subs.logJobDoneResultados(RESULT)
|
||||||
e_ruta.Enabled = True
|
e_ruta.Enabled = True
|
||||||
' Log(RESULT)
|
Log(RESULT)
|
||||||
' Log(RESULT.Columns.Get("VALIDO"))
|
Log(RESULT.Columns.Get("VALIDO"))
|
||||||
|
' Log(RESULT.Rows.Size)
|
||||||
If RESULT.Columns.Get("VALIDO") = "0" Then ToastMessageShow("Ruta incorrecta", True)
|
If RESULT.Columns.Get("VALIDO") = "0" Then ToastMessageShow("Ruta incorrecta", True)
|
||||||
If RESULT.Rows.Size = 0 Then ToastMessageShow("No hay ruta para ese usuario", True)
|
If RESULT.Rows.Size = 0 Then ToastMessageShow("No hay ruta para ese usuario", True)
|
||||||
For Each records() As Object In RESULT.Rows
|
For Each records() As Object In RESULT.Rows
|
||||||
@@ -2184,7 +2226,7 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_RMI (CAT_ID, CAT_DESCRIPCION, CAT_MONTO) VALUES (?,?,?)", Array As Object (CAT_ID, CAT_DESCRIPCION, CAT_MONTO))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_RMI (CAT_ID, CAT_DESCRIPCION, CAT_MONTO) VALUES (?,?,?)", Array As Object (CAT_ID, CAT_DESCRIPCION, CAT_MONTO))
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If RESULT.Tag = "semanaCalLaboral" Then 'query tag
|
If RESULT.Tag = "semanaCalLaboral" Then 'query tag
|
||||||
' Subs.logJobDoneResultados(RESULT)
|
' Subs.logJobDoneResultados(RESULT)
|
||||||
For Each records() As Object In RESULT.Rows
|
For Each records() As Object In RESULT.Rows
|
||||||
@@ -2194,6 +2236,17 @@ Sub JobDone(Job As HttpJob)
|
|||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If RESULT.Tag = "selectNotificaciones" Then 'query tag
|
||||||
|
Subs.logJobDoneResultados(RESULT)
|
||||||
|
For Each records() As Object In RESULT.Rows
|
||||||
|
Dim CN_CLIENTE As String = records(RESULT.COLUMNS.GET("HIST_NTC_IDCLIENTE"))
|
||||||
|
Dim CN_NOTIFICACION As String = records(RESULT.COLUMNS.GET("HIST_NTC_NOTIFICACION"))
|
||||||
|
Dim CN_CODIGO As String = records(RESULT.COLUMNS.GET("HIST_NTC_CODIGO"))
|
||||||
|
Dim CN_ID As String = records(RESULT.COLUMNS.GET("HIST_NTC_ID"))
|
||||||
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_NOTIFICACIONES (CN_CODIGO, CN_ID, CN_CLIENTE, CN_NOTIFICACION) VALUES (?,?,?,?)", Array As Object (CN_CODIGO, CN_ID, CN_CLIENTE, CN_NOTIFICACION))
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
|
||||||
If RESULT.Tag = "trendSpending" Then 'query tag
|
If RESULT.Tag = "trendSpending" Then 'query tag
|
||||||
' Subs.logJobDoneResultados(RESULT)
|
' Subs.logJobDoneResultados(RESULT)
|
||||||
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
|
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
|
||||||
@@ -2220,6 +2273,10 @@ Sub JobDone(Job As HttpJob)
|
|||||||
' Subs.logJobDoneResultados(RESULT)
|
' Subs.logJobDoneResultados(RESULT)
|
||||||
ts.Initialize(Me, "ts", Starter.skmt)
|
ts.Initialize(Me, "ts", Starter.skmt)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' If RESULT.Tag = "borraHistNotificaciones" Then enviaHistNotificaciones
|
||||||
|
' If RESULT.Tag = "insertHistNotificaciones" Then revisaHistNotificaciones
|
||||||
|
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -2230,15 +2287,21 @@ Sub JobDone(Job As HttpJob)
|
|||||||
|
|
||||||
If reqManager.reqsList.IsInitialized Then
|
If reqManager.reqsList.IsInitialized Then
|
||||||
LogColor(reqManager.reqsList, Colors.blue)
|
LogColor(reqManager.reqsList, Colors.blue)
|
||||||
' LogColor(reqManager.reqsList.Size, Colors.blue)
|
LogColor(reqManager.reqsList.Size, Colors.blue)
|
||||||
actualizaProgressBar
|
If CARGA = "SUBIR" Then actualizaProgressBar
|
||||||
|
|
||||||
|
'Si ya se procesaron TODAS las peticiones, entonces realizamos validaciones.
|
||||||
|
If reqManager.reqsList.Size = 0 Then
|
||||||
|
If CARGA = "SUBIR" Then revisaHistNotificaciones
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
' LogColor(reqTotales, Colors.blue)
|
' LogColor(reqTotales, Colors.blue)
|
||||||
|
|
||||||
|
|
||||||
' If Starter.Logger Then Log($"tiempo Request "${Job.Tag}": ${((reqManager.inicioJobDone - reqManager.inicioRequest)/1000)}"$)
|
' If Starter.Logger Then Log($"tiempo Request "${Job.Tag}": ${((reqManager.inicioJobDone - reqManager.inicioRequest)/1000)}"$)
|
||||||
' If Starter.Logger Then Log($"tiempo JobDone "${Job.Tag}": ${((DateTime.Now - reqManager.inicioJobDone)/1000)}"$)
|
' If Starter.Logger Then Log($"tiempo JobDone "${Job.Tag}": ${((DateTime.Now - reqManager.inicioJobDone)/1000)}"$)
|
||||||
' If Starter.Logger Then Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$)
|
' If Starter.Logger Then Log($"tiempo Total "${Job.Tag}": ${((DateTime.Now - inicioContador)/1000)}"$)
|
||||||
|
|
||||||
If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then
|
If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then
|
||||||
' LogColor("TERMINAMOS", Colors.red)
|
' LogColor("TERMINAMOS", Colors.red)
|
||||||
B_OK_PAS.Text = "OK"
|
B_OK_PAS.Text = "OK"
|
||||||
@@ -2250,6 +2313,48 @@ Sub JobDone(Job As HttpJob)
|
|||||||
' reqManager.PrintTable(RESULT)2
|
' reqManager.PrintTable(RESULT)2
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
'Envia el historial de notificaciones despues de haberlas borrado para que no se dupliquen.
|
||||||
|
Sub enviaHistNotificaciones
|
||||||
|
Private hn As Cursor = Starter.skmt.ExecQuery($"select * from hist_notificaciones"$)
|
||||||
|
If hn.RowCount > 0 Then
|
||||||
|
For i = 0 To hn.RowCount - 1
|
||||||
|
hn.Position = i
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "insertHistNotificaciones"
|
||||||
|
cmd.Parameters = Array As Object( hn.GetString("HN_CODIGO"), hn.GetString("HN_ID"), hn.GetString("HN_FECHA"))
|
||||||
|
reqManager.ExecuteCommand(cmd , "insertHistNotificaciones")
|
||||||
|
Next
|
||||||
|
hn.Close
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Revisa que en web haya el numero correcto de notificaciones en el historial
|
||||||
|
Sub revisaHistNotificaciones
|
||||||
|
LogColor("####################### REVISA NOTIS ########", Colors.red)
|
||||||
|
Private cn As Cursor = Starter.skmt.ExecQuery("select count(HN_CODIGO) as cuantos, HN_CODIGO, HN_ID from HIST_NOTIFICACIONES")
|
||||||
|
If cn.RowCount > 0 Then
|
||||||
|
cn.Position = 0
|
||||||
|
Private CuantasN As Int = cn.GetInt("cuantos")
|
||||||
|
cmd.Name = "selectCuantasNotificaciones"
|
||||||
|
cmd.Parameters = Array As Object(cn.GetString("HN_ID"), cn.GetString("HN_CODIGO"))
|
||||||
|
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "selectCuantasNotificaciones")
|
||||||
|
Wait For selectCuantasNotificaciones_Completed (r As TResultado)
|
||||||
|
If r.Success Then
|
||||||
|
LogColor("####################### selectCuantasNotificaciones ########", Colors.red)
|
||||||
|
Subs.logJobDoneResultados(r.resultado)
|
||||||
|
For Each records() As Object In r.resultado.Rows
|
||||||
|
Dim CuantasN As Int = records(r.resultado.Columns.Get("CUANTOS"))
|
||||||
|
If cn.GetInt("cuantos") > CuantasN Then
|
||||||
|
enviaHistNotificaciones
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Else
|
||||||
|
Log(r.ErrorMessage)
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
Sub actualizaProgressBar
|
Sub actualizaProgressBar
|
||||||
Log($"Porcentaje = ${(((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)}"$)
|
Log($"Porcentaje = ${(((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)}"$)
|
||||||
Private porcentajePB2 As Int = (((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)
|
Private porcentajePB2 As Int = (((reqTotales-reqManager.reqsList.Size)/reqTotales)*100).As(Int)
|
||||||
@@ -2363,6 +2468,8 @@ Sub connecta_Click
|
|||||||
|
|
||||||
reqManager.trackInit
|
reqManager.trackInit
|
||||||
|
|
||||||
|
' 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)
|
linker.verifyDevice(Subs.traeAlmacen, e_ruta.text)
|
||||||
|
|
||||||
' Else
|
' Else
|
||||||
@@ -2379,22 +2486,25 @@ Sub connecta2
|
|||||||
If vv.GetString("CAT_VA_VALOR") = 0 Then revisaVersion = False
|
If vv.GetString("CAT_VA_VALOR") = 0 Then revisaVersion = False
|
||||||
End If
|
End If
|
||||||
If revisaVersion Then ' Si VALIDA_VERSION no está en CERO ... revisamos.
|
If revisaVersion Then ' Si VALIDA_VERSION no está en CERO ... revisamos.
|
||||||
|
Log(123)
|
||||||
Dim cmd As DBCommand
|
Dim cmd As DBCommand
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_version_KELL"
|
cmd.Name = "select_version_KELL"
|
||||||
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text)
|
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "version")
|
reqManager.ExecuteQuery(cmd , 0, "version")
|
||||||
Else ' Si está en CERO (Validacion deshabilitada), continuamos a connecta3.
|
Else ' Si está en CERO (Validacion deshabilitada), continuamos a connecta3.
|
||||||
|
' Log(456)
|
||||||
connecta3
|
connecta3
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub connecta3
|
Sub connecta3
|
||||||
|
' Log(789)
|
||||||
Dim cmd As DBCommand
|
Dim cmd As DBCommand
|
||||||
cmd.Initialize
|
cmd.Initialize
|
||||||
cmd.Name = "select_ruta5_KELL"
|
cmd.Name = "select_ruta5_KELL"
|
||||||
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, usuario)
|
cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, usuario)
|
||||||
' Log($"******* Almacen: ${ALMACEN}, ${e_ruta.text}, ${usuario}"$)
|
Log($"******* Almacen: ${ALMACEN}, ${e_ruta.text}, ${usuario}"$)
|
||||||
reqManager.ExecuteQuery(cmd , 0, "ruta")
|
reqManager.ExecuteQuery(cmd , 0, "ruta")
|
||||||
e_ruta.Enabled = False
|
e_ruta.Enabled = False
|
||||||
If e_ruta.Text = "KMTSKLL1" Then e_ruta.Enabled = True
|
If e_ruta.Text = "KMTSKLL1" Then e_ruta.Enabled = True
|
||||||
@@ -2416,6 +2526,7 @@ Private Sub connecta_LongClick
|
|||||||
'' End If
|
'' End If
|
||||||
' Log("MANDAMOS BITACORA")
|
' Log("MANDAMOS BITACORA")
|
||||||
If e_ruta.Text = "KMTKLL1" Then Subs.deshabilitaValidaciones
|
If e_ruta.Text = "KMTKLL1" Then Subs.deshabilitaValidaciones
|
||||||
|
' B4XPages.MainPage.recordatorio.agregaPanelRecordatorio(Root)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub BUSCA_Click
|
Sub BUSCA_Click
|
||||||
@@ -2467,6 +2578,7 @@ Sub e_ruta_EnterPressed
|
|||||||
Starter.skmt.ExecNonQuery("delete from TREND_SPENDING")
|
Starter.skmt.ExecNonQuery("delete from TREND_SPENDING")
|
||||||
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
|
Starter.skmt.ExecNonQuery("delete from HIST_TREND_SPENDING_SEMANAL")
|
||||||
Starter.skmt.ExecNonQuery("delete from VERSIONES")
|
Starter.skmt.ExecNonQuery("delete from VERSIONES")
|
||||||
|
Starter.skmt.ExecNonQuery("delete from auditoria")
|
||||||
|
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO HIST_ENVIOS VALUES (?,0,?)", Array As Object(sTime, "PEDIDO"))
|
Starter.skmt.ExecNonQuery2("INSERT INTO HIST_ENVIOS VALUES (?,0,?)", Array As Object(sTime, "PEDIDO"))
|
||||||
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("NUMERO_PEDIDO"))
|
Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("NUMERO_PEDIDO"))
|
||||||
@@ -2719,6 +2831,7 @@ Sub B_OK_RES_Click
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Resumen_Click
|
Sub Resumen_Click
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a resumenDia")
|
||||||
Log("###############")
|
Log("###############")
|
||||||
L_ABORDO.Text = "0"
|
L_ABORDO.Text = "0"
|
||||||
P_RESUMEN.Visible = True
|
P_RESUMEN.Visible = True
|
||||||
@@ -3178,7 +3291,7 @@ Sub SUBIR_INFO_PEDIDO
|
|||||||
If d.GetString("MONTO") <> Null And d.GetString("MONTO") <> "" Then monto1 = d.GetString("MONTO")
|
If d.GetString("MONTO") <> Null And d.GetString("MONTO") <> "" Then monto1 = d.GetString("MONTO")
|
||||||
Private abordo1 As String = L_ABORDO.Text
|
Private abordo1 As String = L_ABORDO.Text
|
||||||
If abordo1 = "" Then abordo1 = "0"
|
If abordo1 = "" Then abordo1 = "0"
|
||||||
Log($"${monto1}, ${abordo1}"$)
|
' Log($"${monto1}, ${abordo1}"$)
|
||||||
monto1 = monto1 - abordo1
|
monto1 = monto1 - abordo1
|
||||||
|
|
||||||
reqManager.trackInit
|
reqManager.trackInit
|
||||||
@@ -3188,6 +3301,8 @@ Sub SUBIR_INFO_PEDIDO
|
|||||||
cmd.Name ="insert_drop2_KELL"
|
cmd.Name ="insert_drop2_KELL"
|
||||||
cmd.Parameters = Array As Object(usuario, l_ruta.Text, fecha, l_porvisitar.Text, l_drop.Text, l_efectiva.Text, l_cuantosc.Text, l_cuantosn.Text, monto1, "ENVIO", ALMACEN, abordo1)
|
cmd.Parameters = Array As Object(usuario, l_ruta.Text, fecha, l_porvisitar.Text, l_drop.Text, l_efectiva.Text, l_cuantosc.Text, l_cuantosn.Text, monto1, "ENVIO", ALMACEN, abordo1)
|
||||||
reqManager.ExecuteCommand(cmd , "inst_noventa_ins_drop_kell")
|
reqManager.ExecuteCommand(cmd , "inst_noventa_ins_drop_kell")
|
||||||
|
' Log($"${usuario}, ${l_ruta.Text}, ${fecha}, ${l_porvisitar.Text}, ${l_drop.Text}, ${l_efectiva.Text}, ${l_cuantosc.Text}, ${l_cuantosn.Text}, ${monto1}, "ENVIO", ${ALMACEN}, ${abordo1}"$)
|
||||||
|
Log("################## inst_noventa_ins_drop_kell")
|
||||||
img2.Visible =True
|
img2.Visible =True
|
||||||
contador_env = contador_env + 1
|
contador_env = contador_env + 1
|
||||||
S_CP.Text = "Envio Cabecera"
|
S_CP.Text = "Envio Cabecera"
|
||||||
@@ -3289,7 +3404,7 @@ Sub SUBIR_INFO_PEDIDO
|
|||||||
PB2.Progress = 1
|
PB2.Progress = 1
|
||||||
|
|
||||||
' PEDIO_CLIENTE
|
' PEDIO_CLIENTE
|
||||||
enviaPedidoCliente("Todos")
|
' enviaPedidoCliente("Todos")
|
||||||
|
|
||||||
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ")
|
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE ")
|
||||||
d.Position=0
|
d.Position=0
|
||||||
@@ -3301,10 +3416,12 @@ Sub SUBIR_INFO_PEDIDO
|
|||||||
PORENVIAR = 0
|
PORENVIAR = 0
|
||||||
|
|
||||||
' PEDIDO
|
' PEDIDO
|
||||||
t3.Initialize("T3", 500) ' 1000 = 1 second
|
' t3.Initialize("T3", 500) ' 1000 = 1 second
|
||||||
t3.Enabled = True
|
' t3.Enabled = True
|
||||||
Wait For t3_tick
|
' Wait For t3_tick
|
||||||
enviaPedido("Todos")
|
' enviaPedido("Todos")
|
||||||
|
|
||||||
|
enviaPedidoBatch("Todos") ' ****** AQUI VA PEDIDO_CLIENTE Y PEDIDO JUNTOS *****
|
||||||
|
|
||||||
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
|
d = Starter.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO")
|
||||||
d.Position=0
|
d.Position=0
|
||||||
@@ -3404,6 +3521,72 @@ Sub SUBIR_INFO_PEDIDO
|
|||||||
DateTime.TimeFormat = "HH:mm:ss"
|
DateTime.TimeFormat = "HH:mm:ss"
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Sub enviaPedidoBatch(filtro As String)
|
||||||
|
' Crear una lista para almacenar TODAS las operaciones de UN pedido
|
||||||
|
Dim BatchCommands As List
|
||||||
|
BatchCommands.Initialize
|
||||||
|
|
||||||
|
' DE PEDIDO_CLIENTE
|
||||||
|
Log($"enviaPedidoBatch(${filtro})"$)
|
||||||
|
Private condicion As String = ""
|
||||||
|
If filtro <> "Todos" Then condicion = "where PC_ENVIADO = 0"
|
||||||
|
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_ENVIADO 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_ENVIADO FROM PEDIDO_CLIENTE ${condicion}"$)
|
||||||
|
Log("pedido_cliente: " & cx.RowCount)
|
||||||
|
|
||||||
|
' DE PEDIDO
|
||||||
|
Private condicion As String = ""
|
||||||
|
If filtro <> "Todos" Then condicion = "where PE_ENVIADO = 0"
|
||||||
|
c = Starter.skmt.ExecQuery2("SELECT COUNT(*) as CANTIDAD FROM HIST_ENVIOS WHERE HE_TIPO = ?",Array As String("ABORDO") )
|
||||||
|
c.Position = 0
|
||||||
|
If c.GetString("CANTIDAD") > 0 Then
|
||||||
|
Log($"pe_cedis_0"$)
|
||||||
|
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
||||||
|
End If
|
||||||
|
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
||||||
|
|
||||||
|
If cx.RowCount > 0 Then ' Si hay pedido entonces lo enviamos.
|
||||||
|
For j = 0 To cx.RowCount - 1
|
||||||
|
Log("===== ENVIAMOS PRODUCTOS DE PEDIDO =====")
|
||||||
|
cx.Position = j
|
||||||
|
Dim Arch As String = Subs.traeAlmacen & "_" & Subs.traeRuta & "_" & cx.GetString("PC_CLIENTE") & "_" & DateTime.Now
|
||||||
|
' 1. Agregar comando del Encabezado (PEDIDO_CLIENTE)
|
||||||
|
Dim cmdHeader As DBCommand
|
||||||
|
cmdHeader.Initialize
|
||||||
|
cmdHeader.Name = "insert_pedidos_KELL_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"), Arch)
|
||||||
|
BatchCommands.Add(cmdHeader)
|
||||||
|
|
||||||
|
' 2. Agregar comandos del Detalle (PEDIDO) dentro del bucle
|
||||||
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||||
|
' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO, PE_ARCH FROM PEDIDO ${condicion} ${(IIf(condicion = "","where ", "and"))} pe_cliente = '${cx.GetString("PC_CLIENTE")}' "$)
|
||||||
|
If cPed.RowCount > 0 Then
|
||||||
|
For i = 0 To cPed.RowCount - 1
|
||||||
|
Log("==== ENVIAMOS PRODS ====")
|
||||||
|
cPed.Position = i
|
||||||
|
Dim cmdDetail As DBCommand
|
||||||
|
cmdDetail.Initialize
|
||||||
|
If PERFIL = "V-ESPECIAL" Then
|
||||||
|
Log("===== V-ESPECIAL =====")
|
||||||
|
cmd.Name = "insert_pedido_esp_KELL"
|
||||||
|
cmd.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("PE_TIPO"),NUMERO_PEDIDO)
|
||||||
|
Else
|
||||||
|
cmdDetail.Name = "insert_pedido_KELL_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("PE_TIPO"), Arch)
|
||||||
|
End If
|
||||||
|
BatchCommands.Add(cmdDetail)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
' 3. Enviar TODO junto en una sola petición HTTP
|
||||||
|
' Si esto falla, no se guarda nada en Oracle y el pedido sigue pendiente en local.
|
||||||
|
reqManager.ExecuteBatch(BatchCommands, "pedido_completo_" & cx.GetString("PC_CLIENTE"))
|
||||||
|
End If
|
||||||
|
c.Close
|
||||||
|
cx.Close
|
||||||
|
End Sub
|
||||||
|
|
||||||
'Envio de la tabla pedido
|
'Envio de la tabla pedido
|
||||||
Sub enviaPedido(filtro As String)
|
Sub enviaPedido(filtro As String)
|
||||||
Log($"enviaPedido(${filtro})"$)
|
Log($"enviaPedido(${filtro})"$)
|
||||||
@@ -3416,11 +3599,11 @@ Sub enviaPedido(filtro As String)
|
|||||||
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
Starter.skmt.ExecNonQuery2("update PEDIDO set PE_CEDIS = ? where PE_CLIENTE =? AND PE_FOLIO IS NULL ", Array As Object("RECARGA", "0"))
|
||||||
End If
|
End If
|
||||||
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
Starter.skmt.ExecNonQuery("UPDATE PEDIDO SET PE_FOLIO = rowid where PE_FOLIO = 0 or PE_FOLIO = 1")
|
||||||
|
|
||||||
Log("####################################################")
|
Log("####################################################")
|
||||||
Log(PERFIL)
|
Log(PERFIL)
|
||||||
Log("####################################################")
|
Log("####################################################")
|
||||||
|
|
||||||
If PERFIL = "V-ESPECIAL" Then
|
If PERFIL = "V-ESPECIAL" Then
|
||||||
Log($"pe_cedis_1"$)
|
Log($"pe_cedis_1"$)
|
||||||
c = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion} ORDER BY PE_CLIENTE"$)
|
c = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion} ORDER BY PE_CLIENTE"$)
|
||||||
@@ -3441,7 +3624,7 @@ Sub enviaPedido(filtro As String)
|
|||||||
Else
|
Else
|
||||||
' Log($"pe_cedis_3"$)
|
' Log($"pe_cedis_3"$)
|
||||||
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
Private cPed As Cursor = Starter.skmt.ExecQuery($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
||||||
Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
' Log($"SELECT PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_TIPO FROM PEDIDO ${condicion}"$)
|
||||||
' TIEMPO = 0
|
' TIEMPO = 0
|
||||||
S_CP.Text = "Envio de Pedidos"
|
S_CP.Text = "Envio de Pedidos"
|
||||||
PB2.Progress = 1
|
PB2.Progress = 1
|
||||||
@@ -3896,6 +4079,7 @@ Sub IsConnectedToInternet As Boolean 'ignore
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub b_motivoNoVisita_Click
|
Private Sub b_motivoNoVisita_Click
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a motivoNoVisita")
|
||||||
r_1.Checked = True
|
r_1.Checked = True
|
||||||
r_razonNoVisita = "FALLA MECANICA"
|
r_razonNoVisita = "FALLA MECANICA"
|
||||||
If Not(kh.motivoNoVisitaActivo) Then
|
If Not(kh.motivoNoVisitaActivo) Then
|
||||||
@@ -3921,6 +4105,7 @@ Private Sub b_noVisita_Click
|
|||||||
Msgbox2Async("Si se envia la información, ya NO se va a poder continuar con la ruta, los clientes por visitar se van a bloquear.", "AVISO", "Continuar", "Cancelar", "", LoadBitmap(File.DirAssets,"alert2.png"), False)
|
Msgbox2Async("Si se envia la información, ya NO se va a poder continuar con la ruta, los clientes por visitar se van a bloquear.", "AVISO", "Continuar", "Cancelar", "", LoadBitmap(File.DirAssets,"alert2.png"), False)
|
||||||
Wait For Msgbox_Result (result As Int)
|
Wait For Msgbox_Result (result As Int)
|
||||||
If result = DialogResponse.POSITIVE Then
|
If result = DialogResponse.POSITIVE Then
|
||||||
|
B4XPages.MainPage.aud.guarda($"Se envió MotivoNoVisita: "${r_razonNoVisita}""$)
|
||||||
ToastMessageShow("CONTINUAR", False)
|
ToastMessageShow("CONTINUAR", False)
|
||||||
Starter.skmt.ExecNonQuery($"delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'NOVISITA_ACTIVA'"$)
|
Starter.skmt.ExecNonQuery($"delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'NOVISITA_ACTIVA'"$)
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("NOVISITA_ACTIVA", 1))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("NOVISITA_ACTIVA", 1))
|
||||||
@@ -3942,10 +4127,17 @@ Private Sub b_noVisita_Click
|
|||||||
Do While mnv.NextRow
|
Do While mnv.NextRow
|
||||||
Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, alm, rut, "NO VISITADO", mnv.GetString("CAT_CL_CODIGO"), fech, fech, Starter.lat_gps, Starter.lon_gps, 2, "", r_razonNoVisita)
|
Subs.bitacora(Subs.fechanormal(DateTime.Now), usuario, alm, rut, "NO VISITADO", mnv.GetString("CAT_CL_CODIGO"), fech, fech, Starter.lat_gps, Starter.lon_gps, 2, "", r_razonNoVisita)
|
||||||
Log($"NO VISITADO - ${mnv.GetString("CAT_CL_CODIGO")}"$)
|
Log($"NO VISITADO - ${mnv.GetString("CAT_CL_CODIGO")}"$)
|
||||||
|
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
|
||||||
|
' Actualizamos HIST_NOTIFICACIONES con la hora y el motivo.
|
||||||
|
cmd.Initialize
|
||||||
|
cmd.Name = "updateHistNotificacionesMotivo"
|
||||||
|
|
||||||
|
|
||||||
|
' ("", DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, Subs.traeAlmacen, clienteId)
|
||||||
|
cmd.Parameters = Array As Object(r_razonNoVisita, DateTime.Date(DateTime.Now), Subs.traeRuta, usuario, ALMACEN, mnv.GetString("CAT_CL_CODIGO"))
|
||||||
|
reqManager.ExecuteCommand(cmd , "insertHistNotificaciones")
|
||||||
Loop
|
Loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
' b_motivoNoVisita.Color = Colors.RGB(247, 94, 0)
|
' b_motivoNoVisita.Color = Colors.RGB(247, 94, 0)
|
||||||
Private cd1 As ColorDrawable
|
Private cd1 As ColorDrawable
|
||||||
cd1.Initialize(Colors.RGB(247, 94, 0), 5dip)
|
cd1.Initialize(Colors.RGB(247, 94, 0), 5dip)
|
||||||
|
|||||||
@@ -13,10 +13,7 @@ Sub Class_Globals
|
|||||||
Dim q_buscar As String
|
Dim q_buscar As String
|
||||||
Dim forzarBusqueda As Boolean = False
|
Dim forzarBusqueda As Boolean = False
|
||||||
Dim skmt As SQL
|
Dim skmt As SQL
|
||||||
Dim c As Cursor
|
Dim ab, c, c2, c3, c_prods, pPromo, p1, prod, pPromos, s, s1 As Cursor
|
||||||
Dim c2 As Cursor
|
|
||||||
Dim C3 As Cursor
|
|
||||||
Dim s As Cursor
|
|
||||||
Dim lv_catalogos As ListView
|
Dim lv_catalogos As ListView
|
||||||
Dim lv_promos As ListView
|
Dim lv_promos As ListView
|
||||||
Dim entro As String
|
Dim entro As String
|
||||||
@@ -29,7 +26,6 @@ Sub Class_Globals
|
|||||||
Dim ya_entro As String
|
Dim ya_entro As String
|
||||||
Dim TIENE_PROMOS As String
|
Dim TIENE_PROMOS As String
|
||||||
Dim RES As String
|
Dim RES As String
|
||||||
Dim S1 As Cursor
|
|
||||||
Dim bmp As Bitmap
|
Dim bmp As Bitmap
|
||||||
Dim ciclo As String
|
Dim ciclo As String
|
||||||
Private b_qr As Button
|
Private b_qr As Button
|
||||||
@@ -170,6 +166,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Productos")
|
||||||
If Starter.Logger Then Log("Entro: " & entro)
|
If Starter.Logger Then Log("Entro: " & entro)
|
||||||
' Log($"LIMITE ABORDO: ${limiteAbordo}"$)
|
' Log($"LIMITE ABORDO: ${limiteAbordo}"$)
|
||||||
' clv_prods_ll.Initialize(Me, "clv_prods_ll")
|
' clv_prods_ll.Initialize(Me, "clv_prods_ll")
|
||||||
@@ -243,10 +240,24 @@ Sub B4XPage_Appear
|
|||||||
' Log(Starter.tipov)
|
' Log(Starter.tipov)
|
||||||
c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp")
|
c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp")
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
|
|
||||||
|
Private mx As Map = ts.traeInfoTrendSpending
|
||||||
|
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||||
|
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||||
|
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||||
|
Dim bonificacionesDisp As String = TS_BONIFICACIONES(0)
|
||||||
|
Log(">>>>>>>>>>>>> TRADESPENDING: " & mx)
|
||||||
|
Log("RMI: " & TS_RMI(0) & "|" & TS_RMI(1))
|
||||||
|
Log("DESCUENTOS: " & TS_DESCUENTOS(0) & "|" & TS_DESCUENTOS(1))
|
||||||
|
Log("BONIFICACIONES: " & TS_BONIFICACIONES(0) & "|" & TS_BONIFICACIONES(1))
|
||||||
|
|
||||||
Log("revisaImpresa: " & Subs.revisaImpresa)
|
Log("revisaImpresa: " & Subs.revisaImpresa)
|
||||||
If c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then
|
Log("bonificacionesDisp: " & bonificacionesDisp)
|
||||||
|
If bonificacionesDisp = 0 Then ToastMessageShow("¡No hay presupuesto para promociones!", False)
|
||||||
|
If bonificacionesDisp > 0 And c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then
|
||||||
lv_catalogos.AddSingleLine("PROMOS")
|
lv_catalogos.AddSingleLine("PROMOS")
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
Sleep(100)
|
Sleep(100)
|
||||||
' l_total.Visible = False
|
' l_total.Visible = False
|
||||||
' l_totProds.Visible = False
|
' l_totProds.Visible = False
|
||||||
@@ -289,14 +300,6 @@ Sub B4XPage_Appear
|
|||||||
End If
|
End If
|
||||||
If B4XPages.MainPage.cliente.la_cuenta.text = "0" Then b_rmi.Visible = False
|
If B4XPages.MainPage.cliente.la_cuenta.text = "0" Then b_rmi.Visible = False
|
||||||
' Log(Starter.tipov)
|
' Log(Starter.tipov)
|
||||||
Private mx As Map = ts.traeInfoTrendSpending
|
|
||||||
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
|
||||||
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
|
||||||
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
|
||||||
Log(">>>>>>>>>>>>> TRADESPENDING: " & mx)
|
|
||||||
Log("RMI: " & TS_RMI(0) & "|" & TS_RMI(1))
|
|
||||||
Log("DESCUENTOS: " & TS_DESCUENTOS(0) & "|" & TS_DESCUENTOS(1))
|
|
||||||
Log("BONIFICACIONES: " & TS_BONIFICACIONES(0) & "|" & TS_BONIFICACIONES(1))
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub PCLV_AddProds
|
Sub PCLV_AddProds
|
||||||
@@ -345,7 +348,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
|
|||||||
|
|
||||||
c2 = Starter.skmt.ExecQuery($"select CAT_PA_TIPO_PROMONTO, CAT_PA_PORCENTAJE_PAQUETE, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$)
|
c2 = Starter.skmt.ExecQuery($"select CAT_PA_TIPO_PROMONTO, CAT_PA_PORCENTAJE_PAQUETE, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$)
|
||||||
|
|
||||||
Log($"select CAT_PA_TIPO_PROMONTO, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$)
|
' Log($"select CAT_PA_TIPO_PROMONTO, CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_TIPOPROD2, CAT_GP_PRECIO, CAT_GP_ALMACEN, 1 as CAT_GP_IMG from ${Subs.traeTablaProds(Starter.tipov)} left join PROMOS_COMP on CAT_GP_ID = CAT_PA_ID where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = '${Value}' AND CAT_GP_SUBTIPO = '${Value}' AND CAT_GP_TIPOPROD <> 1 and length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID ORDER BY CAT_GP_TIPOPROD2 DESC, CAT_GP_NOMBRE"$)
|
||||||
|
|
||||||
' Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$)
|
' Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$)
|
||||||
If c2.RowCount > 0 Then
|
If c2.RowCount > 0 Then
|
||||||
@@ -495,6 +498,11 @@ Sub llenaCatalogo(subtipo1 As String)
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub B4XPage_CloseRequest As ResumableSub
|
Private Sub B4XPage_CloseRequest As ResumableSub
|
||||||
|
If c.IsInitialized Then c.Close
|
||||||
|
If c2.IsInitialized Then c2.Close
|
||||||
|
If c3.IsInitialized Then c3.Close
|
||||||
|
If s.IsInitialized Then s.Close
|
||||||
|
If s1.IsInitialized Then s1.Close
|
||||||
' BACK key pressed
|
' BACK key pressed
|
||||||
' Return True To close, False To cancel
|
' Return True To close, False To cancel
|
||||||
If p_rmi.Visible Then p_rmi.Visible = False
|
If p_rmi.Visible Then p_rmi.Visible = False
|
||||||
@@ -661,6 +669,7 @@ Sub b_prodMenos_Click
|
|||||||
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
||||||
End If
|
End If
|
||||||
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
||||||
|
i.Close
|
||||||
End If
|
End If
|
||||||
If kh.totalPedido < 1 Then laCant.Text = "0"
|
If kh.totalPedido < 1 Then laCant.Text = "0"
|
||||||
' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
||||||
@@ -717,11 +726,12 @@ Sub b_prodMas_Click
|
|||||||
' Subs.modTrendSpending("resta", "bonificaciones", laBonificacion)
|
' Subs.modTrendSpending("resta", "bonificaciones", laBonificacion)
|
||||||
' Log(Subs.traeAcumuladoHoyTS("bonificaciones"))
|
' Log(Subs.traeAcumuladoHoyTS("bonificaciones"))
|
||||||
' End If
|
' End If
|
||||||
' Log("BONIFCACIONES RESTANTES: " & (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - Subs.traeAcumuladoHoyTS("bonificaciones")))
|
Log("BONIFCACIONES RESTANTES: " & (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - ts.traeAcumuladoHoyTS("bonificaciones")))
|
||||||
Private tsMonto As String = 0
|
Private tsMonto As String = 0
|
||||||
Private tsMaximas As Int = 0
|
Private tsMaximas As Int = 0
|
||||||
If lfila.Text = "PRODUCTOS" Then
|
If lfila.Text = "PRODUCTOS" Then
|
||||||
Log(">>>>>>>>>> PRODUCTOS <<<<<<<<<<<<<<")
|
Log(">>>>>>>>>> PRODUCTOS <<<<<<<<<<<<<<")
|
||||||
|
Log($"${TS_DESCUENTOS(0)} - ${TS_DESCUENTOS(1)} - ${ts.traeAcumuladoHoyTS("descuentos")}"$)
|
||||||
Private tsRestantes As String = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - ts.traeAcumuladoHoyTS("descuentos")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
Private tsRestantes As String = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - ts.traeAcumuladoHoyTS("descuentos")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||||
tsMonto = NumberFormat2(ts.traePrecio(id)*(ts.traeDescXSku(clienteId, id)/100), 1, 2, 2, False) ' Traemos el monto (descuento total) del producto actual.
|
tsMonto = NumberFormat2(ts.traePrecio(id)*(ts.traeDescXSku(clienteId, id)/100), 1, 2, 2, False) ' Traemos el monto (descuento total) del producto actual.
|
||||||
tsMaximas = ((laCant.text * tsMonto) + tsRestantes) / tsMonto ' Traemos la cantidad maxima de descuentos por presupuesto de Trend Spending.
|
tsMaximas = ((laCant.text * tsMonto) + tsRestantes) / tsMonto ' Traemos la cantidad maxima de descuentos por presupuesto de Trend Spending.
|
||||||
@@ -844,6 +854,7 @@ Sub b_prodMas_Click
|
|||||||
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
invActualizado = i.GetString("CAT_GP_ALMACEN")
|
||||||
End If
|
End If
|
||||||
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
If Starter.tipov <> "ABORDO" Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}"$).Popall
|
||||||
|
i.Close
|
||||||
End If
|
End If
|
||||||
Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$)
|
||||||
Sleep(300)
|
Sleep(300)
|
||||||
@@ -1116,6 +1127,7 @@ Sub b_terminar1_Click
|
|||||||
If Subs.revisaImpresa Then b_rechazar.Visible = False Else b_rechazar.Visible = True
|
If Subs.revisaImpresa Then b_rechazar.Visible = False Else b_rechazar.Visible = True
|
||||||
p_vistaPrevia.Visible=True
|
p_vistaPrevia.Visible=True
|
||||||
p_vistaPreviaTrans.Visible=True
|
p_vistaPreviaTrans.Visible=True
|
||||||
|
Subs.RecalcularInventario
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub b_continuar_Click
|
Private Sub b_continuar_Click
|
||||||
@@ -1144,6 +1156,7 @@ Private Sub b_continuar_Click
|
|||||||
montoPedidoActual = m.Get("monto")
|
montoPedidoActual = m.Get("monto")
|
||||||
' LlenaProdsLL(Null)
|
' LlenaProdsLL(Null)
|
||||||
' BUSCA.Text = " "
|
' BUSCA.Text = " "
|
||||||
|
Subs.RecalcularInventario
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub l_info_Click
|
Private Sub l_info_Click
|
||||||
@@ -1160,6 +1173,7 @@ Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object)
|
|||||||
End If
|
End If
|
||||||
l_info.Text = $"ID: ${id}${CRLF}${Value}"$
|
l_info.Text = $"ID: ${id}${CRLF}${Value}"$
|
||||||
l_info.Visible = True
|
l_info.Visible = True
|
||||||
|
c.Close
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub b_buscar_Click
|
Private Sub b_buscar_Click
|
||||||
@@ -1240,6 +1254,7 @@ Private Sub b_aceptar_Click
|
|||||||
' LogColor(p.GetString("total"), Colors.red)
|
' LogColor(p.GetString("total"), Colors.red)
|
||||||
If p.GetString("total") < 1 Then LlenaProdsLL(Null, Null)
|
If p.GetString("total") < 1 Then LlenaProdsLL(Null, Null)
|
||||||
p_vistaPreviaTrans.Visible=False
|
p_vistaPreviaTrans.Visible=False
|
||||||
|
p.Close
|
||||||
Subs.iniciaActividad("Cliente")
|
Subs.iniciaActividad("Cliente")
|
||||||
' B4XPages.ShowPage("Cliente")
|
' B4XPages.ShowPage("Cliente")
|
||||||
End Sub
|
End Sub
|
||||||
@@ -1337,6 +1352,7 @@ Sub l_prodX_Click
|
|||||||
Log(Sender.as(Label).tag)
|
Log(Sender.as(Label).tag)
|
||||||
l_info.BringToFront
|
l_info.BringToFront
|
||||||
l_info.Visible = True
|
l_info.Visible = True
|
||||||
|
i.Close
|
||||||
' Dim index As Int = clv_prods_ll.GetItemFromView(Sender)
|
' Dim index As Int = clv_prods_ll.GetItemFromView(Sender)
|
||||||
' Private p0 As B4XView = clv_prods_ll.GetPanel(index)
|
' Private p0 As B4XView = clv_prods_ll.GetPanel(index)
|
||||||
' Private p As B4XView = p0.GetView(0)
|
' Private p As B4XView = p0.GetView(0)
|
||||||
@@ -1409,6 +1425,7 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
|||||||
prioridad = p1.GetInt("CAT_GP_TIPOPROD2")
|
prioridad = p1.GetInt("CAT_GP_TIPOPROD2")
|
||||||
' Log(prioridad)
|
' Log(prioridad)
|
||||||
End If
|
End If
|
||||||
|
p1.Close
|
||||||
' Log("NIVEL: " & lfila.Text)
|
' Log("NIVEL: " & lfila.Text)
|
||||||
If lfila.Text = "RMI" Then ' Si es RMI, la cantidad solo se puede cambiar con los botones.
|
If lfila.Text = "RMI" Then ' Si es RMI, la cantidad solo se puede cambiar con los botones.
|
||||||
et_pCant.Enabled = False
|
et_pCant.Enabled = False
|
||||||
@@ -1441,8 +1458,8 @@ Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As In
|
|||||||
If clv_prods_ll.GetValue(i).As(Map).Get("almacen").As(Int) = Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id")) Then
|
If clv_prods_ll.GetValue(i).As(Map).Get("almacen").As(Int) = Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id")) Then
|
||||||
' Log("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|")
|
' Log("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|")
|
||||||
Else
|
Else
|
||||||
LogColor("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|"&clv_prods_ll.GetValue(i).As(Map).Get("prod")&"|", Colors.red)
|
' LogColor("|"&clv_prods_ll.GetValue(i).As(Map).Get("almacen") & "|" & Subs.traeExistenciasPorId(clv_prods_ll.GetValue(i).As(Map).Get("id"))&"|"&clv_prods_ll.GetValue(i).As(Map).Get("prod")&"|", Colors.red)
|
||||||
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
' LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
||||||
End If
|
End If
|
||||||
'#######################################################
|
'#######################################################
|
||||||
|
|
||||||
@@ -1557,6 +1574,7 @@ Sub LlenaProdsLL(p As ResultSet, extra As String)
|
|||||||
invAbordo = ab.GetString("CAT_GP_ALMACEN")
|
invAbordo = ab.GetString("CAT_GP_ALMACEN")
|
||||||
' Log(invAbordo)
|
' Log(invAbordo)
|
||||||
End If
|
End If
|
||||||
|
ab.Close
|
||||||
End If
|
End If
|
||||||
Private precio As String = NumberFormat2(p.GetDouble("CAT_GP_PRECIO"),1,2,2,False)
|
Private precio As String = NumberFormat2(p.GetDouble("CAT_GP_PRECIO"),1,2,2,False)
|
||||||
'Descuentos de condiciones comerciales por TIPO
|
'Descuentos de condiciones comerciales por TIPO
|
||||||
|
|||||||
@@ -4,6 +4,74 @@ ModulesStructureVersion=1
|
|||||||
Type=Class
|
Type=Class
|
||||||
Version=11.5
|
Version=11.5
|
||||||
@EndOfDesignText@
|
@EndOfDesignText@
|
||||||
|
Sub Descripcion
|
||||||
|
' *** FLUJO DE LAS PROMOCIONES ***
|
||||||
|
' Aquí está el desglose del flujo actual de decisión para mostrar una promoción, calculando los máximos y aplicando las restricciones de Segmentación, Inventario y Trade Spending (Bonificaciones).
|
||||||
|
'
|
||||||
|
' ### Flujo Maestro: ¿Se muestra la promo y cuántas alcanzan?
|
||||||
|
'
|
||||||
|
' El proceso se ejecuta secuencialmente. Si en algún punto el resultado es 0, la promoción no se muestra o se marca como agotada.
|
||||||
|
'
|
||||||
|
' #### 1. Cálculo de Límites Administrativos (La Base)
|
||||||
|
'
|
||||||
|
' Lo primero que hace el sistema es determinar el "Techo Teórico" de cuántas promociones se pueden vender Sin mirar inventario ni dinero aún.
|
||||||
|
' * **Paso A: Datos Generales:** Se obtienen los límites configurados en `PROMOS_COMP`: Máximo por Cliente, Máximo Recurrente y Máximo Global.
|
||||||
|
' * **Paso B: Lógica de Promociones Segmentadas:** Aquí entra el filtro crítico.
|
||||||
|
' * El sistema consulta `HIST_CLIENTE_CANT_PROMOS`.
|
||||||
|
' * **Si la promo es segmentada:**
|
||||||
|
' * Si el cliente **NO** está en la lista: Se establecen todos los máximos a 0. La promo se oculta.
|
||||||
|
' * Si el cliente **SÍ** está en la lista: Se ignoran los límites generales y se usan los específicos asignados al cliente.
|
||||||
|
' * **Fórmula:** `MaxDisponible = Asignado - Vendido`.
|
||||||
|
' * **Paso C: Cálculo del Mínimo:** Se comparan todos los límites (Global, Recurrente, Cliente/Segmentado) y se toma el **valor más pequeño** como el `MaxPromos` inicial.
|
||||||
|
'
|
||||||
|
' #### 2. Restricción por Inventario de Productos FIJOS
|
||||||
|
'
|
||||||
|
' Una vez que sabemos cuántas *podríamos* vender administrativamente, revisamos si tenemos los productos obligatorios (Fijos).
|
||||||
|
' * El sistema itera sobre cada producto fijo de la promoción.
|
||||||
|
' * **Cálculo:** `InventarioDisponible / PiezasRequeridasPorPromo`.
|
||||||
|
' * **Resultado:** El `MaxPromos` se actualiza al **mínimo** entre el valor del Paso 1 y lo que permite el inventario de cada producto fijo.
|
||||||
|
' * *Nota Crítica:* Si este valor es 0, la promo se marca como "KO" (No disponible).
|
||||||
|
'
|
||||||
|
' #### 3. El Cruce de Inventarios (La Resta)
|
||||||
|
'
|
||||||
|
' Este es el punto que mencionaste y es vital en el flujo actual. Antes de evaluar si alcanzan los productos variables, el código **simula la venta de los productos fijos**.
|
||||||
|
' * Se toma el mapa de inventario actual.
|
||||||
|
' * Se ejecuta `restaFijosDePromo`.
|
||||||
|
' * **Acción:** Para cada producto fijo, se resta: `(MaxPromosCalculado * PiezasRequeridas)`.
|
||||||
|
' * **Resultado:** Se genera un *Nuevo Mapa de Inventario Virtual* que contiene solo lo que sobró después de apartar lo necesario para la parte fija. Este mapa es el que se pasa a la siguiente etapa.
|
||||||
|
'
|
||||||
|
' #### 4. Cálculo de Variables y Restricción de Trade Spending (TS)
|
||||||
|
'
|
||||||
|
' Aquí es donde la lógica se vuelve compleja y utiliza los bucles iterativos para validar tanto existencia física como presupuesto financiero (Bonificaciones).
|
||||||
|
' Se ejecuta `revisaMaxPromosProdsVariablesPorInventario`, que usa el *Inventario Virtual* del paso anterior.
|
||||||
|
' **El Bucle de Validación (Paso a Paso):**
|
||||||
|
' El código prueba vender 1 promo, luego 2, hasta llegar al `MaxPromos` calculado en el paso 2.
|
||||||
|
' 1. **Iteración `x` (Número de promos a probar):**
|
||||||
|
' 2. **Consumo de Fijos en Variables:** Si un producto variable *también* es fijo, el código descuenta (otra vez) el inventario necesario para la parte fija dentro de este bucle para asegurar integridad.
|
||||||
|
' 3. **Suma de Inventario Variable:** Se suman las existencias de todos los productos que califican como variables para esta promo.
|
||||||
|
' 4. **Validación de Trade Spending (El Presupuesto):**
|
||||||
|
' * Dentro del bucle, para cada producto variable disponible, se llama a `ts.traeBonificacionesMaximas`.
|
||||||
|
' * **La Lógica de ts:** El sistema verifica si el producto actual califica como bonificación (precio especial/cero).
|
||||||
|
' * **Si califica:** Verifica si hay saldo en el presupuesto de "BONIFICACIONES". Si no hay saldo, este producto variable **no se cuenta** como disponible para armar la promo en esta iteración.
|
||||||
|
' * **Si NO califica:** (Es un producto de precio normal dentro de la promo), no consume presupuesto y se cuenta libremente según su inventario físico.
|
||||||
|
' 5. **Prueba de Fuego:**
|
||||||
|
' * Se compara: `InventarioVariableValidado (Físico + Financiero)` vs `(PiezasVariablesRequeridas * x)`.
|
||||||
|
' * Si alcanza, el ciclo continúa para probar `x + 1`.
|
||||||
|
' * Si no alcanza, el ciclo se rompe y se define el máximo posible.
|
||||||
|
'
|
||||||
|
' ### Resumen del Factor TS en el Flujo
|
||||||
|
'
|
||||||
|
' El presupuesto de ts no bloquea la promo "per se", sino que **filtra qué productos variables están disponibles**.
|
||||||
|
' * Si la promo pide 3 variables.
|
||||||
|
' * Tienes 5 opciones en inventario físico.
|
||||||
|
' * 2 opciones son "Bonificación" (consumen presupuesto) y 3 son venta normal.
|
||||||
|
' * **Escenario Sin Presupuesto:** Al iterar, `ts.traeBonificacionesMaximas` devolverá 0 para los 2 productos de bonificación. El sistema solo verá 3 productos disponibles (los normales).
|
||||||
|
' * **Resultado:** Como la promo pide 3 y el sistema "ve" 3 disponibles, la promo **SÍ SE MUESTRA**.
|
||||||
|
' * **Bloqueo:** Solo se bloquearía si la promo pidiera 4 variables, ya que Sin presupuesto ts solo "vemos" 3 productos disponibles, insuficientes para armar el paquete.
|
||||||
|
'
|
||||||
|
' ### Este flujo garantiza que la promo se muestre siempre que sea *físicamente* posible armarla, restringiendo la parte financiera solo a los ítems que realmente cuestan dinero al presupuesto de bonificaciones.
|
||||||
|
End Sub
|
||||||
|
|
||||||
Sub Class_Globals
|
Sub Class_Globals
|
||||||
Private Root As B4XView 'ignore
|
Private Root As B4XView 'ignore
|
||||||
Private xui As XUI
|
Private xui As XUI
|
||||||
@@ -74,6 +142,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub B4XPage_Appear
|
Sub B4XPage_Appear
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a Promos")
|
||||||
B4XPages.MainPage.productos.entro = 3
|
B4XPages.MainPage.productos.entro = 3
|
||||||
' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue)
|
' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue)
|
||||||
prodsIds.Initialize
|
prodsIds.Initialize
|
||||||
|
|||||||
@@ -48,6 +48,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
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a TicketsDia")
|
||||||
nombre_boton = "NOVENTA"
|
nombre_boton = "NOVENTA"
|
||||||
c=Starter.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc")
|
c=Starter.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc")
|
||||||
ListView1.Clear
|
ListView1.Clear
|
||||||
@@ -90,9 +91,10 @@ Sub Activity_KeyPress (key As Int) As Boolean
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub ListView1_ItemLongClick (Position As Int, Value As Object)
|
Sub ListView1_ItemLongClick (Position As Int, Value As Object)
|
||||||
Log(value)
|
Log(Value)
|
||||||
Starter.skmt.ExecNonQuery("delete from CUENTAA")
|
Starter.skmt.ExecNonQuery("delete from CUENTAA")
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value))
|
||||||
|
B4XPages.MainPage.aud.guarda($"Clic largo TicketsDia: ${Value}"$)
|
||||||
Subs.iniciaActividad("Cliente")
|
Subs.iniciaActividad("Cliente")
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
456
B4A/C_TrendSpending.bas
Normal file
456
B4A/C_TrendSpending.bas
Normal file
@@ -0,0 +1,456 @@
|
|||||||
|
B4A=true
|
||||||
|
Group=Default Group
|
||||||
|
ModulesStructureVersion=1
|
||||||
|
Type=Class
|
||||||
|
Version=12.8
|
||||||
|
@EndOfDesignText@
|
||||||
|
' Clase para las funciones de Trend Spending.
|
||||||
|
' Trend spending son 3 presupuestos que tiene Kelloggs, que son bonificaciones, descuentos y RMIs, estos se calculan semanalmente
|
||||||
|
' y se descargan de la tabla HIST_TRADE_SPENDING_SEMANAL, de ahi obtenemos el presupuesto de la semana y el acumulado hasta ayer
|
||||||
|
' en la noche, a cada presupuesto le vamos sumando cada que agregamos a pedido un DESCUENTO (Precios diferentes al original que
|
||||||
|
' NO están en PROMOS), una BONIFICACION (precios con descuento que estan en promociones) o un RMI (de estos sumamos al presupuesto
|
||||||
|
' el precio del RMI seleccionado), de acuerdo al presupuesto disponible de cada tipo, se limitan los productos, es decir que si
|
||||||
|
' el presupuesto de bonificaciones ya se agoto, ya no aparecen promociones, o si el de descuentos se agoto, ya no se pueden agregar
|
||||||
|
' mas productos con descuento.
|
||||||
|
|
||||||
|
' Descuento es TODO lo que tenga un precio diferente al precio de lista y NO esta en promo.
|
||||||
|
' Bonificacion es lo que tiene precio diferente al orginal y esta en promo y NO es regalo o exhibidor.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Sub Class_Globals
|
||||||
|
Private EventName As String 'ignore
|
||||||
|
Private CallBack As Object 'ignore
|
||||||
|
Dim tsMaximas As Int = 0
|
||||||
|
Private tsdb As SQL
|
||||||
|
Dim TS_RMI() As String
|
||||||
|
Dim TS_DESCUENTOS() As String
|
||||||
|
Dim TS_BONIFICACIONES() As String
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Initializes the object. You can add parameters to this method if needed.
|
||||||
|
Public Sub Initialize (vCallback As Object, vEventName As String, db As SQL) As Object
|
||||||
|
EventName = vEventName
|
||||||
|
CallBack = vCallback
|
||||||
|
tsdb = db
|
||||||
|
Private mx As Map = traeInfoTrendSpending
|
||||||
|
LogColor(mx, Colors.red)
|
||||||
|
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||||
|
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||||
|
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||||
|
LogColor(">>>>>>>>>>>>> TRENDSPENDING: " & mx, Colors.red)
|
||||||
|
LogColor("RMI: " & TS_RMI(0) & "|" & TS_RMI(1), Colors.red)
|
||||||
|
LogColor("DESCUENTOS: " & TS_DESCUENTOS(0) & "|" & TS_DESCUENTOS(1), Colors.red)
|
||||||
|
LogColor("BONIFICACIONES: " & TS_BONIFICACIONES(0) & "|" & TS_BONIFICACIONES(1), Colors.red)
|
||||||
|
Return Me
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta.
|
||||||
|
Sub traeTablaProds(tipoventa As String) As String
|
||||||
|
Private tablaProds As String = "cat_gunaprod2"
|
||||||
|
If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod"
|
||||||
|
' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0))
|
||||||
|
Return tablaProds
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Regresa el descuento de condiciones comerciales por SKU.
|
||||||
|
Sub traeDescXSku(clienteId As String, prodId As String) As String 'ignore
|
||||||
|
Private desc As String = "0"
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"Select * from CAT_DESCUENTOS_SKU where CAT_DS_CLIENTE = '${clienteId}' and CAT_DS_PRODID = '${prodId}'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
desc = c.GetString("CAT_DS_PORCENTAJE")
|
||||||
|
End If
|
||||||
|
Return desc
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Regresa un mapa con el tipo, monto permitido semanal y el acumulado hasta el día anterior:
|
||||||
|
' ej:
|
||||||
|
' - RMI=1500,0
|
||||||
|
' - DESCUENTOS=1500,0
|
||||||
|
' - BONIFICACIONES=1500,480
|
||||||
|
Sub traeInfoTrendSpending As Map
|
||||||
|
Private semana As Int = 0
|
||||||
|
Private HIST_TSS_SEMANA As String = 0
|
||||||
|
Private HIST_TSS_SEMANA_ACUM As String = 0
|
||||||
|
Private m As Map = CreateMap("RMI": 10000000 & "," & 0, "DESCUENTOS": 10000000 & "," & 0, "BONIFICACIONES": 10000000 & "," & 0) ' El 100,000 es el default del presupuesto, por si NO HAY datos de trend spending.
|
||||||
|
' m.Initialize
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select cat_va_valor from cat_variables where cat_va_descripcion = 'SEM_CAL_LABORAL'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
semana = c.GetInt("CAT_VA_VALOR")
|
||||||
|
End If
|
||||||
|
If semana > 0 Then
|
||||||
|
c = tsdb.ExecQuery($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
|
||||||
|
Log($"select HIST_TSS_TIPO, HIST_TSS_SEMANA${semana}, ifnull(HIST_TSS_SEMANA${semana}_ACUM,0) as HIST_TSS_SEMANA${semana}_ACUM from HIST_TREND_SPENDING_SEMANAL"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
For i = 0 To c.RowCount - 1
|
||||||
|
c.Position = i
|
||||||
|
HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$)
|
||||||
|
If Not(IsNumber(HIST_TSS_SEMANA)) Then HIST_TSS_SEMANA = 0
|
||||||
|
Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
|
||||||
|
If xx = "null" Then xx = 0
|
||||||
|
HIST_TSS_SEMANA_ACUM = xx
|
||||||
|
If c.GetString("HIST_TSS_TIPO") = "RMI" Then
|
||||||
|
m.Put("RMI", HIST_TSS_SEMANA & "," & HIST_TSS_SEMANA_ACUM)
|
||||||
|
else if c.GetString("HIST_TSS_TIPO") = "DESCUENTOS" Then
|
||||||
|
m.Put("DESCUENTOS", HIST_TSS_SEMANA & "," & HIST_TSS_SEMANA_ACUM)
|
||||||
|
else if c.GetString("HIST_TSS_TIPO") = "BONIFICACIONES" Then
|
||||||
|
m.Put("BONIFICACIONES", HIST_TSS_SEMANA & "," & HIST_TSS_SEMANA_ACUM)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return m
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Modifica el acumulado del Trend Speding, le "suma" o "resta" al presupuesto especificado (RMI, BONIFICACIONES o DESCUENTOS)
|
||||||
|
Sub modTrendSpending(accion As String, tipo As String, monto As String)
|
||||||
|
LogColor($"#### ACCION: ${accion}, Tipo: ${tipo}, Monto: ${monto}"$, Colors.Blue)
|
||||||
|
Private HIST_TSS_SEMANA As String
|
||||||
|
Private HIST_TSS_SEMANA_ACUM As String
|
||||||
|
Private acumulado As String = "0"
|
||||||
|
If Starter.semana = 0 Then
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select cat_va_valor from cat_variables where cat_va_descripcion = 'SEM_CAL_LABORAL'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
Starter.semana = c.GetInt("CAT_VA_VALOR")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
HIST_TSS_SEMANA = $"HIST_TSS_SEMANA${Starter.semana}"$
|
||||||
|
HIST_TSS_SEMANA_ACUM = $"HIST_TSS_SEMANA${Starter.semana}_ACUM"$
|
||||||
|
Private d As Cursor = tsdb.ExecQuery($"select ifnull(acumulado, 0) as ACUMULADO from TREND_SPENDING where tipo = '${tipo.ToUpperCase}'"$)
|
||||||
|
If d.RowCount > 0 Then
|
||||||
|
d.Position = 0
|
||||||
|
acumulado = d.GetString("ACUMULADO")
|
||||||
|
End If
|
||||||
|
Log("acumulado:" & acumulado & " | monto: " & monto)
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select HIST_TSS_TIPO, ifnull(${HIST_TSS_SEMANA},0) as disponible, ifnull(${HIST_TSS_SEMANA_ACUM},0) as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
|
||||||
|
' Log(($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$))
|
||||||
|
Log("---- " & c.RowCount)
|
||||||
|
If accion.ToUpperCase = "RESTA" Then
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
If tipo.ToUpperCase = "DESCUENTOS" Or tipo.ToUpperCase = "RMI" Or tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||||
|
Private nuevaBonificacion As String = NumberFormat2((acumulado + monto), 1, 2, 2, False)
|
||||||
|
LogColor($"Nuevo acumulado ${tipo} = ${nuevaBonificacion}"$, Colors.Magenta)
|
||||||
|
tsdb.ExecNonQuery($"delete from TREND_SPENDING where tipo = '${tipo.ToUpperCase}' "$)
|
||||||
|
tsdb.ExecNonQuery($"insert into TREND_SPENDING (tipo, acumulado) values ('${tipo.ToUpperCase}', '${nuevaBonificacion}')"$)
|
||||||
|
Log($"Insertamos en TRADE_SPENDING: ${nuevaBonificacion}"$)
|
||||||
|
' else if tipo.ToUpperCase = "RMI" Then
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
else if accion.ToUpperCase = "SUMA" Then
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
If tipo.ToUpperCase = "DESCUENTOS" Or tipo.ToUpperCase = "RMI" Or tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||||
|
Private nuevaBonificacion As String = NumberFormat2((acumulado - monto), 1, 2, 2, False)
|
||||||
|
LogColor($"Nueva bonificacion = ${nuevaBonificacion}"$, Colors.Magenta)
|
||||||
|
tsdb.ExecNonQuery($"delete from TREND_SPENDING where tipo = '${tipo.ToUpperCase}' "$)
|
||||||
|
tsdb.ExecNonQuery($"insert into TREND_SPENDING (tipo, acumulado) values ('${tipo.ToUpperCase}', '${nuevaBonificacion}')"$)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub traeAcumuladoHoyTS(tipo As String) As String
|
||||||
|
' Private HIST_TSS_SEMANA As String
|
||||||
|
' Private HIST_TSS_SEMANA_ACUM As String
|
||||||
|
Private acumulado As String = "0"
|
||||||
|
If Starter.semana = 0 Then
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select cat_va_valor from cat_variables where cat_va_descripcion = 'SEM_CAL_LABORAL'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
Starter.semana = c.GetInt("CAT_VA_VALOR")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
' HIST_TSS_SEMANA = $"HIST_TSS_SEMANA${Starter.semana}"$
|
||||||
|
' HIST_TSS_SEMANA_ACUM = $"HIST_TSS_SEMANA${Starter.semana}_ACUM"$
|
||||||
|
Private d As Cursor = tsdb.ExecQuery($"select acumulado from TREND_SPENDING where tipo = '${tipo.ToUpperCase}'"$)
|
||||||
|
If d.RowCount > 0 Then
|
||||||
|
d.Position = 0
|
||||||
|
acumulado = d.GetString("ACUMULADO")
|
||||||
|
End If
|
||||||
|
' LogColor($"Acumulado hoy de ${tipo}: "$ & acumulado, Colors.Blue)
|
||||||
|
Return NumberFormat2(acumulado, 1, 2, 2, False)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Trae el cliente de CUENTAA
|
||||||
|
Sub traeCliente As String 'ignore
|
||||||
|
Private c As Cursor
|
||||||
|
Private cl As String
|
||||||
|
c = Starter.skmt.ExecQuery("Select CUENTA from cuentaa")
|
||||||
|
c.Position = 0
|
||||||
|
cl = c.GetString("CUENTA")
|
||||||
|
c.Close
|
||||||
|
Return cl
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub traePrecio(id As String) As String
|
||||||
|
Private precio As String = "0"
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select cat_gp_precio from ${traeTablaProds(Starter.tipov)} where cat_gp_id = '${id}'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
precio = c.GetString("CAT_GP_PRECIO")
|
||||||
|
End If
|
||||||
|
Return precio
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub trendSpending(accion As String, tipo As String, clienteId As String, id As String, laCant As String, inv As Int) As String
|
||||||
|
Private logger As Boolean = True
|
||||||
|
LogColor("-------- > TRADE SPENDING < ---------", Colors.red)
|
||||||
|
' Log("DescxSku: " & traeDescXSku(clienteId, id))
|
||||||
|
Dim TS_RMI() As String
|
||||||
|
Dim TS_DESCUENTOS() As String
|
||||||
|
Dim TS_BONIFICACIONES() As String
|
||||||
|
Private mx As Map = traeInfoTrendSpending
|
||||||
|
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||||
|
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||||
|
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||||
|
If tipo.ToUpperCase = "RMI" Then
|
||||||
|
Private lasMaximas As Int = 0
|
||||||
|
Log($"Acumulado de RMIs: ${traeAcumuladoHoyTS("rmi")}"$)
|
||||||
|
Private elMonto As String = NumberFormat2(traePrecioRMI(id), 1, 2, 2, False)
|
||||||
|
If logger Then Log($"elMonto: ${elMonto}"$)
|
||||||
|
' If logger Then Log($"TS_RMI(0): ${TS_RMI(0)}"$)
|
||||||
|
' If logger Then Log($"TS_RMI(1): ${TS_RMI(1)}"$)
|
||||||
|
If logger Then Log($"LaCant: ${laCant}"$)
|
||||||
|
Private tsRestantes As String = (TS_RMI(0) - TS_RMI(1) - traeAcumuladoHoyTS("rmi"))
|
||||||
|
Log($"tsRestantes: ${tsRestantes}"$)
|
||||||
|
If accion.ToUpperCase = "PRODMAS" Then 'Regresa lasMaximas y elMonto separadas por un "|"
|
||||||
|
If elMonto > 0 Then
|
||||||
|
lasMaximas = ((laCant * elMonto) + tsRestantes) / elMonto
|
||||||
|
If logger Then Log("lasMaximas: " & lasMaximas)
|
||||||
|
If logger Then Log("traeAcumuladoHoyTS: " & traeAcumuladoHoyTS("rmi"))
|
||||||
|
End If
|
||||||
|
' If laCant + 1 = lasMaximas Then
|
||||||
|
' ToastMessageShow("El presupuesto de RMI no permite agregar mas productos!!", False)
|
||||||
|
' End If
|
||||||
|
If logger Then Log("EL RMI: " & elMonto)
|
||||||
|
If logger Then Log($"lacant=${laCant} < lasMaximas=${lasMaximas} = ${laCant<lasMaximas}"$)
|
||||||
|
If laCant < lasMaximas Then
|
||||||
|
modTrendSpending("resta", "rmi", elMonto) ' Restamos al presupuesto de hoy (agregamos al acumulado).
|
||||||
|
Log($"modTrendSpending("resta", "rmi", ${elMonto})"$)
|
||||||
|
End If
|
||||||
|
If logger Then LogColor("RMI RESTANTES: " & (TS_RMI(0) - TS_RMI(1) - traeAcumuladoHoyTS("rmi")), Colors.red)
|
||||||
|
Return lasMaximas & "|" & elMonto
|
||||||
|
else if accion.ToUpperCase = "PRODMENOS" Then
|
||||||
|
If logger Then Log("LaCANT= " & laCant & ", elMonto= " & elMonto)
|
||||||
|
If laCant >= 0 Then
|
||||||
|
modTrendSpending("suma", "rmi", elMonto) ' Agregamos al presupuesto de hoy (restamos del acumulado).
|
||||||
|
Log($"modTrendSpending("suma", "rmi", ${elMonto})"$)
|
||||||
|
End If
|
||||||
|
Return lasMaximas & "|" & elMonto
|
||||||
|
End If
|
||||||
|
else If tipo.ToUpperCase = "DESCUENTOS" Then
|
||||||
|
Dim lasMaximas As Int = 0
|
||||||
|
Dim elMonto As String = 0
|
||||||
|
Private elMonto As String = NumberFormat2(traePrecio(id)*(traeDescXSku(clienteId, id)/100), 1, 2, 2, False)
|
||||||
|
Private tsRestantes As String = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - traeAcumuladoHoyTS("descuentos"))
|
||||||
|
If logger Then Log("EL MONTO: " & elMonto)
|
||||||
|
If logger Then LogColor("Monto del presupuesto disponible: " & tsRestantes, Colors.blue)
|
||||||
|
If accion.ToUpperCase = "PRODMAS" Then 'Regresa lasMaximas y elMonto separadas por un "|"
|
||||||
|
' If logger Then Log("PMAS")
|
||||||
|
If elMonto > 0 Then
|
||||||
|
lasMaximas = ((laCant * elMonto) + tsRestantes) / elMonto
|
||||||
|
If logger Then Log("lasMaximas: " & lasMaximas)
|
||||||
|
' If logger Then Log("lasMaximas2: " & traeMaximas("descuentos", clienteId, id, laCant, ""))
|
||||||
|
If logger Then Log("Acumulado hoy: " & traeAcumuladoHoyTS("descuentos"))
|
||||||
|
End If
|
||||||
|
If laCant = lasMaximas Then
|
||||||
|
ToastMessageShow("El presupuesto de DESCUENTOS no permite agregar mas productos!!", False)
|
||||||
|
End If
|
||||||
|
If logger Then Log("EL MONTO: " & elMonto)
|
||||||
|
If inv > 0 And laCant < lasMaximas Then
|
||||||
|
modTrendSpending("resta", "descuentos", elMonto) ' Restamos al presupuesto de hoy (agregamos al acumulado).
|
||||||
|
End If
|
||||||
|
If logger Then Log(">>>> MONTO RESTANTE PRESUPUESTO: " & (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - traeAcumuladoHoyTS("descuentos")))
|
||||||
|
Return lasMaximas & "|" & elMonto
|
||||||
|
else if accion.ToUpperCase = "PRODMENOS" Then 'Regresa descuentosMaximas y elMonto separadas por un "|"
|
||||||
|
If logger Then Log("LaCANT= " & laCant & ", elMonto= " & elMonto)
|
||||||
|
If laCant >= 0 Then
|
||||||
|
modTrendSpending("suma", "descuentos", elMonto) ' Agregamos al presupuesto de hoy (restamos del acumulado).
|
||||||
|
End If
|
||||||
|
Return lasMaximas & "|" & elMonto
|
||||||
|
else if accion.ToUpperCase = "TEXTCHANGED" Then
|
||||||
|
If logger Then Log("TC")
|
||||||
|
else if accion.ToUpperCase = "FOCUSCHANGED" Then 'Regresa descuentos maximas, SOLO correr esta parte si HASFOCUS es VERDADERO.
|
||||||
|
If logger Then Log("FC")
|
||||||
|
Private elMonto As String = traePrecio(id)*(traeDescXSku(clienteId, id)/100)
|
||||||
|
If elMonto > 0 Then 'And HasFocus
|
||||||
|
If logger Then Log("LA BONIFICACION: " & elMonto)
|
||||||
|
Private tsRestantes As String = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - traeAcumuladoHoyTS("descuentos"))
|
||||||
|
If logger Then Log("Monto del PRESUPUESTO disponible: " & tsRestantes)
|
||||||
|
lasMaximas = ((laCant * elMonto) + tsRestantes) / elMonto
|
||||||
|
If logger Then Log("tsMaximas: " & lasMaximas)
|
||||||
|
End If
|
||||||
|
Return lasMaximas
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Trae el precio del RMI desde CAT_RMI.
|
||||||
|
Sub traePrecioRMI(id As String) As String
|
||||||
|
Private precio As String = "0"
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"select cat_monto from cat_rmi where cat_id = '${id}'"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
precio = c.GetString("CAT_MONTO")
|
||||||
|
End If
|
||||||
|
Return precio
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Traemos el monto (descuento total) del producto actual.
|
||||||
|
' Utiliza el descuento de condiciones comerciales por SKU (tabla CAT_DESCUENTOS).
|
||||||
|
Sub traeMonto(clienteId As String, id As String) As String
|
||||||
|
Private tsMonto As String
|
||||||
|
tsMonto = NumberFormat2(traePrecio(id)*(traeDescXSku(clienteId, id)/100), 1, 2, 2, False)
|
||||||
|
Return tsMonto
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Trae la cantidad máxima de rmis, bonificaciones o descuentos por presupuesto.
|
||||||
|
Sub traeMaximas(tipo As String, clienteId As String, id As String, laCant As String, promoId As String) As Int
|
||||||
|
Private tsMaximas As Int = 10000000
|
||||||
|
Private tsRestantes As String = 0
|
||||||
|
Private tsMonto As String '= traeMonto(clienteId, id)
|
||||||
|
' If tsMonto > 0 Then
|
||||||
|
If tipo.ToUpperCase = "DESCUENTOS" Then
|
||||||
|
tsMonto = NumberFormat2(traePrecio(id)*(traeDescXSku(clienteId, id)/100), 1, 2, 2, False)
|
||||||
|
tsRestantes = (TS_DESCUENTOS(0) - TS_DESCUENTOS(1) - traeAcumuladoHoyTS("descuentos")) ' Traemos monto restante de Trend Spending para descuentos.
|
||||||
|
else If tipo.ToUpperCase = "RMI" Then
|
||||||
|
tsMonto = NumberFormat2(traePrecioRMI(id), 1, 2, 2, False)
|
||||||
|
tsRestantes = (TS_RMI(0) - TS_RMI(1) - traeAcumuladoHoyTS("rmi")) ' Traemos monto restante de Trend Spending para rmis.
|
||||||
|
' else If tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||||
|
' tsMonto = NumberFormat2(traeMontoBonificacion(id, promoId), 1, 2, 2, False)
|
||||||
|
' tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||||
|
End If
|
||||||
|
' Log($"${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||||
|
' Log($"((${laCant} * ${tsMonto}) + ${tsRestantes}) / ${tsMonto}"$)
|
||||||
|
Log($"tsMonto: ${tsMonto}"$)
|
||||||
|
Log($"tsRestantes: ${tsRestantes}"$)
|
||||||
|
tsMaximas = ((laCant * tsMonto) + tsRestantes) / tsMonto
|
||||||
|
' End If
|
||||||
|
Return tsMaximas
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Trae la cantidad máxima de productos con bonificacion por presupuesto.
|
||||||
|
' Si el presupuesto es 10 y la bonificacion del producto es 2, el máximo es 5 productos.
|
||||||
|
Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String, laCant As String, elPrecioVenta As String, promoId As String) As Int
|
||||||
|
Private thisLog As Boolean = True
|
||||||
|
Private tsMaximas As Int = 100000000
|
||||||
|
Private tsRestantes As String = 0
|
||||||
|
Private tsMonto As String
|
||||||
|
|
||||||
|
Private mx As Map = traeInfoTrendSpending
|
||||||
|
TS_RMI = Regex.Split(",", mx.Get("RMI"))
|
||||||
|
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||||
|
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||||
|
|
||||||
|
If thisLog Then LogColor($" ============ INICIA BONIFICACIONES MAXIMAS (${id}) ========"$, Colors.RGB(0,197,110))
|
||||||
|
If thisLog Then LogColor($" Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Magenta)
|
||||||
|
If tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||||
|
tsMonto = NumberFormat2(traeMontoBonificacion(id, elPrecioVenta, promoId), 1, 2, 2, False)
|
||||||
|
tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||||
|
Log($" PresupuestoBonifs: ${TS_BONIFICACIONES(0)}, AcumuladoBonifs: ${TS_BONIFICACIONES(1)}, traeAcumuladoHoyTS('bonificaciones'): ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||||
|
' Log($" ${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||||
|
End If
|
||||||
|
If thisLog Then Log($" Monto de bonificacion: ${tsMonto}"$)
|
||||||
|
If thisLog Then Log($" Presupuesto disponible: ${tsRestantes}"$)
|
||||||
|
' If thisLog Then Log($"Cantidad: ${laCant}"$)
|
||||||
|
If thisLog Then Log($" Floor(tsRestantes / (tsMonto * laCant)) <==> Floor(${tsRestantes} / (${tsMonto} * ${laCant})) = ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||||
|
' If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||||
|
If tsMonto > 0 Then
|
||||||
|
tsMaximas = Floor(tsRestantes / (tsMonto * laCant))
|
||||||
|
End If
|
||||||
|
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ***** BONIFICACIONES MAXIMAS: " & tsMaximas & " *****", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ============ TERMINA BONIFICACIONNES MAXIMAS ========", Colors.RGB(0,197,110))
|
||||||
|
Return tsMaximas
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Trae el monto de la bonificacion, que es el precio original MENOS el precio de venta con descuento.
|
||||||
|
' - Si CAT_DP_PRECIOB es 1, la bonificacion es: Precio original - precio de venta.
|
||||||
|
' - Si CAT_DP_PRECIOB es 0, la bonificacion es: Precio original.
|
||||||
|
Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As String
|
||||||
|
Private thisLog As Boolean = True
|
||||||
|
If thisLog Then LogColor($" ============ INICIA MONTO BONIFICACION (${id}) ========"$, Colors.RGB(151,0,171))
|
||||||
|
If thisLog Then LogColor($" ###### ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
|
||||||
|
Private tsMonto As String = 0
|
||||||
|
Private re As Cursor = Starter.skmt.ExecQuery($"select cat_gp_id from cat_gunaprod2 where (cat_gp_tipo like 'REGALO%' or cat_gp_tipo like 'EXHIBIDOR%') and cat_gp_id = '${id}'"$) ' Revisamos si el producto es regalo o exhibidor.
|
||||||
|
If re.RowCount = 0 Then' No es regalo ni exhibidor.
|
||||||
|
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||||
|
' Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||||
|
If thisLog Then Log($" Rowcount DP y CGP2: ${c.RowCount}"$)
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
|
||||||
|
tsMonto = c.GetString("CAT_GP_PRECIO") - c.GetString("CAT_DP_PRECIO") ' Precio original - precio de venta.
|
||||||
|
Else
|
||||||
|
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
|
||||||
|
End If
|
||||||
|
' Log("PRECIOB: " & c.GetInt("CAT_DP_PRECIOB"))
|
||||||
|
If thisLog Then Log($" Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
|
||||||
|
End If
|
||||||
|
' Log("ROWCOUNT: " & c.RowCount)
|
||||||
|
End If
|
||||||
|
If thisLog Then LogColor($" ============ TERMINA MONTO BONIFICACION ========"$, Colors.RGB(151,0,171))
|
||||||
|
Return tsMonto
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Recibe una lista con los ids de los productos variables, revisa cada id para traer los maximos por presupuesto para ese producto
|
||||||
|
' y pone ese maximo en una lista, luego ordena esa lista para obtener el mas chico y regresa ese como maximo.
|
||||||
|
' esta funcion se va a aplicar en la funcion maxpromos como un limite mas para que no muestre las promociones.
|
||||||
|
' NOTA: hay que ver como y cuando dejar de mostrar promociones cuando quede poco presupuesto para bonificaciones.
|
||||||
|
' NOTA: Talvez se pueda hacer que cuando se entre a PROMOS, si ya no hay presupuesto suficiente, mande un toast o msgbox diciendo que ya
|
||||||
|
' se agoto el presupuesto.
|
||||||
|
' Aunque si hay suficiente para mostrar algunas promos ... pues que si las muestre.
|
||||||
|
Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int
|
||||||
|
Private logger As Boolean = False
|
||||||
|
Private Maxs As Int = 10000000
|
||||||
|
Private prodsVariablesXPresupuestoBonificaciones As List
|
||||||
|
Private prodsVariablesRequeridos As Int = traeProdsVariablesRequeridos(promo)
|
||||||
|
prodsVariablesXPresupuestoBonificaciones.Initialize
|
||||||
|
' LogColor("===========> Prods Variables: " & idProdsVariables.Size & " <==========", Colors.red)
|
||||||
|
For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
|
||||||
|
If logger Then LogColor($"=>> prodVariable ${i} : ${idProdsVariables.Get(i)}, ${Subs.traeProdNombre(idProdsVariables.Get(i))} <<=="$, Colors.blue)
|
||||||
|
' Log($"Este invDisponible: ${invDispParaPromo.Get(idProdsVariables.Get(i))}"$)
|
||||||
|
If logger Then Log(">> Monto Bonificacion: " & traeMontoBonificacion(idProdsVariables.Get(i), 1, promo))
|
||||||
|
Private maxProds As Int = traeBonificacionesMaximas("bonificaciones", traeCliente, idProdsVariables.Get(i), prodsVariablesRequeridos, 1, promo)
|
||||||
|
prodsVariablesXPresupuestoBonificaciones.Add(maxProds)
|
||||||
|
Next
|
||||||
|
prodsVariablesXPresupuestoBonificaciones.Sort(True)
|
||||||
|
If prodsVariablesXPresupuestoBonificaciones.Size > 0 Then
|
||||||
|
Maxs = prodsVariablesXPresupuestoBonificaciones.Get(0)
|
||||||
|
End If
|
||||||
|
If logger Then LogColor("=====>> Max prods variables x monto de bonificaciones: " & Maxs, Colors.blue)
|
||||||
|
Return Maxs
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Regresa los productos variables requeridos de la promocion dada.
|
||||||
|
Sub traeProdsVariablesRequeridos(promo As String) As Int
|
||||||
|
Private pvr As Int = 0
|
||||||
|
Private c As Cursor = Starter.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
If c.RowCount > 0 Then
|
||||||
|
c.Position = 0
|
||||||
|
pvr = c.GetString("CAT_GP_STS")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
c.Close
|
||||||
|
Return pvr
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
'########################################################################################
|
||||||
|
' Los productos fijos NO estan restando del presupuesto de BONIFICACIONES
|
||||||
|
'########################################################################################
|
||||||
|
|
||||||
|
'Poner en una funcion (maxPromosPorProdsFijos) el codigo para traer las promos maximas por productos fijos, igual que la de productos
|
||||||
|
' variables, y ponerla igual en "traeMaxPromos" en lugar de en "revisaMaxPromosProdsFijosPorInventario".
|
||||||
|
|
||||||
|
' Falta el codigo para el funcionamiento diferente de las bonificaciones:
|
||||||
|
' Si CAT_DP_PRECIOB es 1 --> (Precio de original (cat_precio) - precio de venta) y se suma al acumulado de BONIFICACIONES
|
||||||
|
' Si CAT_DP_PRECIOB es 0 --> precio orginal se suma al acumulado de BONIFICACIONES
|
||||||
|
'Hay que traer desde web la columna "CAT_DP_PRECIOB" y gardarla en algun lado en movil!!
|
||||||
@@ -63,6 +63,7 @@ Sub Class_Globals
|
|||||||
' - KeyValueStore2
|
' - KeyValueStore2
|
||||||
' - DBRequestManager
|
' - DBRequestManager
|
||||||
' - XUI
|
' - XUI
|
||||||
|
Dim dlDB As SQL
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
' Inicializa la clase DeviceLinker.
|
' Inicializa la clase DeviceLinker.
|
||||||
@@ -77,6 +78,9 @@ Public Sub Initialize (PageObject As Object, NameOfEvent As String, AppLogger As
|
|||||||
' Inicializamos el KeyValueStore para almacenamiento seguro del GUID
|
' Inicializamos el KeyValueStore para almacenamiento seguro del GUID
|
||||||
kvs.Initialize(File.DirInternal, "DeviceKeyStore.b4xkey")
|
kvs.Initialize(File.DirInternal, "DeviceKeyStore.b4xkey")
|
||||||
If logger Then Log("B4XKeyStore 'DeviceKeyStore' inicializado.")
|
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.
|
' 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.
|
' 'Me' indica que el evento JobDone de esta clase se encargará de las respuestas de reqManager.
|
||||||
@@ -145,17 +149,34 @@ Sub linkDevice(Almacen_ As String, Ruta_ As String)
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
'244500
|
||||||
|
|
||||||
' Obtiene el GUID único del dispositivo desde B4XKeyStore.
|
' Obtiene el GUID único del dispositivo desde B4XKeyStore.
|
||||||
' Si no existe, lo genera y lo guarda utilizando Subs.GUID.
|
' Si no existe, lo genera y lo guarda utilizando Subs.GUID.
|
||||||
Private Sub GetDeviceGUID As String
|
Private Sub GetDeviceGUID As String
|
||||||
If kvs.ContainsKey(GUID_KEY_ALIAS) = False Then
|
' 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].
|
' Corrección: Usamos la función GUID ya existente en el módulo Subs [1].
|
||||||
Dim NewGUID As String = generaGUID
|
Dim NewGUID As String = generaGUID
|
||||||
kvs.Put(GUID_KEY_ALIAS, NewGUID) ' Lo guardamos de forma segura en el KeyStore.
|
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)
|
If logger Then LogColor($"Nuevo GUID generado y guardado: ${NewGUID}"$, Colors.Blue)
|
||||||
Return NewGUID
|
Return NewGUID
|
||||||
Else
|
Else
|
||||||
Dim ExistingGUID As String = kvs.Get(GUID_KEY_ALIAS) ' Recuperamos el GUID existente.
|
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)
|
If logger Then LogColor($"GUID existente cargado: ${ExistingGUID}"$, Colors.Blue)
|
||||||
Return ExistingGUID
|
Return ExistingGUID
|
||||||
End If
|
End If
|
||||||
@@ -207,6 +228,7 @@ Public Sub JobDone(Job As HttpJob) ' El nombre del sub debe ser 'JobDone' o el q
|
|||||||
For Each records() As Object In result.Rows
|
For Each records() As Object In result.Rows
|
||||||
Dim Status As String = "" 'records(result.Columns.Get("ESTATUS"))
|
Dim Status As String = "" 'records(result.Columns.Get("ESTATUS"))
|
||||||
Dim CAT_RU_IDTELEFONO As String = records(result.Columns.Get("CAT_RU_IDTELEFONO"))
|
Dim CAT_RU_IDTELEFONO As String = records(result.Columns.Get("CAT_RU_IDTELEFONO"))
|
||||||
|
deviceId = GetDeviceGUID
|
||||||
Log($"|${deviceId}|${CAT_RU_IDTELEFONO}|"$)
|
Log($"|${deviceId}|${CAT_RU_IDTELEFONO}|"$)
|
||||||
' If deviceId <> CAT_RU_IDTELEFONO Then Status = "YA_REGISTRADO" ' Ya existe OTRO registro.
|
' 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
|
If CAT_RU_IDTELEFONO = 0 Or CAT_RU_IDTELEFONO.Length < 5 Then
|
||||||
@@ -275,4 +297,14 @@ Sub generaGUID As String
|
|||||||
Next
|
Next
|
||||||
Next
|
Next
|
||||||
Return sb.ToString
|
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
|
End Sub
|
||||||
@@ -99,6 +99,8 @@ End Sub
|
|||||||
|
|
||||||
'This sub will be called by the DBRequestManager when the job is done
|
'This sub will be called by the DBRequestManager when the job is done
|
||||||
Public Sub JobDone(job As HttpJob)
|
Public Sub JobDone(job As HttpJob)
|
||||||
|
Log("===== JDDBRW =====")
|
||||||
|
LogColor("JobDone: '" & reqManager.HandleJob(job).tag & "' - Registros: " & reqManager.HandleJob(job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
|
||||||
'<<< Obtenemos el Tag único que asignamos al job
|
'<<< Obtenemos el Tag único que asignamos al job
|
||||||
Dim currentJobTag As String = job.Tag
|
Dim currentJobTag As String = job.Tag
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -26,6 +26,7 @@ ModuleBookmarks30=
|
|||||||
ModuleBookmarks31=
|
ModuleBookmarks31=
|
||||||
ModuleBookmarks32=
|
ModuleBookmarks32=
|
||||||
ModuleBookmarks33=
|
ModuleBookmarks33=
|
||||||
|
ModuleBookmarks34=
|
||||||
ModuleBookmarks4=
|
ModuleBookmarks4=
|
||||||
ModuleBookmarks5=
|
ModuleBookmarks5=
|
||||||
ModuleBookmarks6=
|
ModuleBookmarks6=
|
||||||
@@ -60,6 +61,7 @@ ModuleBreakpoints30=
|
|||||||
ModuleBreakpoints31=
|
ModuleBreakpoints31=
|
||||||
ModuleBreakpoints32=
|
ModuleBreakpoints32=
|
||||||
ModuleBreakpoints33=
|
ModuleBreakpoints33=
|
||||||
|
ModuleBreakpoints34=
|
||||||
ModuleBreakpoints4=
|
ModuleBreakpoints4=
|
||||||
ModuleBreakpoints5=
|
ModuleBreakpoints5=
|
||||||
ModuleBreakpoints6=
|
ModuleBreakpoints6=
|
||||||
@@ -67,17 +69,17 @@ ModuleBreakpoints7=
|
|||||||
ModuleBreakpoints8=
|
ModuleBreakpoints8=
|
||||||
ModuleBreakpoints9=
|
ModuleBreakpoints9=
|
||||||
ModuleClosedNodes0=
|
ModuleClosedNodes0=
|
||||||
ModuleClosedNodes1=6,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,31,33,34,35,37,38,39,40,41,42,43,45,46,47
|
ModuleClosedNodes1=
|
||||||
ModuleClosedNodes10=
|
ModuleClosedNodes10=
|
||||||
ModuleClosedNodes11=
|
ModuleClosedNodes11=
|
||||||
ModuleClosedNodes12=
|
ModuleClosedNodes12=
|
||||||
ModuleClosedNodes13=1,7,8,9,10,11,12
|
ModuleClosedNodes13=
|
||||||
ModuleClosedNodes14=6,7,8,9,12,13
|
ModuleClosedNodes14=
|
||||||
ModuleClosedNodes15=
|
ModuleClosedNodes15=
|
||||||
ModuleClosedNodes16=3,8,17
|
ModuleClosedNodes16=
|
||||||
ModuleClosedNodes17=
|
ModuleClosedNodes17=
|
||||||
ModuleClosedNodes18=
|
ModuleClosedNodes18=
|
||||||
ModuleClosedNodes19=7,8,9,10,11,12,13,14
|
ModuleClosedNodes19=
|
||||||
ModuleClosedNodes2=
|
ModuleClosedNodes2=
|
||||||
ModuleClosedNodes20=
|
ModuleClosedNodes20=
|
||||||
ModuleClosedNodes21=
|
ModuleClosedNodes21=
|
||||||
@@ -85,21 +87,22 @@ ModuleClosedNodes22=
|
|||||||
ModuleClosedNodes23=
|
ModuleClosedNodes23=
|
||||||
ModuleClosedNodes24=
|
ModuleClosedNodes24=
|
||||||
ModuleClosedNodes25=
|
ModuleClosedNodes25=
|
||||||
ModuleClosedNodes26=24,26,31,32,33,35
|
ModuleClosedNodes26=
|
||||||
ModuleClosedNodes27=
|
ModuleClosedNodes27=
|
||||||
ModuleClosedNodes28=4
|
ModuleClosedNodes28=
|
||||||
ModuleClosedNodes29=
|
ModuleClosedNodes29=3
|
||||||
ModuleClosedNodes3=5,6
|
ModuleClosedNodes3=
|
||||||
ModuleClosedNodes30=
|
ModuleClosedNodes30=
|
||||||
ModuleClosedNodes31=
|
ModuleClosedNodes31=
|
||||||
ModuleClosedNodes32=101,116
|
ModuleClosedNodes32=
|
||||||
ModuleClosedNodes33=
|
ModuleClosedNodes33=
|
||||||
|
ModuleClosedNodes34=
|
||||||
ModuleClosedNodes4=
|
ModuleClosedNodes4=
|
||||||
ModuleClosedNodes5=
|
ModuleClosedNodes5=
|
||||||
ModuleClosedNodes6=
|
ModuleClosedNodes6=
|
||||||
ModuleClosedNodes7=
|
ModuleClosedNodes7=
|
||||||
ModuleClosedNodes8=
|
ModuleClosedNodes8=
|
||||||
ModuleClosedNodes9=
|
ModuleClosedNodes9=
|
||||||
NavigationStack=Diseñador Visual,principal.bal,-100,6,C_Principal,SUBIR_INFO_PEDIDO,3371,6,C_Principal,B4XPage_Created,228,0,C_Principal,descargaCartaPorteyProgreso,3693,0,C_Principal,VALIDAR_INFO,3548,0,C_Principal,t1_tick,2536,0,C_Principal,cargar_Click,690,0,C_Principal,Subir_Click,679,6,C_Principal,actualizaProgressBar,2250,1,C_Principal,JobDone,2232,6
|
NavigationStack=B4XMainPage,B4XPage_Appear,484,0,B4XMainPage,B4XPage_Created,392,0,B4XMainPage,Initialize,123,0,C_Principal,B4XPage_Appear,333,0,C_Principal,connecta_LongClick,2504,0,C_Principal,connecta3,2503,0,C_Principal,connecta2,2488,0,C_Principal,b_motivoNoVisita_Click,4075,0,Diseñador Visual,principal.bal,-100,6,C_Principal,B4XPage_Created,311,0
|
||||||
SelectedBuild=0
|
SelectedBuild=0
|
||||||
VisibleModules=31,1,12,5,16,3,32,13,14,9
|
VisibleModules=32,1,13,4,33,15,34,14,29
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ Sub Activity_Create(FirstTime As Boolean)
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Activity_Resume
|
Sub Activity_Resume
|
||||||
|
B4XPages.MainPage.aud.guarda("Entrada a MapaRutas")
|
||||||
If GPS.GPSEnabled = False Then
|
If GPS.GPSEnabled = False Then
|
||||||
ToastMessageShow("Debe Activar el GPS del Equipo.", True)
|
ToastMessageShow("Debe Activar el GPS del Equipo.", True)
|
||||||
StartActivity(GPS.LocationSettingsIntent)
|
StartActivity(GPS.LocationSettingsIntent)
|
||||||
@@ -186,9 +187,9 @@ Sub MapFragment1_Ready
|
|||||||
Next
|
Next
|
||||||
c2 .Close
|
c2 .Close
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'''''''---------------------------- MARKER ROJO - NO VENTA
|
'''''''---------------------------- MARKER ROJO - NO VENTA
|
||||||
|
|
||||||
If rojo =1 Or todos = 1 Then
|
If rojo =1 Or todos = 1 Then
|
||||||
c3.IsInitialized
|
c3.IsInitialized
|
||||||
c3=Starter.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT ,CAT_CL_NUM_SERIEFISICO from kmt_info where CAT_CL_NOMBRE <>'VENTA ABORDO' AND CAT_CL_CODIGO In (Select NV_CLIENTE from NOVENTA ) AND CAT_CL_CODIGO NOT IN (Select PE_CLIENTE from PEDIDO) and CAT_CL_DIAS_VISITA = (SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'DIA_VISITA')order by CAT_CL_NUM_SERIEFISICO")
|
c3=Starter.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT ,CAT_CL_NUM_SERIEFISICO from kmt_info where CAT_CL_NOMBRE <>'VENTA ABORDO' AND CAT_CL_CODIGO In (Select NV_CLIENTE from NOVENTA ) AND CAT_CL_CODIGO NOT IN (Select PE_CLIENTE from PEDIDO) and CAT_CL_DIAS_VISITA = (SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'DIA_VISITA')order by CAT_CL_NUM_SERIEFISICO")
|
||||||
@@ -200,7 +201,8 @@ Sub MapFragment1_Ready
|
|||||||
CODIGO=c3.GetString("CAT_CL_CODIGO")
|
CODIGO=c3.GetString("CAT_CL_CODIGO")
|
||||||
Tienda= c3.GetString("CAT_CL_NOMBRE")
|
Tienda= c3.GetString("CAT_CL_NOMBRE")
|
||||||
NumSerie=c3.GetInt("CAT_CL_NUM_SERIEFISICO")
|
NumSerie=c3.GetInt("CAT_CL_NUM_SERIEFISICO")
|
||||||
MARK_ROJO = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-rojo-" & NumSerie &".png"))
|
' MARK_ROJO = gmap.AddMarker3(LatitudRU,LongitudRU,CODIGO, LoadBitmap(File.DirAssets, "marker-rojo-" & NumSerie &".png"))
|
||||||
|
MARK_ROJO = gmap.AddMarker3(LatitudRU, LongitudRU, CODIGO, CreateBitmapWithNumber(LoadBitmap(File.DirAssets, "marker-rojo.png"), NumSerie))
|
||||||
MARK_ROJO.Snippet = Tienda
|
MARK_ROJO.Snippet = Tienda
|
||||||
Next
|
Next
|
||||||
c3.Close
|
c3.Close
|
||||||
@@ -231,6 +233,7 @@ Sub OnInfoWindowClickListener1_click(Marker1 As Marker)
|
|||||||
Starter.skmt.ExecNonQuery("delete from CUENTAA")
|
Starter.skmt.ExecNonQuery("delete from CUENTAA")
|
||||||
Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title))
|
Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title))
|
||||||
Activity.Finish
|
Activity.Finish
|
||||||
|
B4XPages.MainPage.aud.guarda($"Clic Tooltip Mapas Ruta: ${Marker1.Title}"$)
|
||||||
Subs.iniciaActividad("Cliente")
|
Subs.iniciaActividad("Cliente")
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@ ModulesStructureVersion=1
|
|||||||
Type=Class
|
Type=Class
|
||||||
Version=12.8
|
Version=12.8
|
||||||
@EndOfDesignText@
|
@EndOfDesignText@
|
||||||
|
'##############################################################################################
|
||||||
|
' CODIGO DE PRUEBA, NO HABILITADO, NO TERMINADO
|
||||||
|
' PRETENDE UTILIZAR MENOS MAPAS Y MAS QUERIES PARA EL CALCULO DE LAS PROMOCIONES
|
||||||
|
'##############################################################################################
|
||||||
|
|
||||||
Sub Class_Globals
|
Sub Class_Globals
|
||||||
Dim ruta As String
|
Dim ruta As String
|
||||||
Dim almacen As String
|
Dim almacen As String
|
||||||
|
|||||||
161
B4A/Subs.bas
161
B4A/Subs.bas
@@ -863,6 +863,7 @@ Sub traeNombreCliente(id As String) As String
|
|||||||
Do While c.NextRow
|
Do While c.NextRow
|
||||||
n = c.GetString("CAT_CL_NOMBRE")
|
n = c.GetString("CAT_CL_NOMBRE")
|
||||||
Loop
|
Loop
|
||||||
|
c.Close
|
||||||
Return n
|
Return n
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1008,7 +1009,7 @@ End Sub
|
|||||||
' resultado="OK" 'Ok si existe la promocion.
|
' resultado="OK" 'Ok si existe la promocion.
|
||||||
' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción.
|
' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción.
|
||||||
Sub traePromo(promo As String, cliente As String) As Map
|
Sub traePromo(promo As String, cliente As String) As Map
|
||||||
Private thisLog As Boolean = True
|
Private thisLog As Boolean = false
|
||||||
If thisLog Then Log("traePromo:"&promo)
|
If thisLog Then Log("traePromo:"&promo)
|
||||||
Private inicioContador As String = DateTime.Now
|
Private inicioContador As String = DateTime.Now
|
||||||
Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos el maximo de promociones a otorgar.
|
Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos el maximo de promociones a otorgar.
|
||||||
@@ -1029,7 +1030,7 @@ Sub traePromo(promo As String, cliente As String) As Map
|
|||||||
'######### PROMOCIONES SEGMENTADAS ##########
|
'######### PROMOCIONES SEGMENTADAS ##########
|
||||||
' Si la promo esta en la lista, SOLO los clientes que la tengan la pueden ver.
|
' Si la promo esta en la lista, SOLO los clientes que la tengan la pueden ver.
|
||||||
Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$) ' and HCCP_CLIENTE = '${cliente}'
|
Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$) ' and HCCP_CLIENTE = '${cliente}'
|
||||||
Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$)
|
' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}'"$)
|
||||||
If thisLog Then Log($"PROMOS SEGMENTADAS ENCONTRADAS: ${ps.RowCount}"$)
|
If thisLog Then Log($"PROMOS SEGMENTADAS ENCONTRADAS: ${ps.RowCount}"$)
|
||||||
If thisLog Then Log(promoMap)
|
If thisLog Then Log(promoMap)
|
||||||
If ps.RowCount > 0 Then
|
If ps.RowCount > 0 Then
|
||||||
@@ -1045,13 +1046,16 @@ Sub traePromo(promo As String, cliente As String) As Map
|
|||||||
If thisLog Then Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}"$)
|
If thisLog Then Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}"$)
|
||||||
promoMap = CreateMap("id":promo, "maxXcliente":(ps2.GetString("HCCP_CANT")-ps2.GetString("HCCP_CANT_VENDIDA")), "maxRecurrente":ps2.GetString("HCCP_CANT"), "maxPromos":ps2.GetString("HCCP_CANT")) 'Si es segmentada SOLO le aparece a ciertos clientes.
|
promoMap = CreateMap("id":promo, "maxXcliente":(ps2.GetString("HCCP_CANT")-ps2.GetString("HCCP_CANT_VENDIDA")), "maxRecurrente":ps2.GetString("HCCP_CANT"), "maxPromos":ps2.GetString("HCCP_CANT")) 'Si es segmentada SOLO le aparece a ciertos clientes.
|
||||||
End If
|
End If
|
||||||
|
ps2.Close
|
||||||
End If
|
End If
|
||||||
|
ps.Close
|
||||||
If thisLog Then Log(promoMap)
|
If thisLog Then Log(promoMap)
|
||||||
' ########## TERMINA PROMOS SEGMENTADAS ##########
|
' ########## TERMINA PROMOS SEGMENTADAS ##########
|
||||||
c = Starter.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción.
|
c = Starter.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción.
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
If c.GetString("hist") > 0 Then siHistorico = 1
|
If c.GetString("hist") > 0 Then siHistorico = 1
|
||||||
promoMap.Put("historico", siHistorico)
|
promoMap.Put("historico", siHistorico)
|
||||||
|
c.Close
|
||||||
c = Starter.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción.
|
c = Starter.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción.
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
If c.RowCount > 0 Then
|
If c.RowCount > 0 Then
|
||||||
@@ -1090,6 +1094,7 @@ Sub traePromo(promo As String, cliente As String) As Map
|
|||||||
Else
|
Else
|
||||||
promoMap.Put("resultado", "No hay datos de la promoción.")
|
promoMap.Put("resultado", "No hay datos de la promoción.")
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
c = Starter.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
c = Starter.skmt.ExecQuery("Select CAT_GP_STS, CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '"& promo & "'") 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
Private pvr As String = 0
|
Private pvr As String = 0
|
||||||
@@ -1109,7 +1114,7 @@ End Sub
|
|||||||
|
|
||||||
'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos).
|
'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos).
|
||||||
Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
|
Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
|
||||||
Private thisLog As Boolean = True
|
Private thisLog As Boolean = False
|
||||||
Private c As Cursor
|
Private c As Cursor
|
||||||
c = Starter.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)", Array As String(promo))
|
c = Starter.skmt.ExecQuery2("SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM CAT_GUNAPROD2 WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)", Array As String(promo))
|
||||||
' Private prodInv As Map
|
' Private prodInv As Map
|
||||||
@@ -1129,6 +1134,7 @@ Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
|
|||||||
Next
|
Next
|
||||||
' prodInv.Put("inventarios", prods)
|
' prodInv.Put("inventarios", prods)
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
Return prods
|
Return prods
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1147,7 +1153,7 @@ Sub restaFijosPromo(promoMap As Map) As Map 'ignore
|
|||||||
Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos un a lista con los productos fijos de la promoción.
|
Private prodsFijos As List = promoMap.get("prodsFijos") 'Obtenemos un a lista con los productos fijos de la promoción.
|
||||||
If thisLog Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
|
If thisLog Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
|
||||||
inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por default
|
inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por default
|
||||||
Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
|
If thisLog Then Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
|
||||||
If prodsFijos.Size = 0 Then inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") 'Si no lleva prods fijos la promo, entonces ponemos FIJOS OK.
|
If prodsFijos.Size = 0 Then inventariosDisponiblesParaEstaPromo.Put("resultado", "ok") 'Si no lleva prods fijos la promo, entonces ponemos FIJOS OK.
|
||||||
For p = 0 To prodsFijos.Size - 1
|
For p = 0 To prodsFijos.Size - 1
|
||||||
Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos.
|
Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos.
|
||||||
@@ -1198,7 +1204,7 @@ End Sub
|
|||||||
|
|
||||||
'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos.
|
'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos.
|
||||||
Sub traeMaxPromos(pm As Map) As Int
|
Sub traeMaxPromos(pm As Map) As Int
|
||||||
Private thisLog As Boolean = true 'Si es verdadero, muestra los logs de este sub.
|
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
||||||
Private maxPromos As List
|
Private maxPromos As List
|
||||||
Private mp0, mp As String = "0"
|
Private mp0, mp As String = "0"
|
||||||
maxPromos.Initialize
|
maxPromos.Initialize
|
||||||
@@ -1224,14 +1230,15 @@ Sub traeMaxPromos(pm As Map) As Int
|
|||||||
maxPromos.Add(hccp.GetInt("HCCP_CANT"))
|
maxPromos.Add(hccp.GetInt("HCCP_CANT"))
|
||||||
End If
|
End If
|
||||||
maxPromos.Sort(True)
|
maxPromos.Sort(True)
|
||||||
If thisLog Then Log($">>>>> Max promos : ${maxPromos}"$)
|
If thisLog Then Log($" >>>>> MAX PROMOS X CONF : ${maxPromos} <==> ${maxPromos.Get(0)}"$)
|
||||||
mp = 0
|
mp = 0
|
||||||
If maxPromos.Size > 0 Then
|
If maxPromos.Size > 0 Then
|
||||||
mp0 = maxPromos.Get(0)
|
mp0 = maxPromos.Get(0)
|
||||||
' Log(mp0)
|
' Log(mp0)
|
||||||
mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente)
|
mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente)
|
||||||
If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)}) = ${mp}"$)
|
If thisLog Then Log($" >>>>> MAX PROMOS - PROMOS VENDIDAS <==> ${mp0} - ${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)} = ${mp}"$)
|
||||||
End If
|
End If
|
||||||
|
hccp.Close
|
||||||
Return mp 'Regresamos el numero mas pequeño de las opciones.
|
Return mp 'Regresamos el numero mas pequeño de las opciones.
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1244,6 +1251,7 @@ Sub traePromosVendidas(promo As String, cliente As String) As Int
|
|||||||
c.Position = 0
|
c.Position = 0
|
||||||
If c.GetString("cuantas") <> Null Then pv = c.GetString("cuantas")
|
If c.GetString("cuantas") <> Null Then pv = c.GetString("cuantas")
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
Return pv
|
Return pv
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1251,9 +1259,9 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
|||||||
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
||||||
Private inicioContador As String = DateTime.Now
|
Private inicioContador As String = DateTime.Now
|
||||||
Private mp As Int = 0
|
Private mp As Int = 0
|
||||||
If thisLog Then LogColor($"****************************************************************"$, Colors.red)
|
If thisLog Then LogColor($"****************************************************************"$, Colors.RGB(142,0,255))
|
||||||
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red)
|
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.RGB(142,0,255))
|
||||||
If thisLog Then LogColor($"****************************************************************"$, Colors.red)
|
If thisLog Then LogColor($"****************************************************************"$, Colors.RGB(142,0,255))
|
||||||
Try
|
Try
|
||||||
'Obtenemos el mapa con toda la info de la promoción.
|
'Obtenemos el mapa con toda la info de la promoción.
|
||||||
Private pm As Map = traePromo(idPromo, cliente)
|
Private pm As Map = traePromo(idPromo, cliente)
|
||||||
@@ -1263,7 +1271,9 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
|||||||
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
|
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
|
||||||
Private maxPromosXprodsFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
Private maxPromosXprodsFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||||
If maxPromosXprodsFijos < 1 Then pm.Put("resultado", 0)
|
If maxPromosXprodsFijos < 1 Then pm.Put("resultado", 0)
|
||||||
LogColor($">>> Promos disponibles por productos fijos = ${maxPromosXprodsFijos}"$, Colors.Magenta)
|
If thisLog Then LogColor($"***********************************************************************"$, Colors.Blue)
|
||||||
|
LogColor($"*** PROMOS DISPONIBLES X PRODS FIJOS (${idPromo}) = ${maxPromosXprodsFijos} ***"$, Colors.Blue)
|
||||||
|
If thisLog Then LogColor($"***********************************************************************"$, Colors.Blue)
|
||||||
If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ...
|
If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ...
|
||||||
'Buscamos el máximo de promociones permitidas.
|
'Buscamos el máximo de promociones permitidas.
|
||||||
mp = traeMaxPromos(pm)
|
mp = traeMaxPromos(pm)
|
||||||
@@ -1279,7 +1289,9 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
|||||||
If inventarioSinFijos.Get("resultado") = "ok" Then
|
If inventarioSinFijos.Get("resultado") = "ok" Then
|
||||||
'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa).
|
'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa).
|
||||||
Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos)
|
Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos)
|
||||||
If thisLog Then Log("Alcanzan los variables? --> " & pv)
|
If thisLog Then LogColor($"****************************************************"$, Colors.Blue)
|
||||||
|
If thisLog Then LogColor($"***** ¿ALCANZAN LOS VARIABLES? ==> ${IIf(pv, "SI", "NO")} *****"$, Colors.Blue)
|
||||||
|
If thisLog Then LogColor($"****************************************************"$, Colors.Blue)
|
||||||
If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm)
|
If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm)
|
||||||
Else
|
Else
|
||||||
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
||||||
@@ -1296,6 +1308,8 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
|
|||||||
Log($"Promo ${idPromo} mal configurada"$)
|
Log($"Promo ${idPromo} mal configurada"$)
|
||||||
ToastMessageShow($"Promo ${idPromo} mal configurada"$, True)
|
ToastMessageShow($"Promo ${idPromo} mal configurada"$, True)
|
||||||
Log(LastException)
|
Log(LastException)
|
||||||
|
' Agregamos esta línea para evitar el NullPointerException
|
||||||
|
Return CreateMap("status":"ko", "mp":Null)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1344,45 +1358,47 @@ End Sub
|
|||||||
|
|
||||||
'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario.
|
'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario.
|
||||||
Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
|
Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
|
||||||
Private thisLog As Boolean = True
|
Private thisLog As Boolean = False
|
||||||
Private invFijoXpromo As Map
|
Private invFijoXpromo As Map
|
||||||
Private t As List
|
Private t As List
|
||||||
t.Initialize
|
t.Initialize
|
||||||
t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo).
|
t.Add(traeMaxPromos(pm)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo).
|
||||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
|
If thisLog Then LogColor($"============ INICIA MAX PROMOS X PRODS FIJOS X INV ========"$, Colors.RGB(176,0,0))
|
||||||
|
If thisLog Then LogColor($" ### MAX PROMOS (recurrente, cliente y promo): ${t}"$, Colors.Green)
|
||||||
invFijoXpromo.Initialize
|
invFijoXpromo.Initialize
|
||||||
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
If thisLog Then LogColor($" pm=${pm}"$, Colors.Blue)
|
||||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||||
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
If thisLog Then Log($" invDispParaPromo=${invDispParaPromo}"$)
|
||||||
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
||||||
Private idProdsFijos As List = pm.Get("prodsFijos")
|
Private idProdsFijos As List = pm.Get("prodsFijos")
|
||||||
Private idProdsFijosPrecios As List = pm.Get("prodsFijosPrecios")
|
Private idProdsFijosPrecios As List = pm.Get("prodsFijosPrecios")
|
||||||
For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas).
|
For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas).
|
||||||
Private thisInvDisp As Int = 0
|
Private thisInvDisp As Int = 0
|
||||||
If invDispParaPromo.Get(idProdsFijos.Get(p)) <> Null Then thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p))
|
If invDispParaPromo.Get(idProdsFijos.Get(p)) <> Null Then thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p))
|
||||||
If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzasReq=${prodsFijosPiezas.Get(p)}"$)
|
If thisLog Then Log($" id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzasReq=${prodsFijosPiezas.Get(p)}"$)
|
||||||
|
' LogColor($" ====== ${idProdsFijos.Get(p)} - Inv1:${thisInvDisp}, inv2: ${traeExistenciasPorId(idProdsFijos.Get(p))}"$, Colors.Magenta)
|
||||||
LogColor($"====== ${idProdsFijos.Get(p)} - Inv1:${thisInvDisp}, inv2: ${traeExistenciasPorId(idProdsFijos.Get(p))}"$, Colors.Magenta)
|
' If thisInvDisp <> traeExistenciasPorId(idProdsFijos.Get(p)) Then
|
||||||
If thisInvDisp <> traeExistenciasPorId(idProdsFijos.Get(p)) Then
|
' LogColor(" #### ERROR DE INVENTARIO ####" , Colors.red)
|
||||||
LogColor("#### ERROR DE INVENTARIO ####" , Colors.red)
|
' End If
|
||||||
End If
|
|
||||||
|
|
||||||
' If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$)
|
' If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$)
|
||||||
Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal.
|
Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal.
|
||||||
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. (promos por inventario)
|
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. (promos por inventario)
|
||||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green) 'promos por inventario
|
' If thisLog Then LogColor($" ### T: ${t}"$, Colors.Green) 'promos por inventario
|
||||||
If thisLog Then Log(">> Promos x Prods Fijos: " & x(0))
|
If thisLog Then LogColor($" >>>>> PROMOS X PRODS FIJOS (${idProdsFijos.Get(p)}): ${x(0)} <<<<<"$, Colors.red)
|
||||||
Log(">>>>> Monto Bonificacion: " & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")))
|
Log($" >>>>> Monto Bonificacion FIJOS (${idProdsFijos.Get(p)}): "$ & B4XPages.MainPage.promos.ts.traeMontoBonificacion(idProdsFijos.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")))
|
||||||
If thisLog Then LogColor(">> Max prods fijos x Bonificaciones: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")), Colors.blue)
|
If thisLog Then LogColor(" >> MAX PRODS FIJOS X BONIFICACIONES: " & B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id")), Colors.blue)
|
||||||
t.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id"))) 'Agregamos las promos disponibles por Trade Spending
|
t.Add(B4XPages.MainPage.promos.ts.traeBonificacionesMaximas("bonificaciones", clienteActual, idProdsFijos.Get(p), prodsFijosPiezas.Get(p), idProdsFijosPrecios.Get(p), pm.Get("id"))) 'Agregamos las promos disponibles por Trade Spending
|
||||||
If thisLog Then LogColor($"### T: ${t}"$, Colors.Green)
|
If thisLog Then LogColor($" ### PROMOS X INV: ${t}"$, Colors.Green) 'promos por inventario
|
||||||
Next
|
Next
|
||||||
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño.
|
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultao mas pequeño.
|
||||||
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
If thisLog Then LogColor($" prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
||||||
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
|
If thisLog Then LogColor($" prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
|
||||||
' If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
|
' If thisLog Then LogColor($" invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
|
||||||
If thisLog Then LogColor(">>>>>> T: " & t, Colors.red)
|
If thisLog Then LogColor(" >>>>>> T: " & t, Colors.Magenta)
|
||||||
If thisLog Then LogColor("Max promos x inv de prodsFijos = " & t.Get(0), Colors.red)
|
LogColor(" ***********************************************************************", Colors.RGB(156,0,0))
|
||||||
|
LogColor($" ****** MAX PROMOS X INV DE PRODS FIJOS (${pm.get("id")}): "$ & t.Get(0) & " ******", Colors.RGB(156,0,0))
|
||||||
|
LogColor(" ***********************************************************************", Colors.RGB(156,0,0))
|
||||||
|
If thisLog Then LogColor($"============ TERMINA MAX PROMOS X PRODS FIJOS X INV ========"$, Colors.RGB(176,0,0))
|
||||||
Return t.Get(0) 'Regresamos el resultado mas pequeño.
|
Return t.Get(0) 'Regresamos el resultado mas pequeño.
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -1436,7 +1452,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
|||||||
|
|
||||||
' Log(pm.Get("prodsFijos").As(List).Size)
|
' Log(pm.Get("prodsFijos").As(List).Size)
|
||||||
' Log(maxPromosXFijos)
|
' Log(maxPromosXFijos)
|
||||||
|
|
||||||
For x = 1 To maxPromosXFijos
|
For x = 1 To maxPromosXFijos
|
||||||
If thisLog Then Log("==================== maxPromosXFijos "& x &" ========================")
|
If thisLog Then Log("==================== maxPromosXFijos "& x &" ========================")
|
||||||
If thisLog Then Log("=====================================================")
|
If thisLog Then Log("=====================================================")
|
||||||
@@ -1459,7 +1475,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
|||||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
If thisLog Then Log($"prodsVariablesXPresupuestoBonificaciones: ${prodsVariablesXPresupuestoBonificaciones}"$)
|
If thisLog Then Log($"1924: ${prodsVariablesXPresupuestoBonificaciones}"$)
|
||||||
'Revisamos variables.
|
'Revisamos variables.
|
||||||
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
||||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
||||||
@@ -1501,6 +1517,7 @@ Sub cuantosVariablesDisponiblesDB(promo As String)
|
|||||||
If c.GetString("CAT_GP_ALMACEN") <> Null Then x = c.GetString("CAT_GP_ALMACEN")
|
If c.GetString("CAT_GP_ALMACEN") <> Null Then x = c.GetString("CAT_GP_ALMACEN")
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
c.Close
|
||||||
End If
|
End If
|
||||||
Return x
|
Return x
|
||||||
End Sub
|
End Sub
|
||||||
@@ -2197,7 +2214,7 @@ Sub modTrendSpending(accion As String, tipo As String, monto As String)
|
|||||||
acumulado = d.GetString("ACUMULADO")
|
acumulado = d.GetString("ACUMULADO")
|
||||||
End If
|
End If
|
||||||
Log("acumulado: " & acumulado & " | monto: " & monto)
|
Log("acumulado: " & acumulado & " | monto: " & monto)
|
||||||
Private c As Cursor = Starter.skmt.ExecQuery($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
|
Private c As Cursor = Starter.skmt.ExecQuery($"select HIST_TSS_TIPO, ifnull(${HIST_TSS_SEMANA},0) as disponible, ifnull(${HIST_TSS_SEMANA_ACUM},0) as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
|
||||||
If accion.ToUpperCase = "RESTA" Then
|
If accion.ToUpperCase = "RESTA" Then
|
||||||
If c.RowCount > 0 Then
|
If c.RowCount > 0 Then
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
@@ -2415,7 +2432,7 @@ Sub traeExistenciasPorId(id As String) As Int
|
|||||||
existencias = inv.GetString("CAT_GP_ALMACEN").As(Int)
|
existencias = inv.GetString("CAT_GP_ALMACEN").As(Int)
|
||||||
End If
|
End If
|
||||||
' Log("ex:" & existencias)
|
' Log("ex:" & existencias)
|
||||||
Private inv As Cursor = Starter.skmt.ExecQuery($"Select ifnull(SUM(pe_cant),0) As total_vendido FROM pedido WHERE pe_tipo = 'VENTA' and pe_proid = '${id}'"$)
|
inv = Starter.skmt.ExecQuery($"Select ifnull(SUM(pe_cant),0) As total_vendido FROM pedido WHERE pe_tipo = 'VENTA' and pe_proid = '${id}'"$)
|
||||||
inv.Position = 0
|
inv.Position = 0
|
||||||
vendido = inv.GetInt("total_vendido")
|
vendido = inv.GetInt("total_vendido")
|
||||||
' Log("ven:" & vendido)
|
' Log("ven:" & vendido)
|
||||||
@@ -2461,4 +2478,74 @@ Sub deshabilitaValidaciones
|
|||||||
' B4XPages.MainPage.principal.Resumen.Enabled = True
|
' B4XPages.MainPage.principal.Resumen.Enabled = True
|
||||||
' B4XPages.MainPage.principal.BUSCA.Enabled = True
|
' B4XPages.MainPage.principal.BUSCA.Enabled = True
|
||||||
ToastMessageShow("REALIZADO", False)
|
ToastMessageShow("REALIZADO", False)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Recalcula en inventario actual, utiliza la tabla CAT_GUNAPROD5 que tiene el inventario INICIAL y le resta
|
||||||
|
' lo que hay en PEDIDO, y actualiza CAT_GUNAPROD2 con el valor calculado.
|
||||||
|
Public Sub RecalcularInventario
|
||||||
|
Private inicial As Long = DateTime.Now
|
||||||
|
' 1. Índices: ESTO ES CRUCIAL. Si no tienes estos índices, ningún query será rápido.
|
||||||
|
' Ejecuta esto una sola vez al crear la BD o al iniciar la app, no en cada cálculo.
|
||||||
|
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_proid ON PEDIDO(PE_PROID)")
|
||||||
|
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_pedido_cliente ON PEDIDO(PE_CLIENTE)")
|
||||||
|
' skmt.ExecNonQuery("CREATE INDEX IF NOT EXISTS idx_cat5_id ON CAT_GUNAPROD5(CAT_GP_ID)")
|
||||||
|
|
||||||
|
Starter.skmt.BeginTransaction
|
||||||
|
Try
|
||||||
|
' Lógica del Query:
|
||||||
|
' 1. Toma el inventario inicial del día desde CAT_GUNAPROD5 (T5).
|
||||||
|
' 2. Le resta SOLO las ventas reales de la tabla PEDIDO.
|
||||||
|
' 3. FILTRA (Ignora) los RMIs usando PE_CEDIS <> 'DUR' y el nombre '%CAMBIO%'.
|
||||||
|
' 4. Actualiza CAT_GUNAPROD2 masivamente.
|
||||||
|
|
||||||
|
' Dim sql As String = _
|
||||||
|
' "UPDATE CAT_GUNAPROD2 " & _
|
||||||
|
' "SET CAT_GP_ALMACEN = ( " & _
|
||||||
|
' " SELECT (IFNULL(T5.CAT_GP_ALMACEN, 0) - IFNULL(Ventas.CantidadVendida, 0)) " & _
|
||||||
|
' " FROM CAT_GUNAPROD5 T5 " & _
|
||||||
|
' " LEFT JOIN ( " & _
|
||||||
|
' " SELECT PE_PROID, SUM(PE_CANT) AS CantidadVendida " & _
|
||||||
|
' " FROM PEDIDO " & _
|
||||||
|
' " WHERE PE_CLIENTE <> '0' " & _
|
||||||
|
' " AND PE_CEDIS <> 'DUR' " & _
|
||||||
|
' " AND PE_PRONOMBRE NOT LIKE '%CAMBIO%' " & _
|
||||||
|
' " GROUP BY PE_PROID " & _
|
||||||
|
' " ) Ventas ON T5.CAT_GP_ID = Ventas.PE_PROID " & _
|
||||||
|
' " WHERE T5.CAT_GP_ID = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||||
|
' ") " & _
|
||||||
|
' "WHERE EXISTS ( " & _ '<-- ESTA ES LA CLAVE QUE EVITA LOS NULLS
|
||||||
|
' " SELECT 1 FROM CAT_GUNAPROD5 T5 " & _
|
||||||
|
' " WHERE T5.CAT_GP_ID = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||||
|
' ")"
|
||||||
|
|
||||||
|
Dim sql As String = _
|
||||||
|
"UPDATE CAT_GUNAPROD2 " & _
|
||||||
|
"SET CAT_GP_ALMACEN = ( " & _
|
||||||
|
" SELECT (IFNULL(INV.CI_INVENTARIO, 0) - IFNULL(Ventas.CantidadVendida, 0)) " & _
|
||||||
|
" FROM CAT_INVENTARIO INV " & _
|
||||||
|
" LEFT JOIN ( " & _
|
||||||
|
" SELECT PE_PROID, SUM(PE_CANT) AS CantidadVendida " & _
|
||||||
|
" FROM PEDIDO " & _
|
||||||
|
" WHERE PE_CLIENTE <> '0' " & _
|
||||||
|
" AND PE_CEDIS <> 'DUR' " & _
|
||||||
|
" AND PE_PRONOMBRE NOT LIKE '%CAMBIO%' " & _
|
||||||
|
" GROUP BY PE_PROID " & _
|
||||||
|
" ) Ventas ON INV.CI_IDPROD = Ventas.PE_PROID " & _
|
||||||
|
" WHERE INV.CI_IDPROD = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||||
|
") " & _
|
||||||
|
"WHERE EXISTS ( " & _
|
||||||
|
" SELECT 1 FROM CAT_INVENTARIO INV " & _
|
||||||
|
" WHERE INV.CI_IDPROD = CAT_GUNAPROD2.CAT_GP_ID " & _
|
||||||
|
")"
|
||||||
|
|
||||||
|
' Ejecutamos el cálculo masivo
|
||||||
|
Starter.skmt.ExecNonQuery(sql)
|
||||||
|
|
||||||
|
Starter.skmt.TransactionSuccessful
|
||||||
|
If Starter.Logger Then Log("Inventario Sincronizado (Excluyendo RMIs)")
|
||||||
|
Catch
|
||||||
|
Log("Error al recalcular inventario: " & LastException)
|
||||||
|
End Try
|
||||||
|
Starter.skmt.EndTransaction
|
||||||
|
LogColor(">>>>> Tiempo de RecalcularInventario: " & ((DateTime.Now - inicial)/1000), Colors.red)
|
||||||
End Sub
|
End Sub
|
||||||
110
B4A/_git_tag.ps1
Normal file
110
B4A/_git_tag.ps1
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
# --- SCRIPT DE AUTODESCUBRIMIENTO CON GUI MEJORADA ---
|
||||||
|
|
||||||
|
# Cargar librería visual
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
Add-Type -AssemblyName System.Drawing
|
||||||
|
|
||||||
|
# 1. AUTODESCUBRIMIENTO
|
||||||
|
$projectPath = $PSScriptRoot
|
||||||
|
Write-Host "Ruta: $projectPath"
|
||||||
|
|
||||||
|
$b4aFileItem = Get-ChildItem -Path $projectPath -Filter "*.b4a" | Select-Object -First 1
|
||||||
|
|
||||||
|
if (-Not $b4aFileItem) {
|
||||||
|
[System.Windows.Forms.MessageBox]::Show("No hay archivo .b4a en esta carpeta.", "Error", "OK", "Error")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
$b4aFile = $b4aFileItem.FullName
|
||||||
|
$projectName = $b4aFileItem.BaseName
|
||||||
|
Write-Host "Proyecto: $projectName"
|
||||||
|
|
||||||
|
# 2. LIMPIEZA
|
||||||
|
# $objectsPath = Join-Path $projectPath "Objects"
|
||||||
|
# if (Test-Path $objectsPath) {
|
||||||
|
# Write-Host "Limpiando Objects..."
|
||||||
|
# Remove-Item -Path "$objectsPath\*" -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
# }
|
||||||
|
|
||||||
|
# 3. LEER VERSIÓN
|
||||||
|
$versionLine = Get-Content $b4aFile | Select-String "#VersionName:"
|
||||||
|
if (-Not $versionLine) { Write-Error "Falta #VersionName"; return }
|
||||||
|
$version = ($versionLine -split ":")[1].Trim()
|
||||||
|
$tagName = "v$version"
|
||||||
|
|
||||||
|
Set-Location $projectPath
|
||||||
|
|
||||||
|
# 4. COMMIT
|
||||||
|
$oldCommit = git rev-parse HEAD
|
||||||
|
|
||||||
|
Write-Host "----------------------------------------"
|
||||||
|
Write-Host "Versión: $version"
|
||||||
|
Write-Host "Abriendo TortoiseGit..."
|
||||||
|
|
||||||
|
# Argumentos limpios
|
||||||
|
$pathArg = '/path:"{0}"' -f $projectPath
|
||||||
|
$msgArg = '/logmsg:"VERSION {0}"' -f $version
|
||||||
|
$cmdArg = "/command:commit"
|
||||||
|
|
||||||
|
$process = Start-Process "TortoiseGitProc.exe" -ArgumentList $cmdArg, $pathArg, $msgArg -Wait -PassThru
|
||||||
|
|
||||||
|
$newCommit = git rev-parse HEAD
|
||||||
|
|
||||||
|
# 5. VALIDACIÓN
|
||||||
|
if ($oldCommit -eq $newCommit) {
|
||||||
|
Write-Warning "Commit cancelado."
|
||||||
|
git tag -d $tagName 2>$null # Borra tag local previo si existe para actualizarlo al nuevo commit
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host ">> Commit detectado."
|
||||||
|
|
||||||
|
# 6. GESTIÓN DE TAGS (VISUAL TOPMOST)
|
||||||
|
Write-Host "git ls-remote --tags origin $tagName"
|
||||||
|
$remoteTagInfo = git ls-remote --tags origin $tagName
|
||||||
|
|
||||||
|
if ($remoteTagInfo) {
|
||||||
|
# --- TRUCO PARA QUE LA VENTANA SALGA AL FRENTE ---
|
||||||
|
# Creamos un formulario invisible que esté "Siempre Visible" (TopMost)
|
||||||
|
Write-Host "Recibimos remoteTagInfo"
|
||||||
|
$topForm = New-Object System.Windows.Forms.Form
|
||||||
|
$topForm.TopMost = $true
|
||||||
|
$topForm.Opacity = 0 # Invisible
|
||||||
|
$topForm.ShowInTaskbar = $false
|
||||||
|
$topForm.StartPosition = "CenterScreen"
|
||||||
|
$topForm.Show()
|
||||||
|
$topForm.Activate()
|
||||||
|
|
||||||
|
[System.Console]::Beep(1000, 200)
|
||||||
|
[System.Console]::Beep(1000, 200)
|
||||||
|
|
||||||
|
$msgBody = "El tag '$tagName' YA EXISTE en GitHub.`n`nDeseas SOBRESCRIBIRLO?`n`nSi = Borrar anterior y actualizar (Force Push).`nNo = Subir solo codigo (mantener tag viejo)."
|
||||||
|
$msgTitle = "⚠️ Conflicto de Versiones - $projectName"
|
||||||
|
|
||||||
|
# El mensaje ahora es "hijo" del formulario invisible, heredando su propiedad TopMost
|
||||||
|
Write-Host "Preguntamos que hacer con el tag"
|
||||||
|
$respuesta = [System.Windows.Forms.MessageBox]::Show($topForm, $msgBody, $msgTitle, "YesNo", "Warning")
|
||||||
|
|
||||||
|
$topForm.Dispose() # Limpiamos el formulario invisible
|
||||||
|
|
||||||
|
if ($respuesta -eq "Yes") {
|
||||||
|
Write-Host "Sobrescribiendo..."
|
||||||
|
git tag -d $tagName 2>$null
|
||||||
|
git tag -a $tagName -m "Release version $version (Updated)"
|
||||||
|
|
||||||
|
git push origin
|
||||||
|
git push origin $tagName --force
|
||||||
|
Write-Host ">> Tag actualizado (Force Push)."
|
||||||
|
} else {
|
||||||
|
Write-Host "Conservando tag anterior..."
|
||||||
|
git push origin
|
||||||
|
Write-Host ">> Código subido."
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
# Tag Nuevo
|
||||||
|
git tag -a $tagName -m "Release version $version"
|
||||||
|
git push origin --follow-tags
|
||||||
|
Write-Host ">> Versión publicada."
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "----------------------------------------"
|
||||||
29
B4A/_juntaBas.bat
Normal file
29
B4A/_juntaBas.bat
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
|
||||||
|
:: Nombre del archivo de salida
|
||||||
|
set "OutputFile=TODOS_LOS_BAS.txt"
|
||||||
|
|
||||||
|
:: Si existe una versión anterior, la elimina para no anexar datos duplicados
|
||||||
|
if exist "!OutputFile!" del "!OutputFile!"
|
||||||
|
|
||||||
|
echo Iniciando proceso de fusion...
|
||||||
|
|
||||||
|
:: Itera sobre todos los archivos .bas en el directorio actual
|
||||||
|
for %%F in (*.bas *.b4a *.b4j) do (
|
||||||
|
echo Procesando: %%F
|
||||||
|
|
||||||
|
:: Agrega un salto de linea y el encabezado al archivo de salida
|
||||||
|
echo. >> "!OutputFile!"
|
||||||
|
echo ====================================== >> "!OutputFile!"
|
||||||
|
echo ARCHIVO: %%F >> "!OutputFile!"
|
||||||
|
echo ====================================== >> "!OutputFile!"
|
||||||
|
echo. >> "!OutputFile!"
|
||||||
|
|
||||||
|
:: Vuelca el contenido del archivo actual al archivo de salida
|
||||||
|
type "%%F" >> "!OutputFile!"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Proceso terminado. Se ha creado el archivo: !OutputFile!
|
||||||
|
pause
|
||||||
28
B4A/_juntaBas.ps1
Normal file
28
B4A/_juntaBas.ps1
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# SCRIPT: _juntaBas.ps1 - Versión Saneada y Optimizada para LLM
|
||||||
|
$OutputFile="_CODIGO_COMPLETO_PARA_LLM.txt"
|
||||||
|
|
||||||
|
# Eliminar el archivo anterior si existe (IMPORTANTE)
|
||||||
|
Remove-Item -Path $OutputFile -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
Write-Host "Iniciando fusion para LLM..."
|
||||||
|
|
||||||
|
# Itera sobre los archivos .bas, .b4a, .b4j
|
||||||
|
Get-ChildItem -Path ".\*" -Include @("*.bas", "*.b4a", "*.b4j") | ForEach-Object {
|
||||||
|
$currentFile = $_.Name
|
||||||
|
Write-Host "Procesando: $currentFile"
|
||||||
|
|
||||||
|
# --- ENCABEZADO ESTRUCTURADO Y COMENTADO EN B4X (Agregado al archivo) ---
|
||||||
|
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
||||||
|
Add-Content -Path $OutputFile -Value $"// ARCHIVO_INICIO: ${currentFile}"
|
||||||
|
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
||||||
|
|
||||||
|
# Vuelca el contenido del archivo
|
||||||
|
Get-Content -Encoding UTF8 -Path $_.FullName -Raw | Add-Content -Path $OutputFile
|
||||||
|
|
||||||
|
# --- DELIMITADOR DE FIN DE ARCHIVO (Agregado al archivo) ---
|
||||||
|
Add-Content -Path $OutputFile -Value "`n'======================================================================================"
|
||||||
|
Add-Content -Path $OutputFile -Value $"// ARCHIVO_FIN: ${currentFile}"
|
||||||
|
Add-Content -Path $OutputFile -Value "'======================================================================================`n"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "`nProceso terminado. Se ha creado el archivo: $OutputFile"
|
||||||
@@ -101,6 +101,8 @@ Sub RD_Init
|
|||||||
agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
agregaColumna(rkmt, "CAT_DETALLES_PAQ", "CAT_DP_PRECIOB", "TEXT")
|
||||||
agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER")
|
agregaColumna(rkmt, "kmt_info", "CREDITO", "INTEGER")
|
||||||
agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER")
|
agregaColumna(rkmt, "PEDIDO", "PE_ENVIADO", "INTEGER")
|
||||||
|
agregaColumna(rkmt, "PEDIDO", "PE_ARCH", "TEXT")
|
||||||
|
agregaColumna(rkmt, "PEDIDO_CLIENTE", "PC_ARCH", "TEXT")
|
||||||
If chkIfTableExists(khdb, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(khdb, "CAT_VARIABLES")}, FECHA TEXT)"$)
|
If chkIfTableExists(khdb, "CAT_VARIABLES") Then rkmt.ExecNonQuery($"create table if not exists CAT_VARIABLES (${getTableColumnList(khdb, "CAT_VARIABLES")}, FECHA TEXT)"$)
|
||||||
If chkIfTableExists(khdb, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(khdb, "CAT_RMI")}, FECHA TEXT)"$)
|
If chkIfTableExists(khdb, "CAT_RMI") Then rkmt.ExecNonQuery($"create table if not exists CAT_RMI (${getTableColumnList(khdb, "CAT_RMI")}, FECHA TEXT)"$)
|
||||||
DateTime.DateFormat = "yyyyMMdd"
|
DateTime.DateFormat = "yyyyMMdd"
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ Sub traeInfoTrendSpending As Map
|
|||||||
For i = 0 To c.RowCount - 1
|
For i = 0 To c.RowCount - 1
|
||||||
c.Position = i
|
c.Position = i
|
||||||
HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$)
|
HIST_TSS_SEMANA = c.GetString($"HIST_TSS_SEMANA${semana}"$)
|
||||||
|
If Not(IsNumber(HIST_TSS_SEMANA)) Then HIST_TSS_SEMANA = 0
|
||||||
Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
|
Private xx As String = c.GetString($"HIST_TSS_SEMANA${semana}_ACUM"$)
|
||||||
If xx = "null" Then xx = 0
|
If xx = "null" Then xx = 0
|
||||||
HIST_TSS_SEMANA_ACUM = xx
|
HIST_TSS_SEMANA_ACUM = xx
|
||||||
@@ -124,7 +125,7 @@ Sub modTrendSpending(accion As String, tipo As String, monto As String)
|
|||||||
acumulado = d.GetString("ACUMULADO")
|
acumulado = d.GetString("ACUMULADO")
|
||||||
End If
|
End If
|
||||||
Log("acumulado:" & acumulado & " | monto: " & monto)
|
Log("acumulado:" & acumulado & " | monto: " & monto)
|
||||||
Private c As Cursor = tsdb.ExecQuery($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
|
Private c As Cursor = tsdb.ExecQuery($"select HIST_TSS_TIPO, ifnull(${HIST_TSS_SEMANA},0) as disponible, ifnull(${HIST_TSS_SEMANA_ACUM},0) as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$)
|
||||||
' Log(($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$))
|
' Log(($"select HIST_TSS_TIPO, ${HIST_TSS_SEMANA} as disponible, ${HIST_TSS_SEMANA_ACUM} as acumulado from HIST_TREND_SPENDING_SEMANAL where HIST_TSS_TIPO = '${tipo.ToUpperCase}'"$))
|
||||||
Log("---- " & c.RowCount)
|
Log("---- " & c.RowCount)
|
||||||
If accion.ToUpperCase = "RESTA" Then
|
If accion.ToUpperCase = "RESTA" Then
|
||||||
@@ -335,7 +336,7 @@ End Sub
|
|||||||
' Trae la cantidad máxima de productos con bonificacion por presupuesto.
|
' Trae la cantidad máxima de productos con bonificacion por presupuesto.
|
||||||
' Si el presupuesto es 10 y la bonificacion del producto es 2, el máximo es 5 productos.
|
' Si el presupuesto es 10 y la bonificacion del producto es 2, el máximo es 5 productos.
|
||||||
Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String, laCant As String, elPrecioVenta As String, promoId As String) As Int
|
Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String, laCant As String, elPrecioVenta As String, promoId As String) As Int
|
||||||
Private thisLog As Boolean = False
|
Private thisLog As Boolean = True
|
||||||
Private tsMaximas As Int = 100000000
|
Private tsMaximas As Int = 100000000
|
||||||
Private tsRestantes As String = 0
|
Private tsRestantes As String = 0
|
||||||
Private tsMonto As String
|
Private tsMonto As String
|
||||||
@@ -345,22 +346,26 @@ Sub traeBonificacionesMaximas(tipo As String, clienteId As String, id As String,
|
|||||||
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
TS_DESCUENTOS = Regex.Split(",", mx.Get("DESCUENTOS"))
|
||||||
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
TS_BONIFICACIONES = Regex.Split(",", mx.Get("BONIFICACIONES"))
|
||||||
|
|
||||||
If thisLog Then LogColor($"Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Red)
|
If thisLog Then LogColor($" ============ INICIA BONIFICACIONES MAXIMAS (${id}) ========"$, Colors.RGB(0,197,110))
|
||||||
|
If thisLog Then LogColor($" Presupuesto: ${TS_BONIFICACIONES(0)} - Acumulado ayer: ${TS_BONIFICACIONES(1)} - Hoy: ${traeAcumuladoHoyTS("bonificaciones")}"$, Colors.Magenta)
|
||||||
If tipo.ToUpperCase = "BONIFICACIONES" Then
|
If tipo.ToUpperCase = "BONIFICACIONES" Then
|
||||||
tsMonto = NumberFormat2(traeMontoBonificacion(id, elPrecioVenta, promoId), 1, 2, 2, False)
|
tsMonto = NumberFormat2(traeMontoBonificacion(id, elPrecioVenta, promoId), 1, 2, 2, False)
|
||||||
tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
tsRestantes = (TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS("bonificaciones")) ' Traemos monto restante de Trend Spending para bonificaciones.
|
||||||
Log("TS_BONIFICACIONES(0) - TS_BONIFICACIONES(1) - traeAcumuladoHoyTS('bonificaciones')")
|
Log($" PresupuestoBonifs: ${TS_BONIFICACIONES(0)}, AcumuladoBonifs: ${TS_BONIFICACIONES(1)}, traeAcumuladoHoyTS('bonificaciones'): ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||||
Log($"${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
' Log($" ${TS_BONIFICACIONES(0)} - ${TS_BONIFICACIONES(1)} - ${traeAcumuladoHoyTS("bonificaciones")}"$)
|
||||||
End If
|
End If
|
||||||
If thisLog Then Log($"Monto de bonificacion: ${tsMonto}"$)
|
If thisLog Then Log($" Monto de bonificacion: ${tsMonto}"$)
|
||||||
If thisLog Then Log($"Presupuesto disponible: ${tsRestantes}"$)
|
If thisLog Then Log($" Presupuesto disponible: ${tsRestantes}"$)
|
||||||
If thisLog Then Log($"Cantidad: ${laCant}"$)
|
' If thisLog Then Log($"Cantidad: ${laCant}"$)
|
||||||
If thisLog Then Log($"Floor(tsRestantes / (tsMonto * laCant))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
If thisLog Then Log($" Floor(tsRestantes / (tsMonto * laCant)) <==> Floor(${tsRestantes} / (${tsMonto} * ${laCant})) = ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||||
If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
' If thisLog Then Log($"Floor(${tsRestantes} / (${tsMonto} * ${laCant}))= ${Floor(tsRestantes / (tsMonto * laCant))}"$)
|
||||||
If tsMonto > 0 Then
|
If tsMonto > 0 Then
|
||||||
tsMaximas = Floor(tsRestantes / (tsMonto * laCant))
|
tsMaximas = Floor(tsRestantes / (tsMonto * laCant))
|
||||||
End If
|
End If
|
||||||
If thisLog Then Log(">>> tsMaximas: " & tsMaximas)
|
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ***** BONIFICACIONES MAXIMAS: " & tsMaximas & " *****", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ************************************************", Colors.red)
|
||||||
|
If thisLog Then LogColor(" ============ TERMINA BONIFICACIONNES MAXIMAS ========", Colors.RGB(0,197,110))
|
||||||
Return tsMaximas
|
Return tsMaximas
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -369,13 +374,14 @@ End Sub
|
|||||||
' - Si CAT_DP_PRECIOB es 0, la bonificacion es: Precio original.
|
' - Si CAT_DP_PRECIOB es 0, la bonificacion es: Precio original.
|
||||||
Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As String
|
Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As String
|
||||||
Private thisLog As Boolean = True
|
Private thisLog As Boolean = True
|
||||||
LogColor($">>>>>>> ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
|
If thisLog Then LogColor($" ============ INICIA MONTO BONIFICACION (${id}) ========"$, Colors.RGB(151,0,171))
|
||||||
|
If thisLog Then LogColor($" ###### ${promoId}, ${precio}, ${id}"$, Colors.Magenta)
|
||||||
Private tsMonto As String = 0
|
Private tsMonto As String = 0
|
||||||
Private re As Cursor = Starter.skmt.ExecQuery($"select cat_gp_id from cat_gunaprod2 where (cat_gp_tipo like 'REGALO%' or cat_gp_tipo like 'EXHIBIDOR%') and cat_gp_id = '${id}'"$) ' Revisamos si el producto es regalo o exhibidor.
|
Private re As Cursor = Starter.skmt.ExecQuery($"select cat_gp_id from cat_gunaprod2 where (cat_gp_tipo like 'REGALO%' or cat_gp_tipo like 'EXHIBIDOR%') and cat_gp_id = '${id}'"$) ' Revisamos si el producto es regalo o exhibidor.
|
||||||
If re.RowCount = 0 Then' No es regalo ni exhibidor.
|
If re.RowCount = 0 Then' No es regalo ni exhibidor.
|
||||||
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
Private c As Cursor = tsdb.ExecQuery($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||||
Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
' Log($"SELECT CAT_DP_ID, CAT_DP_IDPROD, CAT_DP_PRECIO, CAT_DP_TIPO, CAT_GP_PRECIO, CAT_DP_PRECIOB FROM CAT_DETALLES_PAQ join ${traeTablaProds(Starter.tipov)} on CAT_GP_ID = CAT_DP_IDPROD where CAT_GP_ID = '${id}' and CAT_DP_PRECIO = '${precio}' and CAT_DP_ID = '${promoId}'"$)
|
||||||
Log($"rowcount: ${c.RowCount}"$)
|
If thisLog Then Log($" Rowcount DP y CGP2: ${c.RowCount}"$)
|
||||||
If c.RowCount > 0 Then
|
If c.RowCount > 0 Then
|
||||||
c.Position = 0
|
c.Position = 0
|
||||||
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
|
If c.GetInt("CAT_DP_PRECIOB") = 1 Or (c.GetInt("CAT_DP_PRECIOB") = 0 And c.GetString("CAT_GP_PRECIO") = c.GetString("CAT_DP_PRECIO")) Then
|
||||||
@@ -384,10 +390,11 @@ Sub traeMontoBonificacion(id As String, precio As String, promoId As String) As
|
|||||||
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
|
tsMonto = c.GetString("CAT_GP_PRECIO") ' Precio original.
|
||||||
End If
|
End If
|
||||||
' Log("PRECIOB: " & c.GetInt("CAT_DP_PRECIOB"))
|
' Log("PRECIOB: " & c.GetInt("CAT_DP_PRECIOB"))
|
||||||
If thisLog Then Log($"Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
|
If thisLog Then Log($" Precio normal: ${c.GetString("CAT_GP_PRECIO")}, Precio desc: ${c.GetString("CAT_DP_PRECIO")}, Monto bonificacion: ${tsMonto}"$)
|
||||||
End If
|
End If
|
||||||
' Log("ROWCOUNT: " & c.RowCount)
|
' Log("ROWCOUNT: " & c.RowCount)
|
||||||
End If
|
End If
|
||||||
|
If thisLog Then LogColor($" ============ TERMINA MONTO BONIFICACION ========"$, Colors.RGB(151,0,171))
|
||||||
Return tsMonto
|
Return tsMonto
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -399,7 +406,7 @@ End Sub
|
|||||||
' se agoto el presupuesto.
|
' se agoto el presupuesto.
|
||||||
' Aunque si hay suficiente para mostrar algunas promos ... pues que si las muestre.
|
' Aunque si hay suficiente para mostrar algunas promos ... pues que si las muestre.
|
||||||
Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int
|
Sub maxPromosPorProdsVariables(idProdsVariables As List, promo As String)As Int
|
||||||
Private logger As Boolean = True
|
Private logger As Boolean = False
|
||||||
Private Maxs As Int = 10000000
|
Private Maxs As Int = 10000000
|
||||||
Private prodsVariablesXPresupuestoBonificaciones As List
|
Private prodsVariablesXPresupuestoBonificaciones As List
|
||||||
Private prodsVariablesRequeridos As Int = traeProdsVariablesRequeridos(promo)
|
Private prodsVariablesRequeridos As Int = traeProdsVariablesRequeridos(promo)
|
||||||
|
|||||||
Reference in New Issue
Block a user