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

54 lines
3 KiB
Transact-SQL
Raw Permalink 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.

-- Belgeden yeni belge açar. Backorder: talepten az yapılan satırların kalanı, aynı konumlarla; stok kontrolüyle Hazır/Bekleyen olur.
-- Return (İade): yapılan miktarlar lotlarıyla, kaynak ve hedef yer değiştirerek Taslak açılır. İkisi de bağları taşır.
CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferCopy]
@SourceId uniqueidentifier,
@Mode nvarchar(16),
@UserId uniqueidentifier = NULL,
@NewId uniqueidentifier OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @IsReturn bit = CASE WHEN @Mode = 'Return' THEN 1 ELSE 0 END;
DECLARE @Map TABLE (OldId uniqueidentifier PRIMARY KEY, NewId uniqueidentifier NOT NULL);
SET @NewId = NEWID();
INSERT INTO Stk_T_Transfer (Id, TenantId, BranchId, WarehouseId, OperationTypeId, OperationKind, PartnerId, SourceLocationId, DestinationLocationId,
ScheduledDate, SourceDocument, PurchaseOrderId, BackorderOfId, ReturnOfId, CarrierId, ResponsibleUserId, ProjectId, DeliveryPolicy,
Status, CreationTime, CreatorId, IsDeleted)
SELECT @NewId, t.TenantId, t.BranchId, t.WarehouseId, t.OperationTypeId, t.OperationKind, t.PartnerId,
CASE WHEN @IsReturn = 1 THEN t.DestinationLocationId ELSE t.SourceLocationId END,
CASE WHEN @IsReturn = 1 THEN t.SourceLocationId ELSE t.DestinationLocationId END,
CASE WHEN @IsReturn = 1 THEN GETUTCDATE() ELSE t.ScheduledDate END,
CASE WHEN @IsReturn = 1 THEN t.TransferNo ELSE t.SourceDocument END, t.PurchaseOrderId,
CASE WHEN @IsReturn = 1 THEN NULL ELSE @SourceId END, CASE WHEN @IsReturn = 1 THEN @SourceId END,
t.CarrierId, t.ResponsibleUserId, t.ProjectId, t.DeliveryPolicy,
'Draft', GETUTCDATE(), @UserId, 0
FROM Stk_T_Transfer t
WHERE t.Id = @SourceId;
INSERT INTO @Map (OldId, NewId)
SELECT Id, NEWID()
FROM Stk_T_TransferLine
WHERE TransferId = @SourceId AND IsDeleted = 0
AND ((@IsReturn = 1 AND Quantity > 0) OR (@IsReturn = 0 AND Quantity < DemandQuantity));
INSERT INTO Stk_T_TransferLine (Id, TenantId, TransferId, ProductId, Description, DemandQuantity, Quantity, UomId,
PurchaseOrderLineId, MaterialRequestItemId, CreationTime, CreatorId, IsDeleted)
SELECT m.NewId, l.TenantId, @NewId, l.ProductId, l.Description,
CASE WHEN @IsReturn = 1 THEN l.Quantity ELSE l.DemandQuantity - l.Quantity END, 0, l.UomId,
l.PurchaseOrderLineId, l.MaterialRequestItemId, GETUTCDATE(), @UserId, 0
FROM Stk_T_TransferLine l
INNER JOIN @Map m ON m.OldId = l.Id;
IF @IsReturn = 1
INSERT INTO Stk_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
SELECT NEWID(), z.TenantId, m.NewId, z.LotNo, z.Quantity, GETUTCDATE(), @UserId, 0
FROM Stk_T_TransferLineLot z
INNER JOIN @Map m ON m.OldId = z.TransferLineId
WHERE z.IsDeleted = 0;
EXEC Stk_P_TransferNumber @NewId;
IF @IsReturn = 0
EXEC Stk_P_TransferCheckAvailability @NewId;
EXEC Stk_P_TransferRecalc @NewId;
END