sozsoft-platform/configs/seeds/sql/object/Stk_P_TransferRecalc.sql
2026-10-19 17:35:08 +03:00

52 lines
3.7 KiB
Transact-SQL
Raw Permalink 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.

-- Belgenin ağırlığını (ürün ağırlığı × miktar, ürün biriminde) ve yazdırılan satır özetini yeniler; satırın takip yöntemini
-- (Lot/Serial, envanter takibi kapalıysa boş) üründen, lotun stoktan seçilip seçilmeyeceğini (kaynak iç konum) belgeden yazar —
-- satırın Lot/Seri butonları ve açılan lot ekranı bu iki kolona göre belirlenir. Lot/seri takipli satırda lot girilmişse yapılan
-- miktar lot toplamıdır (lot seçmek o kadar teslim etmektir) ve seçilen lotlar satırın LotNumbers kolonunda listelenir.
-- Özet satırı: [Referans] Ürün: talep / yapılan birim · lot (miktar), ...
CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferRecalc]
@Id uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
UPDATE l SET TrackingMethod = CASE WHEN p.TrackInventory = 1 AND p.TrackingMethod IN ('Lot', 'Serial') THEN p.TrackingMethod END,
LotFromStock = CASE WHEN src.LocationType = 'Internal' THEN 1 ELSE 0 END
FROM Stk_T_TransferLine l
INNER JOIN Stk_T_Product p ON p.Id = l.ProductId
INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId
LEFT JOIN Stk_T_Location src ON src.Id = t.SourceLocationId
WHERE l.TransferId = @Id AND l.IsDeleted = 0;
UPDATE l SET Quantity = CASE WHEN t.Status IN ('Done', 'Cancelled') OR z.Quantity IS NULL THEN l.Quantity ELSE z.Quantity END,
LotNumbers = CASE WHEN l.TrackingMethod = 'Serial' THEN z.Serials ELSE z.Lots END
FROM Stk_T_TransferLine l
INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId
OUTER APPLY (SELECT SUM(lt.Quantity) AS Quantity,
STRING_AGG(lt.LotNo, ', ') WITHIN GROUP (ORDER BY lt.LotNo) AS Serials,
STRING_AGG(CONCAT(lt.LotNo, ' (', FORMAT(lt.Quantity, '0.####'), ')'), ', ') WITHIN GROUP (ORDER BY lt.LotNo) AS Lots
FROM Stk_T_TransferLineLot lt
WHERE lt.TransferLineId = l.Id AND lt.IsDeleted = 0) z
WHERE l.TransferId = @Id AND l.IsDeleted = 0 AND l.TrackingMethod IN ('Lot', 'Serial');
UPDATE t SET
Weight = ISNULL((SELECT SUM(dbo.Stk_F_UomConvert(CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END, l.UomId, p.UomId) * ISNULL(p.Weight, 0))
FROM Stk_T_TransferLine l
INNER JOIN Stk_T_Product p ON p.Id = l.ProductId
WHERE l.TransferId = @Id AND l.IsDeleted = 0), 0),
LineSummary = (SELECT STRING_AGG(x.Txt, CHAR(10)) WITHIN GROUP (ORDER BY x.CreationTime, x.Id)
FROM (SELECT l.Id, l.CreationTime,
CONCAT(CASE WHEN ISNULL(p.InternalReference, '') = '' THEN '' ELSE CONCAT('[', p.InternalReference, '] ') END, p.Name, ': ',
FORMAT(l.DemandQuantity, '0.####'), ' / ', FORMAT(l.Quantity, '0.####'), ' ', l.UomId,
CASE WHEN z.Txt IS NULL THEN '' ELSE CONCAT(N' · ', z.Txt) END) AS Txt
FROM Stk_T_TransferLine l
INNER JOIN Stk_T_Product p ON p.Id = l.ProductId
OUTER APPLY (SELECT STRING_AGG(CONCAT(lt.LotNo, ' (', FORMAT(lt.Quantity, '0.####'), ')'), ', ') AS Txt
FROM Stk_T_TransferLineLot lt
WHERE lt.TransferLineId = l.Id AND lt.IsDeleted = 0) z
WHERE l.TransferId = @Id AND l.IsDeleted = 0) x)
FROM Stk_T_Transfer t
WHERE t.Id = @Id;
-- Satır eklenince, silinince ya da belge tamamlanınca talep kaleminin planlanmış payı değişir.
EXEC Prc_P_MaterialRequestItemSync @Id;
END