diff --git a/helpdesk_mgmt_merge/README.rst b/helpdesk_mgmt_merge/README.rst new file mode 100644 index 0000000000..2afc0880cd --- /dev/null +++ b/helpdesk_mgmt_merge/README.rst @@ -0,0 +1,88 @@ +===================== +Helpdesk Ticket Merge +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:3848c0b7fe0360c78d7aca6c2705918e708cf06afb9b4ec9bfc830d9f3637486 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhelpdesk-lightgray.png?logo=github + :target: https://github.com/OCA/helpdesk/tree/18.0/helpdesk_mgmt_merge + :alt: OCA/helpdesk +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/helpdesk-18-0/helpdesk-18-0-helpdesk_mgmt_merge + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/helpdesk&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a wizard to merge helpdesk tickets. + +A wizard that can be called from tree view of helpdesk ticket. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +1. Merge helpdesk ticket + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Onestein + +Contributors +------------ + +- `Onestein `__ +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/helpdesk `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_merge/__init__.py b/helpdesk_mgmt_merge/__init__.py new file mode 100644 index 0000000000..40272379f7 --- /dev/null +++ b/helpdesk_mgmt_merge/__init__.py @@ -0,0 +1 @@ +from . import wizard diff --git a/helpdesk_mgmt_merge/__manifest__.py b/helpdesk_mgmt_merge/__manifest__.py new file mode 100644 index 0000000000..bc7d29862f --- /dev/null +++ b/helpdesk_mgmt_merge/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2024 Onestein +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Helpdesk Ticket Merge", + "summary": "Wizard to merge helpdesk tickets", + "version": "18.0.1.0.0", + "author": "Onestein, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/helpdesk", + "license": "AGPL-3", + "category": "After-Sales", + "depends": ["helpdesk_mgmt"], + "data": [ + "security/ir.model.access.csv", + "wizard/helpdesk_ticket_merge_views.xml", + ], + "installable": True, +} diff --git a/helpdesk_mgmt_merge/i18n/helpdesk_mgmt_merge.pot b/helpdesk_mgmt_merge/i18n/helpdesk_mgmt_merge.pot new file mode 100644 index 0000000000..a6dc711ab9 --- /dev/null +++ b/helpdesk_mgmt_merge/i18n/helpdesk_mgmt_merge.pot @@ -0,0 +1,120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_mgmt_merge +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "" +"NB: This will archive the selected tickets " +"(Except the destination ticket)" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__user_id +msgid "Assigned to" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "Cancel" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_new_ticket +msgid "Create a new ticket" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_uid +msgid "Created by" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_date +msgid "Created on" +msgstr "" + +#. module: helpdesk_mgmt_merge +#. odoo-python +#: code:addons/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py:0 +#, python-format +msgid "Description from ticket %(name)s: %(description)s" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_helpdesk_team_id +msgid "Destination Helpdesk Team" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__display_name +msgid "Display Name" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model,name:helpdesk_mgmt_merge.model_helpdesk_ticket_merge +msgid "Helpdesk Ticket Merge" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__id +msgid "ID" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge____last_update +msgid "Last Modified on" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__write_date +msgid "Last Updated on" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.actions.act_window,name:helpdesk_mgmt_merge.action_helpdesk_ticket_merge +msgid "Merge Helpdesk Tickets" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "Merge Tickets" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_ticket_id +msgid "Merge into an existing ticket" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_ticket_name +msgid "New ticket name" +msgstr "" + +#. module: helpdesk_mgmt_merge +#. odoo-python +#: code:addons/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py:0 +#, python-format +msgid "No description" +msgstr "" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__ticket_ids +msgid "Tickets to Merge" +msgstr "" diff --git a/helpdesk_mgmt_merge/i18n/it.po b/helpdesk_mgmt_merge/i18n/it.po new file mode 100644 index 0000000000..36fa55f6a0 --- /dev/null +++ b/helpdesk_mgmt_merge/i18n/it.po @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_mgmt_merge +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-01-20 17:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "" +"NB: This will archive the selected tickets " +"(Except the destination ticket)" +msgstr "" +"NB: questo archivierà i ticket selezionati (" +"tranne il ticket di destinazione)" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__user_id +msgid "Assigned to" +msgstr "Assegnato a" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "Cancel" +msgstr "Annulla" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_new_ticket +msgid "Create a new ticket" +msgstr "Crea un nuovo ticket" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: helpdesk_mgmt_merge +#. odoo-python +#: code:addons/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py:0 +#, python-format +msgid "Description from ticket %(name)s: %(description)s" +msgstr "Descrizione dal ticket %(name)s: %(description)s" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_helpdesk_team_id +msgid "Destination Helpdesk Team" +msgstr "Team assistenza clienti destinazione" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: helpdesk_mgmt_merge +#: model:ir.model,name:helpdesk_mgmt_merge.model_helpdesk_ticket_merge +msgid "Helpdesk Ticket Merge" +msgstr "Unione ticket assistenza clienti" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__id +msgid "ID" +msgstr "ID" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: helpdesk_mgmt_merge +#: model:ir.actions.act_window,name:helpdesk_mgmt_merge.action_helpdesk_ticket_merge +msgid "Merge Helpdesk Tickets" +msgstr "Unisci ticket assistenza clienti" + +#. module: helpdesk_mgmt_merge +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_merge.helpdesk_ticket_merge_view_form +msgid "Merge Tickets" +msgstr "Unisci ticket" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_ticket_id +msgid "Merge into an existing ticket" +msgstr "Unisci ad un ticket esistente" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__dst_ticket_name +msgid "New ticket name" +msgstr "Nuovo nome ticket" + +#. module: helpdesk_mgmt_merge +#. odoo-python +#: code:addons/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py:0 +#, python-format +msgid "No description" +msgstr "Nessuna descrizione" + +#. module: helpdesk_mgmt_merge +#: model:ir.model.fields,field_description:helpdesk_mgmt_merge.field_helpdesk_ticket_merge__ticket_ids +msgid "Tickets to Merge" +msgstr "Ticket da unire" diff --git a/helpdesk_mgmt_merge/pyproject.toml b/helpdesk_mgmt_merge/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/helpdesk_mgmt_merge/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/helpdesk_mgmt_merge/readme/CONTRIBUTORS.md b/helpdesk_mgmt_merge/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..e3142d6147 --- /dev/null +++ b/helpdesk_mgmt_merge/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Onestein](http://www.onestein.eu) +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/helpdesk_mgmt_merge/readme/DESCRIPTION.md b/helpdesk_mgmt_merge/readme/DESCRIPTION.md new file mode 100644 index 0000000000..dfe795fcd0 --- /dev/null +++ b/helpdesk_mgmt_merge/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module adds a wizard to merge helpdesk tickets. + +A wizard that can be called from tree view of helpdesk ticket. diff --git a/helpdesk_mgmt_merge/readme/USAGE.md b/helpdesk_mgmt_merge/readme/USAGE.md new file mode 100644 index 0000000000..980ebe6f77 --- /dev/null +++ b/helpdesk_mgmt_merge/readme/USAGE.md @@ -0,0 +1,3 @@ +To use this module, you need to: + +1. Merge helpdesk ticket diff --git a/helpdesk_mgmt_merge/security/ir.model.access.csv b/helpdesk_mgmt_merge/security/ir.model.access.csv new file mode 100644 index 0000000000..1dddeedd84 --- /dev/null +++ b/helpdesk_mgmt_merge/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_helpdesk_ticket_merge_user,access_helpdesk_ticket_merge_user,model_helpdesk_ticket_merge,helpdesk_mgmt.group_helpdesk_user,1,1,1,1 diff --git a/helpdesk_mgmt_merge/static/description/icon.png b/helpdesk_mgmt_merge/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/helpdesk_mgmt_merge/static/description/icon.png differ diff --git a/helpdesk_mgmt_merge/static/description/index.html b/helpdesk_mgmt_merge/static/description/index.html new file mode 100644 index 0000000000..28d70ed2e4 --- /dev/null +++ b/helpdesk_mgmt_merge/static/description/index.html @@ -0,0 +1,436 @@ + + + + + +Helpdesk Ticket Merge + + + +
+

Helpdesk Ticket Merge

+ + +

Beta License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

+

This module adds a wizard to merge helpdesk tickets.

+

A wizard that can be called from tree view of helpdesk ticket.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Merge helpdesk ticket
  2. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Onestein
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/helpdesk project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/helpdesk_mgmt_merge/tests/__init__.py b/helpdesk_mgmt_merge/tests/__init__.py new file mode 100644 index 0000000000..13e1d6a1ff --- /dev/null +++ b/helpdesk_mgmt_merge/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Onestein +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_helpdesk_mgmt_merge diff --git a/helpdesk_mgmt_merge/tests/test_helpdesk_mgmt_merge.py b/helpdesk_mgmt_merge/tests/test_helpdesk_mgmt_merge.py new file mode 100644 index 0000000000..74b8f92434 --- /dev/null +++ b/helpdesk_mgmt_merge/tests/test_helpdesk_mgmt_merge.py @@ -0,0 +1,37 @@ +from odoo.addons.base.tests.common import BaseCommon + + +class TestHelpdeskTicketMerge(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.HelpdeskTicketMerge = cls.env["helpdesk.ticket.merge"] + cls.ticket_1 = cls._create_ticket(cls, "Ticket 1", "Description for Ticket 1") + cls.ticket_2 = cls._create_ticket(cls, "Ticket 2", "Description for Ticket 2") + + def _create_ticket(self, name, description): + return self.env["helpdesk.ticket"].create( + { + "name": name, + "description": description, + } + ) + + def test_helpdesk_ticket_merge_create_new_ticket(self): + self.ticket_merge_1 = self.HelpdeskTicketMerge.with_context( + active_ids=[self.ticket_1.id, self.ticket_2.id] + ).create({"create_new_ticket": True, "dst_ticket_name": "Test 1"}) + self.ticket_merge_1.merge_tickets() + self.assertEqual(self.ticket_merge_1.dst_ticket_id.name, "Test 1") + + def test_helpdesk_ticket_merge_with_existing_ticket(self): + self.ticket_merge_2 = self.HelpdeskTicketMerge.with_context( + active_ids=[self.ticket_1.id, self.ticket_2.id] + ).create({}) + self.assertFalse(self.ticket_merge_2.user_id) + self.ticket_2.user_id = self.env.user.id + self.ticket_merge_2.dst_ticket_id = self.ticket_2.id + self.ticket_merge_2._onchange_dst_ticket_id() + self.assertTrue(self.ticket_merge_2.user_id) + self.ticket_merge_2.merge_tickets() + self.assertEqual(self.ticket_merge_2.dst_ticket_id.name, "Ticket 2") diff --git a/helpdesk_mgmt_merge/wizard/__init__.py b/helpdesk_mgmt_merge/wizard/__init__.py new file mode 100644 index 0000000000..859f517776 --- /dev/null +++ b/helpdesk_mgmt_merge/wizard/__init__.py @@ -0,0 +1 @@ +from . import helpdesk_ticket_merge diff --git a/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py b/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py new file mode 100644 index 0000000000..a9f221869b --- /dev/null +++ b/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge.py @@ -0,0 +1,139 @@ +from odoo import Command, api, fields, models + + +class HelpdeskTicketMerge(models.TransientModel): + _name = "helpdesk.ticket.merge" + _description = "Helpdesk Ticket Merge" + + ticket_ids = fields.Many2many( + "helpdesk.ticket", string="Tickets to Merge", required=True + ) + user_id = fields.Many2one("res.users", string="Assigned to") + create_new_ticket = fields.Boolean(string="Create a new ticket") + dst_ticket_name = fields.Char(string="New ticket name") + dst_helpdesk_team_id = fields.Many2one( + "helpdesk.ticket.team", string="Destination Helpdesk Team" + ) + dst_ticket_id = fields.Many2one( + "helpdesk.ticket", string="Merge into an existing ticket" + ) + + def merge_tickets(self): + tag_ids = self.ticket_ids.mapped("tag_ids").ids + attachment_ids = self.ticket_ids.mapped("attachment_ids").ids + user_ids = self.ticket_ids.mapped("user_ids").ids + values = { + "tag_ids": [Command.link(tag_id) for tag_id in tag_ids], + "attachment_ids": [ + Command.link(attachment_id) for attachment_id in attachment_ids + ], + "user_ids": [Command.link(user_id) for user_id in user_ids], + } + + values["user_id"] = self.user_id.id + if self.create_new_ticket: + partner_ids = self.ticket_ids.mapped("partner_id") + ticket_category_ids = self.ticket_ids.mapped("category_id").ids + priorities = self.ticket_ids.mapped("priority") + values.update( + { + "name": self.dst_ticket_name, + "team_id": self.dst_helpdesk_team_id.id, + "description": self._merge_description(self.ticket_ids), + "partner_id": len(set(partner_ids)) == 1 + and partner_ids[0].id + or False, + "partner_name": len(set(partner_ids)) == 1 + and partner_ids[0].name + or False, + "partner_email": len(set(partner_ids)) == 1 + and partner_ids[0].email + or False, + "category_id": len(set(ticket_category_ids)) == 1 + and ticket_category_ids[0] + or False, + "priority": len(set(priorities)) == 1 and priorities[0] or False, + } + ) + + self.dst_ticket_id = self.env["helpdesk.ticket"].create(values) + else: + values["description"] = "\n".join( + ( + self.dst_ticket_id.description or "", + self._merge_description(self.ticket_ids - self.dst_ticket_id), + ) + ) + self.dst_ticket_id.write(values) + + merged_tickets = self.ticket_ids - self.dst_ticket_id + self._merge_followers(merged_tickets) + for ticket in merged_tickets: + self._add_message("to", self.dst_ticket_id.number, ticket) + ticket_numbers = ", ".join(merged_tickets.mapped("number")) + self._add_message("from", ticket_numbers, self.dst_ticket_id) + merged_tickets.write({"active": False}) + + return { + "type": "ir.actions.act_window", + "res_model": "helpdesk.ticket", + "views": [[False, "form"]], + "res_id": self.dst_ticket_id.id, + } + + def _merge_description(self, tickets): + return "\n".join( + tickets.mapped( + lambda ticket: self.env._( + "Description from ticket %(name)s: %(description)s" + ) + % { + "name": ticket.name, + "description": ticket.description or self.env._("No description"), + } + ) + ) + + def _merge_followers(self, merged_tickets): + self.dst_ticket_id.message_subscribe( + partner_ids=(merged_tickets).mapped("message_partner_ids").ids, + ) + + def default_get(self, fields): + result = super().default_get(fields) + selected_tickets = self.env["helpdesk.ticket"].browse( + self.env.context.get("active_ids", False) + ) + assigned_tickets = selected_tickets.filtered(lambda ticket: ticket.user_id) + result.update( + { + "ticket_ids": [Command.set(selected_tickets.ids)], + "user_id": assigned_tickets and assigned_tickets[0].user_id.id or False, + "dst_helpdesk_team_id": selected_tickets[0].team_id.id, + "dst_ticket_id": selected_tickets[0].id, + } + ) + return result + + @api.onchange("dst_ticket_id") + def _onchange_dst_ticket_id(self): + if self.dst_ticket_id.user_id: + self.user_id = self.dst_ticket_id.user_id + + def _add_message(self, way, ticket_numbers, ticket): + """Send a message post with to advise the helpdesk ticket about the merge. + :param way : choice between "from" or "to" + :param ticket_numbers : list of helpdesk ticket numbers to add in the body + :param ticket : the ticket where the message will be posted + """ + subject = "Merge helpdesk ticket" + body = self.env._( + f"This helpdesk ticket has been merged {way} {ticket_numbers}" + ) + + ticket.message_post( + body=body, + subject=subject, + message_type="comment", + subtype_id=self.env.ref("mail.mt_comment").id, + ) diff --git a/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge_views.xml b/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge_views.xml new file mode 100644 index 0000000000..7e82f051d9 --- /dev/null +++ b/helpdesk_mgmt_merge/wizard/helpdesk_ticket_merge_views.xml @@ -0,0 +1,64 @@ + + + + helpdesk.ticket.merge.form + helpdesk.ticket.merge + +
+ + + + + + + + + + + + + + NB: This will archive the selected tickets (Except the destination ticket) + + +
+
+
+
+
+ + + Merge Helpdesk Tickets + ir.actions.act_window + helpdesk.ticket.merge + form + + new + +