From 2d0089dc5214d0847e8183b3e4345bd7bd746cc8 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 1 Feb 2025 11:03:42 -0500 Subject: [PATCH] Incremental import order fixes --- inventory-server/scripts/import-from-prod.js | 6 +++--- inventory-server/scripts/import/orders.js | 21 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/inventory-server/scripts/import-from-prod.js b/inventory-server/scripts/import-from-prod.js index f5bc680..67b6678 100644 --- a/inventory-server/scripts/import-from-prod.js +++ b/inventory-server/scripts/import-from-prod.js @@ -10,9 +10,9 @@ const importPurchaseOrders = require('./import/purchase-orders'); dotenv.config({ path: path.join(__dirname, "../.env") }); // Constants to control which imports run -const IMPORT_CATEGORIES = false; -const IMPORT_PRODUCTS = false; -const IMPORT_ORDERS = false; +const IMPORT_CATEGORIES = true; +const IMPORT_PRODUCTS = true; +const IMPORT_ORDERS = true; const IMPORT_PURCHASE_ORDERS = true; // Add flag for incremental updates diff --git a/inventory-server/scripts/import/orders.js b/inventory-server/scripts/import/orders.js index 442d107..58d9329 100644 --- a/inventory-server/scripts/import/orders.js +++ b/inventory-server/scripts/import/orders.js @@ -188,10 +188,14 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate = // Get unique order IDs const orderIds = [...new Set(orderItems.map(item => item.order_id))]; + console.log('Total unique order IDs:', orderIds.length); // Get order metadata in batches for (let i = 0; i < orderIds.length; i += 5000) { const batchIds = orderIds.slice(i, i + 5000); + console.log(`Processing batch ${i/5000 + 1}, size: ${batchIds.length}`); + console.log('Sample of batch IDs:', batchIds.slice(0, 5)); + const [orders] = await prodConnection.query(` SELECT o.order_id, @@ -204,6 +208,14 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate = LEFT JOIN users u ON o.order_cid = u.cid WHERE o.order_id IN (?) `, [batchIds]); + + console.log(`Retrieved ${orders.length} orders for ${batchIds.length} IDs`); + const duplicates = orders.filter((order, index, self) => + self.findIndex(o => o.order_id === order.order_id) !== index + ); + if (duplicates.length > 0) { + console.log('Found duplicates:', duplicates); + } const placeholders = orders.map(() => "(?, ?, ?, ?, ?, ?)").join(","); const values = orders.flatMap(order => [ @@ -212,6 +224,12 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate = await localConnection.query(` INSERT INTO temp_order_meta VALUES ${placeholders} + ON DUPLICATE KEY UPDATE + date = VALUES(date), + customer = VALUES(customer), + customer_name = VALUES(customer_name), + status = VALUES(status), + canceled = VALUES(canceled) `, values); outputProgress({ @@ -239,6 +257,8 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate = await localConnection.query(` INSERT INTO temp_order_discounts VALUES ${placeholders} + ON DUPLICATE KEY UPDATE + discount = VALUES(discount) `, values); } } @@ -274,6 +294,7 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate = const placeholders = Array(uniqueTaxes.size).fill("(?, ?, ?)").join(","); await localConnection.query(` INSERT INTO temp_order_taxes VALUES ${placeholders} + ON DUPLICATE KEY UPDATE tax = VALUES(tax) `, values); } }