49 lines
2.4 KiB
Transact-SQL
49 lines
2.4 KiB
Transact-SQL
-- Stoktan Lot Seçimi (Stk.TransferLineLotStock) satır kaydı: yazılan miktar varsa o, yoksa Seç işaretliyse lotun
|
||
-- eldeki miktarı atanır (ekranda Seç aynı değeri yazar); ikisi de yoksa lot satırdan çıkar. Batch kaydı her satırı ayrı ve
|
||
-- eşzamanlı istekle gönderir; aynı satırın lotları üst üste yazılmasın diye hareket satırı kilitlenip istekler sırayla işlenir.
|
||
CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferLineLotStockSave]
|
||
@Id nvarchar(80),
|
||
@IsSelected bit = NULL,
|
||
@SelectedQuantity decimal(18, 4) = NULL,
|
||
@LastModifierId uniqueidentifier = NULL
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
SET XACT_ABORT ON;
|
||
DECLARE @LineId uniqueidentifier = TRY_CAST(LEFT(@Id, 36) AS uniqueidentifier),
|
||
@StockId uniqueidentifier = TRY_CAST(SUBSTRING(@Id, 38, 36) AS uniqueidentifier),
|
||
@Tenant uniqueidentifier, @Doc uniqueidentifier, @Status nvarchar(16), @Lot nvarchar(64),
|
||
@OnHand decimal(18, 4), @Qty decimal(18, 4);
|
||
|
||
BEGIN TRAN;
|
||
SELECT @Tenant = l.TenantId, @Doc = l.TransferId
|
||
FROM Stk_T_TransferLine l WITH (UPDLOCK, HOLDLOCK)
|
||
WHERE l.Id = @LineId;
|
||
|
||
SELECT @Status = t.Status, @Lot = s.LotNo, @OnHand = dbo.Stk_F_UomConvert(s.Quantity, s.UomId, l.UomId)
|
||
FROM Stk_T_TransferLine l
|
||
INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId
|
||
INNER JOIN Stk_T_Stock s ON s.Id = @StockId AND s.LocationId = t.SourceLocationId AND s.ProductId = l.ProductId
|
||
WHERE l.Id = @LineId;
|
||
|
||
IF @Lot IS NULL THROW 50322, N'Lot, belgenin kaynak konumunda bulunamadı.', 1;
|
||
IF @Status IN ('Done', 'Cancelled') THROW 50313, N'Tamamlanmış ya da iptal edilmiş belgenin satırı değiştirilemez.', 1;
|
||
|
||
IF ISNULL(@SelectedQuantity, 0) > 0
|
||
SET @Qty = @SelectedQuantity;
|
||
ELSE IF @IsSelected = 1
|
||
SET @Qty = @OnHand;
|
||
ELSE
|
||
SET @Qty = 0;
|
||
|
||
IF @Qty > @OnHand THROW 50324, N'Seçilen miktar lotun eldeki miktarını aşamaz.', 1;
|
||
|
||
UPDATE Stk_T_TransferLineLot SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @LastModifierId
|
||
WHERE TransferLineId = @LineId AND LotNo = @Lot AND IsDeleted = 0;
|
||
IF @Qty > 0
|
||
INSERT INTO Stk_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
|
||
VALUES (NEWID(), @Tenant, @LineId, @Lot, @Qty, GETUTCDATE(), @LastModifierId, 0);
|
||
|
||
EXEC Stk_P_TransferRecalc @Doc;
|
||
COMMIT;
|
||
END
|