46 lines
2.2 KiB
MySQL
46 lines
2.2 KiB
MySQL
|
|
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
|