54 lines
3.2 KiB
Transact-SQL
54 lines
3.2 KiB
Transact-SQL
-- 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 onay durumunu ve bağları taşır.
|
||
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,
|
||
Status, SourceApproverUserNames, ApprovalUserName, ApprovalStatus, ApprovalDate, ApprovalDescription, 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', t.SourceApproverUserNames, t.ApprovalUserName, t.ApprovalStatus, t.ApprovalDate, t.ApprovalDescription, GETUTCDATE(), @UserId, 0
|
||
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
|