mirror of
https://github.com/KeymonSoft/Guna_Preventa.git
synced 2026-04-17 21:06:32 +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:
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