mirror of
https://github.com/KeymonSoft/Guna_Preventa.git
synced 2026-04-19 21:59:15 +00:00
- VERSION 5.05.21
- Se agrego la funcion subs/agrupaProdsPromo que agrupa los productos de las promos, para el caso de que el producto fijo y el variable tienen la misma cantidad y precio, antes el pasarInfoMovil los veia iguales y los tiraba, ahora ya se agrupan.
This commit is contained in:
@@ -1080,9 +1080,6 @@ Sub B4XPage_Appear
|
|||||||
PCLV.B4XSeekBar1.mBase.Height=clv_prods_ll.AsView.Height
|
PCLV.B4XSeekBar1.mBase.Height=clv_prods_ll.AsView.Height
|
||||||
PCLV.pnlOverlay.Height = clv_prods_ll.AsView.Height
|
PCLV.pnlOverlay.Height = clv_prods_ll.AsView.Height
|
||||||
PCLV.B4XSeekBar1.Update
|
PCLV.B4XSeekBar1.Update
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub PCLV_AddProds
|
Sub PCLV_AddProds
|
||||||
|
|||||||
@@ -997,6 +997,9 @@ Private Sub b_terminar1_Click
|
|||||||
' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap)
|
' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap)
|
||||||
' Next
|
' Next
|
||||||
' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red)
|
' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red)
|
||||||
|
|
||||||
|
Subs.agrupaProdsPromo(Subs.traeCliente)
|
||||||
|
|
||||||
lv_prodsFijos.Clear
|
lv_prodsFijos.Clear
|
||||||
B4XPages.MainPage.bTerminarClicked = True
|
B4XPages.MainPage.bTerminarClicked = True
|
||||||
B4XPages.ShowPage("productos")
|
B4XPages.ShowPage("productos")
|
||||||
@@ -1035,6 +1038,9 @@ Private Sub b_continuar_Click
|
|||||||
prodspage.lv_promos.Visible = False
|
prodspage.lv_promos.Visible = False
|
||||||
prodspage.clv_productos.AsView.Visible = False
|
prodspage.clv_productos.AsView.Visible = False
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
Subs.agrupaProdsPromo(Subs.traeCliente)
|
||||||
|
|
||||||
B4XPages.MainPage.bTerminarClicked = True
|
B4XPages.MainPage.bTerminarClicked = True
|
||||||
B4XPages.ShowPage("productos")
|
B4XPages.ShowPage("productos")
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -82,6 +82,6 @@ ModuleClosedNodes6=
|
|||||||
ModuleClosedNodes7=6,8,9,10,11
|
ModuleClosedNodes7=6,8,9,10,11
|
||||||
ModuleClosedNodes8=
|
ModuleClosedNodes8=
|
||||||
ModuleClosedNodes9=
|
ModuleClosedNodes9=
|
||||||
NavigationStack=C_Cliente,Guardar_Click,2438,6,C_Principal,Subir_Click,601,0,C_Cliente,B4XPage_Appear,1106,0,C_Promos,muestraPromo,495,0,C_Promos,b_promoMas_Click,935,0,C_Productos,lv_catalogos_ItemClick,1188,0,Starter,ENVIA_ULTIMA_GPS,110,0,C_Principal,resdia_Click,2774,0,C_Principal,B4XPage_Appear,457,1,C_Principal,B4XPage_Created,331,0
|
NavigationStack=C_Productos,B4XPage_Appear,1064,0,Diseñador Visual,promociones.bal,-100,1,C_Promos,b_promoMas_Click,953,0,C_Promos,b_continuar_Click,1035,5,C_Promos,b_terminar1_Click,994,0,Subs,traeTablaProds,1810,0,Subs,guardaProductoSinGestion,1794,0,Subs,revisaMaxPromosProdsVariablesPorInventario,2130,0,Subs,agrupaProdsPromo,2199,6
|
||||||
SelectedBuild=0
|
SelectedBuild=0
|
||||||
VisibleModules=25,2,14,26,5,10,11,20,19,16
|
VisibleModules=25,2,14,26,5,10,11,16,15
|
||||||
|
|||||||
116
B4A/Subs.bas
116
B4A/Subs.bas
@@ -1814,7 +1814,7 @@ End Sub
|
|||||||
|
|
||||||
'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta.
|
'Regresa la tabla de productos (cat_gunaprod o cat_gunaprod2) dependiendo del tipo de venta.
|
||||||
Sub traeTablaProds(tipoventa As String) As String
|
Sub traeTablaProds(tipoventa As String) As String
|
||||||
Log(tipoventa)
|
' Log(tipoventa)
|
||||||
Private tablaProds As String = "cat_gunaprod2"
|
Private tablaProds As String = "cat_gunaprod2"
|
||||||
If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod"
|
If tipoventa = "ABORDO" Or tipoventa = "PREVENTA" Then tablaProds = "cat_gunaprod"
|
||||||
' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0))
|
' LogColor($"Tipo= ${tipoventa}, tabla=${tablaProds}"$, Colors.RGB(200,136,0))
|
||||||
@@ -2190,3 +2190,117 @@ Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As
|
|||||||
' Log(res)
|
' Log(res)
|
||||||
Return res
|
Return res
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
' Agrupa los productos de las promociones, porque si tenemos un producto fijo a precio x y un producto variabe al mismo precio
|
||||||
|
' y las mismas cantidades, el pasarInfoMovil las detecta como duplicados y las tira, con esta funcion en lugar de dos registros,
|
||||||
|
' solo va uno con cantidades y totales sumados.
|
||||||
|
Sub agrupaProdsPromo(cliente As String)
|
||||||
|
' Obtener la estructura de la tabla pedido con tipos de datos
|
||||||
|
Dim rs As ResultSet = Starter.skmt.ExecQuery("PRAGMA table_info(pedido)")
|
||||||
|
Dim columns As List
|
||||||
|
columns.Initialize
|
||||||
|
Dim columnTypes As Map
|
||||||
|
columnTypes.Initialize
|
||||||
|
|
||||||
|
' Obtener nombres y tipos de columnas
|
||||||
|
Do While rs.NextRow
|
||||||
|
Dim colName As String = rs.GetString("name")
|
||||||
|
Dim colType As String = rs.GetString("type")
|
||||||
|
columns.Add(colName)
|
||||||
|
columnTypes.Put(colName, colType)
|
||||||
|
Loop
|
||||||
|
rs.Close
|
||||||
|
|
||||||
|
' Construir la sentencia CREATE TABLE dinámica con tipos correctos
|
||||||
|
Dim createTableSQL As StringBuilder
|
||||||
|
createTableSQL.Initialize
|
||||||
|
createTableSQL.Append("CREATE TEMP TABLE IF NOT EXISTS PEDIDO_AGRUPADOR (")
|
||||||
|
|
||||||
|
For i = 0 To columns.Size - 1
|
||||||
|
Dim columnName As String = columns.Get(i)
|
||||||
|
If i > 0 Then createTableSQL.Append(", ")
|
||||||
|
createTableSQL.Append(columnName).Append(" ")
|
||||||
|
|
||||||
|
' Determinar el tipo de dato adecuado
|
||||||
|
Dim detectedType As String = columnTypes.Get(columnName)
|
||||||
|
If detectedType.Contains("INT") Then
|
||||||
|
createTableSQL.Append("INTEGER")
|
||||||
|
Else If detectedType.Contains("CHAR") Or detectedType.Contains("TEXT") Then
|
||||||
|
createTableSQL.Append("TEXT")
|
||||||
|
Else If detectedType.Contains("REAL") Or detectedType.Contains("FLOA") Or detectedType.Contains("DOUB") Then
|
||||||
|
createTableSQL.Append("REAL")
|
||||||
|
Else If detectedType.Contains("BLOB") Then
|
||||||
|
createTableSQL.Append("BLOB")
|
||||||
|
Else
|
||||||
|
' Por defecto usar TEXT si no se reconoce el tipo
|
||||||
|
createTableSQL.Append("TEXT")
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
createTableSQL.Append(")")
|
||||||
|
|
||||||
|
' Crear la tabla temporal con los tipos correctos
|
||||||
|
Starter.skmt.ExecNonQuery(createTableSQL.ToString)
|
||||||
|
|
||||||
|
Log("########################################################################")
|
||||||
|
Log(createTableSQL.ToString)
|
||||||
|
Log("########################################################################")
|
||||||
|
|
||||||
|
' Identificar columnas que deben sumarse (basado en nombre o tipo)
|
||||||
|
Dim sumColumns As List
|
||||||
|
sumColumns.Initialize
|
||||||
|
sumColumns.Add("PE_CANT") ' Estas son las que sabemos que deben sumarse
|
||||||
|
sumColumns.Add("PE_COSTO_TOT")
|
||||||
|
|
||||||
|
' Construir la lista de columnas para el GROUP BY (excluyendo las que se sumarán)
|
||||||
|
Dim groupByColumns As List
|
||||||
|
groupByColumns.Initialize
|
||||||
|
For Each col As String In columns
|
||||||
|
If sumColumns.IndexOf(col) = -1 Then ' Si no es una columna a sumar
|
||||||
|
groupByColumns.Add(col)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
' Construir la consulta SELECT dinámica
|
||||||
|
Dim selectSQL As StringBuilder
|
||||||
|
selectSQL.Initialize
|
||||||
|
selectSQL.Append("INSERT INTO PEDIDO_AGRUPADOR SELECT ")
|
||||||
|
|
||||||
|
For i = 0 To columns.Size - 1
|
||||||
|
Dim columnName As String = columns.Get(i)
|
||||||
|
If i > 0 Then selectSQL.Append(", ")
|
||||||
|
|
||||||
|
If sumColumns.IndexOf(columnName) > -1 Then
|
||||||
|
' Columnas que requieren SUM()
|
||||||
|
selectSQL.Append("SUM(").Append(columnName).Append(") As ").Append(columnName)
|
||||||
|
Else
|
||||||
|
' Otras columnas
|
||||||
|
selectSQL.Append(columnName)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
selectSQL.Append(" FROM pedido WHERE PE_CLIENTE = '").Append(cliente).Append("' GROUP BY ")
|
||||||
|
|
||||||
|
For i = 0 To groupByColumns.Size - 1
|
||||||
|
If i > 0 Then selectSQL.Append(", ")
|
||||||
|
selectSQL.Append(groupByColumns.Get(i))
|
||||||
|
Next
|
||||||
|
|
||||||
|
' Ejecutar la transacción
|
||||||
|
Starter.skmt.BeginTransaction
|
||||||
|
|
||||||
|
' Vaciar la tabla temporal
|
||||||
|
Starter.skmt.ExecNonQuery("DELETE FROM PEDIDO_AGRUPADOR")
|
||||||
|
|
||||||
|
' Insertar datos agrupados
|
||||||
|
Starter.skmt.ExecNonQuery(selectSQL.ToString)
|
||||||
|
|
||||||
|
' Reemplazar los datos originales
|
||||||
|
Starter.skmt.ExecNonQuery($"DELETE FROM PEDIDO WHERE PE_CLIENTE = '${cliente}'"$)
|
||||||
|
Starter.skmt.ExecNonQuery("INSERT INTO PEDIDO SELECT * FROM PEDIDO_AGRUPADOR")
|
||||||
|
|
||||||
|
Starter.skmt.TransactionSuccessful
|
||||||
|
Starter.skmt.EndTransaction
|
||||||
|
Log("LISTO!!")
|
||||||
|
End Sub
|
||||||
Reference in New Issue
Block a user