39 lines
2.2 KiB
Transact-SQL
39 lines
2.2 KiB
Transact-SQL
CREATE OR ALTER PROCEDURE [dbo].[Prc_P_PurchaseOrderImportRequest]
|
||
@Id uniqueidentifier
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
DECLARE @Req uniqueidentifier, @Tenant uniqueidentifier, @Supplier uniqueidentifier, @Agr uniqueidentifier, @Status nvarchar(16), @Cnt int;
|
||
|
||
SELECT @Req = MaterialRequestId, @Tenant = TenantId, @Supplier = SupplierId, @Agr = AgreementId, @Status = Status
|
||
FROM Prc_T_PurchaseOrder WHERE Id = @Id;
|
||
IF @Req IS NULL RETURN;
|
||
IF @Status = 'Cancelled'
|
||
THROW 50101, N'İptal edilmiş belgeye talepten aktarım yapılamaz.', 1;
|
||
|
||
INSERT INTO Prc_T_PurchaseOrderLine (Id, TenantId, PurchaseOrderId, ProductId, Description, Quantity, UomId,
|
||
UnitPrice, TaxRate, Amount, MaterialRequestItemId, CreationTime, IsDeleted)
|
||
SELECT NEWID(), @Tenant, @Id, i.ProductId, i.RequestReason, i.Quantity, i.UomId,
|
||
COALESCE((SELECT TOP 1 al.UnitPrice FROM Prc_T_PurchaseAgreementLine al
|
||
WHERE al.AgreementId = @Agr AND al.ProductId = i.ProductId AND al.IsDeleted = 0),
|
||
(SELECT TOP 1 ps.Price FROM Inv_T_ProductSupplier ps
|
||
WHERE ps.ProductId = i.ProductId AND ps.ContactId = @Supplier AND ps.IsDeleted = 0
|
||
ORDER BY ps.MinQuantity), 0),
|
||
ISNULL(p.PurchaseTaxRate, 0), 0, i.Id, GETUTCDATE(), 0
|
||
FROM Prc_T_MaterialRequestItem i
|
||
INNER JOIN Prc_T_MaterialRequest r ON r.Id = i.MaterialRequestId
|
||
LEFT JOIN Inv_T_Product p ON p.Id = i.ProductId
|
||
WHERE i.MaterialRequestId = @Req AND i.IsDeleted = 0
|
||
AND r.ApprovalStatus = N'Onaylandı'
|
||
AND i.FulfillmentMethod = 'Purchase' AND i.LineStatus = 'Waiting'
|
||
AND NOT EXISTS (SELECT 1 FROM Prc_T_PurchaseOrderLine ol
|
||
INNER JOIN Prc_T_PurchaseOrder o ON o.Id = ol.PurchaseOrderId
|
||
WHERE ol.MaterialRequestItemId = i.Id AND ol.IsDeleted = 0
|
||
AND o.IsDeleted = 0 AND o.Status <> 'Cancelled');
|
||
SET @Cnt = @@ROWCOUNT;
|
||
|
||
UPDATE Prc_T_PurchaseOrder SET MaterialRequestId = NULL WHERE Id = @Id;
|
||
|
||
IF @Cnt = 0
|
||
THROW 50102, N'Seçilen talepte aktarılacak kalem yok (onaylı, Satınalma ile karşılanacak, bekleyen ve başka belgede olmayan kalem bulunamadı).', 1;
|
||
END
|