2026-10-12 21:43:05 +00:00
|
|
|
|
-- Belgeden yeni belge açar. Backorder: talepten az yapılan satırların kalanı, aynı konumlarla; stok kontrolüyle Hazır/Bekleyen olur.
|
2026-10-14 19:26:03 +00:00
|
|
|
|
-- Return (İade): yapılan miktarlar lotlarıyla, kaynak ve hedef yer değiştirerek Taslak açılır. İkisi de bağları taşır.
|
2026-10-12 21:43:05 +00:00
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[Inv_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 Inv_T_Transfer (Id, TenantId, BranchId, WarehouseId, OperationTypeId, OperationKind, PartnerId, SourceLocationId, DestinationLocationId,
|
|
|
|
|
|
ScheduledDate, SourceDocument, PurchaseOrderId, BackorderOfId, ReturnOfId, CarrierId, ResponsibleUserId, ProjectId, DeliveryPolicy,
|
2026-10-14 19:26:03 +00:00
|
|
|
|
Status, CreationTime, CreatorId, IsDeleted)
|
2026-10-12 21:43:05 +00:00
|
|
|
|
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,
|
2026-10-14 19:26:03 +00:00
|
|
|
|
'Draft', GETUTCDATE(), @UserId, 0
|
2026-10-12 21:43:05 +00:00
|
|
|
|
FROM Inv_T_Transfer t
|
|
|
|
|
|
WHERE t.Id = @SourceId;
|
|
|
|
|
|
|
|
|
|
|
|
INSERT INTO @Map (OldId, NewId)
|
|
|
|
|
|
SELECT Id, NEWID()
|
|
|
|
|
|
FROM Inv_T_TransferLine
|
|
|
|
|
|
WHERE TransferId = @SourceId AND IsDeleted = 0
|
|
|
|
|
|
AND ((@IsReturn = 1 AND Quantity > 0) OR (@IsReturn = 0 AND Quantity < DemandQuantity));
|
|
|
|
|
|
|
|
|
|
|
|
INSERT INTO Inv_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 Inv_T_TransferLine l
|
|
|
|
|
|
INNER JOIN @Map m ON m.OldId = l.Id;
|
|
|
|
|
|
|
|
|
|
|
|
IF @IsReturn = 1
|
|
|
|
|
|
INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
|
|
|
|
|
|
SELECT NEWID(), z.TenantId, m.NewId, z.LotNo, z.Quantity, GETUTCDATE(), @UserId, 0
|
|
|
|
|
|
FROM Inv_T_TransferLineLot z
|
|
|
|
|
|
INNER JOIN @Map m ON m.OldId = z.TransferLineId
|
|
|
|
|
|
WHERE z.IsDeleted = 0;
|
|
|
|
|
|
|
|
|
|
|
|
EXEC Inv_P_TransferNumber @NewId;
|
|
|
|
|
|
IF @IsReturn = 0
|
|
|
|
|
|
EXEC Inv_P_TransferCheckAvailability @NewId;
|
|
|
|
|
|
EXEC Inv_P_TransferRecalc @NewId;
|
|
|
|
|
|
END
|