Files
PowderCoatingLogix/fix-inventory-categories.sql
T
2026-04-23 21:38:24 -04:00

75 lines
3.5 KiB
SQL

-- =============================================================================
-- fix-inventory-categories.sql
-- Links inventory items that have a Category string but no InventoryCategoryId.
-- This affects items imported via CSV before the category fix was applied.
-- Safe to run multiple times (only touches items with InventoryCategoryId IS NULL).
-- Run against: PowderCoatingDb
-- =============================================================================
-- STEP 1: Preview what will be updated (run this first, review before proceeding)
SELECT
ii.Id,
ii.SKU,
ii.Name,
ii.CompanyId,
ii.Category AS CurrentCategory,
cat.DisplayName AS ResolvedTo,
cat.CategoryCode,
cat.IsCoating
FROM InventoryItems ii
JOIN InventoryCategoryLookups cat
ON cat.CompanyId = ii.CompanyId
AND cat.IsDeleted = 0
AND ii.IsDeleted = 0
AND ii.InventoryCategoryId IS NULL
AND (
ii.Category = cat.DisplayName
OR ii.Category = cat.CategoryCode
OR (cat.CategoryCode = 'POWDER' AND ii.Category IN ('Powder Coatings','Powder Coating','Powders','Powder'))
OR (cat.CategoryCode = 'PRIMER' AND ii.Category IN ('Primers','Primer'))
OR (cat.CategoryCode = 'CLEANER' AND ii.Category IN ('Cleaners','Cleaner'))
OR (cat.CategoryCode = 'MASKING' AND ii.Category IN ('Masking','Masking Tape','Masking Supplies'))
OR (cat.CategoryCode = 'ABRASIVE' AND ii.Category IN ('Abrasive','Abrasives','Blast Media','Abrasive Media'))
OR (cat.CategoryCode = 'CHEMICAL' AND ii.Category IN ('Chemicals','Chemical'))
OR (cat.CategoryCode = 'CONSUMABLE' AND ii.Category IN ('Consumable','Consumables'))
OR (cat.CategoryCode = 'TOOL' AND ii.Category IN ('Tools','Tool','Tools & Equipment','Equipment'))
OR (cat.CategoryCode = 'OTHER' AND ii.Category IN ('General','Other'))
)
ORDER BY ii.CompanyId, ii.Id
-- STEP 2: Apply the fix (run after reviewing Step 1)
UPDATE ii
SET
ii.InventoryCategoryId = cat.Id,
ii.Category = cat.DisplayName,
ii.UpdatedAt = GETDATE()
FROM InventoryItems ii
JOIN InventoryCategoryLookups cat
ON cat.CompanyId = ii.CompanyId
AND cat.IsDeleted = 0
AND ii.IsDeleted = 0
AND ii.InventoryCategoryId IS NULL
AND (
ii.Category = cat.DisplayName
OR ii.Category = cat.CategoryCode
OR (cat.CategoryCode = 'POWDER' AND ii.Category IN ('Powder Coatings','Powder Coating','Powders','Powder'))
OR (cat.CategoryCode = 'PRIMER' AND ii.Category IN ('Primers','Primer'))
OR (cat.CategoryCode = 'CLEANER' AND ii.Category IN ('Cleaners','Cleaner'))
OR (cat.CategoryCode = 'MASKING' AND ii.Category IN ('Masking','Masking Tape','Masking Supplies'))
OR (cat.CategoryCode = 'ABRASIVE' AND ii.Category IN ('Abrasive','Abrasives','Blast Media','Abrasive Media'))
OR (cat.CategoryCode = 'CHEMICAL' AND ii.Category IN ('Chemicals','Chemical'))
OR (cat.CategoryCode = 'CONSUMABLE' AND ii.Category IN ('Consumable','Consumables'))
OR (cat.CategoryCode = 'TOOL' AND ii.Category IN ('Tools','Tool','Tools & Equipment','Equipment'))
OR (cat.CategoryCode = 'OTHER' AND ii.Category IN ('General','Other'))
)
-- STEP 3: Check for any remaining unmatched items (need manual review in the UI)
SELECT Id, SKU, Name, CompanyId, Category
FROM InventoryItems
WHERE IsDeleted = 0
AND InventoryCategoryId IS NULL
AND Category IS NOT NULL
ORDER BY CompanyId, Category