50 lines
2.4 KiB
MySQL
50 lines
2.4 KiB
MySQL
|
|
-- Stoktan Lot Seçimi (App.Inventory.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].[Inv_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 Inv_T_TransferLine l WITH (UPDLOCK, HOLDLOCK)
|
|||
|
|
WHERE l.Id = @LineId;
|
|||
|
|
|
|||
|
|
SELECT @Status = t.Status, @Lot = s.LotNo, @OnHand = dbo.Inv_F_UomConvert(s.Quantity, s.UomId, l.UomId)
|
|||
|
|
FROM Inv_T_TransferLine l
|
|||
|
|
INNER JOIN Inv_T_Transfer t ON t.Id = l.TransferId
|
|||
|
|
INNER JOIN Inv_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 Inv_T_TransferLineLot SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @LastModifierId
|
|||
|
|
WHERE TransferLineId = @LineId AND LotNo = @Lot AND IsDeleted = 0;
|
|||
|
|
IF @Qty > 0
|
|||
|
|
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
|
|||
|
|
VALUES (NEWID(), @Tenant, @LineId, @Lot, @Qty, GETUTCDATE(), @LastModifierId, 0);
|
|||
|
|
|
|||
|
|
EXEC Inv_P_TransferRecalc @Doc;
|
|||
|
|
COMMIT;
|
|||
|
|
END
|