Skip to content

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

TableHolds
ts_rfqthe 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_itemthe requested items
ts_rfq_bidder_invitedwhich vendors were invited
ts_rfq_bidone 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_referenceattached and generated documents
ts_vendor, ts_vendor_contactthe 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

  1. The RFQ itself. Submitting posts a routing with 'rout_group_mod' => 'procurement', tracked in submit_approval and status_approval. On approval rfq.class.php generates the RFQ PDF and files it under Procurement Documents, the same interface as the Requisition.
  2. The bid evaluation. After bids are entered, act=bid_tab and the evaluation screens produce a comparison; submitting it posts a second routing (rfq_handler_post.php, the second rout_group_mod site) tracked in bid_submit_approval, bid_status_approval, bid_approved_by and bid_evaluation_date. bid.class.php implements 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.

PathState 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.phpon $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.phpdead
rfq_handler_form_041214.phpa dated backup, not routed

Gotchas

  • is_sent is 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.

InstanceDifference
JOTREInstalled, with bid_evaluation. Approved documents feed the Accurate sync crons. Legacy paths work there.
Jadestone, Medco, TimasNot installed in their QA databases. Code identical to master apart from three or four files.