- Se completo el codigo de la clase promociones, ya "casi" sin mapas!

This commit is contained in:
2024-05-12 17:53:07 -06:00
parent 99bf32b3fd
commit 33550e86c3
8 changed files with 250 additions and 170 deletions

View File

@@ -312,7 +312,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE) rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE)
Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
If Result Then If Result Then
Dim Phn As PhoneId ' Dim Phn As PhoneId
IMEN.Text = "" 'Phn.GetDeviceId IMEN.Text = "" 'Phn.GetDeviceId
IMEI ="" ' Phn.GetDeviceId IMEI ="" ' Phn.GetDeviceId
If logger Then LogColor($"////////////////// IMEI: ${IMEI} ////////////////// "$, Colors.Blue) If logger Then LogColor($"////////////////// IMEI: ${IMEI} ////////////////// "$, Colors.Blue)

View File

@@ -326,8 +326,8 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
If c2.RowCount > 0 Then If c2.RowCount > 0 Then
For i=0 To c2.RowCount -1 For i=0 To c2.RowCount -1
c2.Position=i c2.Position=i
Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) ' Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId)
' Private tm As Map = promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId, Starter.tipov) Private tm As Map = promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId, Starter.tipov)
' Log(tm) ' Log(tm)
If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto.
lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("prodsFijosCant") & " V:" & tm.Get("prodsVariablesCant")) lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("prodsFijosCant") & " V:" & tm.Get("prodsVariablesCant"))
@@ -936,7 +936,7 @@ End Sub
Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object) Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object)
Log("Promo longclic = "&Value) Log("Promo longclic = "&Value)
Private id As String = "" Private id As String = ""
Dim c As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$) Dim c As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ID from ${Subs.traeTablaProds(Starter.tipov)} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$)
If c.RowCount > 0 Then If c.RowCount > 0 Then
c.Position = 0 c.Position = 0
id = c.GetString("CAT_GP_ID") id = c.GetString("CAT_GP_ID")

View File

@@ -158,8 +158,8 @@ Sub muestraPromo(promo As String, cliente As String)
' jpeg = c2.GetBlob("CAT_GP_IMG") ' jpeg = c2.GetBlob("CAT_GP_IMG")
' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) ' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length)
' bmp.Initialize2(ins) ' bmp.Initialize2(ins)
Private indicePV = pv.IndexOf(p) Private indicePV As Int = pv.IndexOf(p)
Private estePrecio = listaPreciosPV.Get(indicePV) Private estePrecio As String = listaPreciosPV.Get(indicePV)
Private thisProd As Map = prodsPromo.Get(p) Private thisProd As Map = prodsPromo.Get(p)
If thisLog Then Log(thisProd) If thisLog Then Log(thisProd)
If existenciaProdVariable > 0 Then If existenciaProdVariable > 0 Then

View File

@@ -888,7 +888,7 @@ Version=12.8
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Kelloggs Venta #ApplicationLabel: Kelloggs Venta
#VersionCode: 3000 #VersionCode: 3000
#VersionName: 4.05.10 #VersionName: 4.05.12
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False
#BridgeLogger:true #BridgeLogger:true

View File

@@ -17,7 +17,7 @@ ModuleBookmarks22=
ModuleBookmarks23= ModuleBookmarks23=
ModuleBookmarks24= ModuleBookmarks24=
ModuleBookmarks25= ModuleBookmarks25=
ModuleBookmarks26=199 ModuleBookmarks26=
ModuleBookmarks27= ModuleBookmarks27=
ModuleBookmarks28= ModuleBookmarks28=
ModuleBookmarks29= ModuleBookmarks29=
@@ -91,6 +91,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=C_Cliente,Guardar_Click,966,0,Promociones,restaFijosPromo,346,6,Promociones,revisaMaxPromosProdsVariablesPorInventarioXX,240,0,Promociones,procesaPromocion,32,6,Promociones,revisaMaxPromosProdsFijosPorInventario,203,6,Subs,traePromo,1030,0,Subs,traeMaxPromos,1188,0,Promociones,traeMaxPromos,392,2,Promociones,traePromo,98,6,C_Productos,lv_catalogos_ItemClick,322,2 NavigationStack=Promociones,traeListaDePromo,491,0,Promociones,traeInfoDePromo,433,0,Promociones,revisaMaxPromosProdsVariablesPorInventarioXX,276,0,Promociones,traePromo,97,5,Promociones,alcanzanLosVariablesParaPromo,391,0,Promociones,traeMaxPromos,406,4,Promociones,traePromosVendidas,415,0,Promociones,revisaMaxPromosProdsFijosPorInventario,217,0,Promociones,restaFijosDePromo,332,0,Promociones,procesaPromocion,40,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=1,28,11,3,26,12,4,29,8,13,2 VisibleModules=1,28,11,3,26,12,4,29,8,13

View File

@@ -12,6 +12,7 @@ Sub Class_Globals
Private EventName As String 'ignore Private EventName As String 'ignore
Private CallBack As Object 'ignore Private CallBack As Object 'ignore
Dim tablaProds As String Dim tablaProds As String
Dim muestraLogs, releaseMode As Boolean
End Sub End Sub
'Initializes the object. You can add parameters to this method if needed. 'Initializes the object. You can add parameters to this method if needed.
@@ -22,63 +23,74 @@ Public Sub Initialize (vCallback As Object, vEventName As String, db0 As SQL) As
Log("PROMOS INIT") Log("PROMOS INIT")
db.ExecNonQuery("CREATE TABLE IF NOT EXISTS PROMOCIONES_INFO (P_ID TEXT, P_ESTATUS TEXT, P_MAXXCLIENTE NUMERIC, P_MAXRECURRENTE NUMERIC, P_MAXPROMOS NUMERIC, HISTORICO TEXT, P_TIPOS TEXT, P_PRODSFIJOS TEXT, P_PRODSFIJOS_CANT NUMERIC, P_PRODSFIJOS_PIEZAS TEXT, P_PRODSFIJOS_PRECIOS TEXT, P_PRODSVARIABLES TEXT, P_PRODSVARIABLES_CANT NUMERIC, P_PRODSVARIABLES_PRECIOS TEXT, P_PRODSVARIABLES_REQUERIDOS NUMERIC)") db.ExecNonQuery("CREATE TABLE IF NOT EXISTS PROMOCIONES_INFO (P_ID TEXT, P_ESTATUS TEXT, P_MAXXCLIENTE NUMERIC, P_MAXRECURRENTE NUMERIC, P_MAXPROMOS NUMERIC, HISTORICO TEXT, P_TIPOS TEXT, P_PRODSFIJOS TEXT, P_PRODSFIJOS_CANT NUMERIC, P_PRODSFIJOS_PIEZAS TEXT, P_PRODSFIJOS_PRECIOS TEXT, P_PRODSVARIABLES TEXT, P_PRODSVARIABLES_CANT NUMERIC, P_PRODSVARIABLES_PRECIOS TEXT, P_PRODSVARIABLES_REQUERIDOS NUMERIC)")
db.ExecNonQuery("DELETE FROM PROMOCIONES_INFO") db.ExecNonQuery("DELETE FROM PROMOCIONES_INFO")
#if RELEASE
releaseMode = true
#Else
releaseMode = False
#end if
Return Me Return Me
End Sub End Sub
Sub procesaPromocion(idPromo As String, cliente0 As String, tipoVenta As String) As Map 'ignore Sub procesaPromocion(idPromo As String, cliente0 As String, tipoVenta As String) As Map 'ignore
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub. '######################################################
muestraLogs = True ' Si es verdadero, se muestran los logs de la clase.
'######################################################
If releaseMode Then muestraLogs = False
cliente = cliente0 cliente = cliente0
Private inicioContador As String = DateTime.Now ' Private inicioContador As String = DateTime.Now
Private maxPromos As Int = 0 Private maxPromos As Int = 0
Private maxPromosXFijos As Int = 0 Private maxPromosXFijos As Int = 0
tablaProds = "cat_gunaprod2" tablaProds = "cat_gunaprod2"
If tipoVenta = "ABORDO" Or tipoVenta = "PREVENTA" Then tablaProds = "cat_gunaprod" If tipoVenta = "ABORDO" Or tipoVenta = "PREVENTA" Then tablaProds = "cat_gunaprod"
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Blue) If muestraLogs Then LogColor($"**********************************************************************"$, Colors.Green)
' LogColor("**************************** " & traeInfoFromPromo("P_PRODSFIJOS", idPromo), Colors.blue) If muestraLogs Then LogColor($"********* INICIAMOS REVISION DE PROMO ${idPromo} *********"$, Colors.Green)
If muestraLogs Then LogColor($"**********************************************************************"$, Colors.Green)
' LogColor("**************************** " & traeInfoDePromo("P_PRODSFIJOS", idPromo), Colors.blue)
traePromo(idPromo, cliente0) ' Generamos la tabla con la información d la promoción. traePromo(idPromo, cliente0) ' Generamos la tabla con la información d la promoción.
maxPromosXFijos = revisaMaxPromosProdsFijosPorInventario(idPromo) maxPromosXFijos = revisaMaxPromosProdsFijosPorInventario(idPromo)
If maxPromosXFijos < 1 Then If maxPromosXFijos < 1 Then
Log(444)
db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'ko' where P_ID = '${idPromo}'"$) db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'ko' where P_ID = '${idPromo}'"$)
End If End If
Private logColor1 As String Private logColor1 As String
If traeInfoFromPromo("P_ESTATUS", idPromo) = "ok" Then logColor1 = Colors.RGB(0,143,0) Else logColor1 = Colors.Red If traeInfoDePromo("P_ESTATUS", idPromo) = "ok" Then logColor1 = Colors.RGB(0,143,0) Else logColor1 = Colors.Red
If thisLog And traeInfoFromPromo("P_ESTATUS", idPromo) = "ok" Then LogColor($"### MAX PROMOS X FIJOS = ${maxPromosXFijos}"$, logColor1) If muestraLogs And traeInfoDePromo("P_ESTATUS", idPromo) = "ok" Then LogColor($"### MAX PROMOS X FIJOS = ${maxPromosXFijos}"$, logColor1)
If traeInfoFromPromo("P_ESTATUS", idPromo) = "ok" Then 'Si encontramos la promoción, entonces ... If traeInfoDePromo("P_ESTATUS", idPromo) = "ok" Then 'Si encontramos la promoción, entonces ...
maxPromos = traeMaxPromos(idPromo) ' Buscamos el máximo de promociones permitidas. maxPromos = traeMaxPromos(idPromo) ' Buscamos el máximo de promociones permitidas.
If thisLog Then LogColor($"Promociones permitidas=${maxPromos}"$, Colors.Blue) If muestraLogs Then LogColor($"Promociones permitidas=${maxPromos}"$, Colors.Blue)
If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo)) ' If muestraLogs Then Log("Promos vendidas: " & traePromosVendidas(idPromo))
If maxPromos < 1 Then If maxPromos < 1 Then
If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) If muestraLogs Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red)
Return CreateMap("status":"ko") ' , "mp":pm Return CreateMap("status":"ko") ' , "mp":pm
End If End If
'Restamos del inventario (mapa) las piezas necesarias para los productos fijos. '👇🏼 Restamos del inventario (mapa) las piezas necesarias para los productos fijos. 👇🏼
Private inventarioSinFijos As Map = restaFijosPromo(idPromo) Private inventarioSinFijos As Map = restaFijosDePromo(idPromo)
If thisLog Then LogColor("inventarioSinFijos="&inventarioSinFijos, Colors.Magenta) If muestraLogs Then LogColor("inventarioSinFijos="&inventarioSinFijos, Colors.Magenta)
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(idPromo, inventarioSinFijos) Private pv As Boolean = alcanzanLosVariablesParaPromo(idPromo, inventarioSinFijos)
If pv Then logColor1 = Colors.RGB(0,143,0) Else logColor1 = Colors.Red If pv Then logColor1 = Colors.RGB(0,143,0) Else logColor1 = Colors.Red
If thisLog And pv Then If muestraLogs And pv Then
LogColor("### ALCANZAN LOS VARIABLES? --> " & pv, logColor1) LogColor("### ALCANZAN LOS VARIABLES? --> " & pv, logColor1)
End If End If
' LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
If pv Then If pv Then
Return CreateMap("status":"ok", "prodsFijosCant":traeInfoFromPromo("P_PRODSFIJOS_CANT", idPromo), "prodsVariablesCant":traeInfoFromPromo("P_PRODSVARIABLES_CANT", idPromo)) Return CreateMap("status":"ok", "prodsFijosCant":traeInfoDePromo("P_PRODSFIJOS_CANT", idPromo), "prodsVariablesCant":traeInfoDePromo("P_PRODSVARIABLES_CANT", idPromo))
Else Else
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) If muestraLogs Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
Return CreateMap("status":"ko") Return CreateMap("status":"ko")
End If End If
Else Else
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) If muestraLogs Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
' LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
Return CreateMap("status":"ko") Return CreateMap("status":"ko")
End If End If
Else Else
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) If muestraLogs Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
' LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
Return CreateMap("status":"ko") ' , "mp":pm Return CreateMap("status":"ko") ' , "mp":pm
End If End If
' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ...
' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION. ' break 'NO HAY INVENTARIO SUFICIENTE PARA LA PROMOCION.
LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
End Sub End Sub
'Genera una tabla (PROMOCIONES_INFO) con la información de la promo. 'Genera una tabla (PROMOCIONES_INFO) con la información de la promo.
@@ -89,17 +101,16 @@ End Sub
' P_ESTATUS="OK" 'Ok si existe la promocion. ' P_ESTATUS="OK" 'Ok si existe la promocion.
' P_PRODSVARIABLES_REQUERIDOS=5 'Cantidad de productos variables requeridos para la promoción. ' P_PRODSVARIABLES_REQUERIDOS=5 'Cantidad de productos variables requeridos para la promoción.
Sub traePromo(promo As String, cliente0 As String) As Map Sub traePromo(promo As String, cliente0 As String) As Map
Private thisLog As Boolean = True If muestraLogs Then LogColor("> TraePromo: " & promo, Colors.blue)
If thisLog Then LogColor("################## TraePromoC: " & promo & " ##################", Colors.blue) ' 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 las el maximo de promocioones a otorgar. Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar.
Private siHistorico As String = 0 Private siHistorico As String = 0
' Private promoMap As Map ' Private promoMap As Map
Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables, prodsVariablesPrecios As List Private prodsFijos, prodsFijosPrecios, prodsFijosReq, prodsVariables, prodsVariablesPrecios As List
' promoMap.Initialize ' promoMap.Initialize
prodsFijos.Initialize prodsFijos.Initialize
prodsFijosPrecios.Initialize prodsFijosPrecios.Initialize
prodsFijosPiezas.Initialize prodsFijosReq.Initialize
prodsVariables.Initialize prodsVariables.Initialize
prodsVariablesPrecios.Initialize prodsVariablesPrecios.Initialize
c.Position = 0 c.Position = 0
@@ -119,16 +130,16 @@ Sub traePromo(promo As String, cliente0 As String) As Map
' 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 = '${cliente0}' "$) Private ps As Cursor = Starter.skmt.ExecQuery($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' "$)
' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' "$) ' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' "$)
If thisLog Then Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$) If muestraLogs Then Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$)
If ps.RowCount > 0 Then If ps.RowCount > 0 Then
ps.Position = 0 ps.Position = 0
db.ExecNonQuery($"update PROMOCIONES_INFO set P_MAXXCLIENTE = 0, P_MAXRECURRENTE = 0, P_MAXPROMOS = 0 where P_ID = '${promo}'"$) 'Si es segmentada la ponemos en cero, porque SOLO le debe de aparecer a ciertos clientes. db.ExecNonQuery($"update PROMOCIONES_INFO set P_MAXXCLIENTE = 0, P_MAXRECURRENTE = 0, P_MAXPROMOS = 0 where P_ID = '${promo}'"$) 'Si es segmentada la ponemos en cero, porque SOLO le debe de aparecer a ciertos clientes.
' promoMap = CreateMap("id":promo, "maxXcliente":0, "maxRecurrente":0, "maxPromos":0) 'Si es segmentada la ponemos en cero, porque SOLO le debe de aparecer a ciertos clientes. ' promoMap = CreateMap("id":promo, "maxXcliente":0, "maxRecurrente":0, "maxPromos":0) 'Si es segmentada la ponemos en cero, porque SOLO le debe de aparecer a ciertos clientes.
If thisLog Then LogColor($">>> PROMO "${promo}" SEGMENTADA PARA EL CLIENTE ${ps.GetString("HCCP_CLIENTE")}"$, Colors.Magenta) If muestraLogs Then LogColor($">>> PROMO "${promo}" SEGMENTADA PARA EL CLIENTE ${ps.GetString("HCCP_CLIENTE")}"$, Colors.Magenta)
' Select hccp_cliente As valido from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traecliente}' ' Select hccp_cliente As valido from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traecliente}'
Private ps2 As Cursor = Starter.skmt.ExecQuery($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' and HCCP_CANT > HCCP_CANT_VENDIDA"$) Private ps2 As Cursor = Starter.skmt.ExecQuery($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
' Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$) ' Log($"Select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${traeCliente}' and HCCP_CANT > HCCP_CANT_VENDIDA"$)
If thisLog Then Log($"registros:${ps2.RowCount}"$) If muestraLogs Then Log($"registros:${ps2.RowCount}"$)
If ps2.RowCount > 0 Then If ps2.RowCount > 0 Then
ps2.Position = 0 ps2.Position = 0
' Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}, Vendidas: ${ps2.GetString("HCCP_CANT_VENDIDA")}"$) ' Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}, Vendidas: ${ps2.GetString("HCCP_CANT_VENDIDA")}"$)
@@ -158,21 +169,21 @@ Sub traePromo(promo As String, cliente0 As String) As Map
If c.GetString("CAT_DP_TIPO") = "0" Then If c.GetString("CAT_DP_TIPO") = "0" Then
prodsFijos.Add(c.GetString("CAT_DP_IDPROD")) prodsFijos.Add(c.GetString("CAT_DP_IDPROD"))
prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO")) prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO"))
prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS")) prodsFijosReq.Add(c.GetString("CAT_DP_PZAS"))
End If End If
If c.GetString("CAT_DP_TIPO") = "1" Then If c.GetString("CAT_DP_TIPO") = "1" Then
prodsVariables.Add(c.GetString("CAT_DP_IDPROD")) prodsVariables.Add(c.GetString("CAT_DP_IDPROD"))
prodsVariablesPrecios.Add(c.GetString("CAT_DP_PRECIO")) prodsVariablesPrecios.Add(c.GetString("CAT_DP_PRECIO"))
End If End If
' If thisLog Then Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$) ' If muestraLogs Then Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$)
Next Next
db.ExecNonQuery($"update PROMOCIONES_INFO set P_TIPOS = '${tipos}', P_PRODSFIJOS = '${prodsFijos}', P_PRODSFIJOS_CANT = ${prodsFijos.Size}, P_PRODSFIJOS_PRECIOS = '${prodsFijosPrecios}', P_PRODSFIJOS_PIEZAS = '${prodsFijosPiezas}', P_PRODSVARIABLES = '${prodsVariables}', P_PRODSVARIABLES_CANT = ${prodsVariables.Size}, P_PRODSVARIABLES_PRECIOS = '${prodsVariablesPrecios}', P_ESTATUS = 'ok' where P_ID = '${promo}'"$) db.ExecNonQuery($"update PROMOCIONES_INFO set P_TIPOS = '${tipos}', P_PRODSFIJOS = '${prodsFijos}', P_PRODSFIJOS_CANT = ${prodsFijos.Size}, P_PRODSFIJOS_PRECIOS = '${prodsFijosPrecios}', P_PRODSFIJOS_PIEZAS = '${prodsFijosReq}', P_PRODSVARIABLES = '${prodsVariables}', P_PRODSVARIABLES_CANT = ${prodsVariables.Size}, P_PRODSVARIABLES_PRECIOS = '${prodsVariablesPrecios}', P_ESTATUS = 'ok' where P_ID = '${promo}'"$)
' promoMap.Put("productos", prods) 'Mapa con los productos de la promocion (id, precio, almacen, tipo, piezas, etc.) ' promoMap.Put("productos", prods) 'Mapa con los productos de la promocion (id, precio, almacen, tipo, piezas, etc.)
' promoMap.Put("tipos", tipos) 'Mapa con los productos de la promoción y su tipo (fijo o variable). ' promoMap.Put("tipos", tipos) 'Mapa con los productos de la promoción y su tipo (fijo o variable).
' promoMap.Put("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción. ' promoMap.Put("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción.
' promoMap.Put("prodsFijosCant", prodsFijos.Size) ' promoMap.Put("prodsFijosCant", prodsFijos.Size)
' promoMap.Put("prodsFijosPrecios", prodsFijosPrecios) ' promoMap.Put("prodsFijosPrecios", prodsFijosPrecios)
' promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) ' promoMap.Put("prodsFijosReq", prodsFijosReq)
' promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción. ' promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción.
' promoMap.Put("prodsVariablesCant", prodsVariables.Size) ' promoMap.Put("prodsVariablesCant", prodsVariables.Size)
' promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios) ' promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios)
@@ -181,7 +192,7 @@ Sub traePromo(promo As String, cliente0 As String) As Map
' promoMap.Put("resultado", "No hay datos de la promoción.") ' promoMap.Put("resultado", "No hay datos de la promoción.")
db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'No hay datos de la promoción.' where P_ID = '${promo}'"$) db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'No hay datos de la promoción.' where P_ID = '${promo}'"$)
End If End If
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 ${tablaProds} 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
If c.RowCount > 0 Then If c.RowCount > 0 Then
@@ -192,98 +203,84 @@ Sub traePromo(promo As String, cliente0 As String) As Map
db.ExecNonQuery($"update PROMOCIONES_INFO set P_PRODSVARIABLES_REQUERIDOS = ${pvr} where P_ID = '${promo}'"$) 'Cantidad de productos variables requeridos para la promoción. db.ExecNonQuery($"update PROMOCIONES_INFO set P_PRODSVARIABLES_REQUERIDOS = ${pvr} where P_ID = '${promo}'"$) 'Cantidad de productos variables requeridos para la promoción.
End If End If
c.Close c.Close
' If thisLog Then Log($"Inv variables: ${cuantosVariablesDisponiblesDB(promo)}"$) ' If muestraLogs Then Log($"Inv variables: ${cuantosVariablesDisponiblesDB(promo)}"$)
' If thisLog Then Log($"Inv dispo: ${traemosInvDispParaPromo(promo)}"$) ' If muestraLogs Then Log($"Inv dispo: ${traemosInvDispParaPromo(promo)}"$)
' If thisLog Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue) ' If muestraLogs Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue)
If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Blue) ' If muestraLogs Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Blue)
' Return promoMap ' Return promoMap
End Sub 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(idPromo As String) As Int
Sub revisaMaxPromosProdsFijosPorInventario(id As String) As Int If muestraLogs Then LogColor("> revisaMaxPromosProdsFijosPorInventario: " & idPromo, Colors.blue)
Private thisLog As Boolean = True Private maxPromosPermitidas As List
' Private invFijoXpromo As Map Private promosDispEsteProd, InvDispEsteProd, pzasReqEsteProd As Int
Private t As List Private esteColor As Double
Private c As ResultSet = db.ExecQuery($"select P_PRODSFIJOS, P_PRODSFIJOS_PIEZAS from PROMOCIONES_INFO where P_ID = '${id}'"$) Private esteMensaje As String
t.Initialize maxPromosPermitidas.Initialize
t.Add(traeMaxPromos(id)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo). maxPromosPermitidas.Add(traeMaxPromos(idPromo)) ' Agregamos a la lista las promos maximas permitidas (por cliente, recurrentes y maxpromos).
' invFijoXpromo.Initialize ' 👇🏼 Traemos los productos fijos y piezas requeridas de la promoción. 👇🏼
' If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) Private c As ResultSet = db.ExecQuery($"select CAT_DP_IDPROD, sum(CAT_DP_PZAS) as totalPzas from CAT_DETALLES_PAQ where CAT_DP_ID = '${idPromo}' and CAT_DP_TIPO = '0' group by CAT_DP_IDPROD"$)
Private invDispParaPromo As Map = traemosInvDispParaPromo(id) Do While c.NextRow
If thisLog Then Log(">>>>> " & $"invDispParaPromo=${invDispParaPromo}"$) InvDispEsteProd = traeInventario(c.GetString("CAT_DP_IDPROD"))
Private prodsFijosPiezas As List = traeListFromPromo("P_PRODSFIJOS_PIEZAS", id) pzasReqEsteProd = c.GetString("totalPzas")
Private idProdsFijos As List = traeListFromPromo("P_PRODSFIJOS", id) esteColor = Colors.green
If thisLog Then Log($"${idProdsFijos},${prodsFijosPiezas}"$) esteMensaje = "INVENTARIO OK"
For p = 0 To idProdsFijos.Size -1 'Generamos una lista con las promos disponibles por producto (dividimos el inventario total entre las piezas requeridas). If pzasReqEsteProd > InvDispEsteProd Then
Private thisInvDisp As Int = 0 esteColor = Colors.red
' Log($"|${invDispParaPromo.Get("3800025096")}|"$) esteMensaje = "INVENTARIO INSUFICIENTE"
' Private tmpId As String = idProdsFijos.Get(p)
If thisLog Then Log($"### esteFijo = ${idProdsFijos.Get(p)} InvDisp = ${invDispParaPromo.Get(idProdsFijos.Get(p).As(String))}"$)
If invDispParaPromo.Get(idProdsFijos.Get(p).As(String)) <> Null Then
thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p).As(String))
If thisLog Then Log($"thisInvDispFijos = ${thisInvDisp}"$)
End If End If
If thisLog Then Log($"idFijo=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzas=${prodsFijosPiezas.Get(p)}"$) If muestraLogs Then LogColor($"PROD FIJO=${c.GetString("CAT_DP_IDPROD")}, INV=${InvDispEsteProd}, REQ=${pzasReqEsteProd} --> ${esteMensaje}"$, esteColor)
' If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) promosDispEsteProd = (InvDispEsteProd/pzasReqEsteProd).As(Int) 'Agregamos el as(int) para que solo nos regrese la parte entera de la division.
Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal. maxPromosPermitidas.Add(promosDispEsteProd) ' Agregamos a la lista las promociones permitidas por inventario de este producto.
If thisLog Then Log(x(0)) Loop
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. maxPromosPermitidas.Sort(True) ' Ordenamos la lista para que el primer elemento sea el MAS pequeño.
Next If muestraLogs Then LogColor("Max promos de prodsFijos POR inventario = " & maxPromosPermitidas.Get(0), Colors.Magenta)
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultado mas pequeño. Return maxPromosPermitidas.Get(0) 'Regresamos el MENOR numero de promociones permitidas.
If thisLog Then LogColor($"promosProdsFijosDisp=${t}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijosInv=${prodsFijosPiezas}"$, Colors.Blue)
' If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
If thisLog Then LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.Magenta)
' LogColor(">>>>>> " & t.Get(0), Colors.red)
Return t.Get(0) 'Regresamos el resultado mas pequeño.
End Sub End Sub
'Regresa cuantas promos alcanzan con los productos VARIABLES que hay en inventario. 'Regresa cuantas promos alcanzan con los productos VARIABLES que hay en inventario.
'La cantidad de promos disponibles se calcula DESPUES de descontar los productos fijos, y si las 'La cantidad de promos disponibles se calcula DESPUES de descontar los productos fijos, y si las
'promos por productos fijos llega al maximo, aunque se puedan mas de producos variables, solo se 'promos por productos fijos llegan al maximo, aunque se puedan mas de producos variables, solo se
'regresa el maximo por productos fijos. Ej. si las promos por variables es 10, pero el maximo por 'regresa el maximo por productos fijos. Ej. si las promos por variables es 10, pero el maximo por
'fijos es 5, entonces regresamos 5. 'fijos es 5, entonces regresamos 5.
Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore
Private thisLog As Boolean = True If muestraLogs Then Log("======================================================")
If thisLog Then Log("======================================================")
If thisLog Then Log("======================================================")
Private invFijoXpromo As Map Private invFijoXpromo As Map
invFijoXpromo.Initialize invFijoXpromo.Initialize
Private totalProdsVariablesDisponibles As Int = 0 Private totalProdsVariablesDisponibles As Int = 0
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue) If muestraLogs Then LogColor($"pm=${pm}"$, Colors.Blue)
Private invDispParaPromo As Map = traemosInvDispParaPromo(pm.Get("id")) Private invDispParaPromo As Map = traemosInvDispParaPromo(pm.Get("id"))
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$) If muestraLogs Then Log($"invDispParaPromo=${invDispParaPromo}"$)
Private maxPromos As String = traeMaxPromos(pm) Private maxPromos As String = traeMaxPromos(pm)
Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm) Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
Private idProdsVariables As List = pm.Get("prodsVariables") Private idProdsVariables As List = pm.Get("prodsVariables")
Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos") Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos")
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas") Private prodsFijosReq As List = pm.Get("prodsFijosReq")
Private idProdsFijos As List = pm.Get("prodsFijos") Private idProdsFijos As List = pm.Get("prodsFijos")
For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo. For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo.
invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p)) invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosReq.Get(p))
Private idEsteProd As String = idProdsFijos.Get(p) Private idEsteProd As String = idProdsFijos.Get(p)
Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd) Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd)
Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p) Private pzasReqEsteProd As Int = prodsFijosReq.Get(p)
If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$) If muestraLogs Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$)
' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) ) ' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) )
Next Next
If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue) If muestraLogs Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) If muestraLogs Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) If muestraLogs Then LogColor($"prodsFijosReqReq=${prodsFijosReq}"$, Colors.Blue)
If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue) If muestraLogs Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue)
If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) If muestraLogs Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) If muestraLogs Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$)
Private maxPromosXVariables As Int = 0 Private maxPromosXVariables As Int = 0
For x = 1 To maxPromosXFijos For x = 1 To maxPromosXFijos
If thisLog Then Log("=====================================================") If muestraLogs Then Log("=====================================================")
If thisLog Then Log("=====================================================") If muestraLogs Then Log("=====================================================")
For i = 0 To idProdsFijos.Size - 1 For i = 0 To idProdsFijos.Size - 1
If thisLog Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosPiezas.Get(i).As(Int)*(i+1)}"$) If muestraLogs Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosReq.Get(i).As(Int)*(i+1)}"$)
invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosPiezas.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosReq.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible.
Next Next
If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue) If muestraLogs Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue)
totalProdsVariablesDisponibles = 0 totalProdsVariablesDisponibles = 0
For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes. For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
@@ -292,9 +289,9 @@ Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore
End If End If
Next Next
'Revisamos variables. 'Revisamos variables.
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$) If muestraLogs Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x) totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles) If muestraLogs Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles)
If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible. If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible.
maxPromosXVariables = x maxPromosXVariables = x
Next Next
@@ -305,15 +302,16 @@ 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 traemosInvDispParaPromo(promo As String) As Map 'ignore Sub traemosInvDispParaPromo(promo As String) As Map 'ignore
If muestraLogs Then LogColor("> traemosInvDispParaPromo: " & promo, Colors.blue)
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 ${tablaProds} 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
' prodInv.Initialize ' prodInv.Initialize
Private prods As Map Private prods As Map
prods.Initialize prods.Initialize
If c.RowCount > 0 Then If c.RowCount > 0 Then
For i=0 To c.RowCount -1 For i = 0 To c.RowCount -1
c.Position=i c.Position = i
prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN")) prods.Put(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_ALMACEN"))
' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$) ' Log($"prod:${c.GetString("CAT_GP_ID")}, inventario:${c.GetString("CAT_GP_ALMACEN")}"$)
Next Next
@@ -325,62 +323,59 @@ End Sub
'Resta los productos fijos del inventario de la promoción y regresa un mapa con el nuevo inventario. 'Resta los productos fijos del inventario de la promoción y regresa un mapa con el nuevo inventario.
'Hay que darle como parametro el Id de la promocion. 'Hay que darle como parametro el Id de la promocion.
'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion". 'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion".
Sub restaFijosPromo(idPromo As String) As Map 'ignore Sub restaFijosDePromo(idPromo As String) As Map 'ignore
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub. If muestraLogs Then LogColor("> restaFijosDePromo: " & idPromo, Colors.blue)
Private invDisponibleEstaPromo As Map = traemosInvDispParaPromo(idPromo) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos. Private invDispEstaPromo As Map = traemosInvDispParaPromo(idPromo) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos.
If thisLog Then LogColor("Inventario inicial antes de FIJOS: "&invDisponibleEstaPromo, Colors.Magenta) 'Inventario inicial. If muestraLogs Then LogColor("Inventario inicial antes de FIJOS: "&invDispEstaPromo, Colors.Magenta) 'Inventario inicial.
Private i As Int Private InvDispEsteProd, pzasReqEsteProd As Int
Private prodsFijos As List = traeListFromPromo("P_PRODSFIJOS", idPromo) 'Obtenemos una lista con los productos fijos de la promoción. Private esteProd As String
Private prodsFijosPiezas As List = traeListFromPromo("P_PRODSFIJOS_PIEZAS", idPromo) 'Obtenemos un a lista con los productos fijos de la promoción. invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por DEFAULT.
If thisLog Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
invDisponibleEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por DEFAULT.
If thisLog Then Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
If prodsFijos.Size = 0 Then invDisponibleEstaPromo.Put("resultado", "ok") 'Si no lleva prods fijos la promo, entonces ponemos FIJOS OK.
Private nuevoInv As Int Private nuevoInv As Int
For p = 0 To prodsFijos.Size - 1 ' 👇🏼 Traemos los productos fijos y piezas requeridas de la promoción. 👇🏼
Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. Private c As ResultSet = db.ExecQuery($"select CAT_DP_IDPROD, sum(CAT_DP_PZAS) as totalPzas from CAT_DETALLES_PAQ where CAT_DP_ID = '${idPromo}' and CAT_DP_TIPO = '0' group by CAT_DP_IDPROD"$)
If thisLog Then Log($"T: ${t}, Prod ${prodsFijos.Get(p)}, piezasReq: ${prodsFijosPiezas.Get(p)}"$) 'Producto y piezas requeridas Do While c.NextRow
If thisLog Then Log("invDisponibleEstaPromo="&invDisponibleEstaPromo) esteProd = c.GetString("CAT_DP_IDPROD")
If invDisponibleEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ... pzasReqEsteProd = c.GetString("totalPzas")
Log(555) If muestraLogs Then Log($"esteProd ${esteProd}, piezasReq: ${pzasReqEsteProd}"$) 'Producto y piezas requeridas
i = invDisponibleEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto. If muestraLogs Then Log("invDispEstaPromo="&invDispEstaPromo)
nuevoInv = NumberFormat2((i - prodsFijosPiezas.get(p)), 1, 0,0,False) If invDispEstaPromo.ContainsKey(esteProd) Then 'Si el mapa del inventario contiene el id del producto entonces ...
If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${prodsFijosPiezas.get(p)} = ${nuevoInv}"$) 'El nuevo inventario. InvDispEsteProd = invDispEstaPromo.get(esteProd) 'Obtenemos del mapa el inventario de este producto.
invDisponibleEstaPromo.Put(t, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. nuevoInv = NumberFormat2((InvDispEsteProd - pzasReqEsteProd), 1, 0,0,False)
invDisponibleEstaPromo.Put("resultado", "ok") If muestraLogs Then Log($"Nuevo inventario de ${esteProd}: ${InvDispEsteProd}-${pzasReqEsteProd} = ${nuevoInv}"$) 'El nuevo inventario.
invDispEstaPromo.Put(esteProd, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa.
invDispEstaPromo.Put("resultado", "ok")
Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario. Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario.
Log(777) invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.")
invDisponibleEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") If muestraLogs Then LogColor("Sin suficiente inventario fijo: " & esteProd, Colors.Blue)
If thisLog Then LogColor("Sin suficiente inventario fijo: " & t, Colors.Blue)
Exit Exit
End If End If
If nuevoInv < 0 Then If nuevoInv < 0 Then
invDisponibleEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción. invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción.
Exit Exit
End If End If
Next Loop
If thisLog Then LogColor("Inventario final despues de FIJOS: "&invDisponibleEstaPromo, Colors.blue) 'Inventario final. If muestraLogs Then LogColor("Inventario final despues de FIJOS: "&invDispEstaPromo, Colors.blue) 'Inventario final.
Return invDisponibleEstaPromo Return invDispEstaPromo
End Sub End Sub
'Revisa si tenemos los productos variables requeridos para la promoción (mapa). 'Revisa si tenemos los productos variables requeridos para la promoción (mapa).
'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion. 'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion.
Sub alcanzanLosVariablesParaPromo(idPromo As String, inventarioSinFijos As Map) As Boolean 'ignore Sub alcanzanLosVariablesParaPromo(idPromo As String, inventarioSinFijos As Map) As Boolean 'ignore
Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. If muestraLogs Then LogColor("> alcanzanLosVariablesParaPromo: " & idPromo, Colors.blue)
If thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial. If muestraLogs Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial.
Private totalProdsVariables As Int = 0 Private totalProdsVariables As Int = 0
' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción. ' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción.
Private prodsVariables As List = traeListFromPromo("P_PRODSVARIABLES", idPromo) ' promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables de la promoción. Private prodsVariables As List = traeListaDePromo("P_PRODSVARIABLES", idPromo) ' promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables de la promoción.
For p = 0 To prodsVariables.Size - 1 For p = 0 To prodsVariables.Size - 1
Private t As String = prodsVariables.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos. Private t As String = prodsVariables.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos.
If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ... If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ...
Private p2 As Int = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto. Private p2 As Int = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto.
If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas If muestraLogs Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas
totalProdsVariables = totalProdsVariables + p2 totalProdsVariables = totalProdsVariables + p2
End If End If
Next Next
Private prodsVariablesRequeridos As Int = traeInfoFromPromo("P_PRODSVARIABLES_REQUERIDOS", idPromo) Private prodsVariablesRequeridos As Int = traeInfoDePromo("P_PRODSVARIABLES_REQUERIDOS", idPromo)
If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & prodsVariablesRequeridos) If muestraLogs Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & prodsVariablesRequeridos)
Private res As Boolean = False Private res As Boolean = False
If totalProdsVariables >= prodsVariablesRequeridos Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE If totalProdsVariables >= prodsVariablesRequeridos Then res = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE
Return res Return res
@@ -388,38 +383,38 @@ 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(idPromo As String) As Int Sub traeMaxPromos(idPromo As String) As Int
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub. If muestraLogs Then LogColor("> traeMaxPromos: " & idPromo, Colors.blue)
Private maxPromos As List Private maxPromos As List
Private mp0, mp As String = "0" Private mp0, mp As String = "0"
maxPromos.Initialize maxPromos.Initialize
Private hccp As Cursor = db.ExecQuery($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${cliente}' and HCCP_PROMO = '${idPromo}'"$) Private hccp As Cursor = db.ExecQuery($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${cliente}' and HCCP_PROMO = '${idPromo}'"$)
If thisLog Then LogColor("==== HISTORICO: "&traeInfoFromPromo("HISTORICO", idPromo), Colors.Blue) If muestraLogs Then LogColor("Historico: "&traeInfoDePromo("HISTORICO", idPromo), Colors.Blue)
' If thisLog Then Log(pm) ' If muestraLogs Then Log(pm)
If traeInfoDePromo("HISTORICO", idPromo) = "1" Then maxPromos.Add(traeInfoDePromo("P_MAXRECURRENTE", idPromo).As(Int)) 'Si hay historico, agregamos maxRecurrente
If traeInfoDePromo("P_MAXPROMOS", idPromo) <> "null" Then maxPromos.Add(traeInfoDePromo("P_MAXPROMOS", idPromo).As(Int)) 'Agregamos maxPromos
If traeInfoFromPromo("HISTORICO", idPromo) = "1" Then maxPromos.Add(traeInfoFromPromo("P_MAXRECURRENTE", idPromo).As(Int)) 'Si hay historico, agregamos maxRecurrente If traeInfoDePromo("P_MAXXCLIENTE", idPromo) <> "null" Then maxPromos.Add(traeInfoDePromo("P_MAXXCLIENTE", idPromo).As(Int)) 'Agregamos maxXcliente
If traeInfoFromPromo("P_MAXPROMOS", idPromo) <> "null" Then maxPromos.Add(traeInfoFromPromo("P_MAXPROMOS", idPromo).As(Int)) 'Agregamos maxPromos
If traeInfoFromPromo("P_MAXXCLIENTE", idPromo) <> "null" Then maxPromos.Add(traeInfoFromPromo("P_MAXXCLIENTE", idPromo).As(Int)) 'Agregamos maxXcliente
If hccp.RowCount > 0 Then 'Agregamos promos HCCP If hccp.RowCount > 0 Then 'Agregamos promos HCCP
hccp.Position = 0 hccp.Position = 0
maxPromos.Add(hccp.GetInt("HCCP_CANT")) maxPromos.Add(hccp.GetInt("HCCP_CANT"))
End If End If
' Log($"|${traeInfoFromPromo("HISTORICO", idPromo)}|${traeInfoFromPromo("P_MAXPROMOS", idPromo)}|${traeInfoFromPromo("P_MAXXCLIENTE", idPromo)}|"$) ' Log($"|${traeInfoDePromo("HISTORICO", idPromo)}|${traeInfoDePromo("P_MAXPROMOS", idPromo)}|${traeInfoDePromo("P_MAXXCLIENTE", idPromo)}|"$)
' Log(maxPromos) ' Log(maxPromos)
maxPromos.Sort(True) maxPromos.Sort(True)
If thisLog Then Log($">>>>> Max promos : ${maxPromos}"$) ' If muestraLogs Then Log($"Max promos : ${maxPromos}"$)
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(idPromo) Private promosVendidas As Int = traePromosVendidas(idPromo)
If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(idPromo)).As(Int)}) = ${mp}"$) mp = mp0 - promosVendidas
If muestraLogs Then Log($"Max Promos (${mp0}) - Promos Vendidas (${(promosVendidas)}) = Promos Disponibles (${mp})"$)
End If End If
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
'Regresa la cantidad de promos que se le han vendido al cliente. 'Regresa la cantidad de promos que se le han vendido al cliente.
Sub traePromosVendidas(idPromo As String) As Int Sub traePromosVendidas(idPromo As String) As Int
If muestraLogs Then LogColor("> traePromosVendidas: " & idPromo, Colors.blue)
Private c As Cursor Private c As Cursor
Private pv As Int = 0 Private pv As Int = 0
c=db.ExecQuery($"select sum(PE_CANT) as cuantas from PEDIDO where PE_PROID = '${idPromo}' and PE_CLIENTE = '${cliente}'"$) c=db.ExecQuery($"select sum(PE_CANT) as cuantas from PEDIDO where PE_PROID = '${idPromo}' and PE_CLIENTE = '${cliente}'"$)
@@ -430,7 +425,8 @@ Sub traePromosVendidas(idPromo As String) As Int
Return pv Return pv
End Sub End Sub
Sub traeInfoFromPromo(col As String, idPromo As String) As String 'Trae el valor de la columna especificada de la promo dada.
Sub traeInfoDePromo(col As String, idPromo As String) As String
Private res As String = "" Private res As String = ""
Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${idPromo}'"$) Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${idPromo}'"$)
' Log($"select ${col} from PROMOCIONES_INFO where P_ID = '${idPromo}'"$) ' Log($"select ${col} from PROMOCIONES_INFO where P_ID = '${idPromo}'"$)
@@ -441,7 +437,7 @@ Sub traeInfoFromPromo(col As String, idPromo As String) As String
End Sub End Sub
'Regresa una lista de la BD, en la BD se guarda como string y esta funcion la convierte en lista nuevamente. 'Regresa una lista de la BD, en la BD se guarda como string y esta funcion la convierte en lista nuevamente.
Sub traeListFromPromo(col As String, promo As String) As List Sub traeListaDePromo(col As String, promo As String) As List
Private res As List Private res As List
Private s As String Private s As String
Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${promo}'"$) Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${promo}'"$)
@@ -458,12 +454,96 @@ Sub traeListFromPromo(col As String, promo As String) As List
Return res Return res
End Sub End Sub
'Regresa el inventario de un producto dado de la tabla dada. 'Regresa el inventario de un producto dado o CERO si no lo encuentra.
Sub traeInventario(id As String, tabla As String) As Int Sub traeInventario(id As String) As Int
Private inv As Int = 0 Private inv As Int = 0
Private c As ResultSet = db.ExecQuery($"select CAT_GP_ALMACEN from ${tabla} where CAT_GP_ID = ${id}"$) Private c As ResultSet = db.ExecQuery($"select CAT_GP_ALMACEN from ${tablaProds} where CAT_GP_ID = ${id}"$)
Do While c.NextRow Do While c.NextRow
inv = c.GetInt("CAT_GP_ALMACEN") inv = c.GetInt("CAT_GP_ALMACEN")
Loop Loop
Return inv Return inv
End Sub
'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario.
Sub revisaMaxPromosProdsFijosPorInventarioXXX(id As String) As Int
If muestraLogs Then LogColor("> revisaMaxPromosProdsFijosPorInventario: " & id, Colors.blue)
' Private invFijoXpromo As Map
Private t As List
t.Initialize
t.Add(traeMaxPromos(id)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo).
' invFijoXpromo.Initialize
' If muestraLogs Then LogColor($"pm=${pm}"$, Colors.Blue)
Private prodsFijosReq As List = traeListaDePromo("P_PRODSFIJOS_PIEZAS", id)
Private idProdsFijos As List = traeListaDePromo("P_PRODSFIJOS", id)
If muestraLogs Then Log($"ProdsFijos: ${idProdsFijos}, PiezasReq: ${prodsFijosReq}"$)
Private invDispParaPromo As Map = traemosInvDispParaPromo(id)
If muestraLogs Then Log(">>> " & $"invDispParaPromo=${invDispParaPromo}"$)
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
If invDispParaPromo.Get(idProdsFijos.Get(p).As(String)) <> Null Then
thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p).As(String))
End If
Private esteColor As Double = Colors.green
Private esteMensaje As String = "INVENTARIO OK"
If prodsFijosReq.Get(p) > thisInvDisp Then
esteColor = Colors.red
esteMensaje = "INVENTARIO INSUFICIENTE"
End If
If muestraLogs Then LogColor($"PROD=${idProdsFijos.Get(p)}, INV=${thisInvDisp}, REQ=${prodsFijosReq.Get(p)} - ${esteMensaje}"$, esteColor)
' If muestraLogs Then Log($"${(thisInvDisp / prodsFijosReq.Get(p))}"$)
Private x() As String = Regex.Split("\.", $"${(thisInvDisp / prodsFijosReq.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal.
' If muestraLogs Then Log($"PROD: ${idProdsFijos.Get(p)}, INV: ${x(0)}, REQ: ${prodsFijosReq.Get(p)}"$)
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division.
Next
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultado mas pequeño.
' If muestraLogs Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
' If muestraLogs Then LogColor($"prodsFijosReq=${prodsFijosReq}"$, Colors.Blue)
' If muestraLogs Then LogColor($"promosProdsFijosDisp=${t}"$, Colors.Blue)
' If muestraLogs Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
If muestraLogs Then LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.Magenta)
Return t.Get(0) 'Regresamos el resultado mas pequeño.
End Sub
'Resta los productos fijos del inventario de la promoción y regresa un mapa con el nuevo inventario.
'Hay que darle como parametro el Id de la promocion.
'Regresa en el mapa la llave "resultado" que nos da "ok" o "No hay suficiente producto para la promocion".
Sub restaFijosDePromoXXX(idPromo As String) As Map 'ignore
If muestraLogs Then LogColor("> restaFijosDePromo: " & idPromo, Colors.blue)
Private invDispEstaPromo As Map = traemosInvDispParaPromo(idPromo) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos.
If muestraLogs Then LogColor("Inventario inicial antes de FIJOS: "&invDispEstaPromo, Colors.Magenta) 'Inventario inicial.
Private inv As Int
Private prodsFijos As List = traeListaDePromo("P_PRODSFIJOS", idPromo) 'Obtenemos una lista con los productos fijos de la promoción.
Private prodsFijosReq As List = traeListaDePromo("P_PRODSFIJOS_PIEZAS", idPromo) 'Obtenemos un a lista con los productos fijos de la promoción.
If muestraLogs Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por DEFAULT.
If muestraLogs Then Log($"Prods fijos requeridos ${prodsFijos.Size}"$)
If prodsFijos.Size = 0 Then invDispEstaPromo.Put("resultado", "ok") 'Si no lleva prods fijos la promo, entonces ponemos FIJOS OK.
Private nuevoInv As Int
For p = 0 To prodsFijos.Size - 1
Private esteProd As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos.
If muestraLogs Then Log($"esteProd ${esteProd}, piezasReq: ${prodsFijosReq.Get(p)}"$) 'Producto y piezas requeridas
If muestraLogs Then Log("invDispEstaPromo="&invDispEstaPromo)
If invDispEstaPromo.ContainsKey(esteProd) Then 'Si el mapa del inventario contiene el id del producto entonces ...
inv = invDispEstaPromo.get(esteProd) 'Obtenemos del mapa el inventario de este producto.
nuevoInv = NumberFormat2((inv - prodsFijosReq.get(p)), 1, 0,0,False)
If muestraLogs Then Log($"Nuevo inventario de ${esteProd}: ${inv}-${prodsFijosReq.get(p)} = ${nuevoInv}"$) 'El nuevo inventario.
invDispEstaPromo.Put(esteProd, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa.
invDispEstaPromo.Put("resultado", "ok")
Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario.
invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.")
If muestraLogs Then LogColor("Sin suficiente inventario fijo: " & esteProd, Colors.Blue)
Exit
End If
If nuevoInv < 0 Then
invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Si el inventario de este producto sale negativo, quiere decir que no tenemos suficiente inventario para la promoción.
Exit
End If
Next
If muestraLogs Then LogColor("Inventario final despues de FIJOS: "&invDispEstaPromo, Colors.blue) 'Inventario final.
Return invDispEstaPromo
End Sub End Sub

View File

@@ -209,11 +209,11 @@ Sub JobDone(Job As HttpJob)
If Job.JobName = "DBRequest" Then If Job.JobName = "DBRequest" Then
Dim result As DBResult = reqManager.HandleJob(Job) Dim result As DBResult = reqManager.HandleJob(Job)
If result.Tag = "updateKell_UTR" Then 'query tag If result.Tag = "updateKell_UTR" Then 'query tag
For Each records() As Object In result.Rows ' For Each records() As Object In result.Rows
For Each k As String In result.Columns.Keys ' For Each k As String In result.Columns.Keys
' If Logger Then Log("Ubicacion en tiempo real: " & k & ": " & records(result.Columns.Get(k))) ' If Logger Then Log("Ubicacion en tiempo real: " & k & ": " & records(result.Columns.Get(k)))
Next ' Next
Next ' Next
End If End If
End If End If
End If End If

View File

@@ -1228,12 +1228,12 @@ End Sub
Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub. Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub.
Private inicioContador As String = DateTime.Now Private inicioContador As String = DateTime.Now
Private mp = 0 Private mp As Int = 0
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red) If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red)
'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)
B4XPages.MainPage.productos.promosC.traePromo(idPromo, cliente) ' B4XPages.MainPage.productos.promosC.traePromo(idPromo, cliente)
If thisLog Then LogColor(pm, Colors.Blue) If thisLog Then LogColor(pm, Colors.Blue)
' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue) ' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue)
@@ -1327,7 +1327,7 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
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")
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 = 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}, pzas=${prodsFijosPiezas.Get(p)}"$) If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzas=${prodsFijosPiezas.Get(p)}"$)
If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$) If thisLog Then Log($"${(thisInvDisp / prodsFijosPiezas.Get(p))}"$)