From c7a11c8a08dc7c6003b7af14e089fdca86f304db Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 8 Nov 2023 09:07:23 -0500 Subject: [PATCH 1/3] New small module to have only one ticket created per email received. --- .../__init__.py | 1 + .../__manifest__.py | 31 +++++++++++++++++++ .../models/__init__.py | 1 + .../models/mail_thread.py | 17 ++++++++++ 4 files changed, 50 insertions(+) create mode 100644 bemade_helpdesk_one_ticket_per_email/__init__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/__manifest__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/models/__init__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/models/mail_thread.py diff --git a/bemade_helpdesk_one_ticket_per_email/__init__.py b/bemade_helpdesk_one_ticket_per_email/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/bemade_helpdesk_one_ticket_per_email/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/bemade_helpdesk_one_ticket_per_email/__manifest__.py b/bemade_helpdesk_one_ticket_per_email/__manifest__.py new file mode 100644 index 0000000..f95f101 --- /dev/null +++ b/bemade_helpdesk_one_ticket_per_email/__manifest__.py @@ -0,0 +1,31 @@ +# +# Bemade Inc. +# +# Copyright (C) 2023-June Bemade Inc. (). +# Author: Marc Durepos (Contact : mdurepos@durpro.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the Software +# or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +{ + 'name': 'Helpdesk One Ticket Per Email', + 'version': '15.0.1.0.0', + 'summary': 'Restrict ticket creation to a single ticket per email received.', + 'category': 'Helpdesk', + 'author': 'Bemade Inc.', + 'website': 'http://www.bemade.org', + 'license': 'OPL-1', + 'depends': ['helpdesk'], + 'data': [], + 'installable': True, + 'auto_install': False +} diff --git a/bemade_helpdesk_one_ticket_per_email/models/__init__.py b/bemade_helpdesk_one_ticket_per_email/models/__init__.py new file mode 100644 index 0000000..b70a9f2 --- /dev/null +++ b/bemade_helpdesk_one_ticket_per_email/models/__init__.py @@ -0,0 +1 @@ +from . import mail_thread diff --git a/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py new file mode 100644 index 0000000..606bed8 --- /dev/null +++ b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py @@ -0,0 +1,17 @@ +from odoo import models, fields, api, _ + + +class MailThread(models.AbstractModel): + _inherit = 'mail.thread' + + @api.model + def message_route(self, message, message_dict, model=None, thread_id=None, custom_values=None): + res = super().message_route(message, message_dict, model, thread_id, custom_values) + main_route = None + for tuple in res: + if tuple[0] in ('helpdesk.team', 'helpdesk.ticket'): + if not main_route: + main_route = tuple + else: + res.remove(tuple) + return res From e2c7293bd0e2f92490a6ba91fc8ef46edd4f8bc6 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 8 Nov 2023 10:12:39 -0500 Subject: [PATCH 2/3] Another attempt at single ticket per email. --- .../__manifest__.py | 2 +- .../models/mail_thread.py | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bemade_helpdesk_one_ticket_per_email/__manifest__.py b/bemade_helpdesk_one_ticket_per_email/__manifest__.py index f95f101..fee505a 100644 --- a/bemade_helpdesk_one_ticket_per_email/__manifest__.py +++ b/bemade_helpdesk_one_ticket_per_email/__manifest__.py @@ -24,7 +24,7 @@ 'author': 'Bemade Inc.', 'website': 'http://www.bemade.org', 'license': 'OPL-1', - 'depends': ['helpdesk'], + 'depends': ['mail'], 'data': [], 'installable': True, 'auto_install': False diff --git a/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py index 606bed8..d6276c1 100644 --- a/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py +++ b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py @@ -1,17 +1,17 @@ from odoo import models, fields, api, _ +import logging + +_logger = logging.getLogger(__name__) class MailThread(models.AbstractModel): _inherit = 'mail.thread' @api.model - def message_route(self, message, message_dict, model=None, thread_id=None, custom_values=None): - res = super().message_route(message, message_dict, model, thread_id, custom_values) - main_route = None - for tuple in res: - if tuple[0] in ('helpdesk.team', 'helpdesk.ticket'): - if not main_route: - main_route = tuple - else: - res.remove(tuple) - return res + def _message_route_process(self, message, message_dict, routes): + helpdesk_routes = [r for r in routes if r[0] in ('helpdesk.ticket', 'helpdesk.team')] + if len(helpdesk_routes) > 1: + _logger.info("Messages contained multiple helpdesk routes. Only the first one will be used.") + helpdesk_routes.remove(0) + routes.remove(helpdesk_routes) + return super()._message_route_process(message, message_dict, routes) From 3f8de0d4b387b722f1657a02a1513473c00160cf Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 8 Nov 2023 10:20:04 -0500 Subject: [PATCH 3/3] Fixing bugs in one email per ticket --- bemade_helpdesk_one_ticket_per_email/models/mail_thread.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py index d6276c1..d8b62b5 100644 --- a/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py +++ b/bemade_helpdesk_one_ticket_per_email/models/mail_thread.py @@ -12,6 +12,6 @@ class MailThread(models.AbstractModel): helpdesk_routes = [r for r in routes if r[0] in ('helpdesk.ticket', 'helpdesk.team')] if len(helpdesk_routes) > 1: _logger.info("Messages contained multiple helpdesk routes. Only the first one will be used.") - helpdesk_routes.remove(0) - routes.remove(helpdesk_routes) + helpdesk_routes.pop(0) + routes = routes - helpdesk_routes return super()._message_route_process(message, message_dict, routes)