75 lines
3.5 KiB
SQL
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
|