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

36 lines
2.2 KiB
MySQL
Raw Normal View History

2026-10-12 21:43:05 +00:00
-- Onaylanan satınalma siparişinden siparişin operasyon türünde Taslak alım açar: konumlar operasyon türünden, satırlar
-- siparişin envanter takipli kalemlerinin henüz alınmamış miktarıdır. Siparişin iptal olmayan alımı varsa yeni alım açılmaz.
CREATE OR ALTER PROCEDURE [dbo].[Inv_P_TransferFromPurchaseOrder]
@OrderId uniqueidentifier,
@UserId uniqueidentifier = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @New uniqueidentifier = NEWID();
IF EXISTS (SELECT 1 FROM Inv_T_Transfer WHERE PurchaseOrderId = @OrderId AND IsDeleted = 0 AND Status <> 'Cancelled')
RETURN;
INSERT INTO Inv_T_Transfer (Id, TenantId, BranchId, WarehouseId, OperationTypeId, OperationKind, PartnerId, SourceLocationId, DestinationLocationId,
ScheduledDate, SourceDocument, PurchaseOrderId, ResponsibleUserId, ProjectId, Status, CreationTime, CreatorId, IsDeleted)
SELECT @New, o.TenantId, ot.BranchId, ot.WarehouseId, o.OperationTypeId, ot.OperationKind, o.SupplierId, ot.SourceLocationId, ot.DestinationLocationId,
COALESCE(o.ExpectedArrival, GETUTCDATE()), o.OrderNo, o.Id, o.BuyerUserId, o.ProjectId, 'Draft', GETUTCDATE(), @UserId, 0
FROM Prc_T_PurchaseOrder o
INNER JOIN Inv_T_OperationType ot ON ot.Id = o.OperationTypeId
WHERE o.Id = @OrderId
AND EXISTS (SELECT 1 FROM Prc_T_PurchaseOrderLine l
INNER JOIN Inv_T_Product p ON p.Id = l.ProductId
WHERE l.PurchaseOrderId = o.Id AND l.IsDeleted = 0 AND p.TrackInventory = 1 AND l.Quantity > l.ReceivedQuantity);
IF @@ROWCOUNT = 0
RETURN;
INSERT INTO Inv_T_TransferLine (Id, TenantId, TransferId, ProductId, Description, DemandQuantity, Quantity, UomId, PurchaseOrderLineId, MaterialRequestItemId, CreationTime, CreatorId, IsDeleted)
SELECT NEWID(), l.TenantId, @New, l.ProductId, l.Description, l.Quantity - l.ReceivedQuantity, 0, l.UomId, l.Id, l.MaterialRequestItemId, GETUTCDATE(), @UserId, 0
2026-10-12 21:43:05 +00:00
FROM Prc_T_PurchaseOrderLine l
INNER JOIN Inv_T_Product p ON p.Id = l.ProductId
WHERE l.PurchaseOrderId = @OrderId AND l.IsDeleted = 0 AND p.TrackInventory = 1 AND l.Quantity > l.ReceivedQuantity;
EXEC Inv_P_TransferNumber @New;
EXEC Inv_P_TransferRecalc @New;
END