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