Field Service Recurring Work Orders

fieldservice_recurring
REPOSITORY
REPOSITORYOCA/field-service
GIT
GIThttps://github.com/OCA/field-service.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/field-service/tree/19.0/fieldservice_recurring
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, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Hoa - Truong Thi Kim
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:46
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
This module allows you to manage your recurring field service work
orders

Recurring settings are configured via the FSM Frequency model. Multiple
FSM Frequency can be combined on a FSM Frequency Rule Set which enables
highly configurable recurring rules calculated using the dateutil rrule
python library.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_list_view fsm.frequency.list fsm.frequency list New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_list_view fsm.frequency.set.list fsm.frequency.set list New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_list_view fsm.recurring.list fsm.recurring list New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_list_view fsm.recurring.template.list fsm.recurring.template list New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    args: 'April'
  • aug Boolean
    args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    args: 'December'
  • feb Boolean
    args: 'February'
  • fr Boolean
    args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    args: 'January'
  • jul Boolean
    args: 'July'
  • jun Boolean
    args: 'June'
  • mar Boolean
    args: 'March'
  • may Boolean
  • mo Boolean
    args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True
  • nov Boolean
    args: 'November'
  • oct Boolean
    args: 'October'
  • sa Boolean
    args: 'Saturday'
  • sep Boolean
    args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    args: 'Sunday'
  • th Boolean
    args: 'Thursday'
  • tu Boolean
    args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (2)
  • action_view_fsm_recurring(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
  • end_date Datetime
    help='Recurring orders will not be made after this date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximum number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • start_date Datetime
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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/18.0/fieldservice_recurring
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Brian McMaster, Quirino Leone, 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
This module allows you to manage your recurring field service work
orders

Recurring settings are configured via the FSM Frequency model. Multiple
FSM Frequency can be combined on a FSM Frequency Rule Set which enables
highly configurable recurring rules calculated using the dateutil rrule
python library.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_list_view fsm.frequency.list fsm.frequency list New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_list_view fsm.frequency.set.list fsm.frequency.set list New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_list_view fsm.recurring.list fsm.recurring list New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_list_view fsm.recurring.template.list fsm.recurring.template list New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    args: 'April'
  • aug Boolean
    args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    args: 'December'
  • feb Boolean
    args: 'February'
  • fr Boolean
    args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    args: 'January'
  • jul Boolean
    args: 'July'
  • jun Boolean
    args: 'June'
  • mar Boolean
    args: 'March'
  • may Boolean
  • mo Boolean
    args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True
  • nov Boolean
    args: 'November'
  • oct Boolean
    args: 'October'
  • sa Boolean
    args: 'Saturday'
  • sep Boolean
    args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    args: 'Sunday'
  • th Boolean
    args: 'Thursday'
  • tu Boolean
    args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (2)
  • action_view_fsm_recurring(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
  • end_date Datetime
    help='Recurring orders will not be made after this date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximum number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • start_date Datetime
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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_recurring
VERSION
VERSION 2.1.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSjcoux, Weblate, OCA-git-bot, Iván Todorovich, oca-ci, Maksym Yankin, Brian McMaster, Antoni Marroig Campomar, Quirino Leone
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
This module allows you to manage your recurring field service work
orders

Recurring settings are configured via the FSM Frequency model. Multiple
FSM Frequency can be combined on a FSM Frequency Rule Set which enables
highly configurable recurring rules calculated using the dateutil rrule
python library.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    args: 'April'
  • aug Boolean
    args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    args: 'December'
  • feb Boolean
    args: 'February'
  • fr Boolean
    args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    args: 'January'
  • jul Boolean
    args: 'July'
  • jun Boolean
    args: 'June'
  • mar Boolean
    args: 'March'
  • may Boolean
  • mo Boolean
    args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True
  • nov Boolean
    args: 'November'
  • oct Boolean
    args: 'October'
  • sa Boolean
    args: 'Saturday'
  • sep Boolean
    args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    args: 'Sunday'
  • th Boolean
    args: 'Thursday'
  • tu Boolean
    args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (2)
  • action_view_fsm_recurring(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
  • end_date Datetime
    help='Recurring orders will not be made after this date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • start_date Datetime
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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_recurring
VERSION
VERSION 2.1.3
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Brian McMaster, kaynnan, anusrinps96, Quirino Leone
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_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    args: 'April'
  • aug Boolean
    args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    args: 'December'
  • feb Boolean
    args: 'February'
  • fr Boolean
    args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    args: 'January'
  • jul Boolean
    args: 'July'
  • jun Boolean
    args: 'June'
  • mar Boolean
    args: 'March'
  • may Boolean
  • mo Boolean
    args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True
  • nov Boolean
    args: 'November'
  • oct Boolean
    args: 'October'
  • sa Boolean
    args: 'Saturday'
  • sep Boolean
    args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    args: 'Sunday'
  • th Boolean
    args: 'Thursday'
  • tu Boolean
    args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (2)
  • action_view_fsm_recurring(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
  • end_date Datetime
    help='Recurring orders will not be made after this date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • start_date Datetime
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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_recurring
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Brian McMaster, Freni-OSI
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 (11)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    args: 'April'
  • aug Boolean
    args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    args: 'December'
  • feb Boolean
    args: 'February'
  • fr Boolean
    args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    args: 'January'
  • jul Boolean
    args: 'July'
  • jun Boolean
    args: 'June'
  • mar Boolean
    args: 'March'
  • may Boolean
  • mo Boolean
    args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True
  • nov Boolean
    args: 'November'
  • oct Boolean
    args: 'October'
  • sa Boolean
    args: 'Saturday'
  • sep Boolean
    args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    args: 'Sunday'
  • th Boolean
    args: 'Thursday'
  • tu Boolean
    args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (2)
  • action_view_fsm_recurring(self)
  • create(self, vals)
    @api.model

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
  • end_date Datetime
    help='Recurring orders will not be made after this date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • start_date Datetime
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals)
    @api.model
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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_recurring
VERSION
VERSION 3.4.0
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSDaniel Reis, OCA Transbot, oca-travis, Weblate, OCA-git-bot, hparfr, oca-ci, Brian McMaster, Alessandro Uffreduzzi, Florian Mounier, Alessio Renda, BojanOD
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_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_search_view fsm.recurring.search fsm.recurring search New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team field Inherits fieldservice.view_team_kanban
Models touched (6)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    default=False args: 'April'
  • aug Boolean
    default=False args: 'August'
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • dec Boolean
    default=False args: 'December'
  • feb Boolean
    default=False args: 'February'
  • fr Boolean
    default=False args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' tracking=True
  • interval_type Selection
    required=True string='Interval Type' tracking=True args: FREQUENCY_SELECT
  • is_exclusive Boolean
    default=False help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    default=False args: 'January'
  • jul Boolean
    default=False args: 'July'
  • jun Boolean
    default=False args: 'June'
  • mar Boolean
    default=False args: 'March'
  • may Boolean
    default=False args: 'May'
  • mo Boolean
    default=False args: 'Monday'
  • month_day Integer
    string='Day of Month' tracking=True
  • name Char
    required=True args: 'Name'
  • nov Boolean
    default=False args: 'November'
  • oct Boolean
    default=False args: 'October'
  • sa Boolean
    default=False args: 'Saturday'
  • sep Boolean
    default=False args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    default=False args: 'Sunday'
  • th Boolean
    default=False args: 'Thursday'
  • tu Boolean
    default=False args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    default=False args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' tracking=True
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' tracking=True
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' tracking=True args: 'fsm.frequency'
  • name Char
    required=True args: 'Name'
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' tracking=True
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (1)
  • action_view_fsm_recurring(self)

New fields (17)
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company', 'Company'
  • description Text
    string='Description'
  • end_date Datetime
    help='Recurring orders will not be made after this date' string='End Date'
  • equipment_ids Many2many → fsm.equipment
    args: 'fsm.equipment'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True string='Name'
  • person_id Many2one → fsm.person
    index=True string='Assigned To' tracking=True args: 'fsm.person'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours' string='Scheduled duration'
  • start_date Datetime
    string='Start Date'
  • state Selection
    default='draft' readonly=True tracking=True args: [('draft', 'Draft'), ('progress', 'In Progress'), ('suspend', 'Suspended'), ('close', 'Closed')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' tracking=True args: 'fsm.team'
Public methods (5)
  • action_start(self)
  • action_suspend(self)
  • create(self, vals)
    @api.model
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    args: 'res.company', 'Company'
  • description Text
    string='Description'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • recurring_draft_count Integer
    compute='_compute_recurring_draft_count' string='Recurring in draft'
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_recurring
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, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, Weblate, OCA-git-bot, brian10048, Brian McMaster
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 (9)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
Models touched (5)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    default=False args: 'April'
  • aug Boolean
    default=False args: 'August'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • dec Boolean
    default=False args: 'December'
  • feb Boolean
    default=False args: 'February'
  • fr Boolean
    default=False args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' track_visibility='onchange'
  • interval_type Selection
    required=True string='Interval Type' track_visibility='onchange' args: FREQUENCY_SELECT
  • is_exclusive Boolean
    default=False help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    default=False args: 'January'
  • jul Boolean
    default=False args: 'July'
  • jun Boolean
    default=False args: 'June'
  • mar Boolean
    default=False args: 'March'
  • may Boolean
    default=False args: 'May'
  • mo Boolean
    default=False args: 'Monday'
  • month_day Integer
    string='Day of Month' track_visibility='onchange'
  • name Char
    required=True args: 'Name'
  • nov Boolean
    default=False args: 'November'
  • oct Boolean
    default=False args: 'October'
  • sa Boolean
    default=False args: 'Saturday'
  • sep Boolean
    default=False args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    default=False args: 'Sunday'
  • th Boolean
    default=False args: 'Thursday'
  • tu Boolean
    default=False args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    default=False args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' track_visibility='onchange'
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' track_visibility='onchange'
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' track_visibility='onchange' args: 'fsm.frequency'
  • name Char
    required=True args: 'Name'
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' track_visibility='onchange'
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (1)
  • action_view_fsm_recurring(self)

New fields (15)
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • description Text
    string='Description'
  • end_date Datetime
    help='Recurring orders will not be made after this date' string='End Date'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False readonly=True string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True string='Name'
  • person_id Many2one → fsm.person
    index=True string='Assigned To' track_visibility='onchange' args: 'fsm.person'
  • start_date Datetime
    String='Start Date'
  • state Selection
    default='draft' readonly=True track_visibility='onchange' args: [('draft', 'Draft'), ('progress', 'In Progress'), ('pending', 'To Renew'), ('close', 'Closed'), ('cancel', 'Cancelled')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' track_visibility='onchange' args: 'fsm.team'
Public methods (6)
  • action_cancel(self)
  • action_renew(self)
  • action_start(self)
  • create(self, vals)
    @api.model
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • description Text
    string='Description'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True string='Name'
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_recurring
VERSION
VERSION 1.3.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSMaxime Chambreuil, GitHub, OCA Transbot, oca-travis, Weblate, OCA-git-bot, hparfr, clementmbr, Kitti U, brian10048, Murtuza Saleh, Alessandro Uffreduzzi
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 (9)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
view_fsm_order_form fsm.order xpath Inherits fieldservice.fsm_order_form
Models touched (5)

New fields (31)
  • active Boolean
    default=True
  • apr Boolean
    default=False args: 'April'
  • aug Boolean
    default=False args: 'August'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • dec Boolean
    default=False args: 'December'
  • feb Boolean
    default=False args: 'February'
  • fr Boolean
    default=False args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' track_visibility='onchange'
  • interval_type Selection
    required=True string='Interval Type' track_visibility='onchange' args: FREQUENCY_SELECT
  • is_exclusive Boolean
    default=False help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    default=False args: 'January'
  • jul Boolean
    default=False args: 'July'
  • jun Boolean
    default=False args: 'June'
  • mar Boolean
    default=False args: 'March'
  • may Boolean
    default=False args: 'May'
  • mo Boolean
    default=False args: 'Monday'
  • month_day Integer
    string='Day of Month' track_visibility='onchange'
  • name Char
    required=True args: 'Name'
  • nov Boolean
    default=False args: 'November'
  • oct Boolean
    default=False args: 'October'
  • sa Boolean
    default=False args: 'Saturday'
  • sep Boolean
    default=False args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    default=False args: 'Sunday'
  • th Boolean
    default=False args: 'Thursday'
  • tu Boolean
    default=False args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    default=False args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' track_visibility='onchange'
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' track_visibility='onchange'
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' track_visibility='onchange' args: 'fsm.frequency'
  • name Char
    required=True args: 'Name'
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' track_visibility='onchange'
Public methods (0)

No public methods.

New fields (1)
  • fsm_recurring_id Many2one → fsm.recurring
    readonly=True args: 'fsm.recurring', 'Recurring Order'
Public methods (1)
  • action_view_fsm_recurring(self)
    @api.multi

New fields (15)
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • description Text
    string='Description'
  • end_date Datetime
    help='Recurring orders will not be made after this date' string='End Date'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False readonly=True string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True string='Name'
  • person_id Many2one → fsm.person
    index=True string='Assigned To' track_visibility='onchange' args: 'fsm.person'
  • start_date Datetime
    String='Start Date'
  • state Selection
    default='draft' readonly=True track_visibility='onchange' args: [('draft', 'Draft'), ('progress', 'In Progress'), ('pending', 'To Renew'), ('close', 'Closed'), ('cancel', 'Cancelled')]
  • team_id Many2one → fsm.team
    default=<expr> index=True required=True string='Team' track_visibility='onchange' args: 'fsm.team'
Public methods (6)
  • action_cancel(self)
    @api.multi
  • action_renew(self)
    @api.multi
  • action_start(self)
    @api.multi
  • create(self, vals)
    @api.model
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • description Text
    string='Description'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True string='Name'
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/11.0/fieldservice_recurring
VERSION
VERSION 0.1.1
CATEGORY
CATEGORYField Service
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Brian McMaster
COMMITTERS
COMMITTERSMaxime Chambreuil, OCA-git-bot, brian10048
WEBSITE
WEBSITEhttps://github.com/OCA/field-service
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/field-service:
    - fieldservice
OCA/geospatial:
    - base_geoengine
OCA/web:
    - web_timeline
odoo/odoo:
    - base_geolocalize
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geojson
shapely
simplejson
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
fsm_frequency_form_view fsm.frequency.form fsm.frequency form New
fsm_frequency_set_form_view fsm.frequency.set.form fsm.frequency.set form New
fsm_frequency_set_tree_view fsm.frequency.set.tree fsm.frequency.set tree New
fsm_frequency_tree_view fsm.frequency.tree fsm.frequency tree New
fsm_recurring_form_view fsm.recurring.form fsm.recurring form New
fsm_recurring_template_form_view fsm.recurring.template.form fsm.recurring.template form New
fsm_recurring_template_tree_view fsm.recurring.template.tree fsm.recurring.template tree New
fsm_recurring_tree_view fsm.recurring.tree fsm.recurring tree New
Models touched (4)

New fields (30)
  • active Boolean
    default=True
  • apr Boolean
    default=False args: 'April'
  • aug Boolean
    default=False args: 'August'
  • dec Boolean
    default=False args: 'December'
  • feb Boolean
    default=False args: 'February'
  • fr Boolean
    default=False args: 'Friday'
  • interval Integer
    default=1 help='The number of intervals between events' required=True string='Repeat Every' track_visibility='onchange'
  • interval_type Selection
    required=True string='Interval Type' track_visibility='onchange' args: FREQUENCY_SELECT
  • is_exclusive Boolean
    default=False help='Checking this box will make this an exclusive rule. Exclusive\n rules prevent the configured days from being a schedule option' string='Exclusive Rule?'
  • jan Boolean
    default=False args: 'January'
  • jul Boolean
    default=False args: 'July'
  • jun Boolean
    default=False args: 'June'
  • mar Boolean
    default=False args: 'March'
  • may Boolean
    default=False args: 'May'
  • mo Boolean
    default=False args: 'Monday'
  • month_day Integer
    string='Day of Month' track_visibility='onchange'
  • name Char
    required=True args: 'Name'
  • nov Boolean
    default=False args: 'November'
  • oct Boolean
    default=False args: 'October'
  • sa Boolean
    default=False args: 'Saturday'
  • sep Boolean
    default=False args: 'September'
  • set_pos Integer
    help="Specify an occurrence number, positive or negative,\n corresponding to the nth occurrence of the rule inside\n the frequency period. For example, -1 if combined with a\n 'Monthly' frequency, and a weekday of (MO, TU, WE, TH, FR),\n will result in the last work day of every month." string='By Position'
  • su Boolean
    default=False args: 'Sunday'
  • th Boolean
    default=False args: 'Thursday'
  • tu Boolean
    default=False args: 'Tuesday'
  • use_bymonth Boolean
    string='Use Months'
  • use_bymonthday Boolean
    help='When selected you will be able to specify which calendar day\n of the month the event occurs on' string='Use Day of Month'
  • use_byweekday Boolean
    help='When selected you will be able to choose which days of the\n week the scheduler will include (or exclude if Exclusive rule)' string='Use Days of Week'
  • use_setpos Boolean
    string='Use Position'
  • we Boolean
    default=False args: 'Wednesday'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • buffer_early Integer
    help='The allowed number of days before the computed schedule date\n that an event can be done' string='Early Buffer' track_visibility='onchange'
  • buffer_late Integer
    help='The allowed number of days after the computed schedule date\n that an event can be done' string='Late Buffer' track_visibility='onchange'
  • fsm_frequency_ids Many2many → fsm.frequency
    string='Frequency Rules' track_visibility='onchange' args: 'fsm.frequency'
  • name Char
    required=True args: 'Name'
  • schedule_days Integer
    default='30' help='The number of days from today that the scheduler will generate\n orders for this rule' string='Days Ahead to Schedule' track_visibility='onchange'
Public methods (0)

No public methods.

New fields (14)
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • customer_id Many2one → res.partner
    change_default=True domain=[('customer', '=', True)] index=True string='Contact' track_visibility='always' args: 'res.partner'
  • description Text
    string='Description'
  • end_date Datetime
    help='Recurring orders will not be made after this date' string='End Date'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_count Integer
    compute='_compute_order_count' args: 'Orders Count'
  • fsm_order_ids One2many → fsm.order
    copy=False readonly=True string='Orders' args: 'fsm.order', 'fsm_recurring_id'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • fsm_recurring_template_id Many2one → fsm.recurring.template
    readonly=True states={'draft': [('readonly', False)]} args: 'fsm.recurring.template', 'Recurring Template'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    copy=False default=<expr> index=True required=True string='Name'
  • start_date Datetime
    String='Start Date'
  • state Selection
    default='draft' readonly=True track_visibility='onchange' args: [('draft', 'Draft'), ('progress', 'In Progress'), ('pending', 'To Renew'), ('close', 'Closed'), ('cancel', 'Cancelled')]
Public methods (6)
  • action_cancel(self)
    @api.multi
  • action_renew(self)
    @api.multi
  • action_start(self)
    @api.multi
  • create(self, vals)
    @api.model
  • onchange_recurring_template_id(self)
    @api.onchange('fsm_recurring_template_id')
  • populate_from_template(self, template=False)

New fields (7)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • description Text
    string='Description'
  • fsm_frequency_set_id Many2one → fsm.frequency.set
    required=True args: 'fsm.frequency.set', 'Frequency Set'
  • fsm_order_template_id Many2one → fsm.template
    help='This is the order template that will be recurring' string='Order Template' args: 'fsm.template'
  • max_orders Integer
    help='Maximium number of orders that will be created' string='Maximum Orders'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.