Fix/add data to products script

This commit is contained in:
2025-01-31 18:44:11 -05:00
parent d57239c40c
commit e77b488cd4

View File

@@ -2,13 +2,16 @@ const { outputProgress, formatElapsedTime, estimateRemaining, calculateRate } =
// Utility functions // Utility functions
const imageUrlBase = 'https://sbing.com/i/products/0000/'; const imageUrlBase = 'https://sbing.com/i/products/0000/';
const getImageUrls = (pid) => { const getImageUrls = (pid, iid = 1) => {
const paddedPid = pid.toString().padStart(6, '0'); const paddedPid = pid.toString().padStart(6, '0');
const basePath = `${imageUrlBase}${paddedPid.slice(0, 3)}/${pid}`; // Use padded PID only for the first 3 digits
const prefix = paddedPid.slice(0, 3);
// Use the actual pid for the rest of the URL
const basePath = `${imageUrlBase}${prefix}/${pid}`;
return { return {
image: `${basePath}-t-`, image: `${basePath}-t-${iid}.jpg`,
image_175: `${basePath}-175x175-`, image_175: `${basePath}-175x175-${iid}.jpg`,
image_full: `${basePath}-o-` image_full: `${basePath}-o-${iid}.jpg`
}; };
}; };
@@ -118,12 +121,11 @@ async function materializeCalculations(prodConnection, localConnection) {
p.pid, p.pid,
COALESCE(pcp.price_each, 0) as price, COALESCE(pcp.price_each, 0) as price,
COALESCE(p.sellingprice, 0) AS regular_price, COALESCE(p.sellingprice, 0) AS regular_price,
COALESCE( CASE
(SELECT ROUND(AVG(costeach), 5) WHEN EXISTS (SELECT 1 FROM product_inventory WHERE pid = p.pid AND count > 0)
FROM product_inventory THEN (SELECT ROUND(AVG(costeach), 5) FROM product_inventory WHERE pid = p.pid AND count > 0)
WHERE pid = p.pid ELSE (SELECT costeach FROM product_inventory WHERE pid = p.pid ORDER BY daterec DESC LIMIT 1)
AND COUNT > 0), 0 END AS cost_price
) AS cost_price
FROM products p FROM products p
LEFT JOIN product_current_prices pcp ON p.pid = pcp.pid LEFT JOIN product_current_prices pcp ON p.pid = pcp.pid
WHERE pcp.active = 1 WHERE pcp.active = 1
@@ -256,6 +258,13 @@ async function importProducts(prodConnection, localConnection, incrementalUpdate
line VARCHAR(100), line VARCHAR(100),
subline VARCHAR(100), subline VARCHAR(100),
artist VARCHAR(100), artist VARCHAR(100),
landing_cost_price DECIMAL(10,2) DEFAULT NULL,
permalink VARCHAR(255) DEFAULT NULL,
options TEXT DEFAULT NULL,
tags TEXT DEFAULT NULL,
uom VARCHAR(50) DEFAULT NULL,
baskets INT DEFAULT 0,
notifies INT DEFAULT 0,
moq INT, moq INT,
rating TINYINT UNSIGNED, rating TINYINT UNSIGNED,
reviews INT UNSIGNED, reviews INT UNSIGNED,
@@ -286,7 +295,14 @@ async function importProducts(prodConnection, localConnection, incrementalUpdate
p.harmonized_tariff_code, p.harmonized_tariff_code,
p.stamp AS updated_at, p.stamp AS updated_at,
CASE WHEN si.show + si.buyable > 0 THEN 1 ELSE 0 END AS visible, CASE WHEN si.show + si.buyable > 0 THEN 1 ELSE 0 END AS visible,
CASE WHEN p.reorder >= 0 THEN 1 ELSE 0 END AS replenishable, CASE
WHEN p.reorder < 0 THEN 0
WHEN (
((p.datein = '0000-00-00 00:00:00' OR p.datein <= DATE_SUB(NOW(), INTERVAL 5 YEAR))
AND (p.date_refill = '0000-00-00 00:00:00' OR p.date_refill <= DATE_SUB(NOW(), INTERVAL 5 YEAR)))
) THEN 0
ELSE 1
END AS replenishable,
s.companyname AS vendor, s.companyname AS vendor,
CASE WHEN s.companyname = 'Notions' CASE WHEN s.companyname = 'Notions'
THEN sid.notions_itemnumber THEN sid.notions_itemnumber
@@ -297,6 +313,13 @@ async function importProducts(prodConnection, localConnection, incrementalUpdate
pc2.name AS line, pc2.name AS line,
pc3.name AS subline, pc3.name AS subline,
pc4.name AS artist, pc4.name AS artist,
NULL AS landing_cost_price,
CONCAT('https://www.acherryontop.com/shop/product/', p.pid) AS permalink,
NULL AS options,
NULL AS tags,
NULL AS uom,
(SELECT COUNT(*) FROM mybasket mb WHERE mb.item = p.pid AND mb.qty > 0) AS baskets,
(SELECT COUNT(*) FROM product_notify pn WHERE pn.pid = p.pid) AS notifies,
COALESCE(CASE COALESCE(CASE
WHEN sid.supplier_id = 92 THEN sid.notions_qty_per_unit WHEN sid.supplier_id = 92 THEN sid.notions_qty_per_unit
ELSE sid.supplier_qty_per_unit ELSE sid.supplier_qty_per_unit
@@ -310,7 +333,8 @@ async function importProducts(prodConnection, localConnection, incrementalUpdate
p.totalsold AS total_sold, p.totalsold AS total_sold,
p.country_of_origin, p.country_of_origin,
pls.date_sold as date_last_sold, pls.date_sold as date_last_sold,
GROUP_CONCAT(DISTINCT pci.cat_id) as category_ids GROUP_CONCAT(DISTINCT pci.cat_id) as category_ids,
true // needs_update
FROM products p FROM products p
LEFT JOIN shop_inventory si ON p.pid = si.pid AND si.store = 0 LEFT JOIN shop_inventory si ON p.pid = si.pid AND si.store = 0
LEFT JOIN supplier_item_data sid ON p.pid = sid.pid LEFT JOIN supplier_item_data sid ON p.pid = sid.pid
@@ -362,6 +386,13 @@ async function importProducts(prodConnection, localConnection, incrementalUpdate
row.line, row.line,
row.subline, row.subline,
row.artist, row.artist,
row.landing_cost_price,
row.permalink,
row.options,
row.tags,
row.uom,
row.baskets,
row.notifies,
row.moq, row.moq,
row.rating, row.rating,
row.reviews, row.reviews,
@@ -655,16 +686,25 @@ async function importMissingProducts(prodConnection, localConnection, missingPid
COALESCE(pnb.inventory, 0) as notions_inv_count, COALESCE(pnb.inventory, 0) as notions_inv_count,
COALESCE(pcp.price_each, 0) as price, COALESCE(pcp.price_each, 0) as price,
COALESCE(p.sellingprice, 0) AS regular_price, COALESCE(p.sellingprice, 0) AS regular_price,
COALESCE((SELECT ROUND(AVG(costeach), 5) CASE
FROM product_inventory WHEN EXISTS (SELECT 1 FROM product_inventory WHERE pid = p.pid AND count > 0)
WHERE pid = p.pid THEN (SELECT ROUND(AVG(costeach), 5) FROM product_inventory WHERE pid = p.pid AND count > 0)
AND COUNT > 0), 0) AS cost_price, ELSE (SELECT costeach FROM product_inventory WHERE pid = p.pid ORDER BY daterec DESC LIMIT 1)
END AS cost_price,
NULL AS landing_cost_price, NULL AS landing_cost_price,
p.upc AS barcode, p.upc AS barcode,
p.harmonized_tariff_code, p.harmonized_tariff_code,
p.stamp AS updated_at, p.stamp AS updated_at,
CASE WHEN si.show + si.buyable > 0 THEN 1 ELSE 0 END AS visible, CASE WHEN si.show + si.buyable > 0 THEN 1 ELSE 0 END AS visible,
CASE WHEN p.reorder >= 0 THEN 1 ELSE 0 END AS replenishable, CASE
WHEN p.reorder < 0 THEN 0
WHEN (
(IFNULL(pls.date_sold, '0000-00-00') = '0000-00-00' OR pls.date_sold <= DATE_SUB(CURDATE(), INTERVAL 5 YEAR))
OR (p.datein = '0000-00-00 00:00:00' OR p.datein <= DATE_SUB(NOW(), INTERVAL 5 YEAR))
OR (p.date_refill = '0000-00-00 00:00:00' OR p.date_refill <= DATE_SUB(NOW(), INTERVAL 5 YEAR))
) THEN 0
ELSE 1
END AS replenishable,
s.companyname AS vendor, s.companyname AS vendor,
CASE WHEN s.companyname = 'Notions' THEN sid.notions_itemnumber ELSE sid.supplier_itemnumber END AS vendor_reference, CASE WHEN s.companyname = 'Notions' THEN sid.notions_itemnumber ELSE sid.supplier_itemnumber END AS vendor_reference,
sid.notions_itemnumber AS notions_reference, sid.notions_itemnumber AS notions_reference,