CREATE OR ALTER PROCEDURE [dbo].[Mnt_P_WorkOrderMaterialAfterSave] @Id uniqueidentifier, @UserId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; IF @Id IS NULL RETURN; -- Malzeme satırı ekipmanın departmanına bağlı bir iç konumdaki stok satırından (ürün + lot/seri) seçilir. Lookup bunu -- süzer, kayıt burada doğrulanır: ürün, lot ve birim stok satırından yazılır (formdaki kopya değil stok esastır), miktar -- eldeki miktarı aşamaz. İş emri departman onayını almışsa satır hemen Bakım Sarf Tüketimi teslimatına eklenir. DECLARE @Order uniqueidentifier, @Loc uniqueidentifier, @Stock uniqueidentifier, @Qty decimal(18, 4), @Dept uniqueidentifier, @Approved bit, @StockLoc uniqueidentifier, @OnHand decimal(18, 4); SELECT @Order = m.WorkOrderId, @Loc = m.LocationId, @Stock = m.StockId, @Qty = m.Quantity, @Dept = p.EquipmentDepartmentId, @Approved = CASE WHEN o.ApprovalStatus = N'Onaylandı' THEN 1 ELSE 0 END FROM Mnt_T_WorkOrderMaterial m INNER JOIN Mnt_T_WorkOrder o ON o.Id = m.WorkOrderId LEFT JOIN Stk_T_Product p ON p.Id = o.EquipmentId WHERE m.Id = @Id AND m.IsDeleted = 0 AND m.ConsumptionTransferId IS NULL; IF @Order IS NULL RETURN; IF @Loc IS NOT NULL AND NOT EXISTS (SELECT 1 FROM Stk_T_Location WHERE Id = @Loc AND LocationType = 'Internal' AND DepartmentId = @Dept) THROW 50409, N'Depo/konum ekipmanın departmanına ait bir iç konum olmalıdır.', 1; IF @Stock IS NOT NULL BEGIN SELECT @StockLoc = LocationId, @OnHand = Quantity FROM Stk_T_Stock WHERE Id = @Stock AND IsDeleted = 0; IF @StockLoc IS NULL OR @StockLoc <> @Loc THROW 50410, N'Seçilen ürün - lot/seri satırı seçilen depo/konumda değil.', 1; IF @Qty > @OnHand THROW 50411, N'Miktar seçilen lot/serinin eldeki miktarını aşamaz.', 1; UPDATE m SET ProductId = s.ProductId, LotNo = NULLIF(s.LotNo, ''), UomId = s.UomId FROM Mnt_T_WorkOrderMaterial m INNER JOIN Stk_T_Stock s ON s.Id = m.StockId WHERE m.Id = @Id; END IF @Approved = 1 EXEC dbo.Mnt_P_WorkOrderConsume @Order, @UserId; END GO