From ea79eed54d2ff6c0a9d522c139df5313a39465a5 Mon Sep 17 00:00:00 2001 From: cheveguerra Date: Mon, 11 Sep 2023 21:36:46 -0600 Subject: [PATCH] 11/9/23 - Correcciones de inventarios en promociones. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- B4A/C_Cliente.bas | 6 +++--- B4A/C_Productos.bas | 8 +++----- B4A/C_Promos.bas | 22 +++++++++++++--------- B4A/Subs.bas | 28 ++++++++++++++++++---------- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas index 2ae433e..6ebdf45 100644 --- a/B4A/C_Cliente.bas +++ b/B4A/C_Cliente.bas @@ -913,7 +913,7 @@ Sub B_IMP_Click RMI = 0 End If 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) Next End If @@ -2886,7 +2886,7 @@ Sub B_IMP_INVBAK_Click 'Printer1.WriteString("INV. ACT.: " & s.GetString("CAT_GP_ALMACEN") & CRLF) '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) Private sep1 As String Private sep2 As String @@ -3057,7 +3057,7 @@ Sub B_IMP_INVBAK_Click End If If RMI = Null Then RMI = 0 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("---" & a_inicial & "..." & ABORDO & "..." & a_total & "..." & a_venta & "..." & a_final & "..." & RMI & CRLF) Printer1.WriteString("TOTAL " & C3.GetString("PE_TOTAL") & CRLF) diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas index 4f7ee58..2fc5f8f 100644 --- a/B4A/C_Productos.bas +++ b/B4A/C_Productos.bas @@ -202,9 +202,7 @@ Sub B4XPage_Appear ' Log(Starter.tipov) c = Starter.skmt.ExecQuery("select count(*) as hayPromos from promos_comp") c.Position = 0 - - Log(Subs.revisaImpresa) - +' Log(Subs.revisaImpresa) If c.GetInt("hayPromos") > 0 And Subs.traeCliente <> 0 And Subs.revisaImpresa = False Then lv_catalogos.AddSingleLine("PROMOS") End If @@ -292,7 +290,7 @@ Sub lv_catalogos_ItemClick (Position As Int, Value As Object) ' 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)) - Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) +' Log($"Resultados : ${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) If c2.RowCount > 0 Then For i=0 To c2.RowCount -1 c2.Position=i @@ -325,7 +323,7 @@ Sub lv_catalogos2_ItemClick (Position As Int, Value As Object) End If If Value = "PROMOS" Then 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 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' ") diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas index b2a1213..6f9fe40 100644 --- a/B4A/C_Promos.bas +++ b/B4A/C_Promos.bas @@ -87,9 +87,11 @@ Sub muestraPromo(promo As String, cliente As String) estaPromo = promo esteCliente = 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 invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) -' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) +' Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) + 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 VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) @@ -142,18 +144,20 @@ Sub muestraPromo(promo As String, cliente As String) ' Dim jpeg() As Byte 'Llenamos el listview con los productos variables. - If thisLog Then Log(pv) - If thisLog Then Log("invDisp=" & invDispPromo) + If thisLog Then Log("Prods variables: " & pv) +' If thisLog Then Log("invDisp=" & invDispPromo) clv_prodsVariabes.Clear 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. -' c2.Position=i -' jpeg = c2.GetBlob("CAT_GP_IMG") -' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) -' bmp.Initialize2(ins) + If thisLog Then Log("Prod Variable: " & invDispPromo.get(p)) + Private existenciaProdVariable As String = invDispPromo.get(p) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) Private thisProd As Map = prodsPromo.Get(p) 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 Next b_terminar1.Visible = False diff --git a/B4A/Subs.bas b/B4A/Subs.bas index c57c942..6f2b0c3 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -984,7 +984,7 @@ Sub traePromo(promo As String, cliente As String) As Map tipos.Initialize For i=0 To c.RowCount -1 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")) If c.GetString("CAT_DP_TIPO") = "0" Then 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. 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 mp0, mp As String = "0" 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")}'"$) - 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 ' hccp.Position = 0 ' LogColor(hccp.GetString("HCCP_CANT"), Colors.Magenta) ' Else ' LogColor("SIN HCCP CANT", Colors.Magenta) ' 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 pm.Get("historico") = "1" Then maxPromos.Add(pm.Get("maxRecurrente")) 'Si hay historico, agregamos maxRecurrente 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 inicioContador As String = DateTime.Now 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. Private pm As Map = traePromo(idPromo, cliente) 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 ... 'Buscamos el máximo de promociones permitidas. 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 mp < 1 Then 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) Return CreateMap("status":"ko", "mp":pm) End If + Else + Return CreateMap("status":"ko", "mp":pm) End If ' Si tenemos suficiente inventario para los variables mostramos la promocion, si no ... ' 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 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). - If thisLog Then Log($"id=${idProdsFijos.Get(p)}, inv=${invDispParaPromo.Get(idProdsFijos.Get(p))}, pzas=${prodsFijosPiezas.Get(p)}"$) - If thisLog Then Log($"${(invDispParaPromo.Get(idProdsFijos.Get(p)) / prodsFijosPiezas.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. + Private thisInvDisp = 0 + 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($"${(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 @@ -1246,7 +1254,7 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, 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. End Sub