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

44 lines
2.3 KiB
MySQL
Raw Normal View History

2026-10-12 21:43:05 +00:00
-- Lot/Seri Oluştur: stoğa giren satırın lot dağılımı olmayan kısmı için numaratörden lot (Inventory.LotNumber, tek lot) ya da
-- seri (Inventory.SerialNumber, birim başına bir seri) numarası üretir. Stoktan çıkan satırda lot stoktan seçilir (Otomatik Ata).
CREATE OR ALTER PROCEDURE [dbo].[Inv_P_TransferLineLotGenerate]
@Id uniqueidentifier,
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Tenant uniqueidentifier, @Method nvarchar(16), @Quantity decimal(18, 4), @Remain decimal(18, 4), @SrcInternal bit, @No nvarchar(128);
SELECT @Tenant = l.TenantId, @Method = CASE WHEN p.TrackInventory = 1 THEN p.TrackingMethod END,
@Quantity = CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END,
@SrcInternal = CASE WHEN src.LocationType = 'Internal' THEN 1 ELSE 0 END
FROM Inv_T_TransferLine l
INNER JOIN Inv_T_Transfer t ON t.Id = l.TransferId
INNER JOIN Inv_T_Product p ON p.Id = l.ProductId
LEFT JOIN Inv_T_Location src ON src.Id = t.SourceLocationId
WHERE l.Id = @Id;
IF ISNULL(@Method, '') NOT IN ('Lot', 'Serial') THROW 50314, N'Ürün lot/seri numarasıyla takip edilmiyor.', 1;
IF @SrcInternal = 1 THROW 50315, N'Stoktan çıkan satırda lot oluşturulmaz; Otomatik Ata ile stoktaki lotlar seçilir.', 1;
SET @Remain = @Quantity - ISNULL((SELECT SUM(Quantity) FROM Inv_T_TransferLineLot WHERE TransferLineId = @Id AND IsDeleted = 0), 0);
IF @Remain <= 0
RETURN;
IF @Method = 'Lot'
BEGIN
EXEC Adm_P_SequenceNext 'Inventory.LotNumber', @Tenant, @No OUTPUT;
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
VALUES (NEWID(), @Tenant, @Id, LEFT(@No, 64), @Remain, GETUTCDATE(), @UserId, 0);
RETURN;
END
IF @Remain <> FLOOR(@Remain) THROW 50316, N'Seri numaralı üründe miktar tam sayı olmalıdır.', 1;
WHILE @Remain > 0
BEGIN
EXEC Adm_P_SequenceNext 'Inventory.SerialNumber', @Tenant, @No OUTPUT;
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
VALUES (NEWID(), @Tenant, @Id, LEFT(@No, 64), 1, GETUTCDATE(), @UserId, 0);
SET @Remain = @Remain - 1;
END
END