| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Inventory (stock) • Purchase (purchase) • Invoicing (account) • Project (project) • Surveys (survey) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 5879 |
| Technical Name |
grev_od_purchase_esourcing |
| License | OPL-1 |
| Website | https://www.grevlin.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Inventory (stock) • Purchase (purchase) • Invoicing (account) • Project (project) • Surveys (survey) • Employees (hr) |
| Community Apps Dependencies | Show |
| Lines of code | 5879 |
| Technical Name |
grev_od_purchase_esourcing |
| License | OPL-1 |
| Website | https://www.grevlin.com |
Purchase eSourcingStructured, transparent, and auditable electronic sourcing for RFQs, tenders, and competitive bidding — built natively on Odoo 19.0.
|
|
Purchase eSourcing is the unified orchestration layer for all sourcing activities. Run parallel RFQ campaigns, enforce blind bidding, score supplier offers with configurable weighted criteria, and award with a full justification audit trail — all within Odoo. For complex multi-lot tenders, it seamlessly delegates to the Tender Management engine. |
|
|
|
|
Need Help?For support, contact us at support@grevlin.com Follow us on X: @GrevlinGlobal ✓ 30 days free support included |
Purchase eSourcing
Unified eSourcing orchestration for RFQs, tenders, and competitive bidding on Odoo 19.0.
The Purchase eSourcing module provides a structured, transparent, and auditable sourcing layer for managing Request for Quotations, tenders, and multi-round supplier bidding processes. It acts as the upstream data provider for the negotiation and comparison modules.
Overview
Key capabilities:
- Parallel RFQ execution — one native Odoo RFQ per supplier, auto-cancelled on award
- Blind bidding — prices hidden on comparison matrix until event closes
- Multi-round bidding — shortlist suppliers between rounds; previous bids frozen
- Min-max scoring — configurable weighted criteria (price, MOQ, lead time, quality, reliability)
- Award justification wizard — mandatory rationale and audit trail on every award decision
- Savings analytics — savings amount and % vs target price per bid and event
- Complex tender mode — delegates to grev_od_tender_management for multi-lot tenders
- Automated event closure — hourly cron closes events past their deadline
Note
This module depends on grev_od_tender_management. The negotiation handoff (grev_od_purchase_negotiation) and supplier portal (grev_od_purchase_supplier_portal) are optional downstream dependencies.
Configuration
Security Groups
The module provides a three-tier role model:
| Group | Permissions |
|---|---|
| eSourcing User | Read-only access to all events, lines, bids, and bid lines |
| eSourcing Officer | Create and edit events; invite suppliers; manage bids; run Score, Round, and Award wizards |
| eSourcing Manager | Full CRUD including delete; accesses configuration menu |
Assign users via :menuselection:`Settings --> Users & Companies --> Users`, then select the appropriate group under the Purchase eSourcing category.
Usage
Creating a Sourcing Event
- Navigate to :menuselection:`Purchase --> eSourcing --> eSourcing Events`
- Click :guilabel:`New`
- Set the Sourcing Type:
- :guilabel:`Simple RFQ` — generates one native Odoo RFQ per supplier on publish
- :guilabel:`Complex Tender` — delegates to the Tender Management engine on publish
- Add products on the Products tab with quantity and an internal target price (used for savings calculation)
- Set the Deadline and optionally configure Max Rounds
- Enable Blind Bidding (on by default) to hide prices until the event closes
- Add invited suppliers on the Suppliers tab
- Click :guilabel:`Save`
Tip
Target prices are never shown to suppliers. They are used internally to compute savings amount and savings % on the Comparison Matrix after the event closes.
Publishing and Receiving Bids
- Click :guilabel:`Publish` — supplier invitation emails are sent automatically
- In Simple RFQ mode, one purchase.order RFQ is created per supplier and linked to the event
- Click :guilabel:`Open` to mark bidding as active
- Bids are received as grev.purchase.esourcing.bid records on the Bids tab
- The event auto-closes when the deadline passes (hourly cron) or click :guilabel:`Close`
Multi-Round Bidding
To run a second (or subsequent) round:
- Ensure :guilabel:`Max Rounds` > 1 on the event form
- After the current round closes or is evaluated, click :guilabel:`New Round`
- In the wizard:
- Select the shortlisted suppliers for the next round (must be a subset of current)
- Set a new deadline
- Add optional round notes for suppliers
- Click :guilabel:`Start Round` — current_round increments, event reverts to Open, and supplier notifications are sent
Important
Bids from previous rounds are immutable once a new round starts. Only scoring fields can be updated on older-round bids.
Scoring and Evaluation
After closing the event, click :guilabel:`Score & Rank`
In the Score Weights Wizard, adjust the percentage weights for each dimension (must total 100%):
Dimension Default Weight Direction Price 40% Lower is better MOQ 20% Lower is better Lead Time 20% Lower is better Quality 10% Higher is better Reliability 10% Higher is better Click :guilabel:`Score & Rank` — min-max normalization runs across all submitted bids; each bid receives a total_score (0–100) and a rank (1 = best)
The event transitions to Evaluated and a scoring summary is posted to the chatter
Review per-dimension scores on the Scoring Details tab
Awarding the Event
Simple RFQ mode — confirm the winning purchase.order RFQ directly:
- The system creates or updates the bid record from the RFQ lines
- All sibling RFQs are cancelled automatically
- The event transitions to Awarded
Complex Tender mode — use the Award Wizard:
- Click :guilabel:`Award`
- In the Award Justification Wizard:
- Select the winning bid
- Choose a rationale: Lowest Price, Best Score, Best Quality, Lead Time, Strategic, or Other
- Enter a written justification (minimum 20 characters)
- Confirm the Approver (defaults to current user)
- Click :guilabel:`Confirm Award`
- Winner bid transitions to accepted; all others to rejected
- Event transitions to Awarded
- Full decision record (approver, rationale, justification) posted to chatter
Note
The justification text is posted as a permanent chatter message and cannot be deleted. This provides a compliance-grade audit trail for every award decision.
Sending to Negotiation
- From an Evaluated or Awarded event, click :guilabel:`Send to Negotiation`
- The event transitions to Negotiation state
- Full traceability is maintained: eSourcing Event → Negotiation Session
Event Lifecycle
| State | Description |
|---|---|
| Draft | Internal preparation; not visible to suppliers |
| Published | Suppliers invited; invitation emails sent |
| Open | Bidding in progress |
| Closed | Bidding locked; triggered automatically at deadline or manually |
| Evaluated | Scoring completed; bids ranked |
| Awarded | Winner confirmed with justification audit record |
| Negotiation | Handed off to the Negotiation module |
| Cancelled | Aborted; linked RFQs cancelled; suppliers notified |
Technical Details
Models
| Model | Description |
|---|---|
| grev.purchase.esourcing.event | Main sourcing event: type, sourcing mode, state, rounds, partners, lines, bids |
| grev.purchase.esourcing.line | Product line: product, quantity, target price, UOM (related from product) |
| grev.purchase.esourcing.bid | Supplier bid: partner, round, MOQ, lead time, scoring fields, savings analytics |
| grev.purchase.esourcing.bid.line | Individual price per event line: unit price, extended price (computed) |
| purchase.order (extended) | Adds esourcing_event_id foreign key; overrides button_confirm() for cascade award |
Key Fields
Sourcing Event (grev.purchase.esourcing.event)
- name — auto-generated reference (ESO-00001)
- event_type — rfq | tender | auction
- sourcing_type — rfq (Simple) | tender (Complex)
- state — lifecycle state (see table above)
- blind_bidding — hide prices until closed (default True)
- bid_prices_visible — computed; True when state in closed/evaluated/awarded/negotiation/cancelled or blind_bidding=False
- deadline_date — submission deadline (required)
- current_round / max_rounds — round counters
- total_target_value — sum of target_price × quantity across all lines (stored computed)
- purchase_order_ids — linked Odoo RFQs (Simple RFQ mode)
- awarded_purchase_order_id — the confirmed Purchase Order
- tender_call_id — linked grev.tender.call (Complex Tender mode)
Supplier Bid (grev.purchase.esourcing.bid)
- name — auto-generated reference (BID-00001)
- partner_id — supplier
- round_number — bidding round this bid belongs to
- state — draft | submitted | accepted | rejected
- moq — minimum order quantity
- lead_time — days
- validity_date — offer expiry
- total_score — weighted composite score (0–100)
- rank — rank within event (1 = best)
- savings_amount — total savings vs target prices
- savings_pct — savings as % of event total target value
Scheduled Actions
| Action | Interval | Purpose |
|---|---|---|
| eSourcing: Close Expired Events | 1 hour | Closes any open event with deadline_date in the past |
Integration Points
Upstream (optional):
- grev_od_purchase_intel — supplier recommendations and performance scores
- grev_od_spend_analytics — historical spend data
Downstream (optional):
- grev_od_purchase_negotiation — price negotiation after award
- grev_od_purchase_supplier_portal — portal bid submission by suppliers
Required dependency:
- grev_od_tender_management — provides grev.tender.call for Complex Tender mode
See Also
- :doc:`../../grev_od_tender_management/doc/index` — Tender Management engine
- :doc:`../../grev_od_purchase_negotiation/doc/index` — Negotiation Dashboard
- :doc:`../../grev_od_purchase_intel/doc/index` — Supplier Intelligence
- :doc:`../../grev_od_purchase_supplier_portal/doc/index` — Supplier Portal
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module