Helpdesk Management

helpdesk_mgmt
REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/19.0/helpdesk_mgmt
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, stferraro
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds Helpdesk functionality in Odoo.

Code Analysis

Views touched (33)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_docs_entry portal_docs_entry ir.ui.view qweb Inherits portal.portal_docs_entry
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_searchbar portal_searchbar ir.ui.view qweb Inherits portal.portal_searchbar
portal_ticket_list Ticket List ir.ui.view qweb New
portal_ticket_new_button portal_ticket_new_button ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.list helpdesk.ticket list New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.list helpdesk.ticket.category list New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.list helpdesk.ticket.channel list New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.list helpdesk.ticket.team list New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_duplicate_form helpdesk.ticket.duplicate.wizard.form helpdesk.ticket.duplicate.wizard form New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.list helpdesk.ticket.stage list New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.list helpdesk.ticket.tag list New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (12)

New fields (30)
  • active Boolean
    default=True
  • assigned_date Datetime
    copy=False
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    copy=False
  • color Integer
    string='Color Index'
  • commercial_partner_id Many2one
    related='partner_id.commercial_partner_id' store=True string='Commercial Partner'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • duplicate_count Integer
    compute='_compute_duplicate_count'
  • duplicate_id Many2one → helpdesk.ticket
    copy=False string='Duplicate of' tracking=True args: 'helpdesk.ticket'
  • duplicate_ids One2many → helpdesk.ticket
    string='Duplicate tickets' args: 'helpdesk.ticket', 'duplicate_id'
  • duplicate_tracking_enabled Boolean
    related='company_id.helpdesk_mgmt_duplicate_tracking'
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')]
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' compute='_compute_stage_id' copy=False domain="['|',('team_ids', '=', team_id),('team_ids','=',False)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' compute='_compute_team_id' index=True readonly=False store=True string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True readonly=False store=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (10)
  • action_duplicate_tickets(self)
  • action_open_duplicate_wizard(self)
  • action_view_duplicates(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • write(self, vals)

New fields (9)
  • active Boolean
    default=True
  • child_id One2many → helpdesk.ticket.category
    args: 'helpdesk.ticket.category', 'parent_id', 'Child Categories'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True search='_search_complete_name'
  • name Char
    required=True translate=True
  • parent_id Many2one → helpdesk.ticket.category
    index=True ondelete='cascade' args: 'helpdesk.ticket.category', 'Parent Category'
  • parent_path Char
    index=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (3)
  • duplicate_of_id Many2one → helpdesk.ticket
    required=True args: 'helpdesk.ticket'
  • target_stage_id Many2one → helpdesk.ticket.stage
    args: 'helpdesk.ticket.stage'
  • ticket_id Many2one → helpdesk.ticket
    required=True args: 'helpdesk.ticket'
Public methods (1)
  • action_confirm(self)

New fields (11)
  • active Boolean
    default=True
  • close_from_portal Boolean
    help='Display button in portal ticket form to allow closing ticket with this stage as target.'
  • closed Boolean
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • team_ids Many2many → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Specific team that uses this stage. If it is empty all teams could uses' string='Helpdesk Teams'
  • unattended Boolean
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (18)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True search='_search_complete_name'
  • name Char
    required=True translate=True
  • parent_id Many2one → helpdesk.ticket.team
    index=True string='Parent Team' args: 'helpdesk.ticket.team'
  • parent_path Char
    index=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (1)
  • retrieve_dashboard(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • helpdesk_mgmt_duplicate_ticket_stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' default=False string='Move duplicate tickets to this stage'
  • helpdesk_mgmt_duplicate_tracking Boolean
    default=False string='Enable duplicate ticket tracking.'
  • helpdesk_mgmt_portal_category_id_required Boolean
    default=True string='Required Category field in Helpdesk portal'
  • helpdesk_mgmt_portal_select_category Boolean
    string='Select category in Helpdesk portal'
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
  • helpdesk_mgmt_portal_team_id_required Boolean
    default=True string='Required Team field in Helpdesk portal'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    default=True string='Auto assign tickets'
Public methods (0)

No public methods.

New fields (7)
  • helpdesk_mgmt_duplicate_ticket_stage_id Many2one
    readonly=False related='company_id.helpdesk_mgmt_duplicate_ticket_stage_id'
  • helpdesk_mgmt_duplicate_tracking Boolean
    readonly=False related='company_id.helpdesk_mgmt_duplicate_tracking'
  • helpdesk_mgmt_portal_category_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_category_id_required'
  • helpdesk_mgmt_portal_select_category Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_category'
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
  • helpdesk_mgmt_portal_team_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_team_id_required'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    readonly=False related='company_id.helpdesk_mgmt_ticket_auto_assign'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/18.0/helpdesk_mgmt
VERSION
VERSION 1.17.1
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Enric Tobella, Carlos Lopez, Yann Papouin, Víctor Martínez, Weblate, OCA-git-bot, Iván Todorovich, oca-ci, Vincent Van Rossem, pilarvargas-tecnativa, Marcel Savegnago, Luis Rodriguez, Anjeel Haria, juancarlosonate-tecnativa, JasminSForgeFlow, Iria Alonso, David Bañón, christian-ramos-tecnativa, david-banon-tecnativa, Dante Pereyra, Laura Pérez // Solvos, Martinez Julien
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds Helpdesk functionality in Odoo.

Code Analysis

Views touched (33)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_docs_entry portal_docs_entry ir.ui.view qweb Inherits portal.portal_docs_entry
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb Inherits portal.portal_sidebar
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_searchbar portal_searchbar ir.ui.view qweb Inherits portal.portal_searchbar
portal_ticket_list Ticket List ir.ui.view qweb New
portal_ticket_new_button portal_ticket_new_button ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.list helpdesk.ticket list New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.list helpdesk.ticket.category list New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.list helpdesk.ticket.channel list New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.list helpdesk.ticket.team list New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_duplicate_form helpdesk.ticket.duplicate.wizard.form helpdesk.ticket.duplicate.wizard form New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.list helpdesk.ticket.stage list New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.list helpdesk.ticket.tag list New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (12)

New fields (30)
  • active Boolean
    default=True
  • assigned_date Datetime
    copy=False
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    copy=False
  • color Integer
    string='Color Index'
  • commercial_partner_id Many2one
    related='partner_id.commercial_partner_id' store=True string='Commercial Partner'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • duplicate_count Integer
    compute='_compute_duplicate_count'
  • duplicate_id Many2one → helpdesk.ticket
    copy=False string='Duplicate of' tracking=True args: 'helpdesk.ticket'
  • duplicate_ids One2many → helpdesk.ticket
    string='Duplicate tickets' args: 'helpdesk.ticket', 'duplicate_id'
  • duplicate_tracking_enabled Boolean
    related='company_id.helpdesk_mgmt_duplicate_tracking'
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')]
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' compute='_compute_stage_id' copy=False domain="['|',('team_ids', '=', team_id),('team_ids','=',False)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' compute='_compute_team_id' index=True readonly=False store=True string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True readonly=False store=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (10)
  • action_duplicate_tickets(self)
  • action_open_duplicate_wizard(self)
  • action_view_duplicates(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • write(self, vals)

New fields (9)
  • active Boolean
    default=True
  • child_id One2many → helpdesk.ticket.category
    args: 'helpdesk.ticket.category', 'parent_id', 'Child Categories'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True search='_search_complete_name'
  • name Char
    required=True translate=True
  • parent_id Many2one → helpdesk.ticket.category
    index=True ondelete='cascade' args: 'helpdesk.ticket.category', 'Parent Category'
  • parent_path Char
    index=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (3)
  • duplicate_of_id Many2one → helpdesk.ticket
    required=True args: 'helpdesk.ticket'
  • target_stage_id Many2one → helpdesk.ticket.stage
    args: 'helpdesk.ticket.stage'
  • ticket_id Many2one → helpdesk.ticket
    required=True args: 'helpdesk.ticket'
Public methods (1)
  • action_confirm(self)

New fields (11)
  • active Boolean
    default=True
  • close_from_portal Boolean
    help='Display button in portal ticket form to allow closing ticket with this stage as target.'
  • closed Boolean
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • team_ids Many2many → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Specific team that uses this stage. If it is empty all teams could uses' string='Helpdesk Teams'
  • unattended Boolean
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (18)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True search='_search_complete_name'
  • name Char
    required=True translate=True
  • parent_id Many2one → helpdesk.ticket.team
    index=True string='Parent Team' args: 'helpdesk.ticket.team'
  • parent_path Char
    index=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (1)
  • retrieve_dashboard(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • helpdesk_mgmt_duplicate_ticket_stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' default=False string='Move duplicate tickets to this stage'
  • helpdesk_mgmt_duplicate_tracking Boolean
    default=False string='Enable duplicate ticket tracking.'
  • helpdesk_mgmt_portal_category_id_required Boolean
    default=True string='Required Category field in Helpdesk portal'
  • helpdesk_mgmt_portal_select_category Boolean
    string='Select category in Helpdesk portal'
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
  • helpdesk_mgmt_portal_team_id_required Boolean
    default=True string='Required Team field in Helpdesk portal'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    default=True string='Auto assign tickets'
Public methods (0)

No public methods.

New fields (7)
  • helpdesk_mgmt_duplicate_ticket_stage_id Many2one
    readonly=False related='company_id.helpdesk_mgmt_duplicate_ticket_stage_id'
  • helpdesk_mgmt_duplicate_tracking Boolean
    readonly=False related='company_id.helpdesk_mgmt_duplicate_tracking'
  • helpdesk_mgmt_portal_category_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_category_id_required'
  • helpdesk_mgmt_portal_select_category Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_category'
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
  • helpdesk_mgmt_portal_team_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_team_id_required'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    readonly=False related='company_id.helpdesk_mgmt_ticket_auto_assign'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/17.0/helpdesk_mgmt
VERSION
VERSION 1.10.4
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSPedro M. Baeza, Enric Tobella, Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Alvaro, pilarvargas-tecnativa, Marcel Savegnago, Gil Arasa Verge, Luis Rodriguez, PicchiSeba, Antoni Marroig Campomar, juancarlosonate-tecnativa, Iria Alonso, david-banon-tecnativa, Dante Pereyra, Laura Pérez // Solvos
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds Helpdesk functionality in Odoo.

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_ticket_list Ticket List ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (26)
  • active Boolean
    default=True
  • assigned_date Datetime
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
  • color Integer
    string='Color Index'
  • commercial_partner_id Many2one
    related='partner_id.commercial_partner_id' store=True string='Commercial Partner'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')]
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' compute='_compute_stage_id' copy=False domain="['|',('team_ids', '=', team_id),('team_ids','=',False)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' compute='_compute_team_id' index=True readonly=False store=True string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True readonly=False store=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (8)
  • action_duplicate_tickets(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • write(self, vals)

New fields (9)
  • active Boolean
    default=True
  • child_id One2many → helpdesk.ticket.category
    args: 'helpdesk.ticket.category', 'parent_id', 'Child Categories'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True
  • name Char
    required=True translate=True
  • parent_id Many2one → helpdesk.ticket.category
    index=True ondelete='cascade' args: 'helpdesk.ticket.category', 'Parent Category'
  • parent_path Char
    index=True unaccent=False
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True
  • close_from_portal Boolean
    help='Display button in portal ticket form to allow closing ticket with this stage as target.'
  • closed Boolean
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • team_ids Many2many → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Specific team that uses this stage. If it is empty all teams could uses' string='Helpdesk Teams'
  • unattended Boolean
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (18)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • complete_name Char
    compute='_compute_complete_name' recursive=True store=True
  • name Char
    required=True
  • parent_id Many2one → helpdesk.ticket.team
    index=True string='Parent Team' args: 'helpdesk.ticket.team'
  • parent_path Char
    index=True unaccent=False
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • helpdesk_mgmt_portal_category_id_required Boolean
    default=True string='Required Category field in Helpdesk portal'
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
  • helpdesk_mgmt_portal_team_id_required Boolean
    default=True string='Required Team field in Helpdesk portal'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    default=True string='Auto assign tickets'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_mgmt_portal_category_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_category_id_required'
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
  • helpdesk_mgmt_portal_team_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_team_id_required'
  • helpdesk_mgmt_ticket_auto_assign Boolean
    readonly=False related='company_id.helpdesk_mgmt_ticket_auto_assign'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/16.0/helpdesk_mgmt
VERSION
VERSION 2.13.1
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSRonald Portier, eLBati, Pedro M. Baeza, Enric Tobella, Yann Papouin, Víctor Martínez, Weblate, OCA-git-bot, Florent THOMAS, oca-ci, Victor Laskurain, Marcel Savegnago, David Alonso // Solvos, Carolina Fernandez, Vincent Hatakeyama, Luis Rodriguez, PicchiSeba, Anjeel Haria, CristianoMafraJunior, Mohajiro, Nicolas Delbovier, Zu83, Joan Ribot Terrasa
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (31)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_docs_entry_ticket_button portal_docs_entry_ticket_button ir.ui.view qweb Inherits portal.portal_docs_entry
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home_tickets_entry Show Tickets ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_ticket_list Ticket List ir.ui.view qweb New
portal_ticket_new_button portal_ticket_new_button ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (26)
  • active Boolean
    default=True
  • assigned_date Datetime
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
  • color Integer
    string='Color Index'
  • commercial_partner_id Many2one
    related='partner_id.commercial_partner_id' store=True string='Commercial Partner'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    compute='_compute_partner_email' readonly=False store=True string='Email'
  • partner_id Many2one → res.partner
    check_company=True comodel_name='res.partner' string='Contact'
  • partner_name Char
    compute='_compute_partner_name' readonly=False store=True
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')]
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' compute='_compute_stage_id' copy=False domain="['|',('team_ids', '=', team_id),('team_ids','=',False)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' ondelete='restrict' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' index=True string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' compute='_compute_user_id' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True readonly=False store=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (8)
  • action_duplicate_tickets(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • name_get(self)
  • write(self, vals)

New fields (5)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • default_team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' string='Default team'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True
  • close_from_portal Boolean
    help='Display button in portal ticket form to allow closing ticket with this stage as target.'
  • closed Boolean
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • team_ids Many2many → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Specific team that uses this stage. If it is empty all teams could uses' string='Helpdesk Teams'
  • unattended Boolean
Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • helpdesk_mgmt_portal_category_id_required Boolean
    default=True string='Required Category field in Helpdesk portal'
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
  • helpdesk_mgmt_portal_team_id_required Boolean
    default=True string='Required Team field in Helpdesk portal'
Public methods (0)

No public methods.

New fields (3)
  • helpdesk_mgmt_portal_category_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_category_id_required'
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
  • helpdesk_mgmt_portal_team_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_team_id_required'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/15.0/helpdesk_mgmt
VERSION
VERSION 4.3.5
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow, Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSeLBati, Pedro M. Baeza, GitHub, Lois Rilo, David Alonso, Yann Papouin, OCA Transbot, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, David, oca-ci, mariadforgeflow, Jorge Luis Quinteros, Carlos Roca, David Alonso // Solvos, Carolina Fernandez, Fernando La Chica, Vincent Hatakeyama, DavidJForgeFlow, Jacob Oldfield, Houzéfa Abbasbhay
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_ticket_list Ticket List ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (25)
  • active Boolean
    default=True
  • assigned_date Datetime
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')]
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' compute='_compute_stage_id' copy=False domain="['|',('team_ids', '=', team_id),('team_ids','=',False)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' index=True string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (8)
  • action_duplicate_tickets(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • name_get(self)
  • write(self, vals)

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True
  • close_from_portal Boolean
    help='Display button in portal ticket form to allow closing ticket with this stage as target.'
  • closed Boolean
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • team_ids Many2many → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Specific team that uses this stage. If it is empty all teams could uses' string='Helpdesk Teams'
  • unattended Boolean
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • helpdesk_mgmt_portal_category_id_required Boolean
    default=True string='Required Category field in Helpdesk portal'
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
  • helpdesk_mgmt_portal_team_id_required Boolean
    default=True string='Required Team field in Helpdesk portal'
Public methods (0)

No public methods.

New fields (3)
  • helpdesk_mgmt_portal_category_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_category_id_required'
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
  • helpdesk_mgmt_portal_team_id_required Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_team_id_required'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/14.0/helpdesk_mgmt
VERSION
VERSION 2.14.1
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Enric Tobella, Lois Rilo, David Alonso, Yann Papouin, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, Mathieu Benoit, oca-travis, Weblate, OCA-git-bot, Mourad, Pierrick Brun, David, oca-ci, mariadforgeflow, Marcel Savegnago, David Alonso // Solvos, DavidJForgeFlow, MarcBForgeFlow, oca-git-bot, Guillermo Gallego, Florian Mounier, Alessio Renda, PicchiSeba, victor ekstrom, Michael Telahun, JorgeQuinteros
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (30)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_partner_view_form helpdesk.ticket.partner.view.form helpdesk.ticket.partner form New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My Tickets ir.ui.view qweb New
portal_ticket_list Ticket List ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (11)

New fields (26)
  • active Boolean
    default=True
  • assigned_date Datetime
    string='Assigned Date'
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    string='Closed Date'
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')] string='Kanban State'
  • last_stage_update Datetime
    default=fields.Datetime.now string='Last Stage Update'
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_lang Selection
    args: _lang_get, 'Language'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')] string='Priority'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True string='Sequence'
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' copy=False default=_get_default_stage_id group_expand='_read_group_stage_ids' index=True ondelete='restrict' string='Stage' tracking=True
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (10)
  • action_do_send_email(self)
    Opens a wizard to compose an email
  • action_duplicate_tickets(self)
  • action_send_email(self)
    before sending the email, create/select the partner if not already done
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • name_get(self)
  • write(self, vals)

New fields (5)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • default_team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' string='Default team'
  • name Char
    required=True string='Name' translate=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (6)
  • action Selection
    required=True string='Quotation Customer' args: [('create', 'Create a new customer'), ('exist', 'Link to an existing customer')]
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    args: 'res.partner', 'Customer'
  • partner_lang Selection
    selection=_lang_get string='Language'
  • partner_name Char
    string='Name'
  • ticket_id Many2one → helpdesk.ticket
    required=True args: 'helpdesk.ticket', 'Associated Lead'
Public methods (2)
  • action_apply(self)
    Create or select the partner for the ticket and proceed to the email composer
  • default_get(self, fields)
    @api.model

New fields (9)
  • active Boolean
    default=True
  • closed Boolean
    string='Closed'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • unattended Boolean
    string='Unattended'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True string='Name'
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (0)

No public methods.

New fields (1)
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
Public methods (0)

No public methods.

New fields (1)
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/13.0/helpdesk_mgmt
VERSION
VERSION 2.7.0
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Lois Rilo, Yann Papouin, cubells, OCA Transbot, Miquel Raïch, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Darío Lodeiros, David, Jan Verbeek, oca-ci, David Alonso (Solvos), Mateu Griful, David James, David Alonso // Solvos, DavidJForgeFlow, Qaidjohar
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My tickets ir.ui.view qweb New
res_config_settings_view_form res.config.settings xpath Inherits base.res_config_settings_view_form
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (10)

New fields (24)
  • active Boolean
    default=True
  • assigned_date Datetime
    string='Assigned Date'
  • attachment_ids One2many → ir.attachment
    comodel_name='ir.attachment' domain=[('res_model', '=', 'helpdesk.ticket')] inverse_name='res_id' string='Media Attachments'
  • category_id Many2one → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • channel_id Many2one → helpdesk.ticket.channel
    comodel_name='helpdesk.ticket.channel' help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    string='Closed Date'
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    selection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')] string='Kanban State'
  • last_stage_update Datetime
    default=fields.Datetime.now string='Last Stage Update'
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
    string='Email'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' string='Contact'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', _('Low')), ('1', _('Medium')), ('2', _('High')), ('3', _('Very High'))] string='Priority'
  • stage_id Many2one → helpdesk.ticket.stage
    comodel_name='helpdesk.ticket.stage' copy=False default=_get_default_stage_id group_expand='_read_group_stage_ids' index=True ondelete='restrict' string='Stage' track_visibility='onchange'
  • tag_ids Many2many → helpdesk.ticket.tag
    comodel_name='helpdesk.ticket.tag' string='Tags'
  • team_id Many2one → helpdesk.ticket.team
    comodel_name='helpdesk.ticket.team' string='Team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    comodel_name='res.users' domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]" index=True string='Assigned user' tracking=True
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (8)
  • action_duplicate_tickets(self)
  • assign_to_me(self)
  • copy(self, default=None)
  • create(self, vals)
    @api.model
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    Override message_update to subscribe partners
  • name_get(self)
  • write(self, vals)

New fields (4)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True string='Name'
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True
  • sequence Integer
    default=10
Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True
  • closed Boolean
    string='Closed'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    comodel_name='mail.template' domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • unattended Boolean
    string='Unattended'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True
  • alias_id Many2one → mail.alias
    comodel_name='mail.alias' help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.' ondelete='restrict' required=True string='Email'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 string='Color Index'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> string='Company'
  • name Char
    required=True string='Name'
  • sequence Integer
    default=10
  • show_in_portal Boolean
    default=True help='Allow to select this team when creating a new ticket in the portal.' string='Show in portal form'
  • ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='team_id' string='Tickets'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' string='Team Leader'
  • user_ids Many2many → res.users
    column1='helpdesk_ticket_team_id' column2='res_users_id' comodel_name='res.users' relation='helpdesk_ticket_team_res_users_rel' string='Members'
Public methods (2)
  • get_alias_model_name(self, vals)
  • get_alias_values(self)

New fields (1)
  • helpdesk_mgmt_portal_select_team Boolean
    string='Select team in Helpdesk portal'
Public methods (0)

No public methods.

New fields (1)
  • helpdesk_mgmt_portal_select_team Boolean
    readonly=False related='company_id.helpdesk_mgmt_portal_select_team'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)

New fields (1)
  • helpdesk_team_ids Many2many → helpdesk.ticket.team
    column1='res_users_id' column2='helpdesk_ticket_team_id' comodel_name='helpdesk.ticket.team' relation='helpdesk_ticket_team_res_users_rel'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/12.0/helpdesk_mgmt
VERSION
VERSION 1.26.0
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSeLBati, Pedro M. Baeza, GitHub, Bhavesh Odedra, David Alonso, Luis Felipe Mileo, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Wolfgang Pichler, Jan Verbeek, emagdalena, luffah, samuel, David Alonso (Solvos), Dario Lodeiros, Marcel Savegnago, Alessandro Uffreduzzi, Mateu Griful, Tony Gu, marcelsavegnago, dsi, EDallas89, gorkamagra, miguelestevan, cramos
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (29)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My tickets ir.ui.view qweb New
report_helpdesk_ticket report_helpdesk_ticket ir.ui.view qweb New
report_helpdesk_ticket_document report_helpdesk_ticket_document ir.ui.view qweb New
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (8)

New fields (24)
  • active Boolean
    default=True
  • assigned_date Datetime
    string='Assigned Date'
  • category_id Many2one → helpdesk.ticket.category
    string='Category' args: 'helpdesk.ticket.category'
  • channel_id Many2one → helpdesk.ticket.channel
    help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel' args: 'helpdesk.ticket.channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    string='Closed Date'
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • description Html
    required=True sanitize_style=True
  • kanban_state Selection
    string='Kanban State' args: [('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now string='Last Stage Update'
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', _('Low')), ('1', _('Medium')), ('2', _('High')), ('3', _('Very High'))] string='Priority'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of tickets.' index=True string='Sequence'
  • stage_id Many2one → helpdesk.ticket.stage
    default=_get_default_stage_id group_expand='_read_group_stage_ids' string='Stage' track_visibility='onchange' args: 'helpdesk.ticket.stage'
  • tag_ids Many2many → helpdesk.ticket.tag
    args: 'helpdesk.ticket.tag'
  • team_id Many2one → helpdesk.ticket.team
    args: 'helpdesk.ticket.team'
  • unattended Boolean
    related='stage_id.unattended' store=True
  • user_id Many2one → res.users
    index=True string='Assigned user' track_visibility='onchange' args: 'res.users'
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (12)
  • assign_to_me(self)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • get_access_link(self)
  • message_get_suggested_recipients(self)
    @api.multi
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    @api.multi
    Override message_update to subscribe partners
  • name_get(self)
    @api.multi
  • partner_can_access(self)
  • send_partner_mail(self)
  • send_user_mail(self)
  • write(self, vals)
    @api.multi

New fields (3)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (10)
  • active Boolean
    default=True
  • closed Boolean
    string='Closed'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • description Html
    sanitize_style=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template' args: 'mail.template'
  • name Char
    required=True string='Stage Name' translate=True
  • portal_user_can_close Boolean
  • sequence Integer
    default=1
  • unattended Boolean
    string='Unattended'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (13)
  • active Boolean
    default=True
  • alias_id Many2one
    help='The email address associated with this channel. New emails received will automatically create new tickets assigned to the channel.'
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True string='Name'
  • ticket_ids One2many → helpdesk.ticket
    string='Tickets' args: 'helpdesk.ticket', 'team_id'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • todo_ticket_ids One2many → helpdesk.ticket
    domain=[('closed', '=', False)] string='Todo tickets' args: 'helpdesk.ticket', 'team_id'
  • user_ids Many2many → res.users
    comodel_name='res.users' string='Members'
Public methods (2)
  • get_alias_model_name(self, vals)
  • get_alias_values(self)

New fields (0)

No new fields.

Public methods (1)
  • check(self, mode, values=None)
    @api.model

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)
REPOSITORY
REPOSITORYOCA/helpdesk
GIT
GIThttps://github.com/OCA/helpdesk.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/helpdesk/tree/11.0/helpdesk_mgmt
VERSION
VERSION 1.12.0
CATEGORY
CATEGORYAfter-Sales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Factor Libre, Domatix, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
COMMITTERS
COMMITTERSRaphaël Valyi, Pedro M. Baeza, GitHub, OCA Transbot, oca-travis, OCA-git-bot, Jan Verbeek, Ignacio Serra, luffah, Daniel Cano, Yevgeniy Bespal, alvaro, samuel, Maria Alhambra
WEBSITE
WEBSITEhttps://github.com/OCA/helpdesk
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - http_routing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (27)
XML IDNameModelTypeStatus
helpdesk_ticket_kanban_view helpdesk.ticket.team.kanban helpdesk.ticket.team kanban New
helpdesk_ticket_view_search helpdesk.ticket.view.search helpdesk.ticket search New
helpdesk_ticket_views_pivot helpdesk.ticket.view.pivot helpdesk.ticket pivot New
portal_create_ticket Create Ticket ir.ui.view qweb New
portal_helpdesk_ticket_page Ticket Portal Template ir.ui.view qweb New
portal_layout Portal layout: ticket menu entry ir.ui.view qweb Inherits portal.portal_layout
portal_my_home Portal My Home : ticket entries ir.ui.view qweb Inherits portal.portal_my_home
portal_my_tickets My tickets ir.ui.view qweb New
ticket_view_form helpdesk.ticket.view.form helpdesk.ticket form New
ticket_view_tree helpdesk.ticket.view.tree helpdesk.ticket tree New
view_helpdesk_category_form view.helpdesk_category.form helpdesk.ticket.category form New
view_helpdesk_category_tree view.helpdesk_category.tree helpdesk.ticket.category tree New
view_helpdesk_channel_form view.helpdesk_channel.form helpdesk.ticket.channel form New
view_helpdesk_channel_tree view.helpdesk_channel.tree helpdesk.ticket.channel tree New
view_helpdesk_team_form view.helpdesk_team.form helpdesk.ticket.team form New
view_helpdesk_team_tree view.helpdesk_team.tree helpdesk.ticket.team tree New
view_helpdesk_ticket_category_search helpdesk.ticket.category.search helpdesk.ticket.category search New
view_helpdesk_ticket_channel_search helpdesk.ticket.channel.search helpdesk.ticket.channel search New
view_helpdesk_ticket_kanban helpdesk.ticket.kanban helpdesk.ticket kanban New
view_helpdesk_ticket_stage_form helpdesk.ticket.stage.form helpdesk.ticket.stage form New
view_helpdesk_ticket_stage_search helpdesk.ticket.stage.search helpdesk.ticket.stage search New
view_helpdesk_ticket_stage_tree helpdesk.ticket.stage.tree helpdesk.ticket.stage tree New
view_helpdesk_ticket_tag_form helpdesk.ticket.tag.form helpdesk.ticket.tag form New
view_helpdesk_ticket_tag_search helpdesk.ticket.tag.search helpdesk.ticket.tag search New
view_helpdesk_ticket_tag_tree helpdesk.ticket.tag.tree helpdesk.ticket.tag tree New
view_helpdesk_ticket_team_search helpdesk.ticket.team.search helpdesk.ticket.team search New
view_partner_form view_partner_form res.partner div Inherits base.view_partner_form
Models touched (7)

New fields (23)
  • assigned_date Datetime
    string='Assigned Date'
  • attachment_ids One2many → ir.attachment
    domain=[('res_model', '=', 'helpdesk.ticket')] string='Media Attachments' args: 'ir.attachment', 'res_id'
  • category_id Many2one → helpdesk.ticket.category
    string='Category' args: 'helpdesk.ticket.category'
  • channel_id Many2one → helpdesk.ticket.channel
    help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)' string='Channel' args: 'helpdesk.ticket.channel'
  • closed Boolean
    related='stage_id.closed'
  • closed_date Datetime
    string='Closed Date'
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • description Html
    sanitize_style=True strip_classes=True
  • kanban_state Selection
    string='Kanban State' args: [('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')]
  • last_stage_update Datetime
    default=fields.Datetime.now string='Last Stage Update'
  • name Char
    required=True string='Title'
  • number Char
    default='/' readonly=True string='Ticket number'
  • partner_email Char
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • partner_name Char
  • priority Selection
    default='1' selection=[('0', _('Low')), ('1', _('Medium')), ('2', _('High')), ('3', _('Very High'))] string='Priority'
  • stage_id Many2one → helpdesk.ticket.stage
    default=_get_default_stage_id group_expand='_read_group_stage_ids' string='Stage' track_visibility='onchange' args: 'helpdesk.ticket.stage'
  • tag_ids Many2many → helpdesk.ticket.tag
    args: 'helpdesk.ticket.tag'
  • team_id Many2one → helpdesk.ticket.team
    args: 'helpdesk.ticket.team'
  • unattended Boolean
    related='stage_id.unattended'
  • user_id Many2one → res.users
    string='Assigned user' args: 'res.users'
  • user_ids Many2many → res.users
    comodel_name='res.users' related='team_id.user_ids' string='Users'
Public methods (8)
  • assign_to_me(self)
  • copy(self, default=None)
    @api.multi
  • create(self, vals)
    @api.model
  • message_get_suggested_recipients(self)
    @api.multi
  • message_new(self, msg, custom_values=None)
    @api.model
    Override message_new from mail gateway so we can set correct default values.
  • message_update(self, msg, update_vals=None)
    @api.multi
    Override message_update to subscribe partners
  • send_user_mail(self)
  • write(self, vals)
    @api.multi

New fields (3)
  • active Boolean
    default=True string='Active'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True
  • closed Boolean
    string='Closed'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • description Html
    sanitize_style=True strip_classes=True translate=True
  • fold Boolean
    help='This stage is folded in the kanban view when there are no records in that stage to display.' string='Folded in Kanban'
  • mail_template_id Many2one → mail.template
    domain=[('model', '=', 'helpdesk.ticket')] help='If set an email will be sent to the customer when the ticketreaches this step.' string='Email Template' args: 'mail.template'
  • name Char
    required=True string='Stage Name' translate=True
  • sequence Integer
    default=1
  • unattended Boolean
    string='Unattended'
Public methods (0)

No public methods.

New fields (4)
  • active Boolean
    default=True
  • color Integer
    string='Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (12)
  • active Boolean
    default=True
  • category_ids Many2many → helpdesk.ticket.category
    comodel_name='helpdesk.ticket.category' string='Category'
  • color Integer
    default=0 args: 'Color Index'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True string='Name'
  • ticket_ids One2many → helpdesk.ticket
    string='Tickets' args: 'helpdesk.ticket', 'team_id'
  • todo_ticket_count Integer
    compute='_compute_todo_tickets' string='Number of tickets'
  • todo_ticket_count_high_priority Integer
    compute='_compute_todo_tickets' string='Number of tickets in high priority'
  • todo_ticket_count_unassigned Integer
    compute='_compute_todo_tickets' string='Number of tickets unassigned'
  • todo_ticket_count_unattended Integer
    compute='_compute_todo_tickets' string='Number of tickets unattended'
  • todo_ticket_ids One2many → helpdesk.ticket
    string='Todo tickets' args: 'helpdesk.ticket', 'team_id'
  • user_ids Many2many → res.users
    comodel_name='res.users' string='Members'
Public methods (0)

No public methods.

New fields (4)
  • helpdesk_ticket_active_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket active count'
  • helpdesk_ticket_count Integer
    compute='_compute_helpdesk_ticket_count' string='Ticket count'
  • helpdesk_ticket_count_string Char
    compute='_compute_helpdesk_ticket_count' string='Tickets'
  • helpdesk_ticket_ids One2many → helpdesk.ticket
    comodel_name='helpdesk.ticket' inverse_name='partner_id' string='Related tickets'
Public methods (1)
  • action_view_helpdesk_tickets(self)