sozsoft-platform/configs/seeds/sql/object/Mm_P_WorkOrderMaterialAfterSave.sql
2026-10-19 00:22:40 +03:00

45 lines
2.2 KiB
Transact-SQL
Raw 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.

CREATE OR ALTER PROCEDURE [dbo].[Mm_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 Mm_T_WorkOrderMaterial m
INNER JOIN Mm_T_WorkOrder o ON o.Id = m.WorkOrderId
LEFT JOIN Inv_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 Inv_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 Inv_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 Mm_T_WorkOrderMaterial m
INNER JOIN Inv_T_Stock s ON s.Id = m.StockId
WHERE m.Id = @Id;
END
IF @Approved = 1
EXEC dbo.Mm_P_WorkOrderConsume @Order, @UserId;
END
GO