sozsoft-platform/configs/seeds/sql/object/Stk_P_TransferCopy.sql

55 lines
3 KiB
MySQL
Raw Permalink Normal View History

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.
-- 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-19 14:35:08 +00:00
CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferCopy]
2026-10-12 21:43:05 +00:00
@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();
2026-10-19 14:35:08 +00:00
INSERT INTO Stk_T_Transfer (Id, TenantId, BranchId, WarehouseId, OperationTypeId, OperationKind, PartnerId, SourceLocationId, DestinationLocationId,
2026-10-12 21:43:05 +00:00
ScheduledDate, SourceDocument, PurchaseOrderId, BackorderOfId, ReturnOfId, CarrierId, ResponsibleUserId, ProjectId, DeliveryPolicy,
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,
'Draft', GETUTCDATE(), @UserId, 0
2026-10-19 14:35:08 +00:00
FROM Stk_T_Transfer t
2026-10-12 21:43:05 +00:00
WHERE t.Id = @SourceId;
INSERT INTO @Map (OldId, NewId)
SELECT Id, NEWID()
2026-10-19 14:35:08 +00:00
FROM Stk_T_TransferLine
2026-10-12 21:43:05 +00:00
WHERE TransferId = @SourceId AND IsDeleted = 0
AND ((@IsReturn = 1 AND Quantity > 0) OR (@IsReturn = 0 AND Quantity < DemandQuantity));
2026-10-19 14:35:08 +00:00
INSERT INTO Stk_T_TransferLine (Id, TenantId, TransferId, ProductId, Description, DemandQuantity, Quantity, UomId,
2026-10-12 21:43:05 +00:00
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
2026-10-19 14:35:08 +00:00
FROM Stk_T_TransferLine l
2026-10-12 21:43:05 +00:00
INNER JOIN @Map m ON m.OldId = l.Id;
IF @IsReturn = 1
2026-10-19 14:35:08 +00:00
INSERT INTO Stk_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted)
2026-10-12 21:43:05 +00:00
SELECT NEWID(), z.TenantId, m.NewId, z.LotNo, z.Quantity, GETUTCDATE(), @UserId, 0
2026-10-19 14:35:08 +00:00
FROM Stk_T_TransferLineLot z
2026-10-12 21:43:05 +00:00
INNER JOIN @Map m ON m.OldId = z.TransferLineId
WHERE z.IsDeleted = 0;
2026-10-19 14:35:08 +00:00
EXEC Stk_P_TransferNumber @NewId;
2026-10-12 21:43:05 +00:00
IF @IsReturn = 0
2026-10-19 14:35:08 +00:00
EXEC Stk_P_TransferCheckAvailability @NewId;
EXEC Stk_P_TransferRecalc @NewId;
2026-10-12 21:43:05 +00:00
END