deliveries
This commit is contained in:
@@ -61,12 +61,22 @@ const (
|
|||||||
SUM(CASE WHEN c.orderstatus = 'cancelled' THEN 1 ELSE 0 END) AS deliveriescancelled,
|
SUM(CASE WHEN c.orderstatus = 'cancelled' THEN 1 ELSE 0 END) AS deliveriescancelled,
|
||||||
SUM(CASE WHEN c.paymenttype = 64 THEN c.deliveryamt ELSE 0 END) AS paylater,
|
SUM(CASE WHEN c.paymenttype = 64 THEN c.deliveryamt ELSE 0 END) AS paylater,
|
||||||
SUM(CASE WHEN c.paymenttype = 43 THEN c.deliveryamt ELSE 0 END) AS payondelivery,
|
SUM(CASE WHEN c.paymenttype = 43 THEN c.deliveryamt ELSE 0 END) AS payondelivery,
|
||||||
-- Cast before summing: both are TEXT columns.
|
-- Guarded cast: both are TEXT columns holding whatever was written to them.
|
||||||
|
--
|
||||||
|
-- Summed raw this is "function sum(text) does not exist". Casting them
|
||||||
|
-- unconditionally is not enough either: the rider summary then answered
|
||||||
|
-- "invalid input syntax for type numeric: null" on production 2026-09-05,
|
||||||
|
-- because some rows hold the four-character string "null" rather than an
|
||||||
|
-- empty one. NULLIF caught the empty case and not that one.
|
||||||
|
--
|
||||||
|
-- So only a value that IS a number is cast; everything else scores 0. That
|
||||||
|
-- covers the empty string, the literal "null", and any future junk, without
|
||||||
|
-- one bad row aborting the whole statement.
|
||||||
-- Raw, this is "function sum(text) does not exist" and the endpoint 500s on
|
-- Raw, this is "function sum(text) does not exist" and the endpoint 500s on
|
||||||
-- every call — verified on production 2026-09-04. Same defect as the rider
|
-- every call — verified on production 2026-09-04. Same defect as the rider
|
||||||
-- summary above, which is the other place these two columns are added up.
|
-- summary above, which is the other place these two columns are added up.
|
||||||
ROUND(SUM(COALESCE(NULLIF(c.kms, '')::numeric, 0)), 2) AS kms,
|
ROUND(SUM(CASE WHEN c.kms ~ '^[0-9]+([.][0-9]+)?$' THEN c.kms::numeric ELSE 0 END), 2) AS kms,
|
||||||
ROUND(SUM(COALESCE(NULLIF(c.actualkms, '')::numeric, 0)), 2) AS actualkms,
|
ROUND(SUM(CASE WHEN c.actualkms ~ '^[0-9]+([.][0-9]+)?$' THEN c.actualkms::numeric ELSE 0 END), 2) AS actualkms,
|
||||||
SUM(c.deliveryamt) AS charges
|
SUM(c.deliveryamt) AS charges
|
||||||
FROM
|
FROM
|
||||||
tenants b
|
tenants b
|
||||||
@@ -92,8 +102,8 @@ const (
|
|||||||
-- NULLIF handles the empty string, which is what an unridden job carries
|
-- NULLIF handles the empty string, which is what an unridden job carries
|
||||||
-- and what ::numeric would choke on; a value that is not a number at all
|
-- and what ::numeric would choke on; a value that is not a number at all
|
||||||
-- would still raise, but nothing writes one.
|
-- would still raise, but nothing writes one.
|
||||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN COALESCE(NULLIF(b.actualkms, '')::numeric, 0) ELSE 0 END) AS actualkms,
|
SUM(CASE WHEN b.orderstatus = 'delivered' THEN CASE WHEN b.actualkms ~ '^[0-9]+([.][0-9]+)?$' THEN b.actualkms::numeric ELSE 0 END ELSE 0 END) AS actualkms,
|
||||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN COALESCE(NULLIF(b.kms, '')::numeric, 0) ELSE 0 END) AS kms,
|
SUM(CASE WHEN b.orderstatus = 'delivered' THEN CASE WHEN b.kms ~ '^[0-9]+([.][0-9]+)?$' THEN b.kms::numeric ELSE 0 END ELSE 0 END) AS kms,
|
||||||
SUM(CASE WHEN b.paymenttype = 64 THEN b.deliveryamt ELSE 0 END) AS paylater,
|
SUM(CASE WHEN b.paymenttype = 64 THEN b.deliveryamt ELSE 0 END) AS paylater,
|
||||||
SUM(CASE WHEN b.paymenttype = 43 THEN b.deliveryamt ELSE 0 END) AS payondelivery,
|
SUM(CASE WHEN b.paymenttype = 43 THEN b.deliveryamt ELSE 0 END) AS payondelivery,
|
||||||
SUM(CASE WHEN b.orderstatus = 'delivered' THEN b.deliveryamt ELSE 0 END) AS deliveryamt
|
SUM(CASE WHEN b.orderstatus = 'delivered' THEN b.deliveryamt ELSE 0 END) AS deliveryamt
|
||||||
|
|||||||
Reference in New Issue
Block a user