11/9/23 - Correcciones de inventarios en promociones.

- Se corrigio que la proocion aparecia aun cuando no tenía sufucuente inventario fijo.
- Se corrigio que el inventario de los productos variables no tenia descontado el inventario de los fijos.
This commit is contained in:
2023-09-11 21:36:46 -06:00
parent 8cb1030c97
commit ea79eed54d
4 changed files with 37 additions and 27 deletions

View File

@@ -913,7 +913,7 @@ Sub B_IMP_Click
RMI = 0 RMI = 0
End If End If
C4.Close C4.Close
a_final = a_inicial_5 - a_venta - RMI a_final = a_inicial_5 - a_venta ' - RMI
L_INVA.AddTwoLines(s.GetString("CAT_GP_NOMBRE"), "II-" & a_inicial & ".CD." & ABORDO & ".IIT." & a_total & ".VT." & a_venta & "..$" & a_VENTA_F & ".IF." & a_final & ".RMI." & RMI) L_INVA.AddTwoLines(s.GetString("CAT_GP_NOMBRE"), "II-" & a_inicial & ".CD." & ABORDO & ".IIT." & a_total & ".VT." & a_venta & "..$" & a_VENTA_F & ".IF." & a_final & ".RMI." & RMI)
Next Next
End If End If
@@ -2886,7 +2886,7 @@ Sub B_IMP_INVBAK_Click
'Printer1.WriteString("INV. ACT.: " & s.GetString("CAT_GP_ALMACEN") & CRLF) 'Printer1.WriteString("INV. ACT.: " & s.GetString("CAT_GP_ALMACEN") & CRLF)
'a_final =s.GetString("CAT_GP_ALMACEN") 'a_final =s.GetString("CAT_GP_ALMACEN")
a_final = a_inicial_5 - a_venta - RMI a_final = a_inicial_5 - a_venta ' - RMI
'Printer1.WriteString("RMI: " & RMI & CRLF) 'Printer1.WriteString("RMI: " & RMI & CRLF)
Private sep1 As String Private sep1 As String
Private sep2 As String Private sep2 As String
@@ -3057,7 +3057,7 @@ Sub B_IMP_INVBAK_Click
End If End If
If RMI = Null Then RMI = 0 If RMI = Null Then RMI = 0
If logger Then Log($"a_total=${a_total}, a_venta=${a_venta}, rmi=${RMI}"$) If logger Then Log($"a_total=${a_total}, a_venta=${a_venta}, rmi=${RMI}"$)
a_final = a_total - a_venta - RMI a_final = a_total - a_venta ' - RMI
Printer1.WriteString("TOTAL----------------- " & CRLF) Printer1.WriteString("TOTAL----------------- " & CRLF)
Printer1.WriteString("---" & a_inicial & "..." & ABORDO & "..." & a_total & "..." & a_venta & "..." & a_final & "..." & RMI & CRLF) Printer1.WriteString("---" & a_inicial & "..." & ABORDO & "..." & a_total & "..." & a_venta & "..." & a_final & "..." & RMI & CRLF)
Printer1.WriteString("TOTAL " & C3.GetString("PE_TOTAL") & CRLF) Printer1.WriteString("TOTAL " & C3.GetString("PE_TOTAL") & CRLF)

View File

@@ -202,9 +202,7 @@ Sub B4XPage_Appear
' Log(Starter.tipov) ' Log(Starter.tipov)
c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp") c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp")
c.Position = 0 c.Position = 0
' Log(Subs.revisaImpresa)
Log(Subs.revisaImpresa)
If c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then If c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then
lv_catalogos.AddSingleLine("PROMOS") lv_catalogos.AddSingleLine("PROMOS")
End If End If
@@ -292,7 +290,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object)
' lfila.text = "PROMOS" ' lfila.text = "PROMOS"
' c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID)", Array As String(Value, Value)) ' c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID)", Array As String(Value, Value))
c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO =? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) ", Array As String( Value, Value)) c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO =? AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) ", Array As String( Value, Value))
Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) ' Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$)
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
@@ -325,7 +323,7 @@ Sub lv_catalogos2_ItemClick (Position As Int, Value As Object)
End If End If
If Value = "PROMOS" Then If Value = "PROMOS" Then
LogColor("Promos", Colors.red) LogColor("Promos", Colors.red)
c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod2 where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo)) c2=Starter.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from cat_gunaprod2 where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )", Array As String(Value, marca, tipo))
Else Else
LogColor("Catalogo", Colors.red) LogColor("Catalogo", Colors.red)
c2=Starter.skmt.ExecQuery("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' ") c2=Starter.skmt.ExecQuery("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' ")

View File

@@ -87,9 +87,11 @@ Sub muestraPromo(promo As String, cliente As String)
estaPromo = promo estaPromo = promo
esteCliente = cliente esteCliente = cliente
Private mp As Map = Subs.traePromo(promo, cliente) Private mp As Map = Subs.traePromo(promo, cliente)
If thisLog Then LogColor(mp, Colors.blue)
Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción.
Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) ' Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo)
' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) Private invDispPromo As Map = Subs.restaFijosPromo(mp)
If thisLog Then Log($"invDispPromo=${invDispPromo}"$)
If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp))
If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp))
maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp)
@@ -142,18 +144,20 @@ Sub muestraPromo(promo As String, cliente As String)
' Dim jpeg() As Byte ' Dim jpeg() As Byte
'Llenamos el listview con los productos variables. 'Llenamos el listview con los productos variables.
If thisLog Then Log(pv) If thisLog Then Log("Prods variables: " & pv)
If thisLog Then Log("invDisp=" & invDispPromo) ' If thisLog Then Log("invDisp=" & invDispPromo)
clv_prodsVariabes.Clear clv_prodsVariabes.Clear
For Each p As String In pv For Each p As String In pv
If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos.
' c2.Position=i If thisLog Then Log("Prod Variable: " & invDispPromo.get(p))
' jpeg = c2.GetBlob("CAT_GP_IMG") Private existenciaProdVariable As String = invDispPromo.get(p)
' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) ' c2.Position=i
' bmp.Initialize2(ins) ' jpeg = c2.GetBlob("CAT_GP_IMG")
' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length)
' bmp.Initialize2(ins)
Private thisProd As Map = prodsPromo.Get(p) Private thisProd As Map = prodsPromo.Get(p)
If thisLog Then Log(thisProd) If thisLog Then Log(thisProd)
clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & thisProd.Get("precio"), thisProd.Get("precio"), invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) If existenciaProdVariable > 0 Then clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & thisProd.Get("precio"), thisProd.Get("precio"), invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p)
End If End If
Next Next
b_terminar1.Visible = False b_terminar1.Visible = False

View File

@@ -984,7 +984,7 @@ Sub traePromo(promo As String, cliente As String) As Map
tipos.Initialize tipos.Initialize
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_DP_IDPROD"), CreateMap("idProducto":c.GetString("CAT_DP_IDPROD"), "precioSimptos":c.GetString("CAT_DP_PRECIO_SIMPTOS"), "precio":c.GetString("CAT_DP_PRECIO"), "almacen":c.GetString("CAT_DP_ALMACEN"), "tipo":c.GetString("CAT_DP_TIPO"), "piezas":c.GetString("CAT_DP_PZAS"), "usuario":c.GetString("CAT_DP_USUARIO"), "regalo":c.GetString("CAT_DP_REGALO"), "clasif":c.GetString("CAT_DP_CLASIF"))) prods.Put(c.GetString("CAT_DP_IDPROD"), CreateMap("idProducto":c.GetString("CAT_DP_IDPROD"), "precioSimptos":c.GetString("CAT_DP_PRECIO_SIMPTOS"), "precio":c.GetString("CAT_DP_PRECIO"), "tipo":c.GetString("CAT_DP_TIPO"), "piezas":c.GetString("CAT_DP_PZAS"), "regalo":c.GetString("CAT_DP_REGALO"), "clasif":c.GetString("CAT_DP_CLASIF")))
tipos.Put(c.GetString("CAT_DP_IDPROD"), c.GetString("CAT_DP_TIPO")) tipos.Put(c.GetString("CAT_DP_IDPROD"), c.GetString("CAT_DP_TIPO"))
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"))
@@ -1102,19 +1102,19 @@ End Sub
'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos. 'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos.
Sub traeMaxPromos(pm As Map) As Int Sub traeMaxPromos(pm As Map) As Int
Private thisLog As Boolean = True 'Si es verdadero, muestra los logs de este sub. Private thisLog As Boolean = False 'Si es verdadero, muestra los logs de este sub.
Private maxPromos As List Private maxPromos As List
Private mp0, mp As String = "0" Private mp0, mp As String = "0"
maxPromos.Initialize maxPromos.Initialize
Private hccp As Cursor = Starter.skmt.ExecQuery($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$) Private hccp As Cursor = Starter.skmt.ExecQuery($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$)
Log($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$) ' Log($"select HCCP_CANT from HIST_CLIENTE_CANT_PROMOS where HCCP_CLIENTE = '${traeCliente}' and HCCP_PROMO = '${pm.Get("id")}'"$)
' If hccp.RowCount > 0 Then ' If hccp.RowCount > 0 Then
' hccp.Position = 0 ' hccp.Position = 0
' LogColor(hccp.GetString("HCCP_CANT"), Colors.Magenta) ' LogColor(hccp.GetString("HCCP_CANT"), Colors.Magenta)
' Else ' Else
' LogColor("SIN HCCP CANT", Colors.Magenta) ' LogColor("SIN HCCP CANT", Colors.Magenta)
' End If ' End If
If thisLog Then Log("==== HISTORICO:"&pm.Get("historico")) If thisLog Then LogColor("==== HISTORICO:"&pm.Get("historico"), Colors.Red)
If thisLog Then Log(pm) If thisLog Then Log(pm)
If pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente If pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente
maxPromos.Add(pm.Get("maxPromos")) 'Agregamos maxPromos maxPromos.Add(pm.Get("maxPromos")) 'Agregamos maxPromos
@@ -1147,14 +1147,18 @@ 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 = 0
If thisLog Then LogColor($"********* Iniciamos revision de Promo ${idPromo} *********"$, Colors.Magenta) 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)
If thisLog Then LogColor(pm, Colors.Blue) If thisLog Then LogColor(pm, Colors.Blue)
' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue)
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
If revisaMaxPromosProdsFijosPorInventario(pm) < 1 Then pm.Put("resultado", 0)
' Log($"resultado = ${pm.Get("resultado")}"$)
If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ...
'Buscamos el máximo de promociones permitidas. 'Buscamos el máximo de promociones permitidas.
mp = traeMaxPromos(pm) mp = traeMaxPromos(pm)
If thisLog Then LogColor($"Promociones permitidas=${mp}"$, Colors.Blue) ' If thisLog Then LogColor($"Promociones permitidas=${mp}"$, Colors.Blue)
' If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente)) ' If thisLog Then Log("Promos vendidas: " & traePromosVendidas(idPromo, cliente))
If mp < 1 Then If mp < 1 Then
If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red) If thisLog Then LogColor("Ya se vendieron las promos PERMITIDAS para el cliente", Colors.red)
@@ -1172,6 +1176,8 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red) If thisLog Then LogColor("NO HAY INVENTARIO SUFICIENTE " & idPromo, Colors.red)
Return CreateMap("status":"ko", "mp":pm) Return CreateMap("status":"ko", "mp":pm)
End If End If
Else
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.
@@ -1236,9 +1242,11 @@ 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).
If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${invDispParaPromo.Get(idProdsFijos.Get(p))}, pzas=${prodsFijosPiezas.Get(p)}"$) Private thisInvDisp = 0
If thisLog Then Log($"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) If invDispParaPromo.Get(idProdsFijos.Get(p)) <> Null Then thisInvDisp = invDispParaPromo.Get(idProdsFijos.Get(p))
Private x() As String = Regex.Split("\.", $"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.Get(p))}"$) 'Separamos el resultado de la division por el punto decimal. If thisLog Then Log($"id=${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)) If thisLog Then Log(x(0))
t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division. t.Add(x(0).As(Int)) 'Solo guardamos la parte del entero de la division.
Next Next
@@ -1246,7 +1254,7 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue) If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.red) If thisLog Then LogColor("Max promos de prodsFijos POR inventario = " & t.Get(0), Colors.red)
Return t.Get(0) 'Regresamos el resultado mas pequeño. Return t.Get(0) 'Regresamos el resultado mas pequeño.
End Sub End Sub