- 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:
2025-05-22 14:24:17 -06:00
parent bc2f4c1835
commit a30096c3e6
4 changed files with 123 additions and 6 deletions

View File

@@ -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