mirror of
https://github.com/KeymonSoft/Kelloggs_v4.git
synced 2026-04-17 18:26:11 +00:00
- Cambios en el codigo de promociones.
This commit is contained in:
@@ -327,9 +327,10 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
|
||||
For i=0 To c2.RowCount -1
|
||||
c2.Position=i
|
||||
Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId)
|
||||
promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId)
|
||||
' Private tm As Map = promosC.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId, Starter.tipov)
|
||||
' Log(tm)
|
||||
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("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).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"))
|
||||
End If
|
||||
Next
|
||||
Else
|
||||
|
||||
@@ -17,7 +17,7 @@ ModuleBookmarks22=
|
||||
ModuleBookmarks23=
|
||||
ModuleBookmarks24=
|
||||
ModuleBookmarks25=
|
||||
ModuleBookmarks26=
|
||||
ModuleBookmarks26=199
|
||||
ModuleBookmarks27=
|
||||
ModuleBookmarks28=
|
||||
ModuleBookmarks29=
|
||||
@@ -91,6 +91,6 @@ ModuleClosedNodes6=
|
||||
ModuleClosedNodes7=
|
||||
ModuleClosedNodes8=
|
||||
ModuleClosedNodes9=
|
||||
NavigationStack=C_Productos,lv_catalogos_ItemClick,323,5,Promociones,restaFijosPromo,363,6,C_Principal,SUBIR_INFO_PEDIDO,2841,0,C_CheckList,Bt_GuardarCheck_Click,558,0,C_Principal,B4XPage_Appear,304,0,C_Principal,e_ruta_EnterPressed,2131,3,Main,Globals,24,0,Main,Activity_KeyPress,42,0,B4XMainPage,B4XPage_Created,127,0,Subs,bitacora,1698,5
|
||||
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
|
||||
SelectedBuild=0
|
||||
VisibleModules=1,28,11,3,12,4,29,8,26,13,2
|
||||
VisibleModules=1,28,11,3,26,12,4,29,8,13,2
|
||||
|
||||
@@ -11,6 +11,7 @@ Sub Class_Globals
|
||||
Dim db As SQL
|
||||
Private EventName As String 'ignore
|
||||
Private CallBack As Object 'ignore
|
||||
Dim tablaProds As String
|
||||
End Sub
|
||||
|
||||
'Initializes the object. You can add parameters to this method if needed.
|
||||
@@ -24,51 +25,55 @@ Public Sub Initialize (vCallback As Object, vEventName As String, db0 As SQL) As
|
||||
Return Me
|
||||
End Sub
|
||||
|
||||
|
||||
Sub procesaPromocion(idPromo As String, cliente0 As String) As Map 'ignore
|
||||
Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub.
|
||||
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.
|
||||
cliente = cliente0
|
||||
Private inicioContador As String = DateTime.Now
|
||||
Private maxPromos As Int = 0
|
||||
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.red)
|
||||
|
||||
Private maxPromosXFijos As Int = 0
|
||||
tablaProds = "cat_gunaprod2"
|
||||
If tipoVenta = "ABORDO" Or tipoVenta = "PREVENTA" Then tablaProds = "cat_gunaprod"
|
||||
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Blue)
|
||||
' LogColor("**************************** " & traeInfoFromPromo("P_PRODSFIJOS", idPromo), Colors.blue)
|
||||
' Private d As List = traeListFromPromo("P_PRODSFIJOS", idPromo)
|
||||
' Log(d.Get(0))
|
||||
|
||||
'Obtenemos el mapa con toda la info de la promoción.
|
||||
' Private pm As Map = traePromo(idPromo, cliente)
|
||||
traePromo(idPromo, cliente0)
|
||||
' If thisLog Then LogColor(pm, Colors.Blue)
|
||||
' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue)
|
||||
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
|
||||
If revisaMaxPromosProdsFijosPorInventario(idPromo) < 1 Then db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'ko' where P_ID = '${idPromo}'"$)
|
||||
Log($"resultado = ${traeInfoFromPromo("P_ESTATUS", idPromo)}"$)
|
||||
traePromo(idPromo, cliente0) ' Generamos la tabla con la información d la promoción.
|
||||
maxPromosXFijos = revisaMaxPromosProdsFijosPorInventario(idPromo)
|
||||
If maxPromosXFijos < 1 Then
|
||||
Log(444)
|
||||
db.ExecNonQuery($"update PROMOCIONES_INFO set P_ESTATUS = 'ko' where P_ID = '${idPromo}'"$)
|
||||
End If
|
||||
Private logColor1 As String
|
||||
If traeInfoFromPromo("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 traeInfoFromPromo("P_ESTATUS", idPromo) = "ok" Then 'Si encontramos la promoción, entonces ...
|
||||
'Buscamos el máximo de promociones permitidas.
|
||||
maxPromos = traeMaxPromos(idPromo)
|
||||
' If thisLog Then LogColor($"Promociones permitidas=${mp}"$, Colors.Blue)
|
||||
' If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente))
|
||||
maxPromos = traeMaxPromos(idPromo) ' Buscamos el máximo de promociones permitidas.
|
||||
If thisLog Then LogColor($"Promociones permitidas=${maxPromos}"$, Colors.Blue)
|
||||
If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo))
|
||||
If maxPromos < 1 Then
|
||||
If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red)
|
||||
Return CreateMap("status":"ko") ' , "mp":pm
|
||||
End If
|
||||
'Restamos del inventario (mapa) las piezas necesarias para los productos fijos.
|
||||
|
||||
Private inventarioSinFijos As Map = restaFijosPromo(idPromo, CreateMap())
|
||||
If thisLog Then LogColor("inventariosfijos="&inventarioSinFijos, Colors.Magenta)
|
||||
' If inventarioSinFijos.Get("resultado") = "ok" Then
|
||||
' 'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa).
|
||||
' Private pv As Boolean = alcanzanLosVariablesParaPromo(pm, inventarioSinFijos)
|
||||
' If thisLog Then Log("Alcanzan los variables? --> " & pv)
|
||||
' If pv Then Return CreateMap("status":"ok", "mp":pm) Else Return CreateMap("status":"ko", "mp":pm)
|
||||
' Else
|
||||
' If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
||||
' Return CreateMap("status":"ko", "mp":pm)
|
||||
' End If
|
||||
|
||||
|
||||
Private inventarioSinFijos As Map = restaFijosPromo(idPromo)
|
||||
If thisLog Then LogColor("inventarioSinFijos="&inventarioSinFijos, Colors.Magenta)
|
||||
If inventarioSinFijos.Get("resultado") = "ok" Then
|
||||
'Revisamos que los productos variables requeridos sean menos que el inventario total (mapa).
|
||||
Private pv As Boolean = alcanzanLosVariablesParaPromo(idPromo, inventarioSinFijos)
|
||||
If pv Then logColor1 = Colors.RGB(0,143,0) Else logColor1 = Colors.Red
|
||||
If thisLog And pv Then
|
||||
LogColor("### ALCANZAN LOS VARIABLES? --> " & pv, logColor1)
|
||||
End If
|
||||
If pv Then
|
||||
Return CreateMap("status":"ok", "prodsFijosCant":traeInfoFromPromo("P_PRODSFIJOS_CANT", idPromo), "prodsVariablesCant":traeInfoFromPromo("P_PRODSVARIABLES_CANT", idPromo))
|
||||
Else
|
||||
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
||||
Return CreateMap("status":"ko")
|
||||
End If
|
||||
Else
|
||||
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
||||
Return CreateMap("status":"ko")
|
||||
End If
|
||||
Else
|
||||
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
|
||||
Return CreateMap("status":"ko") ' , "mp":pm
|
||||
End If
|
||||
' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ...
|
||||
@@ -76,17 +81,16 @@ Sub procesaPromocion(idPromo As String, cliente0 As String) As Map 'ignore
|
||||
LogColor("TIEMPO DE PROCESO ESTA PROMO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
|
||||
End Sub
|
||||
|
||||
'Regresa un mapa con la información de la promo.
|
||||
'Regresa: {id, maxXcliente, maxRecurrente, maxPromos, historico,
|
||||
' productos={idProducto={idProducto, preciosimptos, precio, almacen, tipo, piezas, usuario, fecha, regalo, clasif}} 'Mapa con los productos de la promo y los datos de cada uno.
|
||||
' tipos={idProducto=tipo} 'Mapa con id y tipo del producto, 0 si es fijo y 1 si es variable.
|
||||
' prodsFijos={idProducto,idProducto} 'Lista con los ids de los productos fijos.
|
||||
' prodsVariables={idProducto,idProducto} 'Lista con los ids de los productos variables.
|
||||
' resultado="OK" 'Ok si existe la promocion.
|
||||
' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción.
|
||||
'Genera una tabla (PROMOCIONES_INFO) con la información de la promo.
|
||||
'Columnas: P_ID, P_MAXXCLIENTE, P_MAXRECURRENTE, P_MAXPROMOS, HISTORICO,
|
||||
' P_TIPOS={idProducto=tipo} 'Mapa con id y tipo del producto, 0 si es fijo y 1 si es variable.
|
||||
' P_PRODSFIJOS=[idProducto,idProducto] 'Lista con los ids de los productos fijos.
|
||||
' P_PRODSVARIABLES=[idProducto,idProducto] 'Lista con los ids de los productos variables.
|
||||
' P_ESTATUS="OK" 'Ok si existe la promocion.
|
||||
' P_PRODSVARIABLES_REQUERIDOS=5 'Cantidad de productos variables requeridos para la promoción.
|
||||
Sub traePromo(promo As String, cliente0 As String) As Map
|
||||
Private thisLog As Boolean = True
|
||||
If thisLog Then LogColor("############# traePromoC: "&promo, Colors.red)
|
||||
If thisLog Then LogColor("################## TraePromoC: " & promo & " ##################", Colors.blue)
|
||||
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 siHistorico As String = 0
|
||||
@@ -108,23 +112,23 @@ Sub traePromo(promo As String, cliente0 As String) As Map
|
||||
End If
|
||||
If c.RowCount > 0 Then
|
||||
' promoMap = CreateMap("id":promo, "maxXcliente":c.GetString("CAT_PA_MAXPROMCLIE"), "maxRecurrente":c.GetString("CAT_PA_MAXPROMREC"), "maxPromos":c.GetString("CAT_PA_MAXPROM"))
|
||||
db.ExecNonQuery($"update PROMOCIONES_INFO set P_MAXXCLIENTE = ${c.GetInt("CAT_PA_MAXPROMREC")}, P_MAXRECURRENTE = ${c.GetInt("CAT_PA_MAXPROMREC")}, P_MAXPROMOS = ${c.GetInt("CAT_PA_MAXPROM")} where P_ID = '${promo}'"$)
|
||||
db.ExecNonQuery($"update PROMOCIONES_INFO set P_MAXXCLIENTE = ${c.GetInt("CAT_PA_MAXPROMCLIE")}, P_MAXRECURRENTE = ${c.GetInt("CAT_PA_MAXPROMREC")}, P_MAXPROMOS = ${c.GetInt("CAT_PA_MAXPROM")} where P_ID = '${promo}'"$)
|
||||
' Log($"update PROMOCIONES_INFO set P_MAXXCLIENTE = ${c.GetInt("CAT_PA_MAXPROMREC")}, P_MAXRECURRENTE = ${c.GetInt("CAT_PA_MAXPROMREC")}, P_MAXPROMOS = ${c.GetInt("CAT_PA_MAXPROM")} where P_ID = '${promo}'"$)
|
||||
End If
|
||||
'######### PROMOCIONES SEGMENTADAS ##########
|
||||
' 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}' "$)
|
||||
' Log($"select * from HIST_CLIENTE_CANT_PROMOS where HCCP_PROMO = '${promo}' and HCCP_CLIENTE = '${cliente0}' "$)
|
||||
Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$)
|
||||
If thisLog Then Log($"PROMOS SEGMENTADAS DISPONIBLES: ${ps.RowCount}"$)
|
||||
If ps.RowCount > 0 Then
|
||||
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.
|
||||
' 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.
|
||||
LogColor($">>> PROMO "${promo}" SEGMENTADA PARA EL CLIENTE ${ps.GetString("HCCP_CLIENTE")}"$, Colors.Magenta)
|
||||
If thisLog 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}'
|
||||
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($"registros:${ps2.RowCount}"$)
|
||||
If thisLog Then Log($"registros:${ps2.RowCount}"$)
|
||||
If ps2.RowCount > 0 Then
|
||||
ps2.Position = 0
|
||||
' Log($"registros:${ps2.RowCount}, cliente: ${ps2.GetString("HCCP_CLIENTE")} cant:${ps2.GetString("HCCP_CANT")}, Vendidas: ${ps2.GetString("HCCP_CANT_VENDIDA")}"$)
|
||||
@@ -189,51 +193,49 @@ Sub traePromo(promo As String, cliente0 As String) As Map
|
||||
End If
|
||||
c.Close
|
||||
' If thisLog Then Log($"Inv variables: ${cuantosVariablesDisponiblesDB(promo)}"$)
|
||||
' If thisLog Then Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$)
|
||||
' If thisLog Then Log($"Inv dispo: ${traemosInvDispParaPromo(promo)}"$)
|
||||
' If thisLog Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue)
|
||||
If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
|
||||
If thisLog Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Blue)
|
||||
' Return promoMap
|
||||
End Sub
|
||||
|
||||
|
||||
'Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario.
|
||||
Sub revisaMaxPromosProdsFijosPorInventario(id As String) As Int
|
||||
|
||||
' Private pm As Map = CreateMap() '' XXXXXXXX
|
||||
|
||||
Private thisLog As Boolean = True
|
||||
Private invFijoXpromo As Map
|
||||
' Private invFijoXpromo As Map
|
||||
Private t As List
|
||||
Private c As ResultSet = db.ExecQuery($"select P_PRODSFIJOS, P_PRODSFIJOS_PIEZAS from PROMOCIONES_INFO where P_ID = '${id}'"$)
|
||||
t.Initialize
|
||||
t.Add(traeMaxPromos(id)) ' Agregamos a la lista las promos maximas permitidas (recurrente, cliente y promo).
|
||||
invFijoXpromo.Initialize
|
||||
' invFijoXpromo.Initialize
|
||||
' If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(id)
|
||||
Private invDispParaPromo As Map = traemosInvDispParaPromo(id)
|
||||
If thisLog Then Log(">>>>> " & $"invDispParaPromo=${invDispParaPromo}"$)
|
||||
Private prodsFijosPiezas As List = traeListFromPromo("P_PRODSFIJOS_PIEZAS", id)
|
||||
Private idProdsFijos As List = traeListFromPromo("P_PRODSFIJOS", id)
|
||||
Log($"${idProdsFijos},${prodsFijosPiezas}"$)
|
||||
If thisLog Then Log($"${idProdsFijos},${prodsFijosPiezas}"$)
|
||||
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
|
||||
Log($"|${invDispParaPromo.Get("3800025096")}|"$)
|
||||
Private tmpId As String = idProdsFijos.Get(p)
|
||||
Log($"### ThisP = |${idProdsFijos.Get(p)}| -> |${invDispParaPromo.Get(tmpId)}| -> |${invDispParaPromo.Get(idProdsFijos.Get(p).As(String))}|"$)
|
||||
' Log($"|${invDispParaPromo.Get("3800025096")}|"$)
|
||||
' 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))
|
||||
Log($"thisInvDisp = ${thisInvDisp}"$)
|
||||
If thisLog Then Log($"thisInvDispFijos = ${thisInvDisp}"$)
|
||||
End If
|
||||
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($"idFijo=${idProdsFijos.Get(p)}, inv=${thisInvDisp}, pzas=${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.
|
||||
If thisLog Then Log(x(0))
|
||||
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 resultao mas pequeño.
|
||||
t.Sort(True) 'Ordenamos la lista para que en el lugar 0 este el resultado mas pequeño.
|
||||
If thisLog Then LogColor($"promosProdsFijosDisp=${t}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijosPiezasReq=${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.red)
|
||||
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
|
||||
@@ -243,7 +245,7 @@ End Sub
|
||||
'promos por productos fijos llega 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
|
||||
'fijos es 5, entonces regresamos 5.
|
||||
Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
||||
Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore
|
||||
Private thisLog As Boolean = True
|
||||
If thisLog Then Log("======================================================")
|
||||
If thisLog Then Log("======================================================")
|
||||
@@ -251,7 +253,7 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
||||
invFijoXpromo.Initialize
|
||||
Private totalProdsVariablesDisponibles As Int = 0
|
||||
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||
Private invDispParaPromo As Map = traemosInvDispParaPromo(pm.Get("id"))
|
||||
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
||||
Private maxPromos As String = traeMaxPromos(pm)
|
||||
Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||
@@ -301,9 +303,8 @@ Sub revisaMaxPromosProdsVariablesPorInventario(pm As Map) As Int 'ignore
|
||||
Return maxPromosXVariables
|
||||
End Sub
|
||||
|
||||
|
||||
'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 traemosInvDispParaPromo(promo As String) As Map 'ignore
|
||||
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))
|
||||
' Private prodInv As Map
|
||||
@@ -321,61 +322,55 @@ Sub traemosInventarioDisponibleParaPromo(promo As String) As Map 'ignore
|
||||
Return prods
|
||||
End Sub
|
||||
|
||||
'Resta los productos fijos del inventario de la promoción (mapa) y regresa un mapa con el nuevo inventario.
|
||||
'Hay que darle como parametro un mapa (traePromo(promo)) con toda la informacion de la promocion.
|
||||
'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 restaFijosPromo(idPromo As String, promoMap As Map) As Map 'ignore
|
||||
Sub restaFijosPromo(idPromo As String) As Map 'ignore
|
||||
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub.
|
||||
Private inventariosDisponiblesParaEstaPromo As Map = traemosInventarioDisponibleParaPromo(idPromo) 'Obtenemos un mapa con el inventario disponible para cada producto de la promocion desde la base de datos.
|
||||
|
||||
|
||||
If thisLog Then LogColor(inventariosDisponiblesParaEstaPromo, Colors.red)
|
||||
If thisLog Then LogColor("Inventario inicial antes de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.Gray) 'Inventario inicial.
|
||||
Private invDisponibleEstaPromo 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.
|
||||
Private i As Int
|
||||
Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción.
|
||||
Private prodsFijos As List = traeListFromPromo("P_PRODSFIJOS", idPromo) 'Obtenemos un a lista con los productos fijos de la promoción.
|
||||
Private prodsFijos As List = traeListFromPromo("P_PRODSFIJOS", idPromo) 'Obtenemos una lista con los productos fijos de la promoción.
|
||||
Private prodsFijosPiezas As List = traeListFromPromo("P_PRODSFIJOS_PIEZAS", idPromo) 'Obtenemos un a lista con los productos fijos de la promoción.
|
||||
If thisLog Then LogColor("ProdsFijos -> " & prodsFijos, Colors.red)
|
||||
inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") 'Valor por default
|
||||
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.
|
||||
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
|
||||
For p = 0 To prodsFijos.Size - 1
|
||||
Log(555)
|
||||
Private t As String = prodsFijos.Get(p) 'Obtenemos el Id de este producto desde la lista de productos fijos.
|
||||
Private p2 As Map = prodsmap.Get(t) 'Obtenemos un mapa con los datos de este producto (id, precio, almacen, tipo, piezas, etc.)
|
||||
If thisLog Then Log($"T: ${t}, prod ${p2.Get("idProducto")}, piezas: ${p2.Get("piezas")}"$) 'Producto y piezas requeridas
|
||||
If thisLog Then Log("inventariosDisponiblesParaEstaPromo="&inventariosDisponiblesParaEstaPromo)
|
||||
If inventariosDisponiblesParaEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ...
|
||||
i = inventariosDisponiblesParaEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto.
|
||||
Private nuevoInv As Int = NumberFormat2((i - promoMap.Get("prodsFijosPiezas").As(List).get(p)), 1, 0,0,False)
|
||||
If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${promoMap.Get("prodsFijosPiezas").As(List).get(p)} = ${nuevoInv}"$) 'El nuevo inventario.
|
||||
inventariosDisponiblesParaEstaPromo.Put(t, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa.
|
||||
inventariosDisponiblesParaEstaPromo.Put("resultado", "ok")
|
||||
If thisLog Then Log($"T: ${t}, Prod ${prodsFijos.Get(p)}, piezasReq: ${prodsFijosPiezas.Get(p)}"$) 'Producto y piezas requeridas
|
||||
If thisLog Then Log("invDisponibleEstaPromo="&invDisponibleEstaPromo)
|
||||
If invDisponibleEstaPromo.ContainsKey(t) Then 'Si el mapa del inventario contiene el id del producto entonces ...
|
||||
Log(555)
|
||||
i = invDisponibleEstaPromo.get(t) 'Obtenemos del mapa el inventario de este producto.
|
||||
nuevoInv = NumberFormat2((i - prodsFijosPiezas.get(p)), 1, 0,0,False)
|
||||
If thisLog Then Log($"Nuevo inventario de ${t}: ${i}-${prodsFijosPiezas.get(p)} = ${nuevoInv}"$) 'El nuevo inventario.
|
||||
invDisponibleEstaPromo.Put(t, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa.
|
||||
invDisponibleEstaPromo.Put("resultado", "ok")
|
||||
Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario.
|
||||
inventariosDisponiblesParaEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.")
|
||||
Log(777)
|
||||
invDisponibleEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.")
|
||||
If thisLog Then LogColor("Sin suficiente inventario fijo: " & t, Colors.Blue)
|
||||
Exit
|
||||
End If
|
||||
|
||||
'Aqui necesitamos el inventario del produccto de "t"
|
||||
traeInventario(t, "CAT_GUNAPROD2") 'Hay que poner codigo para seleccionar la tabla dependiendo de si es venta o abordo
|
||||
|
||||
If i - p2.Get("piezas") < 0 Then
|
||||
inventariosDisponiblesParaEstaPromo.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.
|
||||
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.
|
||||
Exit
|
||||
End If
|
||||
Next
|
||||
If thisLog Then LogColor("Inventario final despues de FIJOS: "&inventariosDisponiblesParaEstaPromo, Colors.blue) 'Inventario final.
|
||||
Return inventariosDisponiblesParaEstaPromo
|
||||
If thisLog Then LogColor("Inventario final despues de FIJOS: "&invDisponibleEstaPromo, Colors.blue) 'Inventario final.
|
||||
Return invDisponibleEstaPromo
|
||||
End Sub
|
||||
|
||||
'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.
|
||||
Sub alcanzanLosVariablesParaPromo(promoMap As Map, 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 thisLog Then LogColor("Inventario inicial: "&inventarioSinFijos, Colors.Gray) 'Inventario inicial.
|
||||
Private totalProdsVariables As Int = 0
|
||||
' Private prodsmap As Map = promoMap.Get("productos") 'Obtenemos un mapa con todos los productos de la promoción.
|
||||
Private prodsVariables As List = promoMap.get("prodsVariables") 'Obtenemos un a lista con los productos variables 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.
|
||||
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.
|
||||
If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ...
|
||||
@@ -384,9 +379,10 @@ Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As
|
||||
totalProdsVariables = totalProdsVariables + p2
|
||||
End If
|
||||
Next
|
||||
If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("prodsVariablesRequeridos"))
|
||||
Private prodsVariablesRequeridos As Int = traeInfoFromPromo("P_PRODSVARIABLES_REQUERIDOS", idPromo)
|
||||
If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & prodsVariablesRequeridos)
|
||||
Private res As Boolean = False
|
||||
If totalProdsVariables >= promoMap.Get("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
|
||||
End Sub
|
||||
|
||||
@@ -397,7 +393,7 @@ Sub traeMaxPromos(idPromo As String) As Int
|
||||
Private mp0, mp As String = "0"
|
||||
maxPromos.Initialize
|
||||
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.Red)
|
||||
If thisLog Then LogColor("==== HISTORICO: "&traeInfoFromPromo("HISTORICO", idPromo), Colors.Blue)
|
||||
' If thisLog Then Log(pm)
|
||||
|
||||
|
||||
|
||||
@@ -1002,7 +1002,7 @@ End Sub
|
||||
' resultado="OK" 'Ok si existe la promocion.
|
||||
' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción.
|
||||
Sub traePromo(promo As String, cliente As String) As Map
|
||||
Private thisLog As Boolean = False
|
||||
Private thisLog As Boolean = True
|
||||
If thisLog Then Log("traePromo:"&promo)
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user