43 lines
2.3 KiB
Transact-SQL
43 lines
2.3 KiB
Transact-SQL
-- Lot/Seri Oluştur: stoğa giren satırın lot dağılımı olmayan kısmı için numaratörden lot (Stk.LotNumber, tek lot) ya da
|
||
-- seri (Stk.SerialNumber, birim başına bir seri) numarası üretir. Stoktan çıkan satırda lot stoktan seçilir (Otomatik Ata).
|
||
CREATE OR ALTER PROCEDURE [dbo].[Stk_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 Stk_T_TransferLine l
|
||
INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId
|
||
INNER JOIN Stk_T_Product p ON p.Id = l.ProductId
|
||
LEFT JOIN Stk_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 Stk_T_TransferLineLot WHERE TransferLineId = @Id AND IsDeleted = 0), 0);
|
||
IF @Remain <= 0
|
||
RETURN;
|
||
|
||
IF @Method = 'Lot'
|
||
BEGIN
|
||
EXEC Adm_P_SequenceNext 'Stk.LotNumber', @Tenant, @No OUTPUT;
|
||
INSERT INTO Stk_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 'Stk.SerialNumber', @Tenant, @No OUTPUT;
|
||
INSERT INTO Stk_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
|