41 lines
2.3 KiB
MySQL
41 lines
2.3 KiB
MySQL
|
|
-- Otomatik Ata: stoktan çıkan satırın lot dağılımını kaynak konumun stoğundan ilk giren ilk çıkar (InDate) sırasıyla yeniden kurar.
|
|||
|
|
-- Stok yetmezse karşılanabilen kadar atanır; eksik Tamamla'da bildirilir.
|
|||
|
|
CREATE OR ALTER PROCEDURE [dbo].[Inv_P_TransferLineLotAssign]
|
|||
|
|
@Id uniqueidentifier,
|
|||
|
|
@UserId uniqueidentifier = NULL
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
DECLARE @Tenant uniqueidentifier, @Method nvarchar(16), @Src uniqueidentifier, @SrcInternal bit, @ProductId uniqueidentifier,
|
|||
|
|
@LineUom nvarchar(64), @ProductUom nvarchar(64), @Need decimal(18, 4);
|
|||
|
|
|
|||
|
|
SELECT @Tenant = l.TenantId, @Method = CASE WHEN p.TrackInventory = 1 THEN p.TrackingMethod END, @Src = t.SourceLocationId,
|
|||
|
|
@SrcInternal = CASE WHEN src.LocationType = 'Internal' THEN 1 ELSE 0 END, @ProductId = l.ProductId,
|
|||
|
|
@LineUom = l.UomId, @ProductUom = p.UomId,
|
|||
|
|
@Need = dbo.Inv_F_UomConvert(CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END, l.UomId, p.UomId)
|
|||
|
|
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 ISNULL(@SrcInternal, 0) = 0 THROW 50317, N'Otomatik atama yalnız stoktan çıkan satırda yapılır.', 1;
|
|||
|
|
|
|||
|
|
UPDATE Inv_T_TransferLineLot SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @UserId
|
|||
|
|
WHERE TransferLineId = @Id AND IsDeleted = 0;
|
|||
|
|
|
|||
|
|
WITH s AS (
|
|||
|
|
SELECT LotNo, Quantity,
|
|||
|
|
SUM(Quantity) OVER (ORDER BY InDate, LotNo ROWS UNBOUNDED PRECEDING) - Quantity AS Before
|
|||
|
|
FROM Inv_T_Stock
|
|||
|
|
WHERE LocationId = @Src AND ProductId = @ProductId AND LotNo <> '' AND Quantity > 0
|
|||
|
|
AND (TenantId = @Tenant OR (TenantId IS NULL AND @Tenant IS NULL)))
|
|||
|
|
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
|
|||
|
|
SELECT NEWID(), @Tenant, @Id, s.LotNo,
|
|||
|
|
dbo.Inv_F_UomConvert(CASE WHEN s.Quantity < @Need - s.Before THEN s.Quantity ELSE @Need - s.Before END, @ProductUom, @LineUom),
|
|||
|
|
GETUTCDATE(), @UserId, 0
|
|||
|
|
FROM s
|
|||
|
|
WHERE s.Before < @Need;
|
|||
|
|
END
|