55 lines
3.2 KiB
MySQL
55 lines
3.2 KiB
MySQL
|
|
-- 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
|