Merge branch 'fix/consolidate-pw' into 'development'

[FEAT][BE]: adjust query consolidate duplicate product warehouses

See merge request mbugroup/lti-api!491
This commit is contained in:
Giovanni Gabriel Septriadi
2026-04-28 11:26:03 +00:00
@@ -132,9 +132,9 @@ WITH duplicates AS (
pw.project_flock_kandang_id, pw.project_flock_kandang_id,
pw.id, pw.id,
pw.qty, pw.qty,
MIN(pw.id) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS survivor_id, MIN(pw.id) OVER (PARTITION BY pw.warehouse_id, pw.product_id) AS survivor_id,
COUNT(*) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS duplicate_count, COUNT(*) OVER (PARTITION BY pw.warehouse_id, pw.product_id) AS duplicate_count,
SUM(pw.qty) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS total_qty SUM(pw.qty) OVER (PARTITION BY pw.warehouse_id, pw.product_id) AS total_qty
FROM product_warehouses pw FROM product_warehouses pw
JOIN warehouses w ON w.id = pw.warehouse_id JOIN warehouses w ON w.id = pw.warehouse_id
JOIN products p ON p.id = pw.product_id JOIN products p ON p.id = pw.product_id
@@ -149,7 +149,7 @@ SELECT
product_name, product_name,
area_name, area_name,
location_name, location_name,
project_flock_kandang_id, (SELECT project_flock_kandang_id FROM duplicates d2 WHERE d2.id = survivor_id LIMIT 1) AS project_flock_kandang_id,
survivor_id, survivor_id,
(SELECT qty FROM duplicates d2 WHERE d2.id = survivor_id LIMIT 1) AS survivor_qty, (SELECT qty FROM duplicates d2 WHERE d2.id = survivor_id LIMIT 1) AS survivor_qty,
duplicate_count - 1 AS absorbed_count, duplicate_count - 1 AS absorbed_count,
@@ -157,7 +157,7 @@ SELECT
STRING_AGG(id::text, ', ' ORDER BY id::text) FILTER (WHERE id <> survivor_id) AS absorbed_ids STRING_AGG(id::text, ', ' ORDER BY id::text) FILTER (WHERE id <> survivor_id) AS absorbed_ids
FROM duplicates FROM duplicates
WHERE duplicate_count > 1 WHERE duplicate_count > 1
GROUP BY warehouse_id, warehouse_name, product_id, product_name, area_name, location_name, project_flock_kandang_id, survivor_id, total_qty, duplicate_count GROUP BY warehouse_id, warehouse_name, product_id, product_name, area_name, location_name, survivor_id, total_qty, duplicate_count
ORDER BY area_name, location_name, warehouse_name, product_name ORDER BY area_name, location_name, warehouse_name, product_name
`, filters) `, filters)
@@ -244,6 +244,19 @@ func applyConsolidation(ctx context.Context, db *gorm.DB, groups []duplicateGrou
return fmt.Errorf("update survivor qty: %w", res.Error) return fmt.Errorf("update survivor qty: %w", res.Error)
} }
// Clear project_flock_kandang_id for LOKASI warehouse survivors
if err := tx.WithContext(ctx).Exec(`
UPDATE product_warehouses pw
SET project_flock_kandang_id = NULL
FROM warehouses w
WHERE pw.warehouse_id = w.id
AND pw.id = ?
AND UPPER(w.type) = 'LOKASI'
AND pw.project_flock_kandang_id IS NOT NULL
`, group.SurvivorID).Error; err != nil {
return fmt.Errorf("clear project_flock_kandang_id survivor %d: %w", group.SurvivorID, err)
}
// Delete absorbed product_warehouses // Delete absorbed product_warehouses
res = tx.WithContext(ctx). res = tx.WithContext(ctx).
Table("product_warehouses"). Table("product_warehouses").