Field Service Route

fieldservice_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_route
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, EdgarRetes
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
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
A Field Service route is the sorted list of orders that one
worker/vehicle will perform during a day.

This module allows you to manage your Field Service routes: when
assigning an order to a worker and scheduling it, a route is
automatically created for that worker and day.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_list_view Route Day fsm.route.day list New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_list fsm.route.dayroute.list fsm.route.dayroute list New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_list fsm.route.list fsm.route list New
Models touched (6)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    comodel_name='fsm.route.dayroute' index=True string='Day Route'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' index=True readonly=False store=True string='Assigned To'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (4)
  • day_ids Many2many → fsm.route.day
    comodel_name='fsm.route.day' string='Days'
  • fsm_person_id Many2one → fsm.person
    comodel_name='fsm.person' string='Person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' string='Maximum Orders'
  • name Char
    required=True
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    selection=[('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (18)
  • date Date
    required=True
  • date_start_planned Datetime
    compute='_compute_date_start_planned' readonly=False store=True string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='End Location'
  • last_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Last Location'
  • latitude Float
  • longitude Float
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True
  • order_count Integer
    compute='_compute_order_count' store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    comodel_name='fsm.order' inverse_name='dayroute_id' string='Orders'
  • order_remaining Integer
    compute='_compute_order_count' store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' readonly=False store=True string='Person'
  • route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
  • stage_id Many2one → fsm.stage
    comodel_name='fsm.stage' copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage'
  • start_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Start Location'
  • team_id Many2one → fsm.team
    comodel_name='fsm.team' default=<expr> string='Team'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals_list)
    @api.model_create_multi

New fields (1)
  • stage_type Selection
    ondelete={'route': 'cascade'} selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/17.0/fieldservice_route
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Antoni Marroig Campomar, bobrador, Samuel Macias Oropeza (smo)
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
A Field Service route is the sorted list of orders that one
worker/vehicle will perform during a day.

This module allows you to manage your Field Service routes: when
assigning an order to a worker and scheduling it, a route is
automatically created for that worker and day.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_order_route_calendar_view fsm.order.route.calendar fsm.order xpath Inherits fieldservice.fsm_order_calendar_view
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (6)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    comodel_name='fsm.route.dayroute' index=True string='Day Route'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' index=True readonly=False store=True string='Assigned To'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_utc_date(self, date)
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (4)
  • day_ids Many2many → fsm.route.day
    comodel_name='fsm.route.day' string='Days'
  • fsm_person_id Many2one → fsm.person
    comodel_name='fsm.person' string='Person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' string='Maximum Orders'
  • name Char
    required=True
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    selection=[('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (18)
  • date Date
    required=True
  • date_start_planned Datetime
    compute='_compute_date_start_planned' readonly=False store=True string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='End Location'
  • last_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Last Location'
  • latitude Float
  • longitude Float
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True
  • order_count Integer
    compute='_compute_order_count' store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    comodel_name='fsm.order' inverse_name='dayroute_id' string='Orders'
  • order_remaining Integer
    compute='_compute_order_count' store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' readonly=False store=True string='Person'
  • route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
  • stage_id Many2one → fsm.stage
    comodel_name='fsm.stage' copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage'
  • start_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Start Location'
  • team_id Many2one → fsm.team
    comodel_name='fsm.team' default=<expr> string='Team'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals_list)
    @api.model_create_multi

New fields (1)
  • stage_type Selection
    ondelete={'route': 'cascade'} selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/16.0/fieldservice_route
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Brian McMaster, Goncalo Brito
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (6)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    comodel_name='fsm.route.dayroute' index=True string='Day Route'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' index=True readonly=False store=True string='Assigned To'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (4)
  • day_ids Many2many → fsm.route.day
    comodel_name='fsm.route.day' string='Days'
  • fsm_person_id Many2one → fsm.person
    comodel_name='fsm.person' string='Person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' string='Maximum Orders'
  • name Char
    required=True
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    selection=[('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (18)
  • date Date
    required=True
  • date_start_planned Datetime
    compute='_compute_date_start_planned' readonly=False store=True string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='End Location'
  • last_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Last Location'
  • latitude Float
  • longitude Float
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True
  • order_count Integer
    compute='_compute_order_count' store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    comodel_name='fsm.order' inverse_name='dayroute_id' string='Orders'
  • order_remaining Integer
    compute='_compute_order_count' store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' readonly=False store=True string='Person'
  • route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
  • stage_id Many2one → fsm.stage
    comodel_name='fsm.stage' copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage'
  • start_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Start Location'
  • team_id Many2one → fsm.team
    comodel_name='fsm.team' default=<expr> string='Team'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals_list)
    @api.model_create_multi

New fields (1)
  • stage_type Selection
    ondelete={'route': 'cascade'} selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

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_route
VERSION
VERSION 1.4.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, 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
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_order_tree_inherit_route fsm.order.tree.inherit fsm.order xpath Inherits fieldservice.fsm_order_tree_view
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (6)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    comodel_name='fsm.route.dayroute' index=True string='Day Route'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' compute='_compute_person_id' index=True readonly=False store=True string='Assigned To'
Public methods (3)
  • create(self, vals)
    @api.model
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (4)
  • day_ids Many2many → fsm.route.day
    comodel_name='fsm.route.day' string='Days'
  • fsm_person_id Many2one → fsm.person
    comodel_name='fsm.person' string='Person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' string='Maximum Orders'
  • name Char
    required=True
Public methods (2)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.
  • write(self, vals)

New fields (1)
  • name Selection
    selection=[('Monday', _('Monday')), ('Tuesday', _('Tuesday')), ('Wednesday', _('Wednesday')), ('Thursday', _('Thursday')), ('Friday', _('Friday')), ('Saturday', _('Saturday')), ('Sunday', _('Sunday'))]
Public methods (1)
  • name_get(self)

New fields (18)
  • date Date
    required=True
  • date_start_planned Datetime
    string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='End Location'
  • last_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Last Location'
  • latitude Float
  • longitude Float
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True
  • order_count Integer
    compute='_compute_order_count' store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    comodel_name='fsm.order' inverse_name='dayroute_id' string='Orders'
  • order_remaining Integer
    compute='_compute_order_count' store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    comodel_name='fsm.person' string='Person'
  • route_id Many2one → fsm.route
    comodel_name='fsm.route' string='Route'
  • stage_id Many2one → fsm.stage
    comodel_name='fsm.stage' copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage'
  • start_location_id Many2one → fsm.location
    comodel_name='fsm.location' string='Start Location'
  • team_id Many2one → fsm.team
    comodel_name='fsm.team' default=<expr> string='Team'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals)
    @api.model

New fields (1)
  • stage_type Selection
    ondelete={'route': 'cascade'} selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/14.0/fieldservice_route
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSDaniel Reis, Yann Papouin, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, Freni-OSI
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (6)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    index=True string='Day Route' args: 'fsm.route.dayroute'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    default=_get_default_person index=True string='Assigned To' args: 'fsm.person'
Public methods (3)
  • create(self, vals)
    @api.model
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (4)
  • day_ids Many2many → fsm.route.day
    string='Days' args: 'fsm.route.day'
  • fsm_person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' args: 'Maximum Orders'
  • name Char
    required=True args: 'Name'
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    string='Name' args: [('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (18)
  • date Date
    required=True string='Date'
  • date_start_planned Datetime
    string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    string='End Location' args: 'fsm.location'
  • last_location_id Many2one → fsm.location
    string='Last Location' args: 'fsm.location'
  • latitude Float
    args: 'Latitude'
  • longitude Float
    args: 'Longitude'
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True string='Name'
  • order_count Integer
    compute=_compute_order_count store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    string='Orders' args: 'fsm.order', 'dayroute_id'
  • order_remaining Integer
    compute=_compute_order_count store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
  • stage_id Many2one → fsm.stage
    copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage' args: 'fsm.stage'
  • start_location_id Many2one → fsm.location
    string='Start Location' args: 'fsm.location'
  • team_id Many2one → fsm.team
    default=<expr> string='Team' args: 'fsm.team'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals)
    @api.model

New fields (1)
  • stage_type Selection
    ondelete={'route': 'cascade'} selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/13.0/fieldservice_route
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSdavid, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
    - base_territory
odoo/odoo:
    - base
    - base_geolocalize
    - base_setup
    - web
    - resource
    - contacts
    - mail
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_partner_fields res.partner field Inherits fieldservice.fsm_partner_fields
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (7)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    index=True string='Day Route' args: 'fsm.route.dayroute'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    default=_get_default_person index=True string='Assigned To' args: 'fsm.person'
Public methods (3)
  • create(self, vals)
    @api.model
  • prepare_dayroute_values(self, values)
  • write(self, vals)

New fields (5)
  • day_ids Many2many → fsm.route.day
    string='Days' args: 'fsm.route.day'
  • fsm_person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' args: 'Maximum Orders'
  • name Char
    required=True args: 'Name'
  • territory_id Many2one → res.territory
    string='Territory' args: 'res.territory'
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    string='Name' args: [('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (19)
  • date Date
    required=True string='Date'
  • date_start_planned Datetime
    string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    string='End Location' args: 'fsm.location'
  • last_location_id Many2one → fsm.location
    string='Last Location' args: 'fsm.location'
  • latitude Float
    args: 'Latitude'
  • longitude Float
    args: 'Longitude'
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True string='Name'
  • order_count Integer
    compute=_compute_order_count store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    string='Orders' args: 'fsm.order', 'dayroute_id'
  • order_remaining Integer
    compute=_compute_order_count store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
  • stage_id Many2one → fsm.stage
    copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage' args: 'fsm.stage'
  • start_location_id Many2one → fsm.location
    string='Start Location' args: 'fsm.location'
  • team_id Many2one → fsm.team
    default=<expr> string='Team' args: 'fsm.team'
  • territory_id Many2one → res.territory
    related='route_id.territory_id' string='Territory' args: 'res.territory'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals)
    @api.model

New fields (1)
  • stage_type Selection
    selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' compute='_compute_fsm_route_id' inverse='_inverse_fsm_route_id' readonly=False store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/12.0/fieldservice_route
VERSION
VERSION 2.5.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators
COMMITTERS
COMMITTERSMaxime Chambreuil, GitHub, david, OCA Transbot, oca-travis, Weblate, OCA-git-bot, scampbell, Murtuza Saleh
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
OCA/partner-contact:
    - partner_fax
OCA/web:
    - web_timeline
odoo/odoo:
    - base_geolocalize
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - resource
    - contacts
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
fsm_location_form_view_route_inherit fsm.location.form fsm.location field Inherits fieldservice.fsm_location_form_view
fsm_order_form_inherit_route fsm.order.form fsm.order field Inherits fieldservice.fsm_order_form
fsm_partner_fields res.partner field Inherits fieldservice.fsm_partner_fields
fsm_route_day_form_view Route Day fsm.route.day form New
fsm_route_day_tree_view Route Day fsm.route.day tree New
fsm_route_dayroute_calendar fsm.route.dayroute.calendar fsm.route.dayroute calendar New
fsm_route_dayroute_form fsm.route.dayroute.form fsm.route.dayroute form New
fsm_route_dayroute_graph_view fsm.route.graph fsm.route.dayroute graph New
fsm_route_dayroute_pivot_view fsm.route.pivot fsm.route.dayroute pivot New
fsm_route_dayroute_tree fsm.route.dayroute.tree fsm.route.dayroute tree New
fsm_route_form fsm.route.form fsm.route form New
fsm_route_tree fsm.route.tree fsm.route tree New
Models touched (7)

New fields (1)
  • fsm_route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
Public methods (0)

No public methods.

New fields (3)
  • dayroute_id Many2one → fsm.route.dayroute
    index=True string='Day Route' args: 'fsm.route.dayroute'
  • fsm_route_id Many2one
    related='location_id.fsm_route_id' string='Route'
  • person_id Many2one → fsm.person
    default=_get_default_person index=True string='Assigned To' args: 'fsm.person'
Public methods (3)
  • create(self, vals)
    @api.model
  • prepare_dayroute_values(self, values)
  • write(self, vals)
    @api.multi

New fields (5)
  • day_ids Many2many → fsm.route.day
    string='Days' args: 'fsm.route.day'
  • fsm_person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • max_order Integer
    default=0 help='Maximum number of orders per day route.' args: 'Maximum Orders'
  • name Char
    required=True args: 'Name'
  • territory_id Many2one → fsm.territory
    string='Territory' args: 'fsm.territory'
Public methods (1)
  • run_on(self, date)
    :param date: date :return: True if the route runs on the date, False otherwise.

New fields (1)
  • name Selection
    string='Name' args: [('Monday', 'Monday'), ('Tuesday', 'Tuesday'), ('Wednesday', 'Wednesday'), ('Thursday', 'Thursday'), ('Friday', 'Friday'), ('Saturday', 'Saturday'), ('Sunday', 'Sunday')]
Public methods (0)

No public methods.

New fields (19)
  • date Date
    required=True string='Date'
  • date_start_planned Datetime
    string='Planned Start Time'
  • end_location_id Many2one → fsm.location
    string='End Location' args: 'fsm.location'
  • last_location_id Many2one → fsm.location
    string='Last Location' args: 'fsm.location'
  • latitude Float
    args: 'Latitude'
  • longitude Float
    args: 'Longitude'
  • max_allow_time Float
    default=10.0 string='Maximal Allowable Time (in hours)'
  • max_order Integer
    help='Maximum numbers of orders that can be added to this day route.' related='route_id.max_order' store=True string='Maximum Capacity'
  • name Char
    copy=False default=<expr> required=True string='Name'
  • order_count Integer
    compute=_compute_order_count store=True string='Number of Orders'
  • order_ids One2many → fsm.order
    string='Orders' args: 'fsm.order', 'dayroute_id'
  • order_remaining Integer
    compute=_compute_order_count store=True string='Available Capacity'
  • person_id Many2one → fsm.person
    string='Person' args: 'fsm.person'
  • route_id Many2one → fsm.route
    string='Route' args: 'fsm.route'
  • stage_id Many2one → fsm.stage
    copy=False default=<expr> domain="[('stage_type', '=', 'route')]" index=True string='Stage' args: 'fsm.stage'
  • start_location_id Many2one → fsm.location
    string='Start Location' args: 'fsm.location'
  • team_id Many2one → fsm.team
    default=<expr> string='Team' args: 'fsm.team'
  • territory_id Many2one → fsm.territory
    related='route_id.territory_id' string='Territory' args: 'fsm.territory'
  • work_time Float
    default=8.0 string='Time before overtime (in hours)'
Public methods (3)
  • check_capacity(self)
    @api.constrains('route_id', 'max_order', 'order_count')
  • check_day(self)
    @api.constrains('date', 'route_id')
  • create(self, vals)
    @api.model

New fields (1)
  • stage_type Selection
    selection_add=[('route', 'Route')]
Public methods (0)

No public methods.

New fields (1)
  • fsm_route_id Many2one → fsm.route
    comodel_name='fsm.route' compute='_compute_fsm_route_id' inverse='_inverse_fsm_route_id' readonly=False store=True
Public methods (0)

No public methods.

STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/field-service
PULL REQUEST
PULL REQUEST[19.0][MIG] fieldservice_route: Migration to 19.0 (#1552)