Field Service - Sale Stock Route

fieldservice_sale_stock_route
REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/18.0/fieldservice_sale_stock_route
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), APSL-Nagarro
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), APSL-Nagarro
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Lansana Barry
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice_sale_stock
    - fieldservice_sale
    - fieldservice
    - base_territory
    - fieldservice_account
    - fieldservice_stock
    - fieldservice_route
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
    - html_editor
    - sale_management
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - payment
    - utm
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module integrates the fieldservice_sale_stock and
fieldservice_route modules, enabling automatic generation of FSM order
day routes from sales orders.

## Requirements for Confirming a Sales Order

If a sales order contains a product that generates an FSM order, the
following conditions must be met before confirmation:

- An FSM location must be set.
- The FSM location must have an assigned route.
- The FSM route must have a designated FSM person.
- The FSM route must have assigned working days.

## Automatic Scheduling of FSM Orders

- If the commitment_date and commitment_date_end fields **are not set**
  on the sale order upon confirmation, they will be automatically
  assigned to the next available route day based on the FSM location’s
  schedule.
- If these fields **are set**, the FSM order will be scheduled
  accordingly, with validation ensuring that the commitment_date falls
  on a valid route day. This validation can be overridden by enabling
  the **"Force Schedule"** option on the FSM route to allow scheduling
  on any day.

This module also introduces a **"Postpone Delivery"** button in the FSM
order form view, allowing users to reschedule the order to the next
available route day based on the FSM location’s schedule.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
fsm_order_form_inherit_product_move_ids fsm.order.form.inherit.test.move.ids fsm.order xpath Inherits fieldservice.fsm_order_form
view_fsm_route_form_inherit fsm.route.form.inherit.force_schedule fsm.route xpath Inherits fieldservice_route.fsm_route_form
view_order_form sale.order.form sale.order xpath Inherits sale.view_order_form
Models touched (4)

New fields (1)
  • show_postpone_button Boolean
    compute='_compute_postpone_button_visibility' store=False
Public methods (2)
  • action_postpone_delivery(self)
  • write(self, vals)

New fields (1)
  • force_schedule Boolean
    help='Enable this to allow scheduling on non-route days.'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • check_day(self)
    @api.constrains('date', 'route_id')

New fields (1)
  • commitment_date_end Datetime
    compute='_compute_commitment_date_end' copy=False help='This is the delivery deadline date promised to the customer. If set, the delivery order will be scheduled based on this date rather than product lead times.' inverse='_inverse_set_commitment_date_end' store=True string='Delivery End Date'
Public methods (1)
  • write(self, values)
REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/15.0/fieldservice_sale_stock_route
VERSION
VERSION 1.0.5
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), APSL-Nagarro
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), APSL-Nagarro
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Patryk Pyczko, bobrador, ppyczko
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice_sale_stock
    - fieldservice_sale
    - fieldservice
    - base_territory
    - fieldservice_account
    - fieldservice_stock
    - fieldservice_route
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
    - sale_management
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - utm
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
fsm_order_form_inherit_product_move_ids fsm.order.form.inherit.test.move.ids fsm.order xpath Inherits fieldservice.fsm_order_form
view_fsm_route_form_inherit fsm.route.form.inherit.force_schedule fsm.route xpath Inherits fieldservice_route.fsm_route_form
view_order_form sale.order.form sale.order xpath Inherits sale.view_order_form
Models touched (4)

New fields (1)
  • show_postpone_button Boolean
    compute='_compute_postpone_button_visibility' store=False
Public methods (2)
  • action_postpone_delivery(self)
  • write(self, vals)

New fields (1)
  • force_schedule Boolean
    help='Enable this to allow scheduling on non-route days.'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • check_day(self)
    @api.constrains('date', 'route_id')

New fields (1)
  • commitment_date_end Datetime
    compute='_compute_commitment_date_end' copy=False help='This is the delivery deadline date promised to the customer. If set, the delivery order will be scheduled based on this date rather than product lead times.' inverse='_inverse_set_commitment_date_end' states={'done': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Delivery End Date'
Public methods (1)
  • write(self, values)