fixed stat 4

This commit is contained in:
2026-10-13 17:34:33 +02:00
parent 22114963db
commit b2a2f56383
2 changed files with 30 additions and 12 deletions
+20 -2
View File
@@ -59,6 +59,12 @@ class MagoSalesStats
return "DATE_ADD($z, INTERVAL (" . (int)self::ZIBO_WEEK_END_DAYS . " - WEEKDAY($z)) DAY)";
}
/** Scadenza di testata (usata solo per ordini senza righe). */
public static function headerDue($a)
{
return "COALESCE(" . self::ziboDeadline($a) . ", " . self::clientDate($a) . ", $a.compulsory_delivery_date)";
}
/** Scadenza effettiva di una riga: fine settimana ZIBO, se manca la data cliente. */
public static function lineDue($a)
{
@@ -167,6 +173,18 @@ class MagoSalesStats
COALESCE(l.late_lines, 0) AS late_lines,
COALESCE(l.late_lines_client, 0) AS late_lines_client,
COALESCE(l.week_lines, 0) AS week_lines,
-- RITARDO calcolato sulle RIGHE: un ordine è in ritardo solo se ha almeno una riga aperta scaduta.
-- (Solo se l'ordine non ha righe si usa la data di testata.)
CASE WHEN o.cancelled = 0 AND o.delivered = 0 AND (
(COALESCE(l.lines_total, 0) > 0 AND l.late_lines > 0)
OR (COALESCE(l.lines_total, 0) = 0 AND " . self::headerDue('o') . " < CURDATE())
) THEN 1 ELSE 0 END AS is_late,
CASE WHEN o.cancelled = 0 AND o.delivered = 0 AND (
(COALESCE(l.lines_total, 0) > 0 AND l.late_lines_client > 0)
OR (COALESCE(l.lines_total, 0) = 0 AND " . self::clientDate('o') . " < CURDATE())
) THEN 1 ELSE 0 END AS is_late_client,
-- scadenza delle sole righe ancora aperte (per il grafico scadenze)
CASE WHEN COALESCE(l.lines_total, 0) > 0 THEN l.next_due ELSE " . self::headerDue('o') . " END AS open_due,
CASE
WHEN o.cancelled = 1 THEN 'annullato'
WHEN o.delivered = 1 THEN 'evaso'
@@ -250,8 +268,8 @@ class MagoSalesStats
'evaso' => "x.status = 'evaso'",
'annullato' => "x.status = 'annullato'",
'bloccato' => "x.status = 'bloccato'",
'ritardo' => "(x.status IN ('aperto','bloccato') AND x.due_date < CURDATE())",
'ritardo_cliente' => "(x.status IN ('aperto','bloccato') AND x.client_date < CURDATE())",
'ritardo' => "x.is_late = 1",
'ritardo_cliente' => "x.is_late_client = 1",
'settimana' => "(x.status IN ('aperto','bloccato') AND x.week_lines > 0)", // righe da consegnare questa settimana
'da_fatturare' => "(x.delivered = 1 AND x.invoiced = 0 AND x.cancelled = 0)",
'fatturato' => "x.invoiced = 1",