Field Service - Subcontracting
This module integrates Field Service with Purchasing to automate the subcontracting workflow.
It allows users to:
- Mark subcontractor vendors on partners.
- Configure a service product on Field Service order templates.
- Resolve the Purchase Order vendor from the assigned worker or its parent company.
- Create draft Purchase Orders for subcontracted orders.
- Set the Purchase Order Expected Arrival from the Field Service Order Scheduled End.
- Keep the Purchase Order Expected Arrival synchronized when the Field Service Order planned dates change.
- Update delivered quantities from Field Service timesheets.
- Reassign workers on orders with linked subcontract Purchase Orders.
The module uses fieldservice_stage_server_action to trigger automation on stage transitions.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Automatically creates draft Purchase Orders for subcontracted Field Service Orders and keeps them in sync with the order's schedule and timesheets.
This module links Field Service Orders to Purchasing so that work given to external subcontractors is automatically ordered from the right vendor.
- On a contact, a new "Is Subcontractor?" checkbox marks the partner as a subcontractor; it can only be ticked if the partner is already a vendor.
- On a Field Service template, you can choose a "Subcontracting Service Product" (a service billed on received quantities).
- When a Field Service Order is assigned to a subcontractor worker, a draft Purchase Order is created for that vendor, with the expected date taken from the order's scheduled end. If something is missing (no worker, no product, no vendor price), a message is posted in the order's chatter instead of blocking the stage change.
- Changing the planned dates on the order updates the expected date on the linked Purchase Orders.
- When the order reaches its Done stage, the delivered quantity on the Purchase Order line is updated from the hours logged in timesheets.
- The Field Service Order form shows smart buttons for the linked Purchase Orders and for reassigning the worker; the Purchase Order form shows a button back to the Field Service Order.
- Cancelling an order with active Purchase Orders opens a confirmation wizard offering to cancel the order only or the order together with its Purchase Orders. Purchase Orders with posted vendor bills cannot be cancelled automatically.
- Reassigning a worker on an order with a subcontract Purchase Order must be done through the Reassign Worker button, which cancels the existing Purchase Orders and creates a new one for the new worker.
Depends on
Models and fields (6)
- fsm.order · extends an existing modelreassign_worker, purchase_order_ids (Subcontract POs), purchase_order_count
- res.partner · extends an existing modelis_fsm_subcontractor (Is Subcontractor?)
- fsm.template · extends an existing modelsubcontract_product_id (Subcontracting Service Product)
- purchase.order · extends an existing modelfsm_order_id (Field Service Order), fsm_order_count (FSO Count)
- fsm.order.cancel.confirm · new modelfsm_order_id (Field Service Order), warning_message, purchase_order_ids (Purchase Orders)
- fsm.order.reassign.confirm · new modelfsm_order_id (Field Service Order), new_person_id (New Worker), warning_message, purchase_order_ids (Purchase Orders)
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 1 confirmed, 8 with no information of 9 versions.
Sources · Odoo 18.0
Confirmed on 2026-11-03 in branch 18.0 of OCA/field-service.
terminal Installation and usage
OCA documentation · Odoo 18.0Configuration
Source · Odoo 18.0Subcontractor partner setup
- Go to Contacts.
- Open the partner linked to the Field Service worker, or the parent company of that partner.
- Configure as a vendor the partner that should receive the subcontract Purchase Order.
- Enable Is Subcontractor? on the relevant partner.
- The subcontract vendor is resolved with the following priority:
- If the worker partner has a parent company and that parent company is marked as Is Subcontractor?, the Purchase Order is created for the parent company.
- If the previous rule does not apply and the worker partner is marked as Is Subcontractor?, the Purchase Order is created directly for the worker partner, such as an individual freelancer.
- If neither rule applies, no Purchase Order is created because the worker is considered internal.
- Configure vendor prices on the subcontracting service product for the partner that will receive the Purchase Order.
Template setup
- Go to Field Service > Master Data > Templates.
- Open the template that can create subcontract Purchase Orders.
- Set the Subcontracting Service Product.
- Use a service product that is purchased based on received quantities.
- Configure a vendor price on the product for each resolved subcontractor partner that can receive a Purchase Order.
- If vendor bills are controlled by received quantities, update the delivered quantity before creating the vendor bill.
Stage automation
- Go to Field Service > Configuration > Stages.
- Open the stage that should create the draft Purchase Order.
- Assign the server action FSO: Create Subcontract PO.
- Open the closing stage that should update delivered quantities.
- Assign the server action FSO: Update Subcontract PO Delivered Qty.
- This action copies timesheet hours to the Purchase Order delivered quantity.
Usage
Source · Odoo 18.0Create the subcontract Purchase Order
- Create or open a Field Service Order that uses a template configured for subcontracting.
- Assign a worker.
- Move the order to the stage configured to create the subcontract Purchase Order.
- The module resolves the vendor before creating the Purchase Order.
- If the worker related partner has a parent company marked as subcontractor, the parent company is used as the vendor.
- Otherwise, if the worker related partner is marked as subcontractor, that partner is used as the vendor.
- If neither condition applies, the worker is considered internal and no Purchase Order is created. The Field Service Order chatter records that no Purchase Order was created for an internal worker.
- Use the Purchase Order smart button to open the generated draft Purchase Order.
- Review the Purchase Order. Its Expected Arrival is set from the Field Service Order Scheduled End (
scheduled_date_end). - Confirm the Purchase Order manually.
- If the Purchase Order is not created, check the Field Service Order chatter.
- Review the reason posted by the module.
- Fix the missing configuration or worker data.
- Move the order through the configured stage again if needed.
Update the Purchase Order Expected Arrival
- Change the Field Service Order planned dates.
- Save the Field Service Order.
- The active subcontract Purchase Order Expected Arrival is updated with the current Field Service Order Scheduled End (
scheduled_date_end). - The generated Purchase Order line expected date is updated as well, so the Purchase Order header keeps the same Expected Arrival.
Update delivered quantities
- Log timesheet hours on the Field Service Order.
- Move the Field Service Order to the stage configured to update subcontract delivered quantities.
- The module updates the delivered quantity on the subcontract Purchase Order line with the total timesheet hours of the Field Service Order.
- The ordered quantity remains unchanged after the Purchase Order is created.
- Create the vendor bill after the delivered quantity has been updated when the product bills based on received quantities.
Reassign or cancel an order
- Use the Reassign Worker button when an order with at least one subcontract Purchase Order must be reassigned.
- The Reassign Worker button remains available even if all linked subcontract Purchase Orders are cancelled.
- The Reassign Worker button is only available while the Field Service Order is not in a closed stage.
- If the Field Service Order is already in a closed stage, move it to a non-closed stage before reassigning the worker, if the business process allows it.
- Select the new worker in the reassignment wizard.
- Confirm the wizard.
- The wizard cancels draft vendor bills linked to active subcontract Purchase Orders before cancelling those Purchase Orders.
- The wizard cancels active subcontract Purchase Orders.
- If the new worker is also a subcontractor, the module creates a new Purchase Order for that subcontractor.
- To cancel a Field Service Order with active subcontract Purchase Orders, use the standard cancel action.
- Choose whether to cancel only the Field Service Order or also its active subcontract Purchase Orders.
- If there are posted vendor bills, manage the Purchase Orders and vendor bills manually before reassigning or cancelling the Field Service Order.
No verified information in OCA: Installation.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.