sozsoft-platform/configs/seeds/sql/object/Inv_P_TransferRecalc.sql

53 lines
3.7 KiB
MySQL
Raw Normal View History

2026-10-12 21:43:05 +00:00
-- 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].[Inv_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 Inv_T_TransferLine l
INNER JOIN Inv_T_Product p ON p.Id = l.ProductId
INNER JOIN Inv_T_Transfer t ON t.Id = l.TransferId
LEFT JOIN Inv_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 Inv_T_TransferLine l
INNER JOIN Inv_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 Inv_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.Inv_F_UomConvert(CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END, l.UomId, p.UomId) * ISNULL(p.Weight, 0))
FROM Inv_T_TransferLine l
INNER JOIN Inv_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 Inv_T_TransferLine l
INNER JOIN Inv_T_Product p ON p.Id = l.ProductId
OUTER APPLY (SELECT STRING_AGG(CONCAT(lt.LotNo, ' (', FORMAT(lt.Quantity, '0.####'), ')'), ', ') AS Txt
FROM Inv_T_TransferLineLot lt
WHERE lt.TransferLineId = l.Id AND lt.IsDeleted = 0) z
WHERE l.TransferId = @Id AND l.IsDeleted = 0) x)
FROM Inv_T_Transfer t
WHERE t.Id = @Id;
2026-10-14 09:07:11 +00:00
-- Satır eklenince, silinince ya da belge tamamlanınca talep kaleminin planlanmış payı değişir.
EXEC Prc_P_MaterialRequestItemSync @Id;
2026-10-12 21:43:05 +00:00
END