sozsoft-platform/configs/seeds/sql/object/Mnt_P_WorkOrderMaterialAfterSave.sql

46 lines
2.2 KiB
MySQL
Raw Permalink Normal View History

2026-10-19 14:35:08 +00:00
CREATE OR ALTER PROCEDURE [dbo].[Mnt_P_WorkOrderMaterialAfterSave]
2026-10-18 21:22:40 +00:00
@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
2026-10-19 14:35:08 +00:00
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
2026-10-18 21:22:40 +00:00
WHERE m.Id = @Id AND m.IsDeleted = 0 AND m.ConsumptionTransferId IS NULL;
IF @Order IS NULL RETURN;
2026-10-19 14:35:08 +00:00
IF @Loc IS NOT NULL AND NOT EXISTS (SELECT 1 FROM Stk_T_Location
2026-10-18 21:22:40 +00:00
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
2026-10-19 14:35:08 +00:00
SELECT @StockLoc = LocationId, @OnHand = Quantity FROM Stk_T_Stock WHERE Id = @Stock AND IsDeleted = 0;
2026-10-18 21:22:40 +00:00
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
2026-10-19 14:35:08 +00:00
FROM Mnt_T_WorkOrderMaterial m
INNER JOIN Stk_T_Stock s ON s.Id = m.StockId
2026-10-18 21:22:40 +00:00
WHERE m.Id = @Id;
END
IF @Approved = 1
2026-10-19 14:35:08 +00:00
EXEC dbo.Mnt_P_WorkOrderConsume @Order, @UserId;
2026-10-18 21:22:40 +00:00
END
GO