This commit is contained in:
seb
2026-10-25 17:13:32 +01:00
parent 53f1b24ec0
commit 5fd7f3228c

View File

@@ -53,20 +53,28 @@ const SQL_SHIPPED_QTY_SQLITE = `
WHERE m_s.company_id = @companyId
AND m_s."type" = 'shipment'
AND COALESCE(ss.state, 'new') != 'cancelled'
AND m_s."number" >= (@orderNumber || @shipmentPrefix)
AND m_s."number" < (@orderNumber || @shipmentPrefix || char(127))
AND m_s."number" NOT LIKE '%#cancelled#%'
AND (
ss.order_id = @manifestId
OR ss.order_number = @orderNumber
OR m_s."number" LIKE @orderNumber || @shipmentPrefix || '%'
)
`;
const SQL_SHIPPED_QTY_MSSQL = `
SELECT COALESCE(SUM(ma_s.amount), 0) AS shipped_quantity
FROM manifest m_s
JOIN manifestarticle ma_s ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss ON ss.manifest_id = m_s.id
FROM manifest m_s WITH (NOLOCK)
JOIN manifestarticle ma_s WITH (NOLOCK) ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss WITH (NOLOCK) ON ss.manifest_id = m_s.id
WHERE m_s.company_id = @companyId
AND m_s.[type] = 'shipment'
AND ISNULL(ss.state, 'new') != 'cancelled'
AND m_s.[number] >= (@orderNumber + @shipmentPrefix)
AND m_s.[number] < (@orderNumber + @shipmentPrefix + NCHAR(127))
AND m_s.[number] NOT LIKE '%#cancelled#%'
AND (
ss.order_id = @manifestId
OR ss.order_number = @orderNumber
OR m_s.[number] LIKE @orderNumber + @shipmentPrefix + '%'
)
`;
const SQL_CUSTOMER_NAME_SQLITE = `
@@ -180,6 +188,7 @@ export async function syncOrderSummary(runner, { companyId, manifestId, orderNum
const payRes = await runner.query(SQL_PAYMENT_TOTAL, { manifestId: orderId });
const shipRes = await runner.query(isSqlite ? SQL_SHIPPED_QTY_SQLITE : SQL_SHIPPED_QTY_MSSQL, {
companyId,
manifestId: orderId,
orderNumber: num,
shipmentPrefix,
});
@@ -237,32 +246,32 @@ export async function rebuildOrderSummaries(runner, companyId) {
WITH
order_articles AS (
SELECT
manifest_id,
ma.manifest_id,
COUNT(*) AS positions,
SUM(CASE WHEN shippable = 1 THEN amount ELSE 0 END) AS ordered_quantity,
SUM(amount * (net * (1.0 - rebate / 100.0)) * (1.0 + taxrate / 100.0)) AS gross_total
FROM manifestarticle
GROUP BY manifest_id
SUM(CASE WHEN ma.shippable = 1 THEN ma.amount ELSE 0 END) AS ordered_quantity,
SUM(ma.amount * (ma.net * (1.0 - ma.rebate / 100.0)) * (1.0 + ma.taxrate / 100.0)) AS gross_total
FROM manifestarticle ma
JOIN manifest m ON m.id = ma.manifest_id AND m.company_id = @companyId AND m."type" = 'order'
GROUP BY ma.manifest_id
),
order_payments AS (
SELECT
manifest_id,
SUM(amount) AS paid_total
FROM payment
GROUP BY manifest_id
p.manifest_id,
SUM(p.amount) AS paid_total
FROM payment p
JOIN manifest m ON m.id = p.manifest_id AND m.company_id = @companyId AND m."type" = 'order'
GROUP BY p.manifest_id
),
shipment_totals AS (
SELECT
SUBSTR(m_s."number", 1, INSTR(m_s."number", @shipmentPrefix) - 1) AS order_number,
ss.order_id,
SUM(ma_s.amount) AS shipped_quantity
FROM manifest m_s
JOIN manifestarticle ma_s ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss ON ss.manifest_id = m_s.id
WHERE m_s.company_id = @companyId
AND m_s."type" = 'shipment'
FROM shipmentsummary ss
JOIN manifestarticle ma_s ON ma_s.manifest_id = ss.manifest_id
WHERE ss.company_id = @companyId
AND COALESCE(ss.state, 'new') != 'cancelled'
AND INSTR(m_s."number", @shipmentPrefix) > 0
GROUP BY SUBSTR(m_s."number", 1, INSTR(m_s."number", @shipmentPrefix) - 1)
AND ss.order_id IS NOT NULL
GROUP BY ss.order_id
)
INSERT INTO ordersummary (
company_id, manifest_id, order_number, order_date, created_at,
@@ -288,7 +297,7 @@ export async function rebuildOrderSummaries(runner, companyId) {
LEFT JOIN entity e ON e.id = m.entity_id
LEFT JOIN order_articles oa ON oa.manifest_id = m.id
LEFT JOIN order_payments op ON op.manifest_id = m.id
LEFT JOIN shipment_totals st ON st.order_number = m."number"
LEFT JOIN shipment_totals st ON st.order_id = m.id
WHERE m.company_id = @companyId AND m."type" = 'order'
ON CONFLICT(manifest_id) DO UPDATE SET
order_number = excluded.order_number,
@@ -311,32 +320,32 @@ export async function rebuildOrderSummaries(runner, companyId) {
WITH
order_articles AS (
SELECT
manifest_id,
ma.manifest_id,
COUNT(*) AS positions,
SUM(CASE WHEN shippable = 1 THEN amount ELSE 0 END) AS ordered_quantity,
SUM(amount * (net * (1.0 - rebate / 100.0)) * (1.0 + taxrate / 100.0)) AS gross_total
FROM manifestarticle
GROUP BY manifest_id
SUM(CASE WHEN ma.shippable = 1 THEN ma.amount ELSE 0 END) AS ordered_quantity,
SUM(ma.amount * (ma.net * (1.0 - ma.rebate / 100.0)) * (1.0 + ma.taxrate / 100.0)) AS gross_total
FROM manifestarticle ma WITH (NOLOCK)
JOIN manifest m WITH (NOLOCK) ON m.id = ma.manifest_id AND m.company_id = @companyId AND m.[type] = 'order'
GROUP BY ma.manifest_id
),
order_payments AS (
SELECT
manifest_id,
SUM(amount) AS paid_total
FROM payment
GROUP BY manifest_id
p.manifest_id,
SUM(p.amount) AS paid_total
FROM payment p WITH (NOLOCK)
JOIN manifest m WITH (NOLOCK) ON m.id = p.manifest_id AND m.company_id = @companyId AND m.[type] = 'order'
GROUP BY p.manifest_id
),
shipment_totals AS (
SELECT
SUBSTRING(m_s.[number], 1, CHARINDEX(@shipmentPrefix, m_s.[number]) - 1) AS order_number,
ss.order_id,
SUM(ma_s.amount) AS shipped_quantity
FROM manifest m_s
JOIN manifestarticle ma_s ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss ON ss.manifest_id = m_s.id
WHERE m_s.company_id = @companyId
AND m_s.[type] = 'shipment'
FROM shipmentsummary ss WITH (NOLOCK)
JOIN manifestarticle ma_s WITH (NOLOCK) ON ma_s.manifest_id = ss.manifest_id
WHERE ss.company_id = @companyId
AND ISNULL(ss.state, 'new') != 'cancelled'
AND CHARINDEX(@shipmentPrefix, m_s.[number]) > 0
GROUP BY SUBSTRING(m_s.[number], 1, CHARINDEX(@shipmentPrefix, m_s.[number]) - 1)
AND ss.order_id IS NOT NULL
GROUP BY ss.order_id
)
INSERT INTO ordersummary (
company_id, manifest_id, order_number, order_date, created_at,
@@ -358,11 +367,11 @@ export async function rebuildOrderSummaries(runner, companyId) {
ROUND(COALESCE(st.shipped_quantity, 0), 3) AS shipped_quantity,
CASE WHEN ABS(COALESCE(oa.gross_total, 0)) < 0.01 OR ABS(COALESCE(op.paid_total, 0) - oa.gross_total) < 0.01 THEN 1 ELSE 0 END AS is_paid,
CASE WHEN COALESCE(oa.ordered_quantity, 0) > 0 AND ABS(COALESCE(st.shipped_quantity, 0) - oa.ordered_quantity) < 0.001 THEN 1 ELSE 0 END AS is_shipped
FROM manifest m
LEFT JOIN entity e ON e.id = m.entity_id
FROM manifest m WITH (NOLOCK)
LEFT JOIN entity e WITH (NOLOCK) ON e.id = m.entity_id
LEFT JOIN order_articles oa ON oa.manifest_id = m.id
LEFT JOIN order_payments op ON op.manifest_id = m.id
LEFT JOIN shipment_totals st ON st.order_number = m.[number]
LEFT JOIN shipment_totals st ON st.order_id = m.id
WHERE m.company_id = @companyId AND m.[type] = 'order';
`;
await runner.query(sqlRebuildMssql, { companyId, shipmentPrefix });