CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderImportRequest"(p_id uuid) LANGUAGE plpgsql AS $$ DECLARE v_req uuid; v_tenant uuid; v_supplier uuid; v_agr uuid; v_status varchar(16); v_cnt int; BEGIN SELECT "MaterialRequestId", "TenantId", "SupplierId", "AgreementId", "Status" INTO v_req, v_tenant, v_supplier, v_agr, v_status FROM "Prc_T_PurchaseOrder" WHERE "Id" = p_id; IF v_req IS NULL THEN RETURN; END IF; IF v_status = 'Cancelled' THEN RAISE EXCEPTION 'İptal edilmiş belgeye talepten aktarım yapılamaz.'; END IF; INSERT INTO "Prc_T_PurchaseOrderLine" ("Id", "TenantId", "PurchaseOrderId", "ProductId", "Description", "Quantity", "UomId", "UnitPrice", "TaxRate", "Amount", "MaterialRequestItemId", "CreationTime", "IsDeleted") SELECT gen_random_uuid(), v_tenant, p_id, i."ProductId", i."RequestReason", i."Quantity", i."UomId", COALESCE((SELECT al."UnitPrice" FROM "Prc_T_PurchaseAgreementLine" al WHERE al."AgreementId" = v_agr AND al."ProductId" = i."ProductId" AND al."IsDeleted" = false LIMIT 1), (SELECT ps."Price" FROM "Inv_T_ProductSupplier" ps WHERE ps."ProductId" = i."ProductId" AND ps."ContactId" = v_supplier AND ps."IsDeleted" = false ORDER BY ps."MinQuantity" LIMIT 1), 0), COALESCE(p."PurchaseTaxRate", 0), 0, i."Id", CURRENT_TIMESTAMP, false 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" = v_req AND i."IsDeleted" = false AND r."ApprovalStatus" = '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" = false AND o."IsDeleted" = false AND o."Status" <> 'Cancelled'); GET DIAGNOSTICS v_cnt = ROW_COUNT; UPDATE "Prc_T_PurchaseOrder" SET "MaterialRequestId" = NULL WHERE "Id" = p_id; IF v_cnt = 0 THEN RAISE EXCEPTION 'Seçilen talepte aktarılacak kalem yok (onaylı, Satınalma ile karşılanacak, bekleyen ve başka belgede olmayan kalem bulunamadı).'; END IF; END; $$;