-- Talep Kalemleri sekmesinde seçilen kalemi (p_key = belge|kalem) teklif talebine ya da taslak siparişe kopyalar. -- Kalem yalnız belgenin şubesindeki talepten gelir. Fiyat: sözleşme kalemi › tedarikçi fiyatı › 0; termin talebin istenen tarihidir. CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseImportItem"(p_key varchar) LANGUAGE plpgsql AS $$ DECLARE v_doc uuid; v_item uuid; v_is_order boolean := false; v_tenant uuid; v_branch uuid; v_supplier uuid; v_agr uuid; v_status varchar(16); v_product uuid; v_description varchar(512); v_quantity numeric(18, 4); v_uom varchar(50); v_price numeric(18, 4); v_tax numeric(18, 4); v_due timestamp; BEGIN IF p_key !~* '^[0-9a-f-]{36}\|[0-9a-f-]{36}$' THEN RAISE EXCEPTION 'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.' USING ERRCODE = 'P0001', DETAIL = '50161'; END IF; v_doc := left(p_key, 36)::uuid; v_item := right(p_key, 36)::uuid; SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status" INTO v_tenant, v_branch, v_supplier, v_agr, v_status FROM "Prc_T_PurchaseRfq" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" IN ('Draft', 'Sent'); IF v_status IS NULL THEN SELECT "TenantId", "BranchId", "SupplierId", "AgreementId", "Status", true INTO v_tenant, v_branch, v_supplier, v_agr, v_status, v_is_order FROM "Prc_T_PurchaseOrder" WHERE "Id" = v_doc AND "IsDeleted" = false AND "Status" = 'Draft'; END IF; IF v_status IS NULL THEN RAISE EXCEPTION 'Talep kalemi yalnız teklif aşamasındaki teklif talebine ya da taslak siparişe aktarılabilir.' USING ERRCODE = 'P0001', DETAIL = '50161'; END IF; SELECT a."ProductId", a."RequestReason", a."Quantity", a."UomId", a."DueDate", COALESCE(p."PurchaseTaxRate", 0), COALESCE((SELECT al."UnitPrice" FROM "Prc_T_PurchaseAgreementLine" al WHERE al."AgreementId" = v_agr AND al."ProductId" = a."ProductId" AND al."IsDeleted" = false LIMIT 1), (SELECT ps."Price" FROM "Inv_T_ProductSupplier" ps WHERE ps."ProductId" = a."ProductId" AND ps."ContactId" = v_supplier AND ps."IsDeleted" = false ORDER BY ps."MinQuantity" LIMIT 1), 0) INTO v_product, v_description, v_quantity, v_uom, v_due, v_tax, v_price FROM "Prc_V_MaterialRequestAvailableItem" a LEFT JOIN "Inv_T_Product" p ON p."Id" = a."ProductId" WHERE a."Id" = v_item AND a."BranchId" = v_branch AND a."TenantId" IS NOT DISTINCT FROM v_tenant; IF v_product IS NULL THEN RAISE EXCEPTION 'Talep kalemi artık aktarılamaz: başka bir teklife ya da siparişe aktarılmış veya talep değişmiş.' USING ERRCODE = 'P0001', DETAIL = '50162'; END IF; IF v_is_order THEN INSERT INTO "Prc_T_PurchaseOrderLine" ("Id", "TenantId", "PurchaseOrderId", "ProductId", "Description", "Quantity", "UomId", "UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "IsDeleted") VALUES (gen_random_uuid(), v_tenant, v_doc, v_product, v_description, v_quantity, v_uom, v_price, v_tax, 0, v_due, v_item, NOW() AT TIME ZONE 'UTC', false); CALL public."Prc_P_PurchaseOrderRecalc"(v_doc); ELSE INSERT INTO "Prc_T_PurchaseRfqLine" ("Id", "TenantId", "PurchaseRfqId", "ProductId", "Description", "Quantity", "UomId", "UnitPrice", "TaxRate", "Amount", "DeliveryDate", "MaterialRequestItemId", "CreationTime", "IsDeleted") VALUES (gen_random_uuid(), v_tenant, v_doc, v_product, v_description, v_quantity, v_uom, v_price, v_tax, 0, v_due, v_item, NOW() AT TIME ZONE 'UTC', false); CALL public."Prc_P_PurchaseRfqRecalc"(v_doc); END IF; END; $$;