Files
bssapp/svc/queries/orderinventory.go
2026-02-11 17:46:22 +03:00

110 lines
4.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package queries
// 🔹 Sipariş ekranı stok kontrolü (ürün + renk + 2. renk + beden)
// 🔧 Renk1 boşsa (aksesuar vb.) renksiz stokları da çeker
const GetOrderInventory = `
DECLARE @ProductCode NVARCHAR(30) = @p1;
DECLARE @ColorCode NVARCHAR(30) = @p2;
DECLARE @ColorCode2 NVARCHAR(30) = @p3;
-- 🔧 Normalize giriş parametreleri
SET @ColorCode = LTRIM(RTRIM(ISNULL(@ColorCode, '')));
SET @ColorCode2 = LTRIM(RTRIM(ISNULL(@ColorCode2, '')));
IF @ColorCode = ''
BEGIN
SET @ColorCode = '';
END
IF @ColorCode2 = ''
BEGIN
SET @ColorCode2 = NULL;
END
------------------------------------------------------------
-- 🔹 Ana sorgu
------------------------------------------------------------
SELECT
Inventory.ItemCode AS Urun_Kodu,
Inventory.ColorCode AS Renk_Kodu,
ISNULL((
SELECT TOP 1 ColorDescription
FROM cdColorDesc WITH(NOLOCK)
WHERE cdColorDesc.ColorCode = Inventory.ColorCode
AND cdColorDesc.LangCode = N'TR'
), '') AS Renk_Aciklamasi,
-- ✅ NULL bedenleri boş string olarak getir
ISNULL(Inventory.ItemDim1Code, '') AS Beden,
ISNULL(Inventory.ItemDim2Code, '') AS Yaka,
ROUND(
SUM(Inventory.InventoryQty1) -
(SUM(Inventory.ReserveQty1) + SUM(Inventory.DispOrderQty1) + SUM(Inventory.PickingQty1)),
cdUnitOfMeasure.RoundDigit
) AS Kullanilabilir_Envanter
FROM cdItem WITH (NOLOCK)
JOIN cdUnitOfMeasure WITH (NOLOCK)
ON cdItem.UnitOfMeasureCode1 = cdUnitOfMeasure.UnitOfMeasureCode
JOIN (
SELECT
CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code,
SUM(CASE WHEN SourceTable = 'PickingStates' THEN Qty1 ELSE 0 END) AS PickingQty1,
SUM(CASE WHEN SourceTable = 'ReserveStates' THEN Qty1 ELSE 0 END) AS ReserveQty1,
SUM(CASE WHEN SourceTable = 'DispOrderStates' THEN Qty1 ELSE 0 END) AS DispOrderQty1,
SUM(CASE WHEN SourceTable = 'trStock' THEN (In_Qty1 - Out_Qty1) ELSE 0 END) AS InventoryQty1
FROM (
SELECT 'PickingStates' AS SourceTable, CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code,
Qty1, 0 AS In_Qty1, 0 AS Out_Qty1
FROM PickingStates
UNION ALL
SELECT 'ReserveStates', CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code,
Qty1, 0, 0
FROM ReserveStates
UNION ALL
SELECT 'DispOrderStates', CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code,
Qty1, 0, 0
FROM DispOrderStates
UNION ALL
SELECT 'trStock', CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code,
0, SUM(In_Qty1), SUM(Out_Qty1)
FROM trStock WITH (NOLOCK)
GROUP BY CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code
) AS SourceData
GROUP BY CompanyCode, OfficeCode, StoreTypeCode, StoreCode, WarehouseCode,
ItemTypeCode, ItemCode, ColorCode, ItemDim1Code, ItemDim2Code, ItemDim3Code
) AS Inventory
ON cdItem.ItemTypeCode = Inventory.ItemTypeCode
AND cdItem.ItemCode = Inventory.ItemCode
LEFT JOIN ProductAttributesFilter
ON ProductAttributesFilter.ItemCode = Inventory.ItemCode
WHERE
Inventory.ItemTypeCode IN (1)
AND Inventory.WarehouseCode IN ('1-0-12','1-0-21','1-0-10','1-0-2','1-1-3','1-2-4','1-2-5')
AND cdItem.IsBlocked = 0
AND Inventory.ItemCode = @ProductCode
AND (
-- 🔹 Eğer renk girilmişse o renk; boşsa renksiz stokları getir
(LTRIM(RTRIM(@ColorCode)) <> '' AND Inventory.ColorCode = @ColorCode)
OR (LTRIM(RTRIM(@ColorCode)) = '' AND (Inventory.ColorCode IS NULL OR LTRIM(RTRIM(Inventory.ColorCode)) = ''))
)
AND (
-- 🔹 2. renk sadece doluysa filtrelensin
@ColorCode2 IS NULL
OR Inventory.ItemDim2Code = @ColorCode2
)
GROUP BY
Inventory.ItemCode,
Inventory.ColorCode,
ISNULL(Inventory.ItemDim1Code, ''), -- ✅ NULL bedenleri boş string olarak gruplar
ISNULL(Inventory.ItemDim2Code, ''), -- ✅ NULL yakaları boş string olarak gruplar
cdUnitOfMeasure.RoundDigit;
`