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