Request for Quotation (RFQ)
Module: rfq. Raised from a Requisition, sent to invited vendors, and the place where their bids are captured, compared and approved. The Bid Evaluation menu entry is a second module code that opens the bid screens of this same module.
How this page was verified
Written from master on 2026-09-06 and compared with the big five the same day. No earlier page existed. A map, not a line-by-line trace: 41 files, about 660 database calls.
Where it sits
Requisition (spb_id) → RFQ → invited vendors → bids → bid approval → Purchase Order (rfq_id)The data
| Table | Holds |
|---|---|
ts_rfq | the header: rfq_no, rfq_date, rfq_title, rfq_narrative, project_id, spb_id, category_id, quotation_deadline, required_date, delivery_place, deliver_to_id, terms, the two approval sets (submit_approval / status_approval for the RFQ itself and bid_submit_approval / bid_status_approval / bid_approved_by / bid_evaluation_date for the evaluation), is_sent, best_currency_id, list_powosc_number and list_powosc_status for the POs raised from it, return_email_commercial, return_email_technical, list_milestone |
ts_rfq_item | the requested items |
ts_rfq_bidder_invited | which vendors were invited |
ts_rfq_bid | one row per vendor and item: bid_reference, bid_currency, price_unit, total_price, bid_discount, delivery_date, and the technical checklist (bid_techically_accept, bid_testing, bid_doc, spare parts, coating, packing, transport, third party, tolerance, validity, delivery point and schedule, payment term, contact) |
ts_rfq_doc, ts_file_reference | attached and generated documents |
ts_vendor, ts_vendor_contact | the vendor register from Vendor Management |
The screen
rfq.php with rfq_browse.htm: grid, header form, items, attached documents and, per RFQ, the bidder list (cmd=list_bidder, list_bidder_invited, check_status_bidder), the bid detail grid (cmd=grid_biddetail), bid export (cmd=exportBid, on $pdo), bid print, generated documents (cmd=generate_doc), rates (cmd=get_rates) and the send-to-vendor dialog (cmd=send_attachment_by_email). The toolbar adds the bid tabs: bid order add / delete / refresh, bid attachments.
Two approvals
- The RFQ itself. Submitting posts a routing with
'rout_group_mod' => 'procurement', tracked insubmit_approvalandstatus_approval. On approvalrfq.class.phpgenerates the RFQ PDF and files it under Procurement Documents, the same interface as the Requisition. - The bid evaluation. After bids are entered,
act=bid_taband the evaluation screens produce a comparison; submitting it posts a second routing (rfq_handler_post.php, the secondrout_group_modsite) tracked inbid_submit_approval,bid_status_approval,bid_approved_byandbid_evaluation_date.bid.class.phpimplements the same interface for the evaluation document.
The approved bid is what a Purchase Order refers to through rfq_id and vendor_prop_quo_id.
What still runs on the legacy helper
Counted on 2026-09-06: 376 calls to iw_mysql_query() against 283 uses of $pdo.
| Path | State where the legacy helper throws |
|---|---|
rfq.php, rfq_handler_main_form.php, rfq_handler_bidder_list_form.php, rfq_add_order_item.php, bid_export.php, rfq_print_process_2.php, rfq_bid_print_2.php, rfq_preview_3.php | on $pdo, work |
rfq_handler_form.php (74 legacy, 112 PDO) and rfq_handler_post.php (64 legacy, 104 PDO) | mixed |
rfq.inc.php (14 legacy, 12 PDO) | mixed helpers |
the tabulation screens, send by email (rfq_sendmail_*), multi-file upload, the older rfq_bid_print.php | dead |
rfq_handler_form_041214.php | a dated backup, not routed |
Gotchas
is_sentis set by the email path, which is dead where the legacy helper throws. An RFQ can be approved and never marked sent.- Bid rows are per vendor and per item. A missing item row for one vendor skews the tabulation totals; the export shows the gap.
- Two approval states on one header. A grid that shows "approved" may mean the RFQ, not the evaluation. Read both column pairs.
Instance differences
Checked on 2026-09-06.
| Instance | Difference |
|---|---|
| JOTRE | Installed, with bid_evaluation. Approved documents feed the Accurate sync crons. Legacy paths work there. |
| Jadestone, Medco, Timas | Not installed in their QA databases. Code identical to master apart from three or four files. |
Related
- Requisition: the source document.
- Purchase Order: what an approved bid becomes.
- Users and Privileges: vendors invited to bid are outside users in the vendor register, not resources.