fixed stat 4
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -72,8 +72,8 @@ if ($action === 'data') {
|
||||
SUM(x.status = 'evaso') AS delivered,
|
||||
SUM(x.status = 'annullato') AS cancelled,
|
||||
SUM(x.status = 'bloccato') AS blocked,
|
||||
SUM(x.status IN ('aperto','bloccato') AND x.due_date < CURDATE()) AS late,
|
||||
SUM(x.status IN ('aperto','bloccato') AND x.client_date < CURDATE()) AS late_client,
|
||||
SUM(x.is_late) AS late,
|
||||
SUM(x.is_late_client) AS late_client,
|
||||
SUM(x.status IN ('aperto','bloccato') AND x.late_lines > 0 AND x.late_lines < x.open_lines) AS late_partial,
|
||||
SUM(CASE WHEN x.status IN ('aperto','bloccato') THEN x.late_lines ELSE 0 END) AS late_lines,
|
||||
SUM(x.status IN ('aperto','bloccato') AND x.week_lines > 0) AS week_orders,
|
||||
@@ -84,7 +84,7 @@ if ($action === 'data') {
|
||||
THEN DATEDIFF(x.due_date, x.order_date) END) AS avg_lead_days,
|
||||
COALESCE(SUM($val), 0) AS value_total,
|
||||
COALESCE(SUM(CASE WHEN x.status IN ('aperto','bloccato') THEN x.taxable_amount ELSE 0 END), 0) AS value_open,
|
||||
COALESCE(SUM(CASE WHEN x.status IN ('aperto','bloccato') AND x.due_date < CURDATE() THEN x.taxable_amount ELSE 0 END), 0) AS value_late,
|
||||
COALESCE(SUM(CASE WHEN x.is_late = 1 THEN x.taxable_amount ELSE 0 END), 0) AS value_late,
|
||||
COALESCE(SUM(CASE WHEN x.delivered = 1 AND x.invoiced = 0 AND x.cancelled = 0 THEN x.taxable_amount ELSE 0 END), 0) AS value_to_invoice,
|
||||
AVG(CASE WHEN x.status <> 'annullato' THEN x.taxable_amount END) AS value_avg,
|
||||
SUM(x.summary_tb_modified IS NULL) AS missing_amounts
|
||||
@@ -151,11 +151,11 @@ if ($action === 'data') {
|
||||
$dueBuckets = MagoSalesStats::fetchAllQ($pdo, "
|
||||
SELECT bucket, SUM(mv) AS n FROM (
|
||||
SELECT CASE
|
||||
WHEN x.due_date IS NULL THEN '6_senza'
|
||||
WHEN x.due_date < CURDATE() THEN '1_scaduti'
|
||||
WHEN YEARWEEK(x.due_date, 3) = YEARWEEK(CURDATE(), 3) THEN '2_settimana'
|
||||
WHEN YEARWEEK(x.due_date, 3) = YEARWEEK(CURDATE() + INTERVAL 7 DAY, 3) THEN '3_prossima'
|
||||
WHEN x.due_date <= CURDATE() + INTERVAL 30 DAY THEN '4_30gg'
|
||||
WHEN x.is_late = 1 THEN '1_scaduti'
|
||||
WHEN x.open_due IS NULL THEN '6_senza'
|
||||
WHEN YEARWEEK(x.open_due, 3) = YEARWEEK(CURDATE(), 3) THEN '2_settimana'
|
||||
WHEN YEARWEEK(x.open_due, 3) = YEARWEEK(CURDATE() + INTERVAL 7 DAY, 3) THEN '3_prossima'
|
||||
WHEN x.open_due <= CURDATE() + INTERVAL 30 DAY THEN '4_30gg'
|
||||
ELSE '5_oltre'
|
||||
END AS bucket,
|
||||
$m AS mv
|
||||
@@ -188,9 +188,9 @@ if ($action === 'data') {
|
||||
x.salesperson, x.area, x.status, x.invoiced, x.your_reference,
|
||||
x.taxable_amount, x.total_amount,
|
||||
x.zibo_date, x.client_date, x.open_lines, x.late_lines, x.late_lines_client, x.open_dates, x.week_lines,
|
||||
(x.status IN ('aperto','bloccato') AND x.client_date < CURDATE()) AS is_late_client,
|
||||
x.is_late_client,
|
||||
(x.summary_tb_modified IS NULL) AS no_amount,
|
||||
(x.status IN ('aperto','bloccato') AND x.due_date < CURDATE()) AS is_late
|
||||
x.is_late
|
||||
FROM $from
|
||||
WHERE $where
|
||||
ORDER BY x.order_date DESC, x.sale_ord_id DESC
|
||||
|
||||
Reference in New Issue
Block a user