diff --git a/src/store/order/syncSummary.js b/src/store/order/syncSummary.js index f5f5ec3..72268ca 100644 --- a/src/store/order/syncSummary.js +++ b/src/store/order/syncSummary.js @@ -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 });