44 lines
2.3 KiB
MySQL
44 lines
2.3 KiB
MySQL
|
|
-- 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
|