Fix/add data to orders script and fix other import errors
This commit is contained in:
@@ -39,7 +39,7 @@ CREATE TABLE products (
|
|||||||
tags TEXT,
|
tags TEXT,
|
||||||
moq INT DEFAULT 1,
|
moq INT DEFAULT 1,
|
||||||
uom INT DEFAULT 1,
|
uom INT DEFAULT 1,
|
||||||
rating TINYINT UNSIGNED DEFAULT 0,
|
rating DECIMAL(10,2) DEFAULT 0.00,
|
||||||
reviews INT UNSIGNED DEFAULT 0,
|
reviews INT UNSIGNED DEFAULT 0,
|
||||||
weight DECIMAL(10,3),
|
weight DECIMAL(10,3),
|
||||||
length DECIMAL(10,3),
|
length DECIMAL(10,3),
|
||||||
@@ -113,6 +113,7 @@ CREATE TABLE IF NOT EXISTS orders (
|
|||||||
tax DECIMAL(10,3) DEFAULT 0.000,
|
tax DECIMAL(10,3) DEFAULT 0.000,
|
||||||
tax_included TINYINT(1) DEFAULT 0,
|
tax_included TINYINT(1) DEFAULT 0,
|
||||||
shipping DECIMAL(10,3) DEFAULT 0.000,
|
shipping DECIMAL(10,3) DEFAULT 0.000,
|
||||||
|
costeach DECIMAL(10,3) DEFAULT 0.000,
|
||||||
customer VARCHAR(50) NOT NULL,
|
customer VARCHAR(50) NOT NULL,
|
||||||
customer_name VARCHAR(100),
|
customer_name VARCHAR(100),
|
||||||
status VARCHAR(20) DEFAULT 'pending',
|
status VARCHAR(20) DEFAULT 'pending',
|
||||||
|
|||||||
@@ -60,6 +60,14 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
PRIMARY KEY (order_id, pid)
|
PRIMARY KEY (order_id, pid)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
`);
|
`);
|
||||||
|
await localConnection.query(`
|
||||||
|
CREATE TABLE IF NOT EXISTS temp_order_costs (
|
||||||
|
order_id INT UNSIGNED NOT NULL,
|
||||||
|
pid INT UNSIGNED NOT NULL,
|
||||||
|
costeach DECIMAL(10,3) DEFAULT 0.000,
|
||||||
|
PRIMARY KEY (order_id, pid)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
`);
|
||||||
|
|
||||||
// Get column names from the local table
|
// Get column names from the local table
|
||||||
const [columns] = await localConnection.query(`
|
const [columns] = await localConnection.query(`
|
||||||
@@ -117,7 +125,7 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
oi.prod_itemnumber as SKU,
|
oi.prod_itemnumber as SKU,
|
||||||
oi.prod_price as price,
|
oi.prod_price as price,
|
||||||
oi.qty_ordered as quantity,
|
oi.qty_ordered as quantity,
|
||||||
COALESCE(oi.prod_price_reg - oi.prod_price, 0) * oi.qty_ordered as base_discount,
|
COALESCE(oi.prod_price_reg - oi.prod_price, 0) as base_discount,
|
||||||
oi.stamp as last_modified
|
oi.stamp as last_modified
|
||||||
FROM order_items oi
|
FROM order_items oi
|
||||||
USE INDEX (PRIMARY)
|
USE INDEX (PRIMARY)
|
||||||
@@ -271,6 +279,26 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get costeach values in batches
|
||||||
|
for (let i = 0; i < orderIds.length; i += 5000) {
|
||||||
|
const batchIds = orderIds.slice(i, i + 5000);
|
||||||
|
const [costs] = await prodConnection.query(`
|
||||||
|
SELECT orderid as order_id, pid, costeach
|
||||||
|
FROM order_costs
|
||||||
|
WHERE orderid IN (?)
|
||||||
|
`, [batchIds]);
|
||||||
|
|
||||||
|
if (costs.length > 0) {
|
||||||
|
const placeholders = costs.map(() => '(?, ?, ?)').join(",");
|
||||||
|
const values = costs.flatMap(c => [c.order_id, c.pid, c.costeach]);
|
||||||
|
await localConnection.query(`
|
||||||
|
INSERT INTO temp_order_costs (order_id, pid, costeach)
|
||||||
|
VALUES ${placeholders}
|
||||||
|
ON DUPLICATE KEY UPDATE costeach = VALUES(costeach)
|
||||||
|
`, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Now combine all the data and insert into orders table
|
// Now combine all the data and insert into orders table
|
||||||
let importedCount = 0;
|
let importedCount = 0;
|
||||||
|
|
||||||
@@ -302,18 +330,19 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
om.customer,
|
om.customer,
|
||||||
om.customer_name,
|
om.customer_name,
|
||||||
om.status,
|
om.status,
|
||||||
om.canceled
|
om.canceled,
|
||||||
|
COALESCE(tc.costeach, 0) as costeach
|
||||||
FROM temp_order_items oi
|
FROM temp_order_items oi
|
||||||
JOIN temp_order_meta om ON oi.order_id = om.order_id
|
JOIN temp_order_meta om ON oi.order_id = om.order_id
|
||||||
LEFT JOIN temp_order_discounts od ON oi.order_id = od.order_id AND oi.pid = od.pid
|
LEFT JOIN temp_order_discounts od ON oi.order_id = od.order_id AND oi.pid = od.pid
|
||||||
LEFT JOIN temp_order_taxes ot ON oi.order_id = ot.order_id AND oi.pid = ot.pid
|
LEFT JOIN temp_order_taxes ot ON oi.order_id = ot.order_id AND oi.pid = ot.pid
|
||||||
|
LEFT JOIN temp_order_costs tc ON oi.order_id = tc.order_id AND oi.pid = tc.pid
|
||||||
WHERE oi.order_id IN (?)
|
WHERE oi.order_id IN (?)
|
||||||
`, [batchIds]);
|
`, [batchIds]);
|
||||||
|
|
||||||
// Filter orders and track missing products - do this in a single pass
|
// Filter orders and track missing products - do this in a single pass
|
||||||
const validOrders = [];
|
const validOrders = [];
|
||||||
const values = [];
|
const values = [];
|
||||||
|
|
||||||
for (const order of orders) {
|
for (const order of orders) {
|
||||||
if (!existingPids.has(order.pid)) {
|
if (!existingPids.has(order.pid)) {
|
||||||
missingProducts.add(order.pid);
|
missingProducts.add(order.pid);
|
||||||
@@ -331,7 +360,7 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
|
|
||||||
// First check which orders exist and get their current values
|
// First check which orders exist and get their current values
|
||||||
const [existingOrders] = await localConnection.query(
|
const [existingOrders] = await localConnection.query(
|
||||||
`SELECT ${columnNames.join(',')} FROM orders WHERE (order_number, pid) IN (${validOrders.map(() => "(?,?)").join(",")})`,
|
`SELECT ${columnNames.join(",")} FROM orders WHERE (order_number, pid) IN (${validOrders.map(() => "(?,?)").join(",")})`,
|
||||||
validOrders.flatMap(o => [o.order_number, o.pid])
|
validOrders.flatMap(o => [o.order_number, o.pid])
|
||||||
);
|
);
|
||||||
const existingOrderMap = new Map(
|
const existingOrderMap = new Map(
|
||||||
@@ -347,13 +376,11 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
const hasChanges = columnNames.some(col => {
|
const hasChanges = columnNames.some(col => {
|
||||||
const newVal = order[col] ?? null;
|
const newVal = order[col] ?? null;
|
||||||
const oldVal = existing[col] ?? null;
|
const oldVal = existing[col] ?? null;
|
||||||
// Special handling for numbers to avoid type coercion issues
|
|
||||||
if (typeof newVal === 'number' && typeof oldVal === 'number') {
|
if (typeof newVal === 'number' && typeof oldVal === 'number') {
|
||||||
return Math.abs(newVal - oldVal) > 0.00001; // Allow for tiny floating point differences
|
return Math.abs(newVal - oldVal) > 0.00001; // Allow for tiny floating point differences
|
||||||
}
|
}
|
||||||
return newVal !== oldVal;
|
return newVal !== oldVal;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (hasChanges) {
|
if (hasChanges) {
|
||||||
acc.updates.push({
|
acc.updates.push({
|
||||||
order_number: order.order_number,
|
order_number: order.order_number,
|
||||||
@@ -367,7 +394,15 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
values: columnNames.map(col => order[col] ?? null)
|
values: columnNames.map(col => order[col] ?? null)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return acc;
|
} else {
|
||||||
|
acc.inserts.push({
|
||||||
|
order_number: order.order_number,
|
||||||
|
pid: order.pid,
|
||||||
|
values: columnNames.map(col => order[col] ?? null)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, { inserts: [], updates: [] });
|
||||||
|
|
||||||
// Handle inserts
|
// Handle inserts
|
||||||
if (insertsAndUpdates.inserts.length > 0) {
|
if (insertsAndUpdates.inserts.length > 0) {
|
||||||
@@ -427,6 +462,7 @@ async function importOrders(prodConnection, localConnection, incrementalUpdate =
|
|||||||
DROP TEMPORARY TABLE IF EXISTS temp_order_meta;
|
DROP TEMPORARY TABLE IF EXISTS temp_order_meta;
|
||||||
DROP TEMPORARY TABLE IF EXISTS temp_order_discounts;
|
DROP TEMPORARY TABLE IF EXISTS temp_order_discounts;
|
||||||
DROP TEMPORARY TABLE IF EXISTS temp_order_taxes;
|
DROP TEMPORARY TABLE IF EXISTS temp_order_taxes;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS temp_order_costs;
|
||||||
`);
|
`);
|
||||||
|
|
||||||
// Import missing products if any
|
// Import missing products if any
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user