From c4feba0a09d555de33b1e562664fb9abcece0c01 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Sun, 12 May 2024 23:20:29 -0600 Subject: [PATCH] =?UTF-8?q?-=20C=C3=B3digo=20de=20promociones=20"al=20pare?= =?UTF-8?q?cer"=20completo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B4A/C_Promos.bas | 94 ++++++++++++++++++++++++++--------------- B4A/KelloggsV4.b4a.meta | 4 +- B4A/Promociones.bas | 94 +++++++++++++++++++++++++++++------------ B4A/Subs.bas | 6 ++- 4 files changed, 131 insertions(+), 67 deletions(-) diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas index df636be..9c925a6 100644 --- a/B4A/C_Promos.bas +++ b/B4A/C_Promos.bas @@ -43,11 +43,12 @@ Sub Class_Globals Dim prodsPedidoActual As String Dim montoPedidoActual As String Dim promosMap As Map + Dim promosC As Promociones End Sub 'You can add more parameters here. Public Sub Initialize As Object -' promosC.Initialize(Me, "promosC", Starter.skmt) + promosC.Initialize(Me, "promosC", Starter.skmt) Return Me End Sub @@ -81,46 +82,65 @@ Sub B4XPage_Appear End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. -Sub muestraPromo(promo As String, cliente As String) - Log("muestraPromo:"&promo) - Private thisLog As Boolean = False -' If thisLog Then Log(promo) - estaPromo = promo +Sub muestraPromo(idPromo As String, cliente As String) + Log("muestraPromo: " & idPromo) + Private thisLog As Boolean = True + promosC.tablaProds = "CAT_GUNAPROD2" + If Starter.tipov = "PREVENTA" Or Starter.tipov = "ABORDO" Then promosC.tablaProds = "CAT_GUNAPROD" +' If thisLog Then Log(idPromo) + estaPromo = idPromo 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) - Private invDispPromo As Map = Subs.restaFijosPromo(mp) +' Private mp As Map = Subs.traePromo(idPromo, 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.restaFijosPromo(mp) + Private invDispPromo As Map = promosC.restaFijosDePromo(idPromo) + 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) + If thisLog Then Log("Max promos por inv de prods FIJOS: " & promosC.revisaMaxPromosProdsFijosPorInventario(idPromo)) + If thisLog Then Log("Max promos por inv de prods VARIABLES: " & promosC.revisaMaxPromosProdsVariablesPorInventario(idPromo)) + +' maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) + maxCantPromos = promosC.revisaMaxPromosProdsVariablesPorInventario(idPromo) + Log($"MAXCANTPROMOS: ${maxCantPromos}"$) + et_promoCant.Text = 1 l_promosCant.text = "Max promos: " & maxCantPromos Private cs As CSBuilder cs.Initialize - If thisLog Then Log(mp) - If thisLog Then Log(prodsPromo) - 'Ponemos la promo y descripción. -' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ -' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall - l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall +' If thisLog Then Log(mp) +' If thisLog Then Log(prodsPromo) + 'Ponemos la idPromo y descripción. +' Dim desc As String = $"Promoción: ${idPromo}${CRLF}${mp.Get("descripcion")}"$ +' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(idPromo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall + Private c As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_NOMBRE from ${Subs.traeTablaProds(Starter.tipov)} where CAT_GP_ID = '${idPromo}'"$) + Private descripcion As String = "PROMO" + If c.RowCount > 0 Then + c.Position = 0 + descripcion = c.GetString("CAT_GP_NOMBRE") + End If + l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(idPromo).append(CRLF).Append(descripcion).Popall prodsFijosTot = 0 'Ponemos el texto en las etiquetas de la cantidad de productos. ' Dim pf As List = mp.Get("prodsFijos") - Dim pv As List = mp.Get("prodsVariables") - Dim listaPreciosPV As List = mp.Get("prodsVariablesPrecios") + +' Dim pv As List = mp.Get("prodsVariables") + Dim pv As List = promosC.traeListaDePromo("P_PRODSVARIABLES", idPromo) + +' Dim listaPreciosPV As List = mp.Get("prodsVariablesPrecios") + Dim listaPreciosPV As List = promosC.traeListaDePromo("P_PRODSVARIABLES_PRECIOS", idPromo) + ' Logcolor(listaPreciosPV, Colors.red) - If thisLog Then Log(mp) +' If thisLog Then Log(mp) tpf = 0 - For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) + For Each pfp As Int In promosC.traeListaDePromo("P_PRODSFIJOS_PIEZAS", idPromo) tpf = tpf + pfp Next tpf2 = tpf ' tpf = tpf * maxCantPromos l_prodsFijos.Text = $"Productos fijos (${tpf})"$ - prodsVarReq = mp.Get("prodsVariablesRequeridos") + prodsVarReq = promosC.traeInfoDePromo("P_PRODSVARIABLES_REQUERIDOS", idPromo) prodsVarReq2 = prodsVarReq l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ If prodsVarReq = 0 Then @@ -137,7 +157,7 @@ Sub muestraPromo(promo As String, cliente As String) lv_prodsFijos.Clear ' If pf.Size < 1 Then pf.Add("Sin productos fijos.") lv_prodsFijos.Clear - agregaFijosALista(mp, True) + agregaFijosALista(idPromo, True) If thisLog Then Log("Total prods fijos = " & prodsFijosTot) ' If thisLog Then Log("======="&prodsMap) l_totProds.text = $"Productos: ${tpf}"$ @@ -160,8 +180,8 @@ Sub muestraPromo(promo As String, cliente As String) ' bmp.Initialize2(ins) Private indicePV As Int = pv.IndexOf(p) Private estePrecio As String = listaPreciosPV.Get(indicePV) - Private thisProd As Map = prodsPromo.Get(p) - If thisLog Then Log(thisProd) +' Private thisProd As Map = prodsPromo.Get(p) +' If thisLog Then Log(thisProd) If existenciaProdVariable > 0 Then Log($">>>>> AGREGAMOS PROD VARIABLE ${p}"$) clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) @@ -174,11 +194,13 @@ Sub muestraPromo(promo As String, cliente As String) End Sub 'Agregamos los productos fijos a una lista para despues meterlos en el pedido. -Sub agregaFijosALista(mp As Map, addListItem As Boolean) +Sub agregaFijosALista(idPromo As String, addListItem As Boolean) Private thisLog As Boolean = False Private cont As Int = 0 prodsFijosTot = 0 - Dim pf As List = mp.Get("prodsFijos") +' Dim pf As List = mp.Get("prodsFijos") + Dim pf As List = promosC.traeListaDePromo("P_PRODSFIJOS", idPromo) + If pf.Size < 1 Then pf.Add("Sin productos fijos.") ' Private m As Map ' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) @@ -191,13 +213,15 @@ Sub agregaFijosALista(mp As Map, addListItem As Boolean) prodsPrecios.Add(0) For Each p As String In pf ' Log($"cont=${cont}, mp=${mp}"$) - If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then - Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) + Private prodsFijosPiezas As List = promosC.traeListaDePromo("P_PRODSFIJOS_PIEZAS", idPromo) + If prodsFijosPiezas.Size > 0 Then + Private tpi As String = prodsFijosPiezas.Get(cont) Else Private tpi As String = 0 End If - If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then - Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) + Private prodsFijosPrecios As List = promosC.traeListaDePromo("P_PRODSFIJOS_PRECIOS", idPromo) + If prodsFijosPrecios.Size > 0 Then + Private tpr As String = prodsFijosPrecios.Get(cont) Else Private tpr As String = 0 End If @@ -306,7 +330,7 @@ Sub cuentaProds prodsCants2.Clear prodsPrecios2.Clear lv_prodsFijos.Clear - agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) + agregaFijosALista(estapromo, True) ' Log(prodsIds) Private tcpf As Float = 0 'Total de compra de productos fijos. For pf = 0 To prodsIds.Size - 1 diff --git a/B4A/KelloggsV4.b4a.meta b/B4A/KelloggsV4.b4a.meta index 52c04bb..5d5c39c 100644 --- a/B4A/KelloggsV4.b4a.meta +++ b/B4A/KelloggsV4.b4a.meta @@ -91,6 +91,6 @@ ModuleClosedNodes6= ModuleClosedNodes7= ModuleClosedNodes8= ModuleClosedNodes9= -NavigationStack=Promociones,traeListaDePromo,491,0,Promociones,traeInfoDePromo,433,0,Promociones,revisaMaxPromosProdsVariablesPorInventarioXX,276,0,Promociones,traePromo,97,5,Promociones,alcanzanLosVariablesParaPromo,391,0,Promociones,traeMaxPromos,406,4,Promociones,traePromosVendidas,415,0,Promociones,revisaMaxPromosProdsFijosPorInventario,217,0,Promociones,restaFijosDePromo,332,0,Promociones,procesaPromocion,40,0 +NavigationStack=C_Promos,cuentaProds,326,0,Subs,traeProdNombre,807,0,Subs,cuantosVariablesDisponiblesDB,1428,0,C_Productos,Class_Globals,0,0,Subs,revisaMaxPromosProdsVariablesPorInventario,1361,0,Promociones,procesaPromocion,30,0,Promociones,revisaMaxPromosProdsVariablesPorInventario,269,6,Promociones,traePromo,125,0,C_Promos,agregaFijosALista,233,6,C_Promos,muestraPromo,86,6 SelectedBuild=0 -VisibleModules=1,28,11,3,26,12,4,29,8,13 +VisibleModules=1,28,11,3,26,29,12,4,13 diff --git a/B4A/Promociones.bas b/B4A/Promociones.bas index bf4f3f2..4561736 100644 --- a/B4A/Promociones.bas +++ b/B4A/Promociones.bas @@ -12,7 +12,8 @@ Sub Class_Globals Private EventName As String 'ignore Private CallBack As Object 'ignore Dim tablaProds As String - Dim muestraLogs, releaseMode As Boolean + Dim muestraLogs As Boolean + Dim releaseMode As Boolean End Sub 'Initializes the object. You can add parameters to this method if needed. @@ -25,7 +26,7 @@ Public Sub Initialize (vCallback As Object, vEventName As String, db0 As SQL) As db.ExecNonQuery("DELETE FROM PROMOCIONES_INFO") #if RELEASE releaseMode = true - #Else + #Else if DEBUG releaseMode = False #end if Return Me @@ -101,13 +102,17 @@ End Sub ' P_ESTATUS="OK" 'Ok si existe la promocion. ' P_PRODSVARIABLES_REQUERIDOS=5 'Cantidad de productos variables requeridos para la promoción. Sub traePromo(promo As String, cliente0 As String) As Map + '###################################################### + muestraLogs = True ' Si es verdadero, se muestran los logs de la clase. + '###################################################### + If releaseMode Then muestraLogs = False If muestraLogs Then LogColor("> TraePromo: " & promo, Colors.blue) ' Private inicioContador As String = DateTime.Now Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar. Private siHistorico As String = 0 -' Private promoMap As Map + Private promoMap As Map Private prodsFijos, prodsFijosPrecios, prodsFijosReq, prodsVariables, prodsVariablesPrecios As List -' promoMap.Initialize + promoMap.Initialize prodsFijos.Initialize prodsFijosPrecios.Initialize prodsFijosReq.Initialize @@ -199,7 +204,7 @@ Sub traePromo(promo As String, cliente0 As String) As Map 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")) + promoMap.put("descripcion", c.GetString("CAT_GP_NOMBRE")) db.ExecNonQuery($"update PROMOCIONES_INFO set P_PRODSVARIABLES_REQUERIDOS = ${pvr} where P_ID = '${promo}'"$) 'Cantidad de productos variables requeridos para la promoción. End If c.Close @@ -207,7 +212,7 @@ Sub traePromo(promo As String, cliente0 As String) As Map ' If muestraLogs Then Log($"Inv dispo: ${traemosInvDispParaPromo(promo)}"$) ' If muestraLogs Then LogColor($"Promo ${promo}: ${promoMap}"$, Colors.Blue) ' If muestraLogs Then LogColor("TIEMPO para traePromo -=" & promo & "=- : " & ((DateTime.Now-inicioContador)/1000), Colors.Blue) -' Return promoMap + Return promoMap End Sub ' Regresa cuantas promos alcanzan con los productos FIJOS que hay en inventario. @@ -244,23 +249,26 @@ End Sub 'promos por productos fijos llegan 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 revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore - If muestraLogs Then Log("======================================================") +Sub revisaMaxPromosProdsVariablesPorInventario(idPromo As String) As Int 'ignore + If muestraLogs Then LogColor("> revisaMaxPromosProdsVariablesPorInventario: " & idPromo, Colors.blue) Private invFijoXpromo As Map invFijoXpromo.Initialize Private totalProdsVariablesDisponibles As Int = 0 - If muestraLogs Then LogColor($"pm=${pm}"$, Colors.Blue) - Private invDispParaPromo As Map = traemosInvDispParaPromo(pm.Get("id")) - If muestraLogs 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 prodsFijosReq As List = pm.Get("prodsFijosReq") - Private idProdsFijos As List = pm.Get("prodsFijos") +' If muestraLogs Then LogColor($"pm=${pm}"$, Colors.Blue) + Private invDispParaPromo As Map = traemosInvDispParaPromo(idPromo) +' If muestraLogs Then + Log($"invDispParaPromo=${invDispParaPromo}"$) + Private maxPromos As String = traeMaxPromos(idPromo) + Private maxPromosXFijos As Int = revisaMaxPromosProdsFijosPorInventario(idPromo) + Private idProdsVariables As List = traeListaDePromo("P_PRODSVARIABLES", idPromo) + Private prodsVariablesRequeridos As Int = traeInfoDePromo("P_PRODSVARIABLES_REQUERIDOS", idPromo) + Private prodsFijosReq As List = traeListaDePromo("P_PRODSFIJOS_PIEZAS", idPromo) + Private idProdsFijos As List = traeListaDePromo("P_PRODSFIJOS", idPromo) For p = 0 To idProdsFijos.Size -1 'Generamos mapa con los productos fijos y piezas requeridas por promo. invFijoXpromo.Put(idProdsFijos.Get(p), prodsFijosReq.Get(p)) + Log(idProdsFijos) Private idEsteProd As String = idProdsFijos.Get(p) + Log(idEsteProd) Private invEsteProd As Int = invDispParaPromo.Get(idEsteProd) Private pzasReqEsteProd As Int = prodsFijosReq.Get(p) If muestraLogs Then Log($"id=${idEsteProd}, inv=${invEsteProd}, pzas=${pzasReqEsteProd}"$) @@ -268,24 +276,28 @@ Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore Next If muestraLogs Then LogColor($"MaxPromos=${maxPromos}, promosXFijos=${maxPromosXFijos}"$, Colors.Blue) If muestraLogs Then LogColor($"prodsFijos=${idProdsFijos}"$, Colors.Blue) - If muestraLogs Then LogColor($"prodsFijosReqReq=${prodsFijosReq}"$, Colors.Blue) + If muestraLogs Then LogColor($"prodsFijosReq=${prodsFijosReq}"$, Colors.Blue) If muestraLogs Then LogColor($"prodsVariables=${idProdsVariables}${CRLF}Variables Req=${prodsVariablesRequeridos} "$, Colors.Blue) If muestraLogs Then LogColor($"invFijoXpromo=${invFijoXpromo}"$, Colors.Blue) If muestraLogs Then Log($"Prods variables disponibles = ${totalProdsVariablesDisponibles}"$) Private maxPromosXVariables As Int = 0 + If Not(releaseMode) Then muestraLogs = True For x = 1 To maxPromosXFijos - If muestraLogs Then Log("=====================================================") If muestraLogs Then Log("=====================================================") For i = 0 To idProdsFijos.Size - 1 - If muestraLogs Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(idProdsFijos.Get(i))} - ${prodsFijosReq.Get(i).As(Int)*(i+1)}"$) - invDispParaPromo.Put(idProdsFijos.Get(i), invDispParaPromo.Get(idProdsFijos.Get(i)).As(Int) - prodsFijosReq.Get(i).As(Int)*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. +' Log(prodsFijosReq.Get(i)) + Private prodsFijosRequeridos As Int = prodsFijosReq.Get(i) + Private esteProdFijo As String = idProdsFijos.Get(i) +' Log(invDispParaPromo) + If muestraLogs Then Log($"FIJO - ${idProdsFijos.Get(i)}, ${invDispParaPromo.Get(esteProdFijo)} - ${prodsFijosRequeridos*(i+1)}"$) + invDispParaPromo.Put(esteProdFijo, invDispParaPromo.Get(esteProdFijo) - prodsFijosRequeridos*(i+1)) 'Restamos las piezas de los productos fijos del inventario disponible. Next If muestraLogs 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)) + Private thisProdVariable As String = idProdsVariables.Get(i) + If invDispParaPromo.ContainsKey(thisProdVariable) Then + totalProdsVariablesDisponibles = totalProdsVariablesDisponibles + invDispParaPromo.Get(thisProdVariable) End If Next 'Revisamos variables. @@ -301,10 +313,10 @@ Sub revisaMaxPromosProdsVariablesPorInventarioXX(pm As Map) As Int 'ignore End Sub 'Regresa un mapa con el inventario disponible por producto para la promoción (desde la base de datos). -Sub traemosInvDispParaPromo(promo As String) As Map 'ignore - If muestraLogs Then LogColor("> traemosInvDispParaPromo: " & promo, Colors.blue) +Sub traemosInvDispParaPromo(idPromo As String) As Map 'ignore + If muestraLogs Then LogColor("> traemosInvDispParaPromo: " & idPromo, Colors.blue) Private c As Cursor - c = Starter.skmt.ExecQuery2($"SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM ${tablaProds} WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)"$, Array As String(promo)) + c = Starter.skmt.ExecQuery2($"SELECT CAT_GP_ID, CAT_GP_ALMACEN FROM ${tablaProds} WHERE CAT_GP_ID IN (select CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID = ?)"$, Array As String(idPromo)) ' Private prodInv As Map ' prodInv.Initialize Private prods As Map @@ -342,7 +354,7 @@ Sub restaFijosDePromo(idPromo As String) As Map 'ignore InvDispEsteProd = invDispEstaPromo.get(esteProd) 'Obtenemos del mapa el inventario de este producto. nuevoInv = NumberFormat2((InvDispEsteProd - pzasReqEsteProd), 1, 0,0,False) If muestraLogs Then Log($"Nuevo inventario de ${esteProd}: ${InvDispEsteProd}-${pzasReqEsteProd} = ${nuevoInv}"$) 'El nuevo inventario. - invDispEstaPromo.Put(esteProd, $"${nuevoInv}"$) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. + invDispEstaPromo.Put(esteProd.Trim, nuevoInv) 'Restamos del inventario las piezas requeridas para la promoción y guardamos el nuevo inventario en el mapa. invDispEstaPromo.Put("resultado", "ok") Else 'Si en el mapa no esta el id del producto, entonces no tenemos inventario. invDispEstaPromo.Put("resultado", "No hay suficiente producto para la promocion.") @@ -438,6 +450,7 @@ End Sub 'Regresa una lista de la BD, en la BD se guarda como string y esta funcion la convierte en lista nuevamente. Sub traeListaDePromo(col As String, promo As String) As List +' Log($"${col}, ${promo}"$) Private res As List Private s As String Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${promo}'"$) @@ -445,6 +458,31 @@ Sub traeListaDePromo(col As String, promo As String) As List s = c.GetString(col) Loop If s.StartsWith("[") And s.EndsWith("]") Then +' Private j As JSONParser +' j.Initialize(s) +' res.Initialize2(j.NextArray) + res.Initialize + s = s.Replace("[", "") + s = s.Replace("]", "") + Private s2() As String = Regex.Split(",", s) + For i = 0 To s2.Length - 1 + res.Add(s2(i).as(String).trim) + Next + Else + res.Initialize + End If + Return res +End Sub + +'Regresa una lista de la BD, en la BD se guarda como string y esta funcion la convierte en lista nuevamente. +Sub traeMapaDePromo(col As String, promo As String) As List + Private res As List + Private s As String + Private c As ResultSet = db.ExecQuery($"select ${col} from PROMOCIONES_INFO where P_ID = '${promo}'"$) + Do While c.NextRow + s = c.GetString(col) + Loop + If s.StartsWith("{") And s.EndsWith("}") Then Private j As JSONParser j.Initialize(s) res.Initialize2(j.NextArray) diff --git a/B4A/Subs.bas b/B4A/Subs.bas index abb94f3..ec70da7 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -802,6 +802,7 @@ Sub traeProdNombre(id As String) As String Private h As Cursor Private n As String h=Starter.skmt.ExecQuery($"select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = '${id.Trim}' union select CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '${id.Trim}'"$) +' Log($"select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = '${id.Trim}' union select CAT_GP_NOMBRE from CAT_GUNAPROD2 where CAT_GP_ID = '${id.Trim}'"$) If h.RowCount > 0 Then h.Position = 0 n = h.GetString("CAT_GP_NOMBRE") @@ -810,6 +811,7 @@ Sub traeProdNombre(id As String) As String h.Close If n = Null Or n="" Then n = "N/A" ' Log(h.RowCount&"|"&id&"|"&n&"|") +' Log(n) Return n End Sub @@ -1002,7 +1004,7 @@ End Sub ' resultado="OK" 'Ok si existe la promocion. ' prodsVariablesRequeridos=5} 'Cantidad de productos variables requeridos para la promoción. Sub traePromo(promo As String, cliente As String) As Map - Private thisLog As Boolean = True + Private thisLog As Boolean = False If thisLog Then Log("traePromo:"&promo) Private inicioContador As String = DateTime.Now Private c As Cursor = Starter.skmt.ExecQuery("Select * from promos_comp where cat_pa_id = '"& promo&"'") 'Obtenemos las el maximo de promocioones a otorgar. @@ -1430,7 +1432,7 @@ Sub cuantosVariablesDisponiblesDB(promo As String) If c.RowCount > 0 Then For i = 0 To c.RowCount - 1 c.Position = i - Log(c.GetString("CAT_GP_ID") & ": " & c.GetString("CAT_GP_ALMACEN")) +' Log(c.GetString("CAT_GP_ID") & ": " & c.GetString("CAT_GP_ALMACEN")) If c.GetString("CAT_GP_ALMACEN") <> Null Then x = c.GetString("CAT_GP_ALMACEN") Next End If