mirror of
https://github.com/KeymonSoft/Guna_Preventa.git
synced 2026-04-17 12:56:17 +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.pnlOverlay.Height = clv_prods_ll.AsView.Height
|
||||
PCLV.B4XSeekBar1.Update
|
||||
|
||||
|
||||
|
||||
End Sub
|
||||
|
||||
Sub PCLV_AddProds
|
||||
|
||||
@@ -997,6 +997,9 @@ Private Sub b_terminar1_Click
|
||||
' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap)
|
||||
' Next
|
||||
' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red)
|
||||
|
||||
Subs.agrupaProdsPromo(Subs.traeCliente)
|
||||
|
||||
lv_prodsFijos.Clear
|
||||
B4XPages.MainPage.bTerminarClicked = True
|
||||
B4XPages.ShowPage("productos")
|
||||
@@ -1035,6 +1038,9 @@ Private Sub b_continuar_Click
|
||||
prodspage.lv_promos.Visible = False
|
||||
prodspage.clv_productos.AsView.Visible = False
|
||||
End If
|
||||
|
||||
Subs.agrupaProdsPromo(Subs.traeCliente)
|
||||
|
||||
B4XPages.MainPage.bTerminarClicked = True
|
||||
B4XPages.ShowPage("productos")
|
||||
End Sub
|
||||
|
||||
@@ -82,6 +82,6 @@ ModuleClosedNodes6=
|
||||
ModuleClosedNodes7=6,8,9,10,11
|
||||
ModuleClosedNodes8=
|
||||
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
|
||||
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.
|
||||
Sub traeTablaProds(tipoventa As String) As String
|
||||
Log(tipoventa)
|
||||
' 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))
|
||||
@@ -2189,4 +2189,118 @@ Sub alcanzanLosVariablesParaPromo(promoMap As Map, inventarioSinFijos As Map) As
|
||||
End If
|
||||
' Log(res)
|
||||
Return res
|
||||
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