From d3053d64173aa54597014c9118b800b076c436c6 Mon Sep 17 00:00:00 2001 From: giovanni Date: Tue, 28 Apr 2026 18:23:17 +0700 Subject: [PATCH] adjust query consolidate duplicate product warehouses --- .../main.go | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/cmd/consolidate-duplicate-product-warehouses/main.go b/cmd/consolidate-duplicate-product-warehouses/main.go index ba3f5462..e4c4cd81 100644 --- a/cmd/consolidate-duplicate-product-warehouses/main.go +++ b/cmd/consolidate-duplicate-product-warehouses/main.go @@ -132,9 +132,9 @@ WITH duplicates AS ( pw.project_flock_kandang_id, pw.id, pw.qty, - MIN(pw.id) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS survivor_id, - COUNT(*) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS duplicate_count, - SUM(pw.qty) OVER (PARTITION BY pw.warehouse_id, pw.product_id, pw.project_flock_kandang_id) AS total_qty + 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) AS duplicate_count, + SUM(pw.qty) OVER (PARTITION BY pw.warehouse_id, pw.product_id) AS total_qty FROM product_warehouses pw JOIN warehouses w ON w.id = pw.warehouse_id JOIN products p ON p.id = pw.product_id @@ -149,7 +149,7 @@ SELECT product_name, area_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, (SELECT qty FROM duplicates d2 WHERE d2.id = survivor_id LIMIT 1) AS survivor_qty, 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 FROM duplicates 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 `, filters) @@ -244,6 +244,19 @@ func applyConsolidation(ctx context.Context, db *gorm.DB, groups []duplicateGrou 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 res = tx.WithContext(ctx). Table("product_warehouses").