Repository
OCA/field-service · module folder · Try on Runboat
Module version
Category
Field Service
Folder size
2.34 MB
License
AGPL-3
Application
Yes
Auto-installable
No
Website
https://github.com/OCA/field-service
Last tracking update
2026-08-17 11:35:59
Authors
Odoo Community Association (OCA), Gray Matter Logic
Maintainers
Odoo Community Association (OCA), Gray Matter Logic
Committers
Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci, Hoa - Truong Thi Kim, Copilot App
Odoo dependencies
OCA/field-service:
odoo/odoo:
- web
- bus
Python dependencies
None
System dependencies
None
Required by
fieldservice_account, fieldservice_activity, fieldservice_agreement, fieldservice_calendar, fieldservice_crm, fieldservice_expense, fieldservice_google_map, fieldservice_kanban_info, fieldservice_portal, fieldservice_project, fieldservice_purchase, fieldservice_recurring, fieldservice_route, fieldservice_sale, fieldservice_sign, fieldservice_size, fieldservice_skill, fieldservice_stage_server_action, fieldservice_stage_validation, fieldservice_stock, fieldservice_timeline, fieldservice_vehicle, helpdesk_mgmt_fieldservice
Description
This module is the base of the Field Service application in Odoo.

Code Analysis

Views touched (47)
XML IDNameModelTypeStatus
fsm_category_form_view fsm.category.form fsm.category form New
fsm_category_list_view fsm.category.list fsm.category list New
fsm_equipment_form_view fsm.equipment.form fsm.equipment form New
fsm_equipment_graph_view fsm.equipment.graph fsm.equipment graph New
fsm_equipment_kanban_view fsm.equipment.kanban fsm.equipment kanban New
fsm_equipment_list_view fsm.equipment.list fsm.equipment list New
fsm_equipment_pivot_view fsm.equipment.pivot fsm.equipment pivot New
fsm_equipment_search_view fsm.equipment.search fsm.equipment search New
fsm_location_form_view fsm.location.form fsm.location form New
fsm_location_graph_view fsm.location.graph fsm.location graph New
fsm_location_list_view fsm.location.list fsm.location list New
fsm_location_person_form_view fsm.location.person.form fsm.location.person form New
fsm_location_person_list_view fsm.location.person.list fsm.location.person list New
fsm_location_person_search_view fsm.location.person.search fsm.location.person search New
fsm_location_pivot_view fsm.location.pivot fsm.location pivot New
fsm_location_search_view fsm.location.search fsm.location search New
fsm_order_calendar_view Orders fsm.order calendar New
fsm_order_form fsm.order.form fsm.order form New
fsm_order_graph_view fsm.order.graph fsm.order graph New
fsm_order_kanban_view fsm.order.kanban fsm.order kanban New
fsm_order_list_view fsm.order.list fsm.order list New
fsm_order_pivot_view fsm.order.pivot fsm.order pivot New
fsm_order_search_view fsm.order.search fsm.order search New
fsm_order_sign_wizard_view_form fsm.order.sign.wizard form New
fsm_order_type_form_view fsm.order.type.form fsm.order.type form New
fsm_order_type_list_view fsm.order.type.list fsm.order.type list New
fsm_partner_fields res.partner.fsm.form res.partner form Inherits base.view_partner_form
fsm_person_form fsm.person.form fsm.person form New
fsm_person_list fsm.person.list fsm.person list New
fsm_person_search_view fsm.person.search fsm.person search New
fsm_stage_form_view Stage fsm.stage form New
fsm_stage_list_view Stages fsm.stage list New
fsm_stage_search_view fsm.stage.search fsm.stage search New
fsm_tag_form_view Tag fsm.tag form New
fsm_tag_list_view Tags fsm.tag list New
fsm_template_form_view Order Template fsm.template form New
fsm_template_list_view Order Templates fsm.template list New
partner_wizard_view Convert to a FSM Worker or Location fsm.wizard form New
report_fsm_order report_fsm_order ir.ui.view qweb New
report_fsm_order_document report_fsm_order_document ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.fsm res.config.settings form Inherits base.res_config_settings_view_form
res_partner_search_reference res.partner.search.reference res.partner search Inherits base.view_res_partner_filter
res_territory_form_view_inherit res.territory.form.inherit res.territory form Inherits base_territory.res_territory_form_view
view_team_form fsm.team.form fsm.team form New
view_team_kanban fsm.team.kanban fsm.team kanban New
view_team_list fsm.team.list fsm.team list New
view_team_search fsm.team.search fsm.team search New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (20)

New fields (6)
  • color Integer
    default=10 args: 'Color Index'
  • company_id Many2one → res.company
    help='Company related to this category' index=True required=False string='Company' args: 'res.company'
  • description Char
  • full_name Char
    compute='_compute_full_name'
  • name Char
    required=True
  • parent_id Many2one → fsm.category
    string='Parent' args: 'fsm.category'
Public methods (0)

No public methods.

New fields (15)
  • branch_id Many2one → res.branch
    compute='_compute_branch_id' readonly=False store=True string='Branch' args: 'res.branch'
  • child_ids One2many → fsm.equipment
    string='Children' args: 'fsm.equipment', 'parent_id'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this equipment' index=True required=True string='Company' args: 'res.company'
  • current_location_id Many2one → fsm.location
    string='Current Location' args: 'fsm.location'
  • district_id Many2one → res.district
    compute='_compute_district_id' readonly=False store=True string='District' args: 'res.district'
  • location_id Many2one → fsm.location
    string='Assigned Location' args: 'fsm.location'
  • managed_by_id Many2one → res.partner
    string='Managed By' args: 'res.partner'
  • name Char
    required=True
  • notes Html
  • owned_by_id Many2one → res.partner
    string='Owned By' args: 'res.partner'
  • parent_id Many2one → fsm.equipment
    string='Parent' args: 'fsm.equipment'
  • person_id Many2one → fsm.person
    string='Assigned Operator' args: 'fsm.person'
  • region_id Many2one → res.region
    compute='_compute_region_id' readonly=False store=True string='Region' args: 'res.region'
  • territory_id Many2one → res.territory
    compute='_compute_territory_id' readonly=False store=True string='Territory' args: 'res.territory'
Public methods (0)

No public methods.

New fields (25)
  • branch_id Many2one → res.branch
    string='Branch' args: 'res.branch'
  • branch_manager_id Many2one
    related='branch_id.partner_id' string='Branch Manager'
  • calendar_id Many2one → resource.calendar
    string='Office Hours' args: 'resource.calendar'
  • child_ids One2many → fsm.location
    comodel_name='fsm.location' inverse_name='parent_id' readonly=True string='Children Locations'
  • complete_direction Html
    compute='_compute_complete_direction' recursive=True store=True
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True
  • contact_count Integer
    compute='_compute_contact_count' string='Contacts Count'
  • contact_id Many2one → res.partner
    domain=<expr> index=True string='Primary Contact' args: 'res.partner'
  • description Char
  • direction Html
  • district_id Many2one → res.district
    string='District' args: 'res.district'
  • district_manager_id Many2one
    related='district_id.partner_id' string='District Manager'
  • equipment_count Integer
    compute='_compute_equipment_count' string='Equipment'
  • notes Html
    string='Location Notes'
  • owner_id Many2one → res.partner
    bypass_search_access=True ondelete='restrict' required=True string='Related Owner' args: 'res.partner'
  • parent_id Many2one → fsm.location
    index=True string='Parent' args: 'fsm.location'
  • parent_path Char
    index=True
  • partner_id Many2one → res.partner
    bypass_search_access=True delegate=True ondelete='restrict' required=True string='Related Partner' args: 'res.partner'
  • person_ids One2many → fsm.location.person
    string='Workers' args: 'fsm.location.person', 'location_id'
  • region_id Many2one → res.region
    string='Region' args: 'res.region'
  • region_manager_id Many2one
    related='region_id.partner_id' string='Region Manager'
  • sublocation_count Integer
    compute='_compute_sublocation_count' string='Sub Locations'
  • team_id Many2one → fsm.team
    comodel_name='fsm.team' help='Default team assigned to orders in this location'
  • territory_id Many2one → res.territory
    string='Territory' args: 'res.territory'
  • territory_manager_id Many2one
    related='territory_id.person_id' string='Primary Assignment'
Public methods (5)
  • action_view_contacts(self)
    This function returns an action that display existing contacts of given fsm location id and its child locations. It can either be a in a list or in a form view, if there is only one contact to show.
  • action_view_equipment(self)
    This function returns an action that display existing equipment of given fsm location id. It can either be a in a list or in a form view, if there is only one equipment to show.
  • action_view_sublocation(self)
    This function returns an action that display existing sub-locations of a given fsm location id. It can either be a in a list or in a form view, if there is only one sub-location to show.
  • create(self, vals_list)
    @api.model_create_multi
  • geo_localize(self)

New fields (7)
  • contact_id Many2one
    related='location_id.contact_id' string='Contact'
  • email Char
    related='person_id.email'
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • owner_id Many2one
    related='location_id.owner_id' string='Owner'
  • person_id Many2one → fsm.person
    index=True required=True string='Worker' args: 'fsm.person'
  • phone Char
    related='person_id.phone'
  • sequence Integer
    default='10' required=True
Public methods (0)

No public methods.

New fields (2)
  • hide Boolean
  • stage_id Many2one → fsm.stage
    copy=False default=<expr> group_expand='_read_group_stage_ids' index=True string='Stage' tracking=True args: 'fsm.stage'
Public methods (3)
  • new_stage(self, operator)
  • next_stage(self)
  • previous_stage(self)

New fields (50)
  • branch_id Many2one → res.branch
    related='location_id.branch_id' store=True string='Branch' args: 'res.branch'
  • category_ids Many2many → fsm.category
    string='Categories' args: 'fsm.category'
  • city Char
    related='location_id.city'
  • color Integer
    default=0 args: 'Color Index'
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this order' index=True required=True string='Company' args: 'res.company'
  • country_name Char
    related='location_id.country_id.name' string='Country'
  • current_date Datetime
    default=fields.Datetime.now store=True
  • custom_color Char
    related='stage_id.custom_color' string='Stage Color'
  • date_end Datetime
    string='Actual End'
  • date_start Datetime
    string='Actual Start'
  • description Html
    compute='_compute_description' precompute=True readonly=False store=True
  • display_name Char
    related='name' string='Order'
  • district_id Many2one → res.district
    related='location_id.district_id' store=True string='District' args: 'res.district'
  • duration Float
    compute='_compute_duration' help='Actual duration in hours' string='Actual duration'
  • equipment_ids Many2many → fsm.equipment
    compute='_compute_equipment_ids' precompute=True readonly=False store=True string='Equipments' args: 'fsm.equipment'
  • internal_type Selection
    related='type.internal_type'
  • is_closed Boolean
    related='stage_id.is_closed' args: 'Is closed'
  • location_directions Html
    compute='_compute_location_directions' precompute=True readonly=False store=True
  • location_id Many2one → fsm.location
    index=True required=True string='Location' args: 'fsm.location'
  • name Char
    copy=False default=<expr> index=True required=True
  • person_id Many2one → fsm.person
    index=True string='Assigned To' args: 'fsm.person'
  • person_ids Many2many → fsm.person
    string='Field Service Workers' args: 'fsm.person'
  • person_phone Char
    related='person_id.phone' string='Worker Phone'
  • phone Char
    related='location_id.phone' string='Location Phone'
  • priority Selection
    default=<expr> index=True args: fsm_stage.AVAILABLE_PRIORITIES
  • region_id Many2one → res.region
    related='location_id.region_id' store=True string='Region' args: 'res.region'
  • request_early Datetime
    default=<expr> string='Earliest Request Date'
  • request_late Datetime
    string='Latest Request Date'
  • require_signature Boolean
    related='stage_id.require_signature'
  • resolution Html
  • scheduled_date_end Datetime
    string='Scheduled End'
  • scheduled_date_start Datetime
    string='Scheduled Start (ETA)'
  • scheduled_duration Float
    help='Scheduled duration of the work in hours'
  • sequence Integer
    default=10
  • signature Image
    copy=False max_height=1024 max_width=1024 readonly=True
  • signed_by Char
    copy=False readonly=True
  • signed_on Datetime
    copy=False readonly=True
  • stage_id Many2one → fsm.stage
    copy=False default=<expr> group_expand='_read_group_stage_ids' index=True string='Stage' tracking=True args: 'fsm.stage'
  • stage_name Char
    related='stage_id.name' string='Stage Name'
  • state_name Char
    related='location_id.state_id.name' string='State'
  • street Char
    related='location_id.street'
  • street2 Char
    related='location_id.street2'
  • tag_ids Many2many → fsm.tag
    help='Classify and analyze your orders' string='Tags' args: 'fsm.tag', 'fsm_order_tag_rel', 'fsm_order_id', 'tag_id'
  • team_id Many2one → fsm.team
    compute='_compute_team_id' index=True precompute=True readonly=False required=True store=True string='Team' tracking=True args: 'fsm.team'
  • template_id Many2one → fsm.template
    string='Template' args: 'fsm.template'
  • territory_id Many2one → res.territory
    related='location_id.territory_id' store=True string='Territory' args: 'res.territory'
  • todo Html
    compute='_compute_todo' precompute=True readonly=False store=True string='Instructions'
  • type Many2one → fsm.order.type
    args: 'fsm.order.type'
  • zip Char
    related='location_id.zip'
Public methods (8)
  • action_cancel(self)
  • action_complete(self)
  • can_unlink(self)
    :return True if the order can be deleted, False otherwise
  • check_day(self)
    @api.constrains('scheduled_date_start')
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_scheduled_date_end(self)
    @api.onchange('scheduled_date_end')
  • onchange_scheduled_duration(self)
    @api.onchange('scheduled_date_start', 'scheduled_duration')
  • write(self, vals)

New fields (3)
  • order_id Many2one → fsm.order
    comodel_name='fsm.order' ondelete='cascade' required=True string='Order'
  • signature Image
    max_height=1024 max_width=1024 required=True
  • signed_by Char
    required=True
Public methods (2)
  • action_sign(self)
  • default_get(self, fields)

New fields (2)
  • internal_type Selection
    default='fsm' selection=[('fsm', 'FSM')]
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True
  • active_partner Boolean
    readonly=True related='partner_id.active' string='Partner is Active'
  • calendar_id Many2one → resource.calendar
    string='Working Schedule' args: 'resource.calendar'
  • category_ids Many2many → fsm.category
    string='Categories' args: 'fsm.category'
  • mobile Char
  • partner_id Many2one → res.partner
    bypass_search_access=True delegate=True ondelete='restrict' required=True string='Related Partner' args: 'res.partner'
  • state_id Many2one
    domain="[('country_id', '=?', country_id)]" inherited=True readonly=False related='partner_id.state_id' store=True
  • team_id Many2one → fsm.team
    string='Team' args: 'fsm.team'
  • territory_ids Many2many → res.territory
    string='Territories' args: 'res.territory'
Public methods (2)
  • action_unarchive(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (1)
  • location_ids One2many → fsm.location.person
    string='Linked Locations' args: 'fsm.location.person', 'person_id'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • person_checked Boolean
    default=True
  • person_id Many2one → fsm.person
    required=True args: 'fsm.person', 'FSM Worker'
  • user_id Many2one → res.users
    default=<expr> ondelete='cascade' required=True args: 'res.users', 'Me'
Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • custom_color Char
    default='#FFFFFF' help='Use Hex Code only Ex:-#FFFFFF' args: 'Color Code'
  • description Text
    translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no record in that stage to display.' args: 'Folded in Kanban'
  • is_closed Boolean
    help='Services in this stage are considered as closed.' args: 'Is a close stage'
  • is_default Boolean
    help='Used a default stage' args: 'Is a default stage'
  • legend_priority Text
    help='Explanation text to help users using the star and priority mechanism on stages or orders that are in this stage.' translate=True args: 'Priority Management Explanation'
  • name Char
    required=True translate=True
  • require_signature Boolean
    help='Whether to ask for a Customer Signature when the order is in this stage.'
  • sequence Integer
    default=1 help='Used to order stages. Lower is better.'
  • stage_type Selection
    default='order' required=True args: [('order', 'Order'), ('equipment', 'Equipment'), ('location', 'Location'), ('worker', 'Worker')], 'Type'
  • team_ids Many2many → fsm.team
    default=<expr> string='Teams' args: 'fsm.team', 'order_team_stage_rel', 'stage_id', 'team_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • get_color_information(self)

New fields (5)
  • color Integer
    default=10 args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this tag' index=True required=True string='Company' args: 'res.company'
  • full_name Char
    compute='_compute_full_name'
  • name Char
    required=True
  • parent_id Many2one → fsm.tag
    string='Parent' args: 'fsm.tag'
Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True
  • color Integer
    args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> help='Company related to this team' index=True required=True string='Company' args: 'res.company'
  • description Text
    translate=True
  • name Char
    required=True translate=True
  • order_count Integer
    compute='_compute_order_count' string='Orders Count'
  • order_ids One2many → fsm.order
    domain=Domain('stage_id.is_closed', '=', False) string='Orders' args: 'fsm.order', 'team_id'
  • order_need_assign_count Integer
    compute='_compute_order_need_assign_count' string='Orders to Assign'
  • order_need_schedule_count Integer
    compute='_compute_order_need_schedule_count' string='Orders to Schedule'
  • sequence Integer
    default=1 help='Used to sort teams. Lower is better.'
  • stage_ids Many2many → fsm.stage
    default=<expr> string='Stages' args: 'fsm.stage', 'order_team_stage_rel', 'team_id', 'stage_id'
Public methods (0)

No public methods.

New fields (7)
  • category_ids Many2many → fsm.category
    string='Categories' args: 'fsm.category'
  • company_id Many2one → res.company
    help='Company related to this template' index=True string='Company' args: 'res.company'
  • duration Float
    help='Default duration in hours'
  • instructions Html
  • name Char
    required=True
  • team_id Many2one → fsm.team
    help='Choose a team to be set on orders of this template' string='Team' args: 'fsm.team'
  • type_id Many2one → fsm.order.type
    string='Type' args: 'fsm.order.type'
Public methods (0)

No public methods.

New fields (1)
  • fsm_record_type Selection
    args: [('person', 'Worker'), ('location', 'Location')], 'Record Type'
Public methods (4)
  • action_convert(self)
  • action_convert_location(self, partner)
  • action_convert_person(self, partner)
  • action_other_address(self, partner)

New fields (7)
  • auto_populate_equipments_on_order Boolean
    string='Auto-populate Equipments on Order based on Location'
  • auto_populate_persons_on_location Boolean
    string='Auto-populate Workers on Location based on Territory'
  • fsm_order_request_late_high Float
    default=8 string='Hours of Buffer for High Priority FS Orders'
  • fsm_order_request_late_low Float
    default=48 string='Hours of Buffer for Low Priority FS Orders'
  • fsm_order_request_late_lowest Float
    default=72 string='Hours of Buffer for Lowest Priority FS Orders'
  • fsm_order_request_late_medium Float
    default=24 string='Hours of Buffer for Medium Priority FS Orders'
  • search_on_complete_name Boolean
    string='Search Location By Hierarchy'
Public methods (0)

No public methods.

New fields (38)
  • auto_populate_equipments_on_order Boolean
    readonly=False related='company_id.auto_populate_equipments_on_order' string='Auto-populate equipments on Order based on the Location'
  • auto_populate_persons_on_location Boolean
    readonly=False related='company_id.auto_populate_persons_on_location' string='Auto-populate Workers on Location based on Territory'
  • fsm_order_request_late_high Float
    readonly=False related='company_id.fsm_order_request_late_high' string='Hours of Buffer for High Priority FS Orders'
  • fsm_order_request_late_low Float
    readonly=False related='company_id.fsm_order_request_late_low' string='Hours of Buffer for Low Priority FS Orders'
  • fsm_order_request_late_lowest Float
    readonly=False related='company_id.fsm_order_request_late_lowest' string='Hours of Buffer for Lowest Priority FS Orders'
  • fsm_order_request_late_medium Float
    readonly=False related='company_id.fsm_order_request_late_medium' string='Hours of Buffer for Medium Priority FS Orders'
  • group_fsm_category Boolean
    implied_group='fieldservice.group_fsm_category' string='Manage Categories'
  • group_fsm_equipment Boolean
    implied_group='fieldservice.group_fsm_equipment' string='Manage Equipment'
  • group_fsm_tag Boolean
    implied_group='fieldservice.group_fsm_tag' string='Manage Tags'
  • group_fsm_team Boolean
    implied_group='fieldservice.group_fsm_team' string='Manage Teams'
  • group_fsm_template Boolean
    implied_group='fieldservice.group_fsm_template' string='Manage Template'
  • group_fsm_territory Boolean
    implied_group='fieldservice.group_fsm_territory' string='Manage Territory'
  • module_fieldservice_account Boolean
    string='Invoice your FSM orders'
  • module_fieldservice_activity Boolean
    string='Manage FSM Activities'
  • module_fieldservice_agreement Boolean
    string='Manage Agreements'
  • module_fieldservice_change_management Boolean
    string='Change Management'
  • module_fieldservice_crm Boolean
    string='CRM'
  • module_fieldservice_distribution Boolean
    string='Manage Distribution'
  • module_fieldservice_fleet Boolean
    string='Link FSM vehicles to Fleet vehicles'
  • module_fieldservice_geoengine Boolean
    string='Use GeoEngine'
  • module_fieldservice_google_map Boolean
    string='Allow Field Service Google Map'
  • module_fieldservice_location_builder Boolean
    string='Use FSM Location Builder'
  • module_fieldservice_maintenance Boolean
    string='Link FSM orders to maintenance requests'
  • module_fieldservice_project Boolean
    string='Projects and Tasks'
  • module_fieldservice_purchase Boolean
    string='Manage subcontractors and their pricelists'
  • module_fieldservice_recurring Boolean
    string='Manage Recurring Orders'
  • module_fieldservice_repair Boolean
    string='Link FSM orders to MRP Repair orders'
  • module_fieldservice_route Boolean
    string='Manage routes'
  • module_fieldservice_route_account Boolean
    string='Check the amount collected during the route'
  • module_fieldservice_route_stock Boolean
    string='Check the inventory of the vehicle at the end of the route'
  • module_fieldservice_sale Boolean
    string='Sell FSM orders'
  • module_fieldservice_size Boolean
    string='Manage sizes for orders and locations'
  • module_fieldservice_skill Boolean
    string='Manage Skills'
  • module_fieldservice_stock Boolean
    string='Use Odoo Logistics'
  • module_fieldservice_substatus Boolean
    string='Manage Sub-Statuses'
  • module_fieldservice_timeline Boolean
    string='Allow Field Service Web Timeline View'
  • module_fieldservice_vehicle Boolean
    string='Manage Vehicles'
  • search_on_complete_name Boolean
    readonly=False related='company_id.search_on_complete_name' string='Search Location By Hierarchy'
Public methods (0)

No public methods.

New fields (7)
  • fsm_location Boolean
    args: 'Is a FS Location'
  • fsm_location_ids One2many → fsm.location
    comodel_name='fsm.location' inverse_name='partner_id' readonly=True string='Related FS Location'
  • fsm_person Boolean
    args: 'Is a FS Worker'
  • owned_location_count Integer
    compute='_compute_owned_location_count' string='# of Owned Locations'
  • owned_location_ids One2many → fsm.location
    domain=Domain('parent_id', '=', False) string='Owned Locations' args: 'fsm.location', 'owner_id'
  • service_location_id Many2one → fsm.location
    string='Primary Service Location' args: 'fsm.location'
  • type Selection
    selection_add=[('fsm_location', 'Location')]
Public methods (5)
  • action_fsm_convert_to_location(self)
  • action_fsm_convert_to_person(self)
  • action_open_owned_locations(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • person_id Many2one → fsm.person
    string='Primary Assignment' args: 'fsm.person'
  • person_ids Many2many → fsm.person
    string='Field Service Workers' args: 'fsm.person'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…