From 7bd9ec9ef8a5f926bd7676cc1fff339bfd3a9dc3 Mon Sep 17 00:00:00 2001 From: giovanni Date: Tue, 7 Apr 2026 13:58:01 +0700 Subject: [PATCH] adjust level 2 cmd adjust quantity product warehouse from purchase --- .../main.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cmd/adjust-quantity-product-warehouse-from-purchase/main.go b/cmd/adjust-quantity-product-warehouse-from-purchase/main.go index 2d7ab9fb..11b7bbb2 100644 --- a/cmd/adjust-quantity-product-warehouse-from-purchase/main.go +++ b/cmd/adjust-quantity-product-warehouse-from-purchase/main.go @@ -43,7 +43,7 @@ func main() { &level, "level", levelAllNoFlagProducts, - "CLI level: 1=all products without flags, 2=specific product name (without flags), 3=specific product warehouse id", + "CLI level: 1=all products without flags, 2=specific product name (with flags), 3=specific product warehouse id", ) flag.StringVar(&productName, "product-name", "", "Product name (required for level 2)") flag.UintVar(&productWarehouseID, "product-warehouse-id", 0, "Product warehouse id (required for level 3)") @@ -181,7 +181,7 @@ func loadTargets( case levelAllNoFlagProducts: return loadTargetsLevel1ByProductWithoutFlags(ctx, db) case levelProductName: - return loadTargetsLevel2ByProductWarehouseWithoutFlags(ctx, db, productName) + return loadTargetsLevel2ByProductWarehouseWithFlags(ctx, db, productName) case levelProductWarehouse: return loadTargetByProductWarehouseID(ctx, db, productWarehouseID) default: @@ -214,7 +214,7 @@ func loadTargetsLevel1ByProductWithoutFlags(ctx context.Context, db *gorm.DB) ([ return rows, nil } -func loadTargetsLevel2ByProductWarehouseWithoutFlags( +func loadTargetsLevel2ByProductWarehouseWithFlags( ctx context.Context, db *gorm.DB, productName string, @@ -230,10 +230,16 @@ func loadTargetsLevel2ByProductWarehouseWithoutFlags( COALESCE(SUM(pi.total_qty), 0) AS computed_qty `). Joins("JOIN products p ON p.id = pw.product_id"). - Joins("LEFT JOIN flags f ON f.flagable_id = p.id AND f.flagable_type = ?", entity.FlagableTypeProduct). Joins("LEFT JOIN purchase_items pi ON pi.product_warehouse_id = pw.id"). Where("p.deleted_at IS NULL"). - Where("f.id IS NULL"). + Where(` + EXISTS ( + SELECT 1 + FROM flags f + WHERE f.flagable_id = p.id + AND f.flagable_type = ? + ) + `, entity.FlagableTypeProduct). Where("LOWER(p.name) = LOWER(?)", productName). Group("pw.id, pw.product_id, p.name, pw.qty"). Order("pw.id ASC"). @@ -278,7 +284,7 @@ func levelLabel(level int) string { case levelAllNoFlagProducts: return "all products without flags (source: purchase_items by product_warehouse_id)" case levelProductName: - return "specific product name without flags (source: purchase_items by product_warehouse_id)" + return "specific product name with flags (source: purchase_items by product_warehouse_id)" case levelProductWarehouse: return "specific product_warehouse_id (source: purchase_items by product_warehouse_id)" default: