Repository
OCA/field-service · module folder · Try on Runboat
Module version
1.0.0
Category
Field Service
Folder size
0.47 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/field-service
Last tracking update
2026-08-07 09:06:25
Authors
Odoo Community Association (OCA), Brian McMaster, Gray Matter Logic
Maintainers
Odoo Community Association (OCA), Brian McMaster, Gray Matter Logic
Committers
Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci, Hoa - Truong Thi Kim
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
fieldservice_sale_recurring
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 form Inherits fieldservice.fsm_order_form
view_team_kanban_recurring fsm.team kanban Inherits fieldservice.view_team_kanban
HTTP endpoints (0)

No HTTP endpoints found for this module.

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.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…