package queries // GetWholesaleCampaignVariantStockByProducts: // Returns per-product variant keys (ColorCode/ItemDim1Code/ItemDim3Code) and available stock qty. // We aggregate across warehouses/stores; semantics align with product-stock-query's "Kullanilabilir_Envanter". const GetWholesaleCampaignVariantStockByProducts = ` DECLARE @Codes NVARCHAR(MAX) = @p1; ;WITH INP AS ( -- SQL Server 2008 compatibility: string_split() does not exist. -- Split CSV via XML nodes(). SELECT LTRIM(RTRIM(X.C.value('.', 'NVARCHAR(50)'))) AS ItemCode FROM ( SELECT CAST('' + REPLACE(REPLACE(@Codes, '&', '&'), ',', '') + '' AS XML) AS XmlData ) D CROSS APPLY D.XmlData.nodes('/i') AS X(C) WHERE LTRIM(RTRIM(X.C.value('.', 'NVARCHAR(50)'))) <> '' ), VARIANT_MASTER AS ( SELECT V.ItemCode, LTRIM(RTRIM(ISNULL(V.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(V.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(V.ItemDim1Code,'')))) AS ItemDim1Code FROM prItemVariant V WITH(NOLOCK) JOIN INP ON INP.ItemCode = V.ItemCode WHERE V.ItemTypeCode = 1 AND LEN(V.ItemCode) = 13 GROUP BY V.ItemCode, V.ColorCode, V.ItemDim3Code ), VARIANT_STOCK AS ( SELECT S.ItemCode, LTRIM(RTRIM(ISNULL(S.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(S.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(S.ItemDim1Code,'')))) AS ItemDim1Code FROM trStock S WITH(NOLOCK) JOIN INP ON INP.ItemCode = S.ItemCode WHERE S.ItemTypeCode = 1 AND LEN(S.ItemCode) = 13 GROUP BY S.ItemCode, S.ColorCode, S.ItemDim3Code ), VARIANT AS ( SELECT X.ItemCode, X.ColorCode, X.ItemDim3Code, MAX(X.ItemDim1Code) AS ItemDim1Code FROM ( SELECT ItemCode, ColorCode, ItemDim3Code, ItemDim1Code FROM VARIANT_MASTER UNION ALL SELECT ItemCode, ColorCode, ItemDim3Code, ItemDim1Code FROM VARIANT_STOCK ) X GROUP BY X.ItemCode, X.ColorCode, X.ItemDim3Code ), STOCK AS ( SELECT S.ItemCode, LTRIM(RTRIM(ISNULL(S.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(S.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(S.ItemDim1Code,'')))) AS ItemDim1Code, SUM(S.In_Qty1 - S.Out_Qty1) AS InventoryQty1 FROM trStock S WITH(NOLOCK) JOIN INP ON INP.ItemCode = S.ItemCode WHERE S.ItemTypeCode = 1 AND LEN(S.ItemCode) = 13 GROUP BY S.ItemCode, S.ColorCode, S.ItemDim3Code ), PICK AS ( SELECT P.ItemCode, LTRIM(RTRIM(ISNULL(P.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(P.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(P.ItemDim1Code,'')))) AS ItemDim1Code, SUM(P.Qty1) AS PickingQty1 FROM PickingStates P JOIN INP ON INP.ItemCode = P.ItemCode WHERE P.ItemTypeCode = 1 AND LEN(P.ItemCode) = 13 GROUP BY P.ItemCode, P.ColorCode, P.ItemDim3Code ), RESERVE AS ( SELECT R.ItemCode, LTRIM(RTRIM(ISNULL(R.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(R.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(R.ItemDim1Code,'')))) AS ItemDim1Code, SUM(R.Qty1) AS ReserveQty1 FROM ReserveStates R JOIN INP ON INP.ItemCode = R.ItemCode WHERE R.ItemTypeCode = 1 AND LEN(R.ItemCode) = 13 GROUP BY R.ItemCode, R.ColorCode, R.ItemDim3Code ), DISP AS ( SELECT D.ItemCode, LTRIM(RTRIM(ISNULL(D.ColorCode,''))) AS ColorCode, LTRIM(RTRIM(ISNULL(D.ItemDim3Code,''))) AS ItemDim3Code, MAX(LTRIM(RTRIM(ISNULL(D.ItemDim1Code,'')))) AS ItemDim1Code, SUM(D.Qty1) AS DispOrderQty1 FROM DispOrderStates D JOIN INP ON INP.ItemCode = D.ItemCode WHERE D.ItemTypeCode = 1 AND LEN(D.ItemCode) = 13 GROUP BY D.ItemCode, D.ColorCode, D.ItemDim3Code ) SELECT V.ItemCode AS ItemCode, V.ColorCode AS ColorCode, V.ItemDim1Code AS ItemDim1Code, V.ItemDim3Code AS ItemDim3Code, CAST(ROUND( ISNULL(S.InventoryQty1,0) - ISNULL(PK.PickingQty1,0) - ISNULL(RS.ReserveQty1,0) - ISNULL(DP.DispOrderQty1,0), 2 ) AS FLOAT) AS StockQty FROM VARIANT V LEFT JOIN STOCK S ON S.ItemCode=V.ItemCode AND S.ColorCode=V.ColorCode AND S.ItemDim3Code=V.ItemDim3Code LEFT JOIN PICK PK ON PK.ItemCode=V.ItemCode AND PK.ColorCode=V.ColorCode AND PK.ItemDim3Code=V.ItemDim3Code LEFT JOIN RESERVE RS ON RS.ItemCode=V.ItemCode AND RS.ColorCode=V.ColorCode AND RS.ItemDim3Code=V.ItemDim3Code LEFT JOIN DISP DP ON DP.ItemCode=V.ItemCode AND DP.ColorCode=V.ColorCode AND DP.ItemDim3Code=V.ItemDim3Code ORDER BY V.ItemCode, V.ColorCode, V.ItemDim3Code; `