sozsoft-platform/configs/seeds/sql/object/Stk_P_TransferLineLotStockSave.sql

50 lines
2.4 KiB
MySQL
Raw Permalink Normal View History

2026-10-19 14:35:08 +00:00
-- Stoktan Lot Seçimi (Stk.TransferLineLotStock) satır kaydı: yazılan miktar varsa o, yoksa Seç işaretliyse lotun
2026-10-12 21:43:05 +00:00
-- 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.
2026-10-19 14:35:08 +00:00
CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferLineLotStockSave]
2026-10-12 21:43:05 +00:00
@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
2026-10-19 14:35:08 +00:00
FROM Stk_T_TransferLine l WITH (UPDLOCK, HOLDLOCK)
2026-10-12 21:43:05 +00:00
WHERE l.Id = @LineId;
2026-10-19 14:35:08 +00:00
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
2026-10-12 21:43:05 +00:00
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;
2026-10-19 14:35:08 +00:00
UPDATE Stk_T_TransferLineLot SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @LastModifierId
2026-10-12 21:43:05 +00:00
WHERE TransferLineId = @LineId AND LotNo = @Lot AND IsDeleted = 0;
IF @Qty > 0
2026-10-19 14:35:08 +00:00
INSERT INTO Stk_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
2026-10-12 21:43:05 +00:00
VALUES (NEWID(), @Tenant, @LineId, @Lot, @Qty, GETUTCDATE(), @LastModifierId, 0);
2026-10-19 14:35:08 +00:00
EXEC Stk_P_TransferRecalc @Doc;
2026-10-12 21:43:05 +00:00
COMMIT;
END