Se agrega los colores paras que no se confundan y se corrige que si no tienen venta y entran al res dia no truene

This commit is contained in:
Javier
2026-01-05 10:53:07 -06:00
parent f756cc5ca4
commit 52b264af6c
4 changed files with 146 additions and 51 deletions

View File

@@ -2848,6 +2848,7 @@ Sub resdia_Click
' s3.Close ' s3.Close
Private s3 As Cursor = B4XPages.MainPage.skmt.ExecQuery("select distinct(pe_cliente) FROM PEDIDO") Private s3 As Cursor = B4XPages.MainPage.skmt.ExecQuery("select distinct(pe_cliente) FROM PEDIDO")
If s3.RowCount > 0 Then If s3.RowCount > 0 Then
Private total1 As String = 0 Private total1 As String = 0
For i = 0 To s3.RowCount - 1 For i = 0 To s3.RowCount - 1
@@ -2858,6 +2859,8 @@ Sub resdia_Click
' LogColor($"Total despues ${total1}"$, Colors.blue) ' LogColor($"Total despues ${total1}"$, Colors.blue)
Next Next
L_REAL.Text = total1 L_REAL.Text = total1
Else
L_REAL.Text = 0
End If End If
'Prueba0 'Prueba0
@@ -2919,6 +2922,8 @@ Sub resdia_Click
c.Close c.Close
End If End If
' L_REAL.Text = l_monto_ks.Text ' L_REAL.Text = l_monto_ks.Text
Log(L_NES.Text)
Log(L_REAL.Text)
L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2)
L_VPLAN.Text = l_porvisitar.Text L_VPLAN.Text = l_porvisitar.Text
L_VREAL.Text = L_CUANTOST.text L_VREAL.Text = L_CUANTOST.text

View File

@@ -116,32 +116,58 @@ Sub B4XPage_Appear
' --- 2. Query 2: (MODIFICADO) --- ' --- 2. Query 2: (MODIFICADO) ---
' Este es el query de SQLite que hicimos, adaptado ' Este es el query de SQLite que hicimos, adaptado
' para usar la variable 'nombreProducto' ' para usar la variable 'nombreProducto'
' Dim sql As String = $"
' WITH FechasObjetivo (Fecha) AS (
' SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-28 days'))
' UNION ALL
' SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-21 days'))
' UNION ALL
' SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-14 days'))
' UNION ALL
' SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-7 days'))
' )
' SELECT
' COALESCE(SUM(H.HVD_CANT), 0) AS HVD_CANT_TOTAL
' FROM
' FechasObjetivo AS F
' LEFT JOIN
' HIST_VENTAS AS H
' ON F.Fecha = H.HVD_FECHA
' AND H.HVD_CLIENTE IN (SELECT CUENTA FROM cuentaa)
' AND H.HVD_PRONOMBRE = '${nombreProducto}'
' GROUP BY
' F.Fecha
' ORDER BY
' SUBSTR(F.Fecha, 7, 4),
' SUBSTR(F.Fecha, 4, 2),
' SUBSTR(F.Fecha, 1, 2)
' "$
Dim sql As String = $" Dim sql As String = $"
WITH FechasObjetivo (Fecha) AS ( WITH FechasObjetivo (Fecha) AS (
SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-28 days')) SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-28 days'))
UNION ALL UNION ALL
SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-21 days')) SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-21 days'))
UNION ALL UNION ALL
SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-14 days')) SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-14 days'))
UNION ALL UNION ALL
SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-7 days')) SELECT strftime('%d/%m/%Y', date('now', 'localtime', '-7 days'))
) )
SELECT SELECT
COALESCE(SUM(H.HVD_CANT), 0) AS HVD_CANT_TOTAL COALESCE(SUM(H.HVD_CANT), 0) AS HVD_CANT_TOTAL,
FROM -- Si el mes de la fecha es igual al mes actual, devuelve 1, si no 0
FechasObjetivo AS F CASE WHEN SUBSTR(F.Fecha, 4, 2) = strftime('%m', 'now', 'localtime') THEN 1 ELSE 0 END AS EsMesActual
LEFT JOIN FROM
HIST_VENTAS AS H FechasObjetivo AS F
ON F.Fecha = H.HVD_FECHA LEFT JOIN
AND H.HVD_CLIENTE IN (SELECT CUENTA FROM cuentaa) HIST_VENTAS AS H
AND H.HVD_PRONOMBRE = '${nombreProducto}' ON F.Fecha = H.HVD_FECHA
GROUP BY AND H.HVD_CLIENTE IN (SELECT CUENTA FROM cuentaa)
F.Fecha AND H.HVD_PRONOMBRE = '${nombreProducto}'
ORDER BY GROUP BY F.Fecha
SUBSTR(F.Fecha, 7, 4), ORDER BY SUBSTR(F.Fecha, 7, 4), SUBSTR(F.Fecha, 4, 2), SUBSTR(F.Fecha, 1, 2)
SUBSTR(F.Fecha, 4, 2), "$
SUBSTR(F.Fecha, 1, 2)
"$
' Log($"Ejecutando para: ${nombreProducto}") ' Log($"Ejecutando para: ${nombreProducto}")
' Log(sql) ' Descomenta esto si necesitas depurar el query ' Log(sql) ' Descomenta esto si necesitas depurar el query
@@ -151,30 +177,58 @@ Sub B4XPage_Appear
' --- 3. Leer los 4 resultados (YA NO NECESITAMOS BUCLE) --- ' --- 3. Leer los 4 resultados (YA NO NECESITAMOS BUCLE) ---
' Sabemos que el query SIEMPRE devuelve 4 filas ' Sabemos que el query SIEMPRE devuelve 4 filas
' en el orden correcto (hace 28, 21, 14, 7 días) ' en el orden correcto (hace 28, 21, 14, 7 días)
Log(prohit2.RowCount) ' Log(prohit2.RowCount)
' If prohit2.RowCount = 4 Then
' prohit2.Position = 0
' cant_sem4 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 1 (-28 días)
'
' prohit2.Position = 1
' cant_sem3 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 2 (-21 días)
'
' prohit2.Position = 2
' cant_sem2 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 3 (-14 días)
'
' prohit2.Position = 3
' cant_sem1 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 4 (-7 días)
' Else
' Log($"Error: El query no devolvió 4 filas para '${nombreProducto}'"$)
' End If
'
' prohit2.Close ' Cerramos el cursor interno
'
Dim promx As Double = (cant_sem4 + cant_sem3 + cant_sem2 + cant_sem1) / 4
'
'
' CustomListView1.Add(CreateListItem(nombreProducto, cant_sem4, cant_sem3, cant_sem2, cant_sem1, promx ), 1)
' Variables nuevas para el color (1 = Mes Actual, 0 = Otro)
Dim c1, c2, c3, c4 As Int
If prohit2.RowCount = 4 Then If prohit2.RowCount = 4 Then
prohit2.Position = 0 prohit2.Position = 0
cant_sem4 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 1 (-28 días) cant_sem4 = prohit2.GetString("HVD_CANT_TOTAL")
c1 = prohit2.GetInt("EsMesActual")
prohit2.Position = 1 prohit2.Position = 1
cant_sem3 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 2 (-21 días) cant_sem3 = prohit2.GetString("HVD_CANT_TOTAL")
c2 = prohit2.GetInt("EsMesActual")
prohit2.Position = 2 prohit2.Position = 2
cant_sem2 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 3 (-14 días) cant_sem2 = prohit2.GetString("HVD_CANT_TOTAL")
c3 = prohit2.GetInt("EsMesActual")
prohit2.Position = 3 prohit2.Position = 3
cant_sem1 = prohit2.GetString("HVD_CANT_TOTAL") ' Fila 4 (-7 días) cant_sem1 = prohit2.GetString("HVD_CANT_TOTAL")
c4 = prohit2.GetInt("EsMesActual")
Else Else
Log($"Error: El query no devolvió 4 filas para '${nombreProducto}'"$) Log("Error en filas")
End If End If
prohit2.Close
prohit2.Close ' Cerramos el cursor interno ' Pasamos los indicadores de color al método (c1, c2, c3, c4)
CustomListView1.Add(CreateListItem(nombreProducto, cant_sem4, cant_sem3, cant_sem2, cant_sem1, promx, c1, c2, c3, c4), 1)
Dim promx As Double = (cant_sem4 + cant_sem3 + cant_sem2 + cant_sem1) / 4 '
CustomListView1.Add(CreateListItem(nombreProducto, cant_sem4, cant_sem3, cant_sem2, cant_sem1, promx ), 1)
Next Next
prohit.Close ' Cerramos el cursor externo prohit.Close ' Cerramos el cursor externo
@@ -187,16 +241,52 @@ Sub B4XPage_Appear
End Sub End Sub
Sub CreateListItem(prodhis As String, s1 As Int, s2 As Int, s3 As Int,s4 As Int, prom As Double) As Panel 'ignore 'Sub CreateListItem(prodhis As String, s1 As Int, s2 As Int, s3 As Int,s4 As Int, prom As Double) As Panel 'ignore
' Dim p As B4XView = xui.CreatePanel("")
' p.SetLayoutAnimated(0, 0, 0, 288dip, 170dip)
' p.LoadLayout("historicobat")
' l_productohist.Text = prodhis
' l_s1.Text = s1
' l_s2.Text = s2
' l_s3.Text = s3
' l_s4.Text = s4
' L_PROMEDIOHIST.text = "Promedio " & prom
'
' Return p
'End Sub
Sub CreateListItem(prodhis As String, s1 As Int, s2 As Int, s3 As Int, s4 As Int, prom As Double, m1 As Int, m2 As Int, m3 As Int, m4 As Int) As Panel
Dim p As B4XView = xui.CreatePanel("") Dim p As B4XView = xui.CreatePanel("")
' p.SetLayoutAnimated(0, 0, 0, 100%x, 170dip) ' En B4A es mejor usar %x para el ancho
p.SetLayoutAnimated(0, 0, 0, 288dip, 170dip) p.SetLayoutAnimated(0, 0, 0, 288dip, 170dip)
p.LoadLayout("historicobat") p.LoadLayout("historicobat")
l_productohist.Text = prodhis l_productohist.Text = prodhis
l_s1.Text = s1 l_s1.Text = s1
l_s2.Text = s2 l_s2.Text = s2
l_s3.Text = s3 l_s3.Text = s3
l_s4.Text = s4 l_s4.Text = s4
L_PROMEDIOHIST.text = "Promedio " & prom
' Cambiar color de fondo de los labels según el mes
' Si mX es 1 (mes actual) -> Azul, si no -> Amarillo
l_s1.Color = IIf(m1 = 1, xui.Color_Blue, xui.Color_Yellow)
l_s2.Color = IIf(m2 = 1, xui.Color_Blue, xui.Color_Yellow)
l_s3.Color = IIf(m3 = 1, xui.Color_Blue, xui.Color_Yellow)
l_s4.Color = IIf(m4 = 1, xui.Color_Blue, xui.Color_Yellow)
' Opcional: Cambiar el color del texto para que contraste
l_s1.TextColor = IIf(m1 = 1, xui.Color_White, xui.Color_Black)
l_s2.TextColor = IIf(m2 = 1, xui.Color_White, xui.Color_Black)
l_s3.TextColor = IIf(m3 = 1, xui.Color_White, xui.Color_Black)
l_s4.TextColor = IIf(m4 = 1, xui.Color_White, xui.Color_Black)
L_PROMEDIOHIST.Text = "Promedio " & NumberFormat(prom, 1, 2)
Return p Return p
End Sub End Sub
' Función auxiliar por si no tienes activado el IIf de B4A (disponible en versiones recientes)
'Sub IIf(Condition As Boolean, TrueValue As Object, FalseValue As Object) As Object
' If Condition Then Return TrueValue Else Return FalseValue
'End Sub

Binary file not shown.

View File

@@ -88,6 +88,6 @@ ModuleClosedNodes6=
ModuleClosedNodes7=6,8,9,10,11 ModuleClosedNodes7=6,8,9,10,11
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=B4XMainPage,Class_Globals,30,0,C_Cliente,recalculoXcant,1300,0,C_Cliente,B4XPage_Appear,542,0,C_Cliente,LA_GPS_Click,1353,0,Tracker,StartFLP2,403,0,Tracker,StartFLPSmall,421,0,Tracker,CreateLocationRequest2,462,1,Tracker,CreateLocationRequestSmallD,453,1,C_Cliente,MejorarPrecisionGPS,1283,4,Tracker,CreateLocationRequest,440,0 NavigationStack=Tracker,StartFLPSmall,417,0,C_Principal,resdia_Click,2747,3,C_Cliente,Class_Globals,126,0,C_Cliente,InicializarLocalizacionMejorada,1391,0,Diseñador Visual,cliente.bal,-100,2,C_Cliente,HIST_Click,2829,0,C_historicobat,B4XPage_Created,52,0,C_historicobat,Class_Globals,0,0,C_historicobat,B4XPage_Appear,223,0,C_historicobat,CreateListItem,255,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=27,2,16,28,5,13,17,29,19,4,12,22 VisibleModules=27,2,16,28,5,13,17,29,19,4,10