Repository
OCA/helpdesk · module folder · Try on Runboat
Module version
1.1.1
Category
After-Sales
Folder size
2.5 MB
License
AGPL-3
Application
Yes
Auto-installable
No
Website
https://github.com/OCA/helpdesk
Last tracking update
2026-08-13 11:29:17
Authors
Odoo Community Association (OCA), Factor Libre, Tecnativa, Domatix, ForgeFlow, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
Maintainers
Odoo Community Association (OCA), Factor Libre, Tecnativa, Domatix, ForgeFlow, AdaptiveCity, C2i Change 2 Improve, SDi Soluciones
Committers
Pedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, stferraro
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
helpdesk_mgmt_activity, helpdesk_mgmt_fieldservice, helpdesk_mgmt_project, helpdesk_mgmt_rating, helpdesk_product, helpdesk_ticket_close_inactive, helpdesk_ticket_partner_response, helpdesk_ticket_related, helpdesk_type
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 form 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 form Inherits base.view_partner_form
HTTP endpoints (5)
Route(s)HandlerAuthTypeMethodsFlags
/my/ticket/<int:ticket_id>, /my/ticket/<int:ticket_id>/<access_token> CustomerPortalHelpdesk.portal_my_ticket public http ALL website
/my/tickets, /my/tickets/page/<int:page> CustomerPortalHelpdesk.portal_my_tickets user http ALL website
/new/ticket HelpdeskTicketController.create_new_ticket user http ALL website
/submitted/ticket HelpdeskTicketController.submit_ticket user http ALL sudo website
/ticket/close HelpdeskTicketController.support_ticket_close user http ALL sudo
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.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…