sozsoft-platform/configs/seeds/sql/object/Stk_P_TransferLineLotStockSave.sql
2026-10-19 17:35:08 +03:00

49 lines
2.4 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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