- VERSION 5.04.01

- Se agregó la validacion de fechas de fin de promoción para Preventa y Venta.
- Se agregó que cuando se hace abordo (siguiente carga), los limites configurados para las promos (maxpromos, maxrec y maxxcliente) no se tomen en cuenta.
This commit is contained in:
2025-04-02 13:23:01 -06:00
parent 814bfb136c
commit 44c02757dc
6 changed files with 71 additions and 40 deletions

View File

@@ -170,6 +170,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Subs.agregaColumna("CAT_ENCUESTA_PREGUNTA", "CAT_EP_RUTAS", "TEXT") Subs.agregaColumna("CAT_ENCUESTA_PREGUNTA", "CAT_EP_RUTAS", "TEXT")
Subs.agregaColumna("HIST_ENCUESTA", "HE_LAT", "TEXT") Subs.agregaColumna("HIST_ENCUESTA", "HE_LAT", "TEXT")
Subs.agregaColumna("HIST_ENCUESTA", "HE_LON", "TEXT") Subs.agregaColumna("HIST_ENCUESTA", "HE_LON", "TEXT")
Subs.agregaColumna("CAT_DETALLES_PAQ", "CAT_PA_VIGENCIA_FIN", "TEXT")
Subs.agregaColumna("CAT_DETALLES_PAQ", "CAT_PA_VIGENCIAABORDO", "TEXT")
c=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SERVER")) c=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SERVER"))
c.Position =0 c.Position =0
If c.GetString("CUANTOS") = 0 Then If c.GetString("CUANTOS") = 0 Then

View File

@@ -917,7 +917,7 @@ Sub cargar_Click
cmd.Name = "select_cat_paquetes_abordo_DUR" cmd.Name = "select_cat_paquetes_abordo_DUR"
cmd.Parameters = Array As Object(ALMACEN) cmd.Parameters = Array As Object(ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "gunaprodpa") 'xxxxxxxxxxxxxx reqManager.ExecuteQuery(cmd , 0, "gunaprodpa") 'xxxxxxxxxxxxxx
cmd.Initialize cmd.Initialize
cmd.Name = "select_cat_paquetes_DUR" cmd.Name = "select_cat_paquetes_DUR"
cmd.Parameters = Array As Object(ALMACEN) cmd.Parameters = Array As Object(ALMACEN)
@@ -929,10 +929,10 @@ Sub cargar_Click
reqManager.ExecuteQuery(cmd , 0, "gunaprodps") 'xxxxxxxxxxxxxxxx reqManager.ExecuteQuery(cmd , 0, "gunaprodps") 'xxxxxxxxxxxxxxxx
cmd.Initialize cmd.Initialize
cmd.Name = "select_cat_detallepa_DUR" cmd.Name = "select_cat_detallepa2_DUR"
cmd.Parameters = Array As Object(ALMACEN) cmd.Parameters = Array As Object(ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "detallepaq") reqManager.ExecuteQuery(cmd , 0, "detallepaq")
cmd.Initialize cmd.Initialize
cmd.Name = "selectPromoProveedor" cmd.Name = "selectPromoProveedor"
reqManager.ExecuteQuery(cmd , 0, "promoProveedor") reqManager.ExecuteQuery(cmd , 0, "promoProveedor")
@@ -964,10 +964,10 @@ Sub cargar_Click
''' validar para que sirve esto ya que no esta en la base de datos. ''' validar para que sirve esto ya que no esta en la base de datos.
cmd.Initialize ' cmd.Initialize
cmd.Name = "select_verificacion_DUR" ' cmd.Name = "select_verificacion_DUR"
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) ' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") 'xxxxxxxxxxxxxxx ' reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") 'xxxxxxxxxxxxxxx
cmd.Initialize cmd.Initialize
cmd.Name = "select_fecha" cmd.Name = "select_fecha"
@@ -1576,7 +1576,9 @@ Sub JobDone(Job As HttpJob)
Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF"))
Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO"))
Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS"))
skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) Dim CAT_PA_VIGENCIA_FIN As String = records(RESULT.Columns.Get("CAT_PA_VIGENCIA_FIN"))
Dim CAT_PA_VIGENCIAABORDO As String = records(RESULT.Columns.Get("CAT_PA_VIGENCIAABORDO"))
skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS,CAT_PA_VIGENCIA_FIN,CAT_PA_VIGENCIAABORDO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS,CAT_PA_VIGENCIA_FIN,CAT_PA_VIGENCIAABORDO))
Next Next
If PB2.Progress = 0 Then If PB2.Progress = 0 Then
PB2.Progress = 30 PB2.Progress = 30
@@ -2535,7 +2537,7 @@ Sub Resumen_Click
Else Else
ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png")
End If End If
L_TICKPROM.Text = numberformat2(Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2), 1, 2, 2, true) L_TICKPROM.Text = NumberFormat2(Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2), 1, 2, 2, True)
If c.GetString("MONTO_DIA") < 2500 Then If c.GetString("MONTO_DIA") < 2500 Then
ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png")
Else if c.GetString("MONTO_DIA") > = 2500 And c.GetString("MONTO_DIA") < 4000 Then Else if c.GetString("MONTO_DIA") > = 2500 And c.GetString("MONTO_DIA") < 4000 Then

View File

@@ -165,6 +165,7 @@ Sub B4XPage_Appear
' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("COMPLEMENTARIO","3")) ' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("COMPLEMENTARIO","3"))
' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("CATALOGO REGULAR","0")) ' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("CATALOGO REGULAR","0"))
' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?) ",Array As Object("PROMOS","PROMOS")) ' Starter.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?) ",Array As Object("PROMOS","PROMOS"))
if Subs.traeCliente = 0 then Starter.tipov = "ABORDO"
If Starter.tipov = "PREVENTA" Then If Starter.tipov = "PREVENTA" Then
query = "cat_gunaprod" query = "cat_gunaprod"
query2 = "COUNT_GUNAPROD" query2 = "COUNT_GUNAPROD"
@@ -270,6 +271,7 @@ Sub B4XPage_Appear
'Traemos las promociones con el proveedor incluido. 'Traemos las promociones con el proveedor incluido.
c2=Starter.skmt.ExecQuery("Select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_TIPO, CAT_DP_CLASIF, CAT_CLASF_PROD.* from " & query & " join CAT_DETALLES_PAQ on CAT_DP_ID = CAT_GP_ID join CAT_CLASF_PROD on CAT_DP_CLASIF = CAT_CP_ID where CAT_GP_ALMACEN > 0 And CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO ='PROMOS' AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) order by CAT_CP_NOMPROD") c2=Starter.skmt.ExecQuery("Select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_TIPO, CAT_DP_CLASIF, CAT_CLASF_PROD.* from " & query & " join CAT_DETALLES_PAQ on CAT_DP_ID = CAT_GP_ID join CAT_CLASF_PROD on CAT_DP_CLASIF = CAT_CP_ID where CAT_GP_ALMACEN > 0 And CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO ='PROMOS' AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) order by CAT_CP_NOMPROD")
Log(("Select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_TIPO, CAT_DP_CLASIF, CAT_CLASF_PROD.* from " & query & " join CAT_DETALLES_PAQ on CAT_DP_ID = CAT_GP_ID join CAT_CLASF_PROD on CAT_DP_CLASIF = CAT_CP_ID where CAT_GP_ALMACEN > 0 And CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO ='PROMOS' AND CAT_GP_TIPOPROD <> 1 and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) order by CAT_CP_NOMPROD"))
' Log($"Resultados : ${c2.RowCount}"$) ' Log($"Resultados : ${c2.RowCount}"$)
Private mPromosProv As Map Private mPromosProv As Map
mPromosProv.Initialize mPromosProv.Initialize

View File

@@ -591,31 +591,31 @@ File629=infonavit1.jpg
File63=118.png File63=118.png
File630=itembuttonblue.png File630=itembuttonblue.png
File631=k.png File631=k.png
File632=K-b27c0809.png File632=kelloggs.png
File633=kelloggs.png File633=keymon_logo.png
File634=keymon_logo.png File634=kmt.db
File635=kmt.db File635=login.bal
File636=login.bal File636=logo sanfer.jpg
File637=logo sanfer.jpg File637=Logo_durakelo_192xx192.jpeg
File638=Logo_durakelo_192xx192.jpeg File638=logo_exitus1.jpg
File639=logo_exitus1.jpg File639=MainPage.bal
File64=118marker-rojo.png File64=118marker-rojo.png
File640=MainPage.bal File640=Malo.jpg
File641=Malo.jpg File641=mapa.bal
File642=mapa.bal File642=mapa_rutas.bal
File643=mapa_rutas.bal File643=nestle.png
File644=nestle.png File644=nota.bal
File645=nota.bal File645=NoVenta.bal
File646=NoVenta.bal File646=nuevocliente.bal
File647=nuevocliente.bal File647=palomita_verde.png
File648=palomita_verde.png File648=pedido.bal
File649=pedido.bal File649=pedidoitem.bal
File65=118marker-verde.png File65=118marker-verde.png
File650=pedidoitem.bal File650=planfia_logo.png
File651=planfia_logo.png File651=planfia_logo_old.png
File652=planfia_logo_old.png File652=planfia_logo_old2.png
File653=planfia_logo_old2.png File653=principal.bal
File654=principal.bal File654=principal.bal.bak
File655=proditem.bal File655=proditem.bal
File656=productos.bal File656=productos.bal
File657=productos.bal.old File657=productos.bal.old
@@ -1406,7 +1406,7 @@ Version=12.8
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Durakelo #ApplicationLabel: Durakelo
#VersionCode: 1 #VersionCode: 1
#VersionName: 5.02.08 #VersionName: 5.04.01
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False

View File

@@ -51,7 +51,7 @@ ModuleBreakpoints9=
ModuleClosedNodes0= ModuleClosedNodes0=
ModuleClosedNodes1= ModuleClosedNodes1=
ModuleClosedNodes10= ModuleClosedNodes10=
ModuleClosedNodes11=7,35,36,41,42 ModuleClosedNodes11=3,7,35,36,41,42
ModuleClosedNodes12= ModuleClosedNodes12=
ModuleClosedNodes13= ModuleClosedNodes13=
ModuleClosedNodes14= ModuleClosedNodes14=
@@ -73,6 +73,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=Main,Globals,23,0,Main,Activity_Create,33,0,Main,Activity_ActionBarHomeClick,39,0,C_Principal,B_OK_PAS_Click,2330,0,C_Principal,Resumen_Click,2389,0,Main,Activity_KeyPress,40,0,Diseñador Visual,principal.bal,-100,6,C_Principal,initialize,164,0,C_Principal,B4XPage_Created,173,4,C_Cliente,Class_Globals,0,0,C_Cliente,B4XPage_Created,174,1 NavigationStack=Subs,traePromosVendidas,1006,0,C_Promos,muestraPromo,89,0,Subs,procesaPromocion,1023,6,Subs,revisaMaxPromosProdsFijosPorInventario2,1059,6,Subs,traeMaxPromos,975,6,C_Productos,B4XPage_Appear,161,6,Subs,revisaMaxPromosProdsFijosPorInventario,1098,2,Subs,revisaFechaVigenciaPromo,1503,0,C_Nota,borra_Click,188,0,C_Nota,Activity_KeyPress,176,0,C_Nota,Class_Globals,14,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=2,10,4,19,6,8,9,11,24,23 VisibleModules=2,10,4,19,9,11,23,12,8

View File

@@ -858,6 +858,8 @@ Sub traePromo(promo As String, cliente As String) As Map
promoMap.Put("prodsFijosPiezas", prodsFijosPiezas) promoMap.Put("prodsFijosPiezas", prodsFijosPiezas)
promoMap.Put("prodsVariablesCant", prodsVariables.Size) promoMap.Put("prodsVariablesCant", prodsVariables.Size)
promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios) promoMap.Put("prodsVariablesPrecios", prodsVariablesPrecios)
promoMap.Put("vigencia", c.GetString("CAT_PA_VIGENCIA_FIN").SubString2(0, c.GetString("CAT_PA_VIGENCIA_FIN").IndexOf(" ")))
promoMap.Put("vigencia_abordo", c.GetString("CAT_PA_VIGENCIAABORDO").SubString2(0, c.GetString("CAT_PA_VIGENCIAABORDO").IndexOf(" ")))
promoMap.Put("resultado", "ok") promoMap.Put("resultado", "ok")
Else Else
promoMap.Put("resultado", "No hay datos de la promoción.") promoMap.Put("resultado", "No hay datos de la promoción.")
@@ -980,11 +982,11 @@ Sub traeMaxPromos(pm As Map) As Int
' End If ' End If
If thisLog Then LogColor("==== HISTORICO:"&pm.Get("historico"), Colors.Red) If thisLog Then LogColor("==== HISTORICO:"&pm.Get("historico"), Colors.Red)
If thisLog Then Log(pm) If thisLog Then Log(pm)
Log(maxPromos) ' Log(maxPromos)
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
maxPromos.Add(pm.Get("maxXcliente")) 'Agregamos maxXcliente maxPromos.Add(pm.Get("maxXcliente")) 'Agregamos maxXcliente
Log(maxPromos) ' Log(maxPromos)
If hccp.RowCount > 0 Then 'Agregamos promos HCCP If hccp.RowCount > 0 Then 'Agregamos promos HCCP
hccp.Position = 0 hccp.Position = 0
maxPromos.Add(hccp.GetString("HCCP_CANT")) maxPromos.Add(hccp.GetString("HCCP_CANT"))
@@ -994,6 +996,7 @@ Sub traeMaxPromos(pm As Map) As Int
mp0 = maxPromos.Get(0) mp0 = maxPromos.Get(0)
mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente) mp = mp0 - traePromosVendidas(pm.Get("id"), traeCliente)
If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)}) = ${mp}"$) If thisLog Then Log($"Max Promos (${mp0}) - promos vendidas (${(traePromosVendidas(pm.Get("id"), traeCliente)).As(Int)}) = ${mp}"$)
If Starter.tipov = "ABORDO" Then mp = 5000 ' Si es ABORDO (siguiente carga), se quitan los limites configurados
Return mp 'Regresamos el numero mas pequeño de las opciones. Return mp 'Regresamos el numero mas pequeño de las opciones.
End Sub End Sub
@@ -1019,11 +1022,13 @@ Sub procesaPromocion(idPromo As String, cliente As String) As Map 'ignore
If thisLog Then LogColor(pm, Colors.Blue) If thisLog Then LogColor(pm, Colors.Blue)
' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue) ' If thisLog Then LogColor("|" & pm.Get("maxPromos") & "|", Colors.Blue)
' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|") ' Log("|"&revisaMaxPromosProdsFijosPorInventario(pm)&"|")
Private vigente As Boolean = revisaFechaVigenciaPromo(pm) ' Revisamos que la promo este vigente segun las fechas de preventa y venta
If revisaMaxPromosProdsFijosPorInventario(pm) < 1 Then pm.Put("resultado", 0) If revisaMaxPromosProdsFijosPorInventario(pm) < 1 Then pm.Put("resultado", 0)
Log($"resultado = ${pm.Get("resultado")}"$) Log($"Max promos de prodsFijos POR inventario = ${pm.Get("resultado")}"$)
If pm.Get("resultado") = "ok" Then 'Si encontramos la promoción, entonces ... If vigente And 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)
Log("########### " & Starter.tipov & "|" & mp & "|")
' 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
@@ -1485,4 +1490,24 @@ Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore
End Try End Try
Log(2) Log(2)
End Try End Try
End Sub
'Regresa verdadero o falso dependiendo de la fecha de vigencia del tipo de venta.
Sub revisaFechaVigenciaPromo(pm As Map) As Boolean
Private vigente As Boolean = False
LogColor("Entramos a revisaFechaVigenciaPromo", Colors.red)
' Log("Fecha vigencia: " & pm.Get("vigencia"))
' Log("Fecha vigencia abordo: " & pm.Get("vigencia_abordo"))
' Log("Tipo venta: " & Starter.tipov)
DateTime.DateFormat = "yyyyMMdd"
If Starter.tipov = "PREVENTA" Or Starter.tipov = "ABORDO" Then
Private vigencia As String = pm.Get("vigencia").As(String).Replace("-", "")
If vigencia >= DateTime.Date(DateTime.Now) Then vigente = True
Else if Starter.tipov = "VENTA" Then
Private vigencia As String = pm.Get("vigencia_abordo").As(String).Replace("-", "")
If vigencia >= DateTime.Date(DateTime.Now) Then vigente = True
End If
' Log(Starter.tipov & "|" & vigencia & "|" & DateTime.Date(DateTime.Now))
LogColor("Promo vigente: " & vigente, Colors.red)
Return vigente
End Sub End Sub