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)'))) <> '' ), 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 S.ItemCode AS ItemCode, S.ColorCode AS ColorCode, S.ItemDim1Code AS ItemDim1Code, S.ItemDim3Code AS ItemDim3Code, CAST(ROUND( S.InventoryQty1 - ISNULL(PK.PickingQty1,0) - ISNULL(RS.ReserveQty1,0) - ISNULL(DP.DispOrderQty1,0), 2 ) AS FLOAT) AS StockQty FROM STOCK S LEFT JOIN PICK PK ON PK.ItemCode=S.ItemCode AND PK.ColorCode=S.ColorCode AND PK.ItemDim3Code=S.ItemDim3Code LEFT JOIN RESERVE RS ON RS.ItemCode=S.ItemCode AND RS.ColorCode=S.ColorCode AND RS.ItemDim3Code=S.ItemDim3Code LEFT JOIN DISP DP ON DP.ItemCode=S.ItemCode AND DP.ColorCode=S.ColorCode AND DP.ItemDim3Code=S.ItemDim3Code WHERE (S.InventoryQty1 - ISNULL(PK.PickingQty1,0) - ISNULL(RS.ReserveQty1,0) - ISNULL(DP.DispOrderQty1,0)) <> 0 ORDER BY S.ItemCode, S.ColorCode, S.ItemDim3Code; `