TIP: You can type at any time to perform a new search.
Helpdesk Management
helpdesk_mgmt · OCA/helpdesk
- 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 ID | Name | Model | Type | Status |
|---|---|---|---|---|
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) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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)
-
activeBooleandefault=True -
assigned_dateDatetimecopy=False -
attachment_idsOne2many → ir.attachmentcomodel_name='ir.attachment'domain=[('res_model', '=', 'helpdesk.ticket')]inverse_name='res_id'string='Media Attachments' -
category_idMany2one → helpdesk.ticket.categorycomodel_name='helpdesk.ticket.category'string='Category' -
channel_idMany2one → helpdesk.ticket.channelcomodel_name='helpdesk.ticket.channel'help='Channel indicates where the source of a ticketcomes from (it could be a phone call, an email...)'string='Channel' -
closedBooleanrelated='stage_id.closed' -
closed_dateDatetimecopy=False -
colorIntegerstring='Color Index' -
commercial_partner_idMany2onerelated='partner_id.commercial_partner_id'store=Truestring='Commercial Partner' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>required=Truestring='Company' -
descriptionHtmlrequired=Truesanitize_style=True -
duplicate_countIntegercompute='_compute_duplicate_count' -
duplicate_idMany2one → helpdesk.ticketcopy=Falsestring='Duplicate of'tracking=True args: 'helpdesk.ticket' -
duplicate_idsOne2many → helpdesk.ticketstring='Duplicate tickets' args: 'helpdesk.ticket', 'duplicate_id' -
duplicate_tracking_enabledBooleanrelated='company_id.helpdesk_mgmt_duplicate_tracking' -
kanban_stateSelectionselection=[('normal', 'Default'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')] -
last_stage_updateDatetimedefault=fields.Datetime.now -
nameCharrequired=Truestring='Title' -
numberChardefault='/'readonly=Truestring='Ticket number' -
partner_emailCharstring='Email' -
partner_idMany2one → res.partnercomodel_name='res.partner'string='Contact' -
partner_nameChar -
prioritySelectiondefault='1'selection=[('0', 'Low'), ('1', 'Medium'), ('2', 'High'), ('3', 'Very High')] -
sequenceIntegerdefault=10help='Gives the sequence order when displaying a list of tickets.'index=True -
stage_idMany2one → helpdesk.ticket.stagecomodel_name='helpdesk.ticket.stage'compute='_compute_stage_id'copy=Falsedomain="['|',('team_ids', '=', team_id),('team_ids','=',False)]"group_expand='_read_group_stage_ids'index=Trueondelete='restrict'readonly=Falsestore=Truestring='Stage'tracking=True -
tag_idsMany2many → helpdesk.ticket.tagcomodel_name='helpdesk.ticket.tag'string='Tags' -
team_idMany2one → helpdesk.ticket.teamcomodel_name='helpdesk.ticket.team'compute='_compute_team_id'index=Truereadonly=Falsestore=Truestring='Team' -
unattendedBooleanrelated='stage_id.unattended'store=True -
user_idMany2one → res.userscomodel_name='res.users'compute='_compute_user_id'domain="team_id and [('share', '=', False),('id', 'in', user_ids)] or [('share', '=', False)]"index=Truereadonly=Falsestore=Truestring='Assigned user'tracking=True -
user_idsMany2many → res.userscomodel_name='res.users'related='team_id.user_ids'string='Users'
-
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.modelOverride 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)
-
activeBooleandefault=True -
child_idOne2many → helpdesk.ticket.categoryargs: 'helpdesk.ticket.category', 'parent_id', 'Child Categories' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
complete_nameCharcompute='_compute_complete_name'recursive=Truesearch='_search_complete_name' -
nameCharrequired=Truetranslate=True -
parent_idMany2one → helpdesk.ticket.categoryindex=Trueondelete='cascade' args: 'helpdesk.ticket.category', 'Parent Category' -
parent_pathCharindex=True -
sequenceIntegerdefault=10 -
show_in_portalBooleandefault=True
No public methods.
New fields (4)
-
activeBooleandefault=True -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
nameCharrequired=Truetranslate=True -
sequenceIntegerdefault=10
No public methods.
New fields (3)
-
duplicate_of_idMany2one → helpdesk.ticketrequired=True args: 'helpdesk.ticket' -
target_stage_idMany2one → helpdesk.ticket.stageargs: 'helpdesk.ticket.stage' -
ticket_idMany2one → helpdesk.ticketrequired=True args: 'helpdesk.ticket'
-
action_confirm(self)
New fields (11)
-
activeBooleandefault=True -
close_from_portalBooleanhelp='Display button in portal ticket form to allow closing ticket with this stage as target.' -
closedBoolean -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
descriptionHtmlsanitize_style=Truetranslate=True -
foldBooleanhelp='This stage is folded in the kanban view when there are no records in that stage to display.'string='Folded in Kanban' -
mail_template_idMany2one → mail.templatecomodel_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' -
nameCharrequired=Truestring='Stage Name'translate=True -
sequenceIntegerdefault=1 -
team_idsMany2many → helpdesk.ticket.teamcomodel_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' -
unattendedBoolean
No public methods.
New fields (5)
-
activeBooleandefault=True -
colorIntegerstring='Color Index' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
nameChartranslate=True -
sequenceIntegerdefault=10
No public methods.
New fields (18)
-
activeBooleandefault=True -
alias_idMany2one → mail.aliascomodel_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=Truestring='Email' -
category_idsMany2many → helpdesk.ticket.categorycomodel_name='helpdesk.ticket.category'string='Category' -
colorIntegerdefault=0string='Color Index' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>string='Company' -
complete_nameCharcompute='_compute_complete_name'recursive=Truesearch='_search_complete_name' -
nameCharrequired=Truetranslate=True -
parent_idMany2one → helpdesk.ticket.teamindex=Truestring='Parent Team' args: 'helpdesk.ticket.team' -
parent_pathCharindex=True -
sequenceIntegerdefault=10 -
show_in_portalBooleandefault=Truehelp='Allow to select this team when creating a new ticket in the portal.'string='Show in portal form' -
ticket_idsOne2many → helpdesk.ticketcomodel_name='helpdesk.ticket'inverse_name='team_id'string='Tickets' -
todo_ticket_countIntegercompute='_compute_todo_tickets'string='Number of tickets' -
todo_ticket_count_high_priorityIntegercompute='_compute_todo_tickets'string='Number of tickets in high priority' -
todo_ticket_count_unassignedIntegercompute='_compute_todo_tickets'string='Number of tickets unassigned' -
todo_ticket_count_unattendedIntegercompute='_compute_todo_tickets'string='Number of tickets unattended' -
user_idMany2one → res.userscheck_company=Truecomodel_name='res.users'string='Team Leader' -
user_idsMany2many → res.userscolumn1='helpdesk_ticket_team_id'column2='res_users_id'comodel_name='res.users'relation='helpdesk_ticket_team_res_users_rel'string='Members'
-
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_idMany2one → helpdesk.ticket.stagecomodel_name='helpdesk.ticket.stage'default=Falsestring='Move duplicate tickets to this stage' -
helpdesk_mgmt_duplicate_trackingBooleandefault=Falsestring='Enable duplicate ticket tracking.' -
helpdesk_mgmt_portal_category_id_requiredBooleandefault=Truestring='Required Category field in Helpdesk portal' -
helpdesk_mgmt_portal_select_categoryBooleanstring='Select category in Helpdesk portal' -
helpdesk_mgmt_portal_select_teamBooleanstring='Select team in Helpdesk portal' -
helpdesk_mgmt_portal_team_id_requiredBooleandefault=Truestring='Required Team field in Helpdesk portal' -
helpdesk_mgmt_ticket_auto_assignBooleandefault=Truestring='Auto assign tickets'
No public methods.
New fields (7)
-
helpdesk_mgmt_duplicate_ticket_stage_idMany2onereadonly=Falserelated='company_id.helpdesk_mgmt_duplicate_ticket_stage_id' -
helpdesk_mgmt_duplicate_trackingBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_duplicate_tracking' -
helpdesk_mgmt_portal_category_id_requiredBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_portal_category_id_required' -
helpdesk_mgmt_portal_select_categoryBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_portal_select_category' -
helpdesk_mgmt_portal_select_teamBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_portal_select_team' -
helpdesk_mgmt_portal_team_id_requiredBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_portal_team_id_required' -
helpdesk_mgmt_ticket_auto_assignBooleanreadonly=Falserelated='company_id.helpdesk_mgmt_ticket_auto_assign'
No public methods.
New fields (4)
-
helpdesk_ticket_active_countIntegercompute='_compute_helpdesk_ticket_count'string='Ticket active count' -
helpdesk_ticket_countIntegercompute='_compute_helpdesk_ticket_count'string='Ticket count' -
helpdesk_ticket_count_stringCharcompute='_compute_helpdesk_ticket_count'string='Tickets' -
helpdesk_ticket_idsOne2many → helpdesk.ticketcomodel_name='helpdesk.ticket'inverse_name='partner_id'string='Related tickets'
-
action_view_helpdesk_tickets(self)
New fields (1)
-
helpdesk_team_idsMany2many → helpdesk.ticket.teamcolumn1='res_users_id'column2='helpdesk_ticket_team_id'comodel_name='helpdesk.ticket.team'relation='helpdesk_ticket_team_res_users_rel'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…