mirror of
https://github.com/KeymonSoft/Guna_Preventa.git
synced 2026-04-20 06:09:16 +00:00
....
This commit is contained in:
665
B4A/Subs.bas
665
B4A/Subs.bas
@@ -45,6 +45,15 @@ Sub getPhnId As String 'ignore
|
||||
Return devModel
|
||||
End Sub
|
||||
|
||||
Sub SetDivider(lv As ListView, Color As Int, Height As Int) 'ignore
|
||||
Dim r As Reflector
|
||||
r.Target = lv
|
||||
Dim CD As ColorDrawable
|
||||
CD.Initialize(Color, 0)
|
||||
r.RunMethod4("setDivider", Array As Object(CD), Array As String("android.graphics.drawable.Drawable"))
|
||||
r.RunMethod2("setDividerHeight", Height, "java.lang.int")
|
||||
End Sub
|
||||
|
||||
'Centra un listview dentro de un elemento superior
|
||||
Sub centraListView(elemento As ListView, anchoElementoSuperior As Int) 'ignore
|
||||
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
|
||||
@@ -700,6 +709,86 @@ Sub traeRuta As String 'ignore
|
||||
Return r
|
||||
End Sub
|
||||
|
||||
'Regresa verdadero si la columna gestion en la tabla "kmt_info" tene valor 2.
|
||||
'si no, entonces regresa falso.
|
||||
Sub pedidoGuardado As Boolean
|
||||
Private guardado As Boolean = False
|
||||
Private g As Cursor = B4XPages.MainPage.skmt.ExecQuery("select gestion from kmt_info3 where CAT_CL_CODIGO in (Select CUENTA from cuentaa)")
|
||||
If g.RowCount > 0 Then
|
||||
g.Position=0
|
||||
If g.GetString("gestion") = "2" Or g.GetString("gestion") = "3" Then guardado = True
|
||||
End If
|
||||
' Log($"Guardado=${guardado}"$)
|
||||
Return guardado
|
||||
End Sub
|
||||
|
||||
'Borra el pedido del cliente actual.
|
||||
'Borra los registros de la tabla "pedido" y "pedido_cliente"
|
||||
'Actualiza las tablas "cat_gunaprod" y "kmt_info".
|
||||
Sub borraPedidoClienteActual As String
|
||||
' Private thisC As Cursor
|
||||
' thisC=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ")
|
||||
' If thisC.RowCount>0 Then
|
||||
' For i=0 To thisC.RowCount -1
|
||||
' thisC.Position=i
|
||||
' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(thisC.GetString("PE_CANT"),thisC.GetString("PE_PROID")))
|
||||
' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1))
|
||||
' Next
|
||||
' End If
|
||||
' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)")
|
||||
' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)")
|
||||
' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
||||
' Return 1
|
||||
Private thisC As Cursor
|
||||
' Private tablaProds As String = "cat_gunaprod2"
|
||||
thisC=Starter.skmt.ExecQuery("select PE_PROID, PE_CANT, PE_FOLIO FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ")
|
||||
If thisC.RowCount>0 Then
|
||||
For i=0 To thisC.RowCount -1
|
||||
thisC.Position = i
|
||||
' Log(thisC.GetString("PE_TIPO") & "|" & traeTablaProds(thisC.GetString("PE_TIPO")))
|
||||
Starter.skmt.ExecNonQuery($"update ${traeTablaProds(thisC.GetString("PE_FOLIO"))} set cat_gp_almacen = cat_gp_almacen + ${thisC.GetString("PE_CANT")} where cat_gp_id = '${thisC.GetString("PE_PROID")}'"$)
|
||||
LogColor($"update ${traeTablaProds(thisC.GetString("PE_FOLIO"))} set cat_gp_almacen = cat_gp_almacen + ${thisC.GetString("PE_CANT")} where cat_gp_id = '${thisC.GetString("PE_PROID")}'"$, Colors.red)
|
||||
' Starter.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (traeAlmacen, thisC.GetString("PE_PROID"),thisC.GetString("PE_CANT")* -1))
|
||||
Next
|
||||
End If
|
||||
Starter.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)")
|
||||
Starter.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)")
|
||||
Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)")
|
||||
Return 1
|
||||
End Sub
|
||||
|
||||
'Regresa el total del pedido en la tabla "PEDIDO" del cliente actual.
|
||||
Sub totalPedido As String
|
||||
Private cT As Cursor = Starter.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total from PEDIDO where PE_CLIENTE = '${traeCliente}'"$)
|
||||
Private pTotal As String = "0"
|
||||
If cT.RowCount > 0 Then
|
||||
cT.Position = 0
|
||||
' Log("|"&cT.GetLong("total")&"|"&pTotal)
|
||||
Private tempT As String = cT.GetLong("total")
|
||||
If tempT <> "null" And tempT <> Null Then
|
||||
' Log("|"&cT.GetLong("total")&"|")
|
||||
pTotal = tempT
|
||||
End If
|
||||
' Log($"Cliente actual=${traeCliente}, hayPedido=${hay}"$)
|
||||
End If
|
||||
cT.Close
|
||||
Return pTotal
|
||||
End Sub
|
||||
|
||||
'Regresa la ruta actual de la base de datos.
|
||||
Sub traeRuta2 (cliente As String) As String 'ignore
|
||||
Private c As Cursor
|
||||
Private r As String
|
||||
c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO = '${cliente}' UNION ALL select CAT_CL_RUTA from kmt_info2 where CAT_CL_CODIGO = '${cliente}'"$)
|
||||
r = "0"
|
||||
If c.RowCount > 0 Then
|
||||
c.Position=0
|
||||
r = c.GetString("CAT_CL_RUTA")
|
||||
End If
|
||||
c.Close
|
||||
Return r
|
||||
End Sub
|
||||
|
||||
Sub traeRutaBitacora As String 'ignore
|
||||
Private c As Cursor
|
||||
Private r As String
|
||||
@@ -785,82 +874,82 @@ Sub guardaProducto(cedis As String, costoU As String, cant As String, nombre As
|
||||
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.
|
||||
Sub traePromo(promo As String, cliente As String) As Map
|
||||
LogColor($"TRAE PROMO = ${promo}"$, Colors.Red)
|
||||
Private inicioContador As String = DateTime.Now
|
||||
Private c As Cursor = B4XPages.MainPage.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 promoMap As Map
|
||||
Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables As List
|
||||
promoMap.Initialize
|
||||
prodsFijos.Initialize
|
||||
prodsFijosPrecios.Initialize
|
||||
prodsFijosPiezas.Initialize
|
||||
prodsVariables.Initialize
|
||||
c.Position = 0
|
||||
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"))
|
||||
c = B4XPages.MainPage.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción.
|
||||
c.Position = 0
|
||||
If c.GetString("hist") > 0 Then siHistorico = 1
|
||||
promoMap.Put("historico", siHistorico)
|
||||
' c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción.
|
||||
c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "' order by cat_dp_tipo asc")
|
||||
c.Position = 0
|
||||
If c.RowCount > 0 Then
|
||||
Private prods, tipos As Map
|
||||
prods.Initialize
|
||||
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")))
|
||||
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"))
|
||||
prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO"))
|
||||
prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS"))
|
||||
End If
|
||||
If c.GetString("CAT_DP_TIPO") = "1" Then prodsVariables.Add(c.GetString("CAT_DP_IDPROD"))
|
||||
' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$)
|
||||
Next
|
||||
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("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción.
|
||||
promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción.
|
||||
promoMap.Put("prodsFijosCant", prodsFijos.Size)
|
||||
promoMap.Put("prodsFijosPrecios", prodsFijosPrecios)
|
||||
promoMap.Put("prodsFijosPiezas", prodsFijosPiezas)
|
||||
promoMap.Put("prodsVariablesCant", prodsVariables.Size)
|
||||
promoMap.Put("resultado", "ok")
|
||||
Else
|
||||
promoMap.Put("resultado", "No hay datos de la promoción.")
|
||||
End If
|
||||
|
||||
|
||||
c = B4XPages.MainPage.skmt.ExecQuery($"Select CAT_GP_STS, CAT_GP_NOMBRE from ${traeTablaProds(traeTipoVentaDeBD)} where CAT_GP_ID = '${promo}' "$) 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||
|
||||
c.Position = 0
|
||||
Private pvr As String = 0
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
pvr = c.GetString("CAT_GP_STS")
|
||||
promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción.
|
||||
promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE"))
|
||||
End If
|
||||
c.Close
|
||||
' Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$)
|
||||
' Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$)
|
||||
' LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Green)
|
||||
' LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
|
||||
Return promoMap
|
||||
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.
|
||||
'Sub traePromo(promo As String, cliente As String) As Map
|
||||
' LogColor($"TRAE PROMO = ${promo}"$, Colors.Red)
|
||||
' Private inicioContador As String = DateTime.Now
|
||||
' Private c As Cursor = B4XPages.MainPage.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 promoMap As Map
|
||||
' Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables As List
|
||||
' promoMap.Initialize
|
||||
' prodsFijos.Initialize
|
||||
' prodsFijosPrecios.Initialize
|
||||
' prodsFijosPiezas.Initialize
|
||||
' prodsVariables.Initialize
|
||||
' c.Position = 0
|
||||
' 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"))
|
||||
' c = B4XPages.MainPage.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción.
|
||||
' c.Position = 0
|
||||
' If c.GetString("hist") > 0 Then siHistorico = 1
|
||||
' promoMap.Put("historico", siHistorico)
|
||||
'' c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción.
|
||||
' c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "' order by cat_dp_tipo asc")
|
||||
' c.Position = 0
|
||||
' If c.RowCount > 0 Then
|
||||
' Private prods, tipos As Map
|
||||
' prods.Initialize
|
||||
' 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")))
|
||||
' 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"))
|
||||
' prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO"))
|
||||
' prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS"))
|
||||
' End If
|
||||
' If c.GetString("CAT_DP_TIPO") = "1" Then prodsVariables.Add(c.GetString("CAT_DP_IDPROD"))
|
||||
'' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$)
|
||||
' Next
|
||||
' 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("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción.
|
||||
' promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción.
|
||||
' promoMap.Put("prodsFijosCant", prodsFijos.Size)
|
||||
' promoMap.Put("prodsFijosPrecios", prodsFijosPrecios)
|
||||
' promoMap.Put("prodsFijosPiezas", prodsFijosPiezas)
|
||||
' promoMap.Put("prodsVariablesCant", prodsVariables.Size)
|
||||
' promoMap.Put("resultado", "ok")
|
||||
' Else
|
||||
' promoMap.Put("resultado", "No hay datos de la promoción.")
|
||||
' End If
|
||||
'
|
||||
'
|
||||
' c = B4XPages.MainPage.skmt.ExecQuery($"Select CAT_GP_STS, CAT_GP_NOMBRE from ${traeTablaProds(traeTipoVentaDeBD)} where CAT_GP_ID = '${promo}' "$) 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||
'
|
||||
' c.Position = 0
|
||||
' Private pvr As String = 0
|
||||
' If c.RowCount > 0 Then
|
||||
' c.Position = 0
|
||||
' pvr = c.GetString("CAT_GP_STS")
|
||||
' promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción.
|
||||
' promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE"))
|
||||
' End If
|
||||
' c.Close
|
||||
'' Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$)
|
||||
'' Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$)
|
||||
'' LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Green)
|
||||
'' LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
|
||||
' Return promoMap
|
||||
'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
|
||||
@@ -917,27 +1006,27 @@ Sub restaFijosPromo(promoMap As Map) As Map 'ignore
|
||||
Return inventariosDisponiblesParaEstaPromo
|
||||
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
|
||||
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.
|
||||
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 ...
|
||||
Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto.
|
||||
totalProdsVariables = totalProdsVariables + p2
|
||||
If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas
|
||||
End If
|
||||
Next
|
||||
If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("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
|
||||
Return res
|
||||
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
|
||||
' 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.
|
||||
' 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 ...
|
||||
' Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto.
|
||||
' totalProdsVariables = totalProdsVariables + p2
|
||||
' If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas
|
||||
' End If
|
||||
' Next
|
||||
' If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("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
|
||||
' Return res
|
||||
'End Sub
|
||||
|
||||
'Regresa el numero máximo de promociones permitidas, tomando en cuenta recurrentes, clientes y maxPromos.
|
||||
Sub traeMaxPromos(pm As Map) As Int
|
||||
@@ -1083,68 +1172,68 @@ Sub revisaMaxPromosProdsFijosPorInventario(pm As Map) As Int
|
||||
Return t.Get(0) 'Regresamos el resultado mas pequeño.
|
||||
End Sub
|
||||
|
||||
'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
|
||||
'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
|
||||
Private thisLog As Boolean = False
|
||||
If thisLog Then Log("======================================================")
|
||||
If thisLog Then Log("======================================================")
|
||||
Private invFijoXpromo As Map
|
||||
invFijoXpromo.Initialize
|
||||
Private totalProdsVariablesDisponibles As Int = 0
|
||||
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
||||
Private maxPromos As String = traeMaxPromos(pm)
|
||||
Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||
Private idProdsVariables As List = pm.Get("prodsVariables")
|
||||
Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos")
|
||||
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
||||
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.
|
||||
invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p))
|
||||
Private idEsteProd As String = idProdsFijos.Get(p)
|
||||
Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd)
|
||||
Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p)
|
||||
If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$)
|
||||
' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) )
|
||||
Next
|
||||
If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue)
|
||||
If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
|
||||
If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$)
|
||||
Private maxPromosXVariables As Int = 0
|
||||
For x = 1 To maxPromosXFijos
|
||||
If thisLog Then Log("=====================================================")
|
||||
If thisLog Then Log("=====================================================")
|
||||
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)}"$)
|
||||
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.
|
||||
Next
|
||||
If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue)
|
||||
|
||||
totalProdsVariablesDisponibles = 0
|
||||
For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
|
||||
If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
||||
End If
|
||||
Next
|
||||
'Revisamos variables.
|
||||
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
||||
If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles)
|
||||
If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible.
|
||||
maxPromosXVariables = x
|
||||
Next
|
||||
'Restamos fijos.
|
||||
LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red)
|
||||
Return maxPromosXVariables
|
||||
End Sub
|
||||
''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
|
||||
''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
|
||||
' Private thisLog As Boolean = False
|
||||
' If thisLog Then Log("======================================================")
|
||||
' If thisLog Then Log("======================================================")
|
||||
' Private invFijoXpromo As Map
|
||||
' invFijoXpromo.Initialize
|
||||
' Private totalProdsVariablesDisponibles As Int = 0
|
||||
' If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
' Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||
' If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
||||
' Private maxPromos As String = traeMaxPromos(pm)
|
||||
' Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||
' Private idProdsVariables As List = pm.Get("prodsVariables")
|
||||
' Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos")
|
||||
' Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
||||
' 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.
|
||||
' invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p))
|
||||
' Private idEsteProd As String = idProdsFijos.Get(p)
|
||||
' Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd)
|
||||
' Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p)
|
||||
' If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$)
|
||||
'' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) )
|
||||
' Next
|
||||
' If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue)
|
||||
' If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
||||
' If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
|
||||
' If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue)
|
||||
' If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
|
||||
' If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$)
|
||||
' Private maxPromosXVariables As Int = 0
|
||||
' For x = 1 To maxPromosXFijos
|
||||
' If thisLog Then Log("=====================================================")
|
||||
' If thisLog Then Log("=====================================================")
|
||||
' 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)}"$)
|
||||
' 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.
|
||||
' Next
|
||||
' If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue)
|
||||
'
|
||||
' totalProdsVariablesDisponibles = 0
|
||||
' For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
|
||||
' If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then
|
||||
' totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
||||
' End If
|
||||
' Next
|
||||
' 'Revisamos variables.
|
||||
' If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
||||
' totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
||||
' If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles)
|
||||
' If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible.
|
||||
' maxPromosXVariables = x
|
||||
' Next
|
||||
' 'Restamos fijos.
|
||||
' LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red)
|
||||
' Return maxPromosXVariables
|
||||
'End Sub
|
||||
|
||||
'Regresa la suma del inventario de los productos variables de la promoción dada desde la base de datos.
|
||||
Sub cuantosVariablesTengoBD(promo As String) As String 'ignore
|
||||
@@ -1725,6 +1814,7 @@ End Sub
|
||||
|
||||
'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta.
|
||||
Sub traeTablaProds(tipoventa As String) As String
|
||||
Log(tipoventa)
|
||||
Private tablaProds As String = "cat_gunaprod2"
|
||||
If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod"
|
||||
' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0))
|
||||
@@ -1839,11 +1929,264 @@ End Sub
|
||||
' - 3 = bronze
|
||||
Sub traeTipoCliente As Int
|
||||
Private x As Cursor
|
||||
Private tc As Int = 0
|
||||
x = Starter.skmt.ExecQuery($"select cat_cl_tipocliente from kmt_info3 where cat_cl_codigo in (select cuenta from cuentaa)"$)
|
||||
Private tc As Int = 3
|
||||
x = Starter.skmt.ExecQuery($"select IFNULL(cat_cl_tipocliente,3) AS CAT_CL_TIPOCLIENTE from kmt_info3 where cat_cl_codigo in (select cuenta from cuentaa)"$)
|
||||
If x.RowCount > 0 Then
|
||||
x.Position = 0
|
||||
' Log("ESTO LO HIZO GUERRA ------> "&x.GetInt("CAT_CL_TIPOCLIENTE"))
|
||||
tc = x.GetInt("CAT_CL_TIPOCLIENTE")
|
||||
End If
|
||||
' Log("ESTO LO HIZO GUERRA X2------> "&tc)
|
||||
Return tc
|
||||
End Sub
|
||||
|
||||
Sub traeinventario(id As String) As String
|
||||
Dim c As Cursor
|
||||
Dim inventario As String = "0"
|
||||
c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${traeTablaProds(B4XPages.MainPage.tipo_venta)} where CAT_GP_ID = '${id}'"$)
|
||||
' Log($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_NOMBRE = '${id}'"$)
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
inventario = c.GetString("CAT_GP_ALMACEN")
|
||||
End If
|
||||
c.Close
|
||||
Return inventario
|
||||
End Sub
|
||||
|
||||
'Regresa el total de productos y monto del pedido del cliente actual.
|
||||
Sub traeTotalesClienteActual As Map
|
||||
Private m As Map
|
||||
m.Initialize
|
||||
Private c_prodsX As Cursor=B4XPages.MainPage.skmt.ExecQuery("select ifnull(sum(PE_CANT), 0) as cantProds, ifnull(sum(PE_COSTO_TOT), 0) as costoTotal FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc")
|
||||
c_prodsX.Position=0
|
||||
' LogColor($"Productos de la orden: ${c_prodsX.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red)
|
||||
m = CreateMap("productos": c_prodsX.GetString("cantProds"), "monto" : c_prodsX.GetString("costoTotal"))
|
||||
Return m
|
||||
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.
|
||||
Sub traePromo(promo As String, cliente As String) As Map
|
||||
Private inicioContador As String = DateTime.Now
|
||||
Private c As Cursor = B4XPages.MainPage.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 promoMap As Map
|
||||
Private prodsFijos, prodsFijosPrecios, prodsFijosPiezas, prodsVariables, prodsVariables2, prodsVariablesPrecios, prodsVariablesPrecios2 As List
|
||||
promoMap.Initialize
|
||||
prodsFijos.Initialize
|
||||
prodsFijosPrecios.Initialize
|
||||
prodsFijosPiezas.Initialize
|
||||
prodsVariables.Initialize
|
||||
prodsVariables2.Initialize
|
||||
prodsVariablesPrecios.Initialize
|
||||
prodsVariablesPrecios2.Initialize
|
||||
c.Position = 0
|
||||
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"))
|
||||
c = B4XPages.MainPage.skmt.ExecQuery("Select count(*) as hist from HIST_PROMOS where HP_CLIENTE = '"& cliente & "' and HP_CODIGO_PROMOCION = '" & promo & "'") 'Revisamos si hay historico de la promoción.
|
||||
c.Position = 0
|
||||
If c.GetString("hist") > 0 Then siHistorico = 1
|
||||
promoMap.Put("historico", siHistorico)
|
||||
c = B4XPages.MainPage.skmt.ExecQuery("Select * from CAT_DETALLES_PAQ where CAT_DP_ID = '"& promo & "'") 'Obtenemos los detalles de la promoción.
|
||||
c.Position = 0
|
||||
If c.RowCount > 0 Then
|
||||
Private prods, tipos As Map
|
||||
prods.Initialize
|
||||
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")))
|
||||
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"))
|
||||
prodsFijosPrecios.Add(c.GetString("CAT_DP_PRECIO"))
|
||||
prodsFijosPiezas.Add(c.GetString("CAT_DP_PZAS"))
|
||||
End If
|
||||
If c.GetString("CAT_DP_TIPO") = "1" Then
|
||||
prodsVariables.Add(c.GetString("CAT_DP_IDPROD"))
|
||||
prodsVariablesPrecios.Add(c.GetString("CAT_DP_PRECIO"))
|
||||
End If
|
||||
If c.GetString("CAT_DP_TIPO") = "2" Then
|
||||
' LogColor(c.GetString("CAT_DP_IDPROD") & "|" & c.GetString("CAT_DP_TIPO"), Colors.Blue)
|
||||
prodsVariables2.Add(c.GetString("CAT_DP_IDPROD"))
|
||||
prodsVariablesPrecios2.Add(c.GetString("CAT_DP_PRECIO"))
|
||||
End If
|
||||
' Log($"id:${c.GetString("CAT_DP_IDPROD")}, tipo:${c.GetString("CAT_DP_TIPO")}"$)
|
||||
' If prodsVariables2.Size > 0 Then LogColor(c.GetString("CAT_DP_ID") & "|" & prodsVariables2, Colors.red)
|
||||
Next
|
||||
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("prodsFijos", prodsFijos) 'Lista de los productos fijos de la promoción.
|
||||
promoMap.Put("prodsVariables", prodsVariables) 'Lista de los productos variables de la promoción.
|
||||
promoMap.Put("prodsVariables2", prodsVariables2)
|
||||
promoMap.Put("prodsFijosCant", prodsFijos.Size)
|
||||
promoMap.Put("prodsFijosPrecios", prodsFijosPrecios)
|
||||
promoMap.Put("prodsFijosPiezas", prodsFijosPiezas)
|
||||
promoMap.Put("prodsVariablesCant", prodsVariables.Size)
|
||||
promoMap.Put("prodsVariables2Cant", prodsVariables2.Size)
|
||||
promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios)
|
||||
promoMap.Put("prodsVariablesPrecios2", prodsVariablesPrecios2)
|
||||
promoMap.Put("resultado", "ok")
|
||||
Else
|
||||
promoMap.Put("resultado", "No hay datos de la promoción.")
|
||||
End If
|
||||
c = B4XPages.MainPage.skmt.ExecQuery2($"Select CAT_GP_STS, CAT_GP_IMP1, CAT_GP_NOMBRE from ${Starter.tabla} where CAT_GP_ID = ?"$,Array As String(promo)) 'Obtenemos las piezas requeridas de productos variables para la promoción.
|
||||
c.Position = 0
|
||||
Private pvr As String = 0
|
||||
Private pvr2 As String = 0
|
||||
If c.RowCount > 0 Then
|
||||
c.Position = 0
|
||||
pvr = c.GetString("CAT_GP_STS")
|
||||
pvr2 = c.GetString("CAT_GP_IMP1")
|
||||
If pvr = Null Or pvr = "null" Then pvr = 0
|
||||
If pvr2 = Null Or pvr2 = "null" Then pvr2 = 0
|
||||
promoMap.Put("prodsVariablesRequeridos", pvr) 'Cantidad de productos variables requeridos para la promoción.
|
||||
promoMap.Put("prodsVariables2Requeridos", pvr2)
|
||||
promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE"))
|
||||
End If
|
||||
c.Close
|
||||
' Log($"Inv variables: ${cuantosVariablesTengoBD(promo)}"$)
|
||||
' Log($"Inv dispo: ${traemosInventarioDisponibleParaPromo(promo)}"$)
|
||||
' LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Green)
|
||||
' LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Red)
|
||||
Return promoMap
|
||||
End Sub
|
||||
|
||||
'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
|
||||
'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
|
||||
Private thisLog As Boolean = False
|
||||
If thisLog Then Log("======================================================")
|
||||
If thisLog Then Log("======================================================")
|
||||
Private invFijoXpromo As Map
|
||||
invFijoXpromo.Initialize
|
||||
Private totalProdsVariablesDisponibles As Int = 0
|
||||
Private totalProdsVariables2Disponibles As Int = 0
|
||||
If thisLog Then LogColor($"pm=${pm}"$, Colors.Blue)
|
||||
Private invDispParaPromo As Map = traemosInventarioDisponibleParaPromo(pm.Get("id"))
|
||||
If thisLog Then Log($"invDispParaPromo=${invDispParaPromo}"$)
|
||||
Private maxPromos As String = traeMaxPromos(pm)
|
||||
Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(pm)
|
||||
Private idProdsVariables As List = pm.Get("prodsVariables")
|
||||
Private idProdsVariables2 As List = pm.Get("prodsVariables2")
|
||||
Private prodsVariablesRequeridos As Int = pm.Get("prodsVariablesRequeridos")
|
||||
Private prodsVariables2Requeridos As Int = pm.Get("prodsVariables2Requeridos")
|
||||
Private prodsFijosPiezas As List = pm.Get("prodsFijosPiezas")
|
||||
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.
|
||||
invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosPiezas.Get(p))
|
||||
Private idEsteProd As String = idProdsFijos.Get(p)
|
||||
Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd)
|
||||
Private pzasReqEsteProd As Int = prodsFijosPiezas.Get(p)
|
||||
If thisLog Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$)
|
||||
' invDispParaPromo.Put( idEsteProd, (invEsteProd - (1)) )
|
||||
Next
|
||||
If thisLog Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsFijosPiezasReq=${prodsFijosPiezas}"$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue)
|
||||
If thisLog Then LogColor($"prodsVariables2=${idProdsVariables2}${CRLF}Variables2 Req=${prodsVariables2Requeridos} "$, Colors.Blue)
|
||||
If thisLog Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue)
|
||||
If thisLog Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$)
|
||||
If thisLog Then Log($"Prods variables2 disponibles = ${totalProdsVariables2Disponibles}"$)
|
||||
Private maxPromosXVariables As Int = 0
|
||||
Private maxPromosXVariables2 As Int = 0
|
||||
For x = 1 To maxPromosXFijos
|
||||
If thisLog Then Log("=====================================================")
|
||||
If thisLog Then Log("=====================================================")
|
||||
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)}"$)
|
||||
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.
|
||||
Next
|
||||
If thisLog Then LogColor("Inv disponible despues de restar fijos = " & invDispParaPromo, Colors.Blue)
|
||||
|
||||
totalProdsVariablesDisponibles = 0
|
||||
totalProdsVariables2Disponibles = 0
|
||||
For i = 0 To idProdsVariables.Size - 1 'Obtenemos total de productos variables disponibes.
|
||||
If invDispParaPromo.ContainsKey(idProdsVariables.Get(i)) Then
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(idProdsVariables.Get(i))
|
||||
End If
|
||||
Next
|
||||
For i = 0 To idProdsVariables2.Size - 1 'Obtenemos total de productos variables disponibes.
|
||||
If invDispParaPromo.ContainsKey(idProdsVariables2.Get(i)) Then
|
||||
totalProdsVariables2Disponibles = totalProdsVariables2Disponibles + invDispParaPromo.Get(idProdsVariables2.Get(i))
|
||||
End If
|
||||
Next
|
||||
'Revisamos variables.
|
||||
If thisLog Then Log($"Var disponibles - var requeridos : ${totalProdsVariablesDisponibles} - ${prodsVariablesRequeridos*x}"$)
|
||||
totalProdsVariablesDisponibles = totalProdsVariablesDisponibles - (prodsVariablesRequeridos*x)
|
||||
totalProdsVariables2Disponibles = totalProdsVariables2Disponibles - (prodsVariables2Requeridos*x)
|
||||
If thisLog Then Log("prodsVariables disponibles despues de promo = " & totalProdsVariablesDisponibles)
|
||||
If thisLog Then Log("prodsVariables2 disponibles despues de promo = " & totalProdsVariables2Disponibles)
|
||||
If totalProdsVariablesDisponibles < 0 Then Exit 'Ya no hay inventario disponible.
|
||||
If totalProdsVariables2Disponibles < 0 Then Exit 'Ya no hay inventario disponible.
|
||||
maxPromosXVariables = x
|
||||
Next
|
||||
'Restamos fijos.
|
||||
If thisLog Then LogColor("Max promos de prodsVariables POR inventario = " & maxPromosXVariables, Colors.red)
|
||||
Return maxPromosXVariables
|
||||
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
|
||||
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 totalProdsVariables2 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 una lista con los productos variables de la promoción.
|
||||
Private prodsVariables2 As List = promoMap.get("prodsVariables2")
|
||||
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.
|
||||
' Log("inventarioSinFijos: " & inventarioSinFijos)
|
||||
If inventarioSinFijos.ContainsKey(t) Then 'Si existe el producto en la lista del inventario, entonces ...
|
||||
Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto.
|
||||
' Log(p2)
|
||||
totalProdsVariables = totalProdsVariables + p2
|
||||
' Log(totalProdsVariables)
|
||||
If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas
|
||||
End If
|
||||
Next
|
||||
For p = 0 To prodsVariables2.Size - 1
|
||||
Private t As String = prodsVariables2.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 ...
|
||||
Private p2 As String = inventarioSinFijos.Get(t) 'Obtenemos el inventario disponible este producto.
|
||||
totalProdsVariables2 = totalProdsVariables2 + p2
|
||||
If thisLog Then Log($"prod ${t}, hay: ${p2}"$) 'Producto y piezas requeridas
|
||||
End If
|
||||
Next
|
||||
If thisLog Then Log("Total prods variables=" & totalProdsVariables & ", requeridos=" & promoMap.Get("prodsVariablesRequeridos"))
|
||||
If thisLog Then Log("Total prods variables2=" & totalProdsVariables2 & ", requeridos2=" & promoMap.Get("prodsVariables2Requeridos"))
|
||||
Private res As Boolean = False
|
||||
Private res1 As Boolean = False
|
||||
Private res2 As Boolean = False
|
||||
|
||||
' Log($"${totalProdsVariables} >= ${promoMap.Get("prodsVariablesRequeridos")}"$)
|
||||
' Log($"${totalProdsVariables2} >= ${promoMap.Get("prodsVariables2Requeridos")}"$)
|
||||
|
||||
If totalProdsVariables > 0 And totalProdsVariables >= promoMap.Get("prodsVariablesRequeridos") Then
|
||||
res1 = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE
|
||||
End If
|
||||
If promoMap.Get("prodsVariablesRequeridos").As (Int) = 0 Then res1 = True
|
||||
If totalProdsVariables2 > 0 And totalProdsVariables2 >= promoMap.Get("prodsVariables2Requeridos") Then
|
||||
res2 = True 'Si el total de inventario de productos variables (totalProdsVariables) es mayor o igual a los productos requeridos entonces regresamos TRUE
|
||||
End If
|
||||
If promoMap.Get("prodsVariables2Requeridos").As(Int) = 0 Then res2 = True
|
||||
If res1 And res2 Then 'Solo si son verdadero los dos el resultado es verdadero.
|
||||
res = True
|
||||
Else
|
||||
res = False
|
||||
End If
|
||||
' Log(res)
|
||||
Return res
|
||||
End Sub
|
||||
Reference in New Issue
Block a user