From 1f8c7d6dcf202b373ff1a7777c0cb55edbd0e396 Mon Sep 17 00:00:00 2001 From: Miquel Alzanillas Date: Thu, 31 Oct 2024 08:34:27 +0100 Subject: [PATCH 01/13] [ADD] helpdesk_ticket_close_inactive --- helpdesk_ticket_close_inactive/README.rst | 111 +++++ helpdesk_ticket_close_inactive/__init__.py | 3 + .../__manifest__.py | 21 + .../data/helpdesk_data.xml | 128 +++++ helpdesk_ticket_close_inactive/i18n/es.po | 282 +++++++++++ .../i18n/helpdesk_ticket_close_inactive.pot | 189 ++++++++ .../models/__init__.py | 3 + .../models/helpdesk_ticket_team.py | 156 ++++++ .../readme/CONFIGURE.md | 11 + .../readme/CONTRIBUTORS.md | 3 + .../readme/DESCRIPTION.md | 1 + .../readme/newsfragments/.gitkeep | 0 .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/icon.svg | 79 +++ .../static/description/index.html | 455 ++++++++++++++++++ .../tests/__init__.py | 3 + .../tests/test_ticket_autoclose.py | 84 ++++ .../views/helpdesk_ticket_team.xml | 60 +++ 18 files changed, 1589 insertions(+) create mode 100644 helpdesk_ticket_close_inactive/README.rst create mode 100644 helpdesk_ticket_close_inactive/__init__.py create mode 100644 helpdesk_ticket_close_inactive/__manifest__.py create mode 100644 helpdesk_ticket_close_inactive/data/helpdesk_data.xml create mode 100644 helpdesk_ticket_close_inactive/i18n/es.po create mode 100644 helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot create mode 100644 helpdesk_ticket_close_inactive/models/__init__.py create mode 100644 helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py create mode 100644 helpdesk_ticket_close_inactive/readme/CONFIGURE.md create mode 100644 helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md create mode 100644 helpdesk_ticket_close_inactive/readme/DESCRIPTION.md create mode 100644 helpdesk_ticket_close_inactive/readme/newsfragments/.gitkeep create mode 100644 helpdesk_ticket_close_inactive/static/description/icon.png create mode 100644 helpdesk_ticket_close_inactive/static/description/icon.svg create mode 100644 helpdesk_ticket_close_inactive/static/description/index.html create mode 100644 helpdesk_ticket_close_inactive/tests/__init__.py create mode 100644 helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py create mode 100644 helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst new file mode 100644 index 0000000000..76c8dc58e0 --- /dev/null +++ b/helpdesk_ticket_close_inactive/README.rst @@ -0,0 +1,111 @@ +============================== +Helpdesk Ticket Close Inactive +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:0169667924c83c80a4013176aa43dea0b90f0a0924ae0ca90be4038a69834028 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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/16.0/helpdesk_ticket_close_inactive + :alt: OCA/helpdesk +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/helpdesk-16-0/helpdesk-16-0-helpdesk_ticket_close_inactive + :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=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Adds an option to configure a cron job that automatically closes +inactive helpdesk tickets after a specified number of days, set in the +helpdesk team settings. Sends notification emails to the customer +(partner) and assigned team members, providing a warning after an +initial period of inactivity and a final closure notification when the +maximum inactivity period is reached. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +- Go to Helpdesk > Settings > Teams. +- Select a team. +- Enable 'Automatic closure of inactive tickets' option. +- Set number of days to be reached before send a warning notification to + the partner. +- Set warning email template or use the one provided by default. +- Set number of days to be reached before closing ticket. +- Set closing email template or use the one provided by default. +- Set stages to be filtered on the domain to execute action. + +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 +------- + +* APSL-Nagarro + +Contributors +------------ + +- ``APSL-Nagarro ``\ \_: + + - Miquel Alzanillas miquel.alzanillas@nagarro.com + +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. + +.. |maintainer-miquelalzanillas| image:: https://github.com/miquelalzanillas.png?size=40px + :target: https://github.com/miquelalzanillas + :alt: miquelalzanillas + +Current `maintainer `__: + +|maintainer-miquelalzanillas| + +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_ticket_close_inactive/__init__.py b/helpdesk_ticket_close_inactive/__init__.py new file mode 100644 index 0000000000..31660d6a96 --- /dev/null +++ b/helpdesk_ticket_close_inactive/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/helpdesk_ticket_close_inactive/__manifest__.py b/helpdesk_ticket_close_inactive/__manifest__.py new file mode 100644 index 0000000000..799630246b --- /dev/null +++ b/helpdesk_ticket_close_inactive/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Helpdesk Ticket Close Inactive", + "version": "16.0.1.0.0", + "development_status": "Alpha", + "category": "Helpdesk", + "website": "https://github.com/OCA/helpdesk", + "author": "APSL-Nagarro, Odoo Community Association (OCA)", + "maintainers": ["miquelalzanillas"], + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "helpdesk_mgmt", + ], + "data": [ + "views/helpdesk_ticket_team.xml", + "data/helpdesk_data.xml", + ], +} diff --git a/helpdesk_ticket_close_inactive/data/helpdesk_data.xml b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml new file mode 100644 index 0000000000..f75b1265a8 --- /dev/null +++ b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml @@ -0,0 +1,128 @@ + + + + Close Inactive Tickets + + + code + +model.close_team_inactive_tickets() + + + 1 + days + -1 + + 0 + + + Helpdesk Inactivity Warning Ticket Notification Email + + {{object.company_id.partner_id.email}} + {{not object.partner_id and object.partner_email or ''}}, + The ticket {{object.number}} will be closed. + {{object.partner_id.id}} + + {{object.partner_id.lang}} + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+
+ + + + +
+

Ticket with subject "" will be closed in days if it is not updated .

+
+
+ + + + + + +
+ + + + + +
+
+
+
+
diff --git a/helpdesk_ticket_close_inactive/i18n/es.po b/helpdesk_ticket_close_inactive/i18n/es.po new file mode 100644 index 0000000000..6e8c17d849 --- /dev/null +++ b/helpdesk_ticket_close_inactive/i18n/es.po @@ -0,0 +1,282 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_ticket_close_inactive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-15 08:29+0000\n" +"PO-Revision-Date: 2024-11-15 08:29+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " +msgstr "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

El ticket con asunto \"\" se va a cerrar en días si no recibe ninguna actualización.

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Automatic closure of inactive tickets" +msgstr "Cerrar automáticamente los tickets inactivos" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server +#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets +msgid "Close Inactive Tickets" +msgstr "Cerrar Tickets Inactivos" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Closing Stage" +msgstr "Etapa de Cierre" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "Closing email template" +msgstr "Plantilla de correo de cierre" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Day limit for automatic ticket closing due to inactivity." +msgstr "Número de días límite antes del cierre del ticket" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Day limit for email notification of upcoming ticket closure due to " +"inactivity." +msgstr "" +"Límite de días de inactividad para el aviso por email del cierre próximo de " +"un ticket." + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "Helpdesk Inactivity Warning Ticket Notification Email" +msgstr "Correo de notificación de aviso de cierre de ticket del Helpdesk" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model,name:helpdesk_ticket_close_inactive.model_helpdesk_ticket_team +msgid "Helpdesk Ticket Team" +msgstr "Equipo de ticket Helpdesk" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Inactive Tickets Day Limit Closing" +msgstr "Límite de días de cierre de tickets inactivos" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "Inactive days limit before send a warning" +msgstr "Límite de dias de inactividad para enviar un aviso" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Inactivity Warning Notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Inactivity warning email template" +msgstr "Plantilla de correo del aviso de inactividad" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Set this stage for autoclosing tickets" +msgstr "Establecer esta etapa para el autocierre de tickets" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Template to be sent on inactive ticket closing notification" +msgstr "" +"Plantilla que se enviará en la notificación del cierre del ticket inactivo" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belongs to " +"this categories." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "" +"The cronjob will check for inactivity in tickets that are in these stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "The ticket {{object.number}} will be closed." +msgstr "El ticket {{object.number}} se va a cerrar próximamente." + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +msgid "This option enables a cronjob to automatically close inactive tickets." +msgstr "" +"Esta opción activa una tarea para cerrar tickets sin activada de forma " +"automática." + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "Ticket Category" +msgstr "Categoría del Ticket" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Category Filter" +msgstr "filtro de Categorias del Ticket" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Closing" +msgstr "Cierre de Ticket" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "Ticket Stage" +msgstr "Etapa del Ticket" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Stage Filter" +msgstr "Filtro de Etapas de Ticket" diff --git a/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot new file mode 100644 index 0000000000..8830eb6763 --- /dev/null +++ b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_ticket_close_inactive +# +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_ticket_close_inactive +#: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Automatic closure of inactive tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server +#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets +msgid "Close Inactive Tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Closing Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "Closing email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Day limit for automatic ticket closing due to inactivity." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Day limit for email notification of upcoming ticket closure due to " +"inactivity." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "Helpdesk Inactivity Warning Ticket Notification Email" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model,name:helpdesk_ticket_close_inactive.model_helpdesk_ticket_team +msgid "Helpdesk Ticket Team" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Inactive Tickets Day Limit Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "Inactive days limit before send a warning" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Inactivity Warning Notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Inactivity warning email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Set this stage for autoclosing tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Template to be sent on inactive ticket closing notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belongs to " +"this categories." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "" +"The cronjob will check for inactivity in tickets that are in these stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "The ticket {{object.number}} will be closed." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +msgid "This option enables a cronjob to automatically close inactive tickets." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "Ticket Category" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Category Filter" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "Ticket Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Stage Filter" +msgstr "" diff --git a/helpdesk_ticket_close_inactive/models/__init__.py b/helpdesk_ticket_close_inactive/models/__init__.py new file mode 100644 index 0000000000..a68d1884da --- /dev/null +++ b/helpdesk_ticket_close_inactive/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import helpdesk_ticket_team diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py new file mode 100644 index 0000000000..bda2b1f22a --- /dev/null +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -0,0 +1,156 @@ +# Copyright 2024 APSL-Nagarro - Miquel Alzanillas +import logging +from datetime import datetime, timedelta + +from odoo import fields, models + +_logger = logging.getLogger(__name__) + + +class HelpdeskTicketTeam(models.Model): + _inherit = "helpdesk.ticket.team" + + def _default_warning_email_template(self): + try: + return self.env.ref( + "helpdesk_ticket_close_inactive.warning_inactive_ticket_template" + ).id + except Exception: + _logger.info("Default warning email template not exists.") + + def _default_closing_email_template(self): + try: + return self.env.ref("helpdesk_mgmt.closed_ticket_template").id + except Exception: + _logger.info("Default closing email template not exists.") + + close_inactive_tickets = fields.Boolean( + string="Automatic closure of inactive tickets", + help="This option enables a cronjob to automatically close inactive tickets.", + default=False, + ) + ticket_stage_ids = fields.Many2many( + comodel_name="helpdesk.ticket.stage", + string="Ticket Stage", + help="The cronjob will check for inactivity in tickets that are in these stages.", + ) + ticket_category_ids = fields.Many2many( + comodel_name="helpdesk.ticket.category", + relation="closing_ticket_type_filter", + string="Ticket Category", + help="The cronjob will check for inactivity in tickets \ + that belongs to this categories.", + ) + inactive_tickets_day_limit_warning = fields.Integer( + default=7, + string="Inactive days limit before send a warning", + required=1, + help="Day limit for email notification of upcoming ticket closure due to inactivity.", + ) + warning_inactive_mail_template_id = fields.Many2one( + "mail.template", + default=_default_warning_email_template, + string="Inactivity warning email template", + help="Template to be sent on inactive ticket closing notification", + ) + inactive_tickets_day_limit_closing = fields.Integer( + default=14, + required=1, + help="Day limit for automatic ticket closing due to inactivity.", + ) + close_inactive_mail_template_id = fields.Many2one( + "mail.template", + default=_default_closing_email_template, + string="Closing email template", + help="Template to be sent on inactive ticket closing notification", + ) + closing_ticket_stage = fields.Many2one( + "helpdesk.ticket.stage", + string="Closing Stage", + help="Set this stage for autoclosing tickets", + ) + + def close_team_inactive_tickets(self): + + if len(self) > 0: + teams = self + else: + teams = self.search([("close_inactive_tickets", "=", True)]) + + for team_id in teams: + ticket_stage_ids = team_id.ticket_stage_ids.ids + ticket_category_ids = team_id.ticket_category_ids.ids + warning_limit = datetime.today() - timedelta( + days=team_id.inactive_tickets_day_limit_warning + ) + closing_limit = datetime.today() - timedelta( + days=team_id.inactive_tickets_day_limit_closing + ) + closing_remaining_days = ( + team_id.inactive_tickets_day_limit_closing + - team_id.inactive_tickets_day_limit_warning + ) + closing_stage = team_id.closing_ticket_stage + warning_ticket_ids = self.env["helpdesk.ticket"].search( + [ + ("team_id", "=", team_id.id), + ("stage_id", "in", ticket_stage_ids), + ("category_id", "in", ticket_category_ids), + ("last_stage_update", "<=", warning_limit), + ("last_stage_update", ">", closing_limit), + ] + ) + warning_email_ids = [] + closing_email_ids = [] + if warning_ticket_ids: + for ticket in warning_ticket_ids: + # Set template context + context = { + "stage": ticket.stage_id.name, + "close": False, + "remaining_days": closing_remaining_days, + } + # Send warning email + warning_email_id = ( + team_id.warning_inactive_mail_template_id.with_context( + **context + ).send_mail(ticket.id) + ) + if warning_email_id: + _logger.info( + "Sending warning ticket email for %s", ticket.number + ) + warning_email_ids.append(warning_email_id) + + closing_ticket_ids = self.env["helpdesk.ticket"].search( + [ + ("team_id", "=", team_id.id), + ("stage_id", "in", ticket_stage_ids), + ("category_id", "in", ticket_category_ids), + ("last_stage_update", "<=", closing_limit), + ] + ) + if closing_ticket_ids: + for ticket in closing_ticket_ids: + context = {"stage": ticket.stage_id.name, "close": True} + ticket.write({"stage_id": closing_stage.id}) + # Send closing email + closing_email_id = ( + team_id.close_inactive_mail_template_id.with_context( + **context + ).send_mail(ticket.id) + ) + if closing_email_id: + _logger.info( + "Sending autoclosing ticket email for %s", ticket.number + ) + closing_email_ids.append(closing_email_id) + + # Log atomated closing ticket action into chatter + msg = "Ticket closed automatically because have \ + reached the inactivity days limit" + ticket.message_post(body=msg) + return { + "warning_email_ids": warning_email_ids, + "closing_email_ids": closing_email_ids, + } diff --git a/helpdesk_ticket_close_inactive/readme/CONFIGURE.md b/helpdesk_ticket_close_inactive/readme/CONFIGURE.md new file mode 100644 index 0000000000..e0929f7987 --- /dev/null +++ b/helpdesk_ticket_close_inactive/readme/CONFIGURE.md @@ -0,0 +1,11 @@ + +To configure this module, you need to: + +- Go to Helpdesk > Settings > Teams. +- Select a team. +- Enable 'Automatic closure of inactive tickets' option. +- Set number of days to be reached before send a warning notification to the partner. +- Set warning email template or use the one provided by default. +- Set number of days to be reached before closing ticket. +- Set closing email template or use the one provided by default. +- Set stages to be filtered on the domain to execute action. diff --git a/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md b/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..48eaca2575 --- /dev/null +++ b/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +* `APSL-Nagarro `_: + + * Miquel Alzanillas diff --git a/helpdesk_ticket_close_inactive/readme/DESCRIPTION.md b/helpdesk_ticket_close_inactive/readme/DESCRIPTION.md new file mode 100644 index 0000000000..8a2f3e61b5 --- /dev/null +++ b/helpdesk_ticket_close_inactive/readme/DESCRIPTION.md @@ -0,0 +1 @@ +Adds an option to configure a cron job that automatically closes inactive helpdesk tickets after a specified number of days, set in the helpdesk team settings. Sends notification emails to the customer (partner) and assigned team members, providing a warning after an initial period of inactivity and a final closure notification when the maximum inactivity period is reached. diff --git a/helpdesk_ticket_close_inactive/readme/newsfragments/.gitkeep b/helpdesk_ticket_close_inactive/readme/newsfragments/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/helpdesk_ticket_close_inactive/static/description/icon.png b/helpdesk_ticket_close_inactive/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/helpdesk_ticket_close_inactive/static/description/icon.svg b/helpdesk_ticket_close_inactive/static/description/icon.svg new file mode 100644 index 0000000000..a7a26d0932 --- /dev/null +++ b/helpdesk_ticket_close_inactive/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/helpdesk_ticket_close_inactive/static/description/index.html b/helpdesk_ticket_close_inactive/static/description/index.html new file mode 100644 index 0000000000..67eb2a95b3 --- /dev/null +++ b/helpdesk_ticket_close_inactive/static/description/index.html @@ -0,0 +1,455 @@ + + + + + +Helpdesk Ticket Close Inactive + + + +
+

Helpdesk Ticket Close Inactive

+ + +

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

+

Adds an option to configure a cron job that automatically closes +inactive helpdesk tickets after a specified number of days, set in the +helpdesk team settings. Sends notification emails to the customer +(partner) and assigned team members, providing a warning after an +initial period of inactivity and a final closure notification when the +maximum inactivity period is reached.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  • Go to Helpdesk > Settings > Teams.
  • +
  • Select a team.
  • +
  • Enable ‘Automatic closure of inactive tickets’ option.
  • +
  • Set number of days to be reached before send a warning notification to +the partner.
  • +
  • Set warning email template or use the one provided by default.
  • +
  • Set number of days to be reached before closing ticket.
  • +
  • Set closing email template or use the one provided by default.
  • +
  • Set stages to be filtered on the domain to execute action.
  • +
+
+
+

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

+
    +
  • APSL-Nagarro
  • +
+
+
+

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.

+

Current maintainer:

+

miquelalzanillas

+

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_ticket_close_inactive/tests/__init__.py b/helpdesk_ticket_close_inactive/tests/__init__.py new file mode 100644 index 0000000000..542c81e041 --- /dev/null +++ b/helpdesk_ticket_close_inactive/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_ticket_autoclose diff --git a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py new file mode 100644 index 0000000000..03e8287eb4 --- /dev/null +++ b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py @@ -0,0 +1,84 @@ +# Copyright 2024 APSL-Nagarro - Miquel Alzanillas +from datetime import datetime, timedelta + +from odoo.tests import TransactionCase + + +class TestHelpdeskTicketAutoclose(TransactionCase): + def setUp(self): + super(TestHelpdeskTicketAutoclose, self).setUp() + self.team = self.env["helpdesk.ticket.team"].create( + { + "name": "Test Team", + "close_inactive_tickets": True, + "inactive_tickets_day_limit_warning": 7, + "inactive_tickets_day_limit_closing": 14, + } + ) + self.stage_warning = self.env["helpdesk.ticket.stage"].create( + {"name": "Stage Warning"} + ) + self.stage_closing = self.env["helpdesk.ticket.stage"].create( + {"name": "Stage Closing"} + ) + self.type_warning = self.env["helpdesk.ticket.category"].create( + {"name": "Category Warning"} + ) + self.team.ticket_stage_ids = [(4, self.stage_warning.id)] + self.team.ticket_category_ids = [(4, self.type_warning.id)] + self.team.closing_ticket_stage = self.stage_closing + self.remaining_days = ( + self.team.inactive_tickets_day_limit_closing + - self.team.inactive_tickets_day_limit_warning + ) + self.ticket = self.env["helpdesk.ticket"].create( + { + "name": "Test Ticket", + "team_id": self.team.id, + "stage_id": self.stage_warning.id, + "category_id": self.type_warning.id, + "description": "Please help me", + "last_stage_update": datetime.today() - timedelta(days=8), + } + ) + + def test_warning_email_sent(self): + """Test that a warning email is sent after the warning day limit is reached.""" + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=8)}) + result = self.team.close_team_inactive_tickets() + sent_mails = self.env["mail.mail"].search( + [("id", "in", result["warning_email_ids"])] + ) + self.assertTrue(sent_mails, "Warning email have been sent") + + def test_ticket_closing_after_closing_day_limit(self): + """Test that a ticket is closed after the closing day limit is reached.""" + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=15)}) + self.team.close_team_inactive_tickets() + self.assertEqual( + self.ticket.stage_id, + self.stage_closing, + "Ticket should be moved to the closing stage", + ) + + def test_closing_email_sent(self): + """Test that a closing email is sent when the ticket is closed automatically.""" + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=15)}) + result = self.team.close_team_inactive_tickets() + sent_mails = self.env["mail.mail"].search( + [("id", "in", result["closing_email_ids"])] + ) + self.assertTrue(sent_mails, "Closing email should have been sent") + + def test_remaining_days_in_context(self): + """Test that the correct remaining days are set in the context for the warning email.""" + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=8)}) + result = self.team.close_team_inactive_tickets() + sent_mail = self.env["mail.mail"].search( + [("id", "in", result["warning_email_ids"])], limit=1 + ) + self.assertIn( + str(self.remaining_days) + " days", + sent_mail.body_html, + "The warning email should contain the remaining days until the ticket is closed.", + ) diff --git a/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml new file mode 100644 index 0000000000..87fa037618 --- /dev/null +++ b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml @@ -0,0 +1,60 @@ + + + + helpdesk.ticket.team.form.inherit + helpdesk.ticket.team + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 400c73076489fb856616fe4d0b272815a3898bf2 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 28 Nov 2024 07:46:34 +0000 Subject: [PATCH 02/13] Added translation using Weblate (Italian) --- helpdesk_ticket_close_inactive/i18n/it.po | 190 ++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 helpdesk_ticket_close_inactive/i18n/it.po diff --git a/helpdesk_ticket_close_inactive/i18n/it.po b/helpdesk_ticket_close_inactive/i18n/it.po new file mode 100644 index 0000000000..6a09cc12bd --- /dev/null +++ b/helpdesk_ticket_close_inactive/i18n/it.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_ticket_close_inactive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Automatic closure of inactive tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server +#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets +msgid "Close Inactive Tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Closing Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "Closing email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Day limit for automatic ticket closing due to inactivity." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Day limit for email notification of upcoming ticket closure due to " +"inactivity." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "Helpdesk Inactivity Warning Ticket Notification Email" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model,name:helpdesk_ticket_close_inactive.model_helpdesk_ticket_team +msgid "Helpdesk Ticket Team" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Inactive Tickets Day Limit Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "Inactive days limit before send a warning" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Inactivity Warning Notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Inactivity warning email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Set this stage for autoclosing tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Template to be sent on inactive ticket closing notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belongs to " +"this categories." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "" +"The cronjob will check for inactivity in tickets that are in these stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "The ticket {{object.number}} will be closed." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +msgid "This option enables a cronjob to automatically close inactive tickets." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "Ticket Category" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Category Filter" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "Ticket Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Stage Filter" +msgstr "" From c68857892dde62ea5041fe1a8180abc9fdc534a7 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 28 Nov 2024 21:05:20 +0000 Subject: [PATCH 03/13] Translated using Weblate (Italian) Currently translated at 8.3% (2 of 24 strings) Translation: helpdesk-16.0/helpdesk-16.0-helpdesk_ticket_close_inactive Translate-URL: https://translation.odoo-community.org/projects/helpdesk-16-0/helpdesk-16-0-helpdesk_ticket_close_inactive/it/ --- helpdesk_ticket_close_inactive/i18n/it.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/helpdesk_ticket_close_inactive/i18n/it.po b/helpdesk_ticket_close_inactive/i18n/it.po index 6a09cc12bd..ee88ca3c9a 100644 --- a/helpdesk_ticket_close_inactive/i18n/it.po +++ b/helpdesk_ticket_close_inactive/i18n/it.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-11-28 23: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_ticket_close_inactive #: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template @@ -70,13 +72,13 @@ msgstr "" #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Automatic closure of inactive tickets" -msgstr "" +msgstr "Chiusura automatica dei ticket non attivi" #. module: helpdesk_ticket_close_inactive #: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server #: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets msgid "Close Inactive Tickets" -msgstr "" +msgstr "Chiudi ticket non attivi" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage From ecf46c922fdded7e7f10efc39559a8527aa78687 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 29 Nov 2024 10:03:04 +0000 Subject: [PATCH 04/13] Translated using Weblate (Italian) Currently translated at 100.0% (24 of 24 strings) Translation: helpdesk-16.0/helpdesk-16.0-helpdesk_ticket_close_inactive Translate-URL: https://translation.odoo-community.org/projects/helpdesk-16-0/helpdesk-16-0-helpdesk_ticket_close_inactive/it/ --- helpdesk_ticket_close_inactive/i18n/it.po | 106 ++++++++++++++++++---- 1 file changed, 88 insertions(+), 18 deletions(-) diff --git a/helpdesk_ticket_close_inactive/i18n/it.po b/helpdesk_ticket_close_inactive/i18n/it.po index ee88ca3c9a..dc804dd620 100644 --- a/helpdesk_ticket_close_inactive/i18n/it.po +++ b/helpdesk_ticket_close_inactive/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-11-28 23:06+0000\n" +"PO-Revision-Date: 2024-11-29 12:06+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -67,6 +67,69 @@ msgid "" " \n" " " msgstr "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Il ticket con oggetto \"\" verrà chiuso in giorni se non aggiornato.

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets @@ -83,17 +146,17 @@ msgstr "Chiudi ticket non attivi" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage msgid "Closing Stage" -msgstr "" +msgstr "Chiusura fase" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id msgid "Closing email template" -msgstr "" +msgstr "Modello email chiusura" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing msgid "Day limit for automatic ticket closing due to inactivity." -msgstr "" +msgstr "Limite giornaliero per chiusura automatica ticket dovuta ad inattività." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning @@ -101,47 +164,49 @@ msgid "" "Day limit for email notification of upcoming ticket closure due to " "inactivity." msgstr "" +"Limite giornaliero per notifica e-mail di prossima chiusura ticket dovuta ad " +"inattività." #. module: helpdesk_ticket_close_inactive #: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "Helpdesk Inactivity Warning Ticket Notification Email" -msgstr "" +msgstr "E-mail notifica avviso inattività ticket assistenza clienti" #. module: helpdesk_ticket_close_inactive #: model:ir.model,name:helpdesk_ticket_close_inactive.model_helpdesk_ticket_team msgid "Helpdesk Ticket Team" -msgstr "" +msgstr "Team ticket assistenza clienti" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing msgid "Inactive Tickets Day Limit Closing" -msgstr "" +msgstr "Chiusura ticket inattivi limite giornaliero" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning msgid "Inactive days limit before send a warning" -msgstr "" +msgstr "Limite giorni inattività prima di invio avviso" #. module: helpdesk_ticket_close_inactive #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Inactivity Warning Notification" -msgstr "" +msgstr "Notifica avviso inattività" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id msgid "Inactivity warning email template" -msgstr "" +msgstr "Modello e-mail avviso inattività" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage msgid "Set this stage for autoclosing tickets" -msgstr "" +msgstr "Imposta questa fase per ticket a chiusura automatica" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id msgid "Template to be sent on inactive ticket closing notification" -msgstr "" +msgstr "Modello da inviare alla notifica chiusura ticket inattivo" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids @@ -149,44 +214,49 @@ msgid "" "The cronjob will check for inactivity in tickets that belongs to " "this categories." msgstr "" +"Il lavoro cron controllerà l'inattività per ticket che appartengono " +"a queste categorie." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "" "The cronjob will check for inactivity in tickets that are in these stages." msgstr "" +"Il lavoro cron controllerà l'inattività dei ticket che sono in questa fase." #. module: helpdesk_ticket_close_inactive #: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "The ticket {{object.number}} will be closed." -msgstr "" +msgstr "Il ticket {{object.number}} verrà chiuso." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets msgid "This option enables a cronjob to automatically close inactive tickets." msgstr "" +"Questa opzione abilita il lavoro cron per chiudere automaticamente i ticket " +"inattivi." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids msgid "Ticket Category" -msgstr "" +msgstr "Categoria ticket" #. module: helpdesk_ticket_close_inactive #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Ticket Category Filter" -msgstr "" +msgstr "Filtro categoria ticket" #. module: helpdesk_ticket_close_inactive #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Ticket Closing" -msgstr "" +msgstr "Chiusura ticket" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "Ticket Stage" -msgstr "" +msgstr "Fase ticket" #. module: helpdesk_ticket_close_inactive #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Ticket Stage Filter" -msgstr "" +msgstr "Filtro fase ticket" From 46660d93086d0ce6f7e0f1d27dae63b32fad4089 Mon Sep 17 00:00:00 2001 From: Miquel Alzanillas Date: Mon, 23 Dec 2024 12:31:45 +0100 Subject: [PATCH 05/13] [FIX] Send warning notification only once --- helpdesk_ticket_close_inactive/README.rst | 2 +- helpdesk_ticket_close_inactive/__manifest__.py | 2 +- .../models/helpdesk_ticket_team.py | 8 +++++--- .../static/description/index.html | 2 +- .../tests/test_ticket_autoclose.py | 6 +++--- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst index 76c8dc58e0..02d95c7b36 100644 --- a/helpdesk_ticket_close_inactive/README.rst +++ b/helpdesk_ticket_close_inactive/README.rst @@ -7,7 +7,7 @@ Helpdesk Ticket Close Inactive !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:0169667924c83c80a4013176aa43dea0b90f0a0924ae0ca90be4038a69834028 + !! source digest: sha256:341adadf64f38f1bad7edc8ba4a173015184c8484ffda1044a2db85d5aa06c3f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/helpdesk_ticket_close_inactive/__manifest__.py b/helpdesk_ticket_close_inactive/__manifest__.py index 799630246b..2adbcb54c9 100644 --- a/helpdesk_ticket_close_inactive/__manifest__.py +++ b/helpdesk_ticket_close_inactive/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Helpdesk Ticket Close Inactive", - "version": "16.0.1.0.0", + "version": "16.0.1.1.0", "development_status": "Alpha", "category": "Helpdesk", "website": "https://github.com/OCA/helpdesk", diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py index bda2b1f22a..78d914211c 100644 --- a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -1,6 +1,6 @@ # Copyright 2024 APSL-Nagarro - Miquel Alzanillas import logging -from datetime import datetime, timedelta +from datetime import datetime, time, timedelta from odoo import fields, models @@ -83,6 +83,8 @@ def close_team_inactive_tickets(self): warning_limit = datetime.today() - timedelta( days=team_id.inactive_tickets_day_limit_warning ) + warning_limit_day_first_hour = datetime.combine(warning_limit, time.min) + warning_limit_day_last_hour = datetime.combine(warning_limit, time.max) closing_limit = datetime.today() - timedelta( days=team_id.inactive_tickets_day_limit_closing ) @@ -96,8 +98,8 @@ def close_team_inactive_tickets(self): ("team_id", "=", team_id.id), ("stage_id", "in", ticket_stage_ids), ("category_id", "in", ticket_category_ids), - ("last_stage_update", "<=", warning_limit), - ("last_stage_update", ">", closing_limit), + ("last_stage_update", ">=", warning_limit_day_first_hour), + ("last_stage_update", "<=", warning_limit_day_last_hour), ] ) warning_email_ids = [] diff --git a/helpdesk_ticket_close_inactive/static/description/index.html b/helpdesk_ticket_close_inactive/static/description/index.html index 67eb2a95b3..1858a86996 100644 --- a/helpdesk_ticket_close_inactive/static/description/index.html +++ b/helpdesk_ticket_close_inactive/static/description/index.html @@ -367,7 +367,7 @@

Helpdesk Ticket Close Inactive

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:0169667924c83c80a4013176aa43dea0b90f0a0924ae0ca90be4038a69834028 +!! source digest: sha256:341adadf64f38f1bad7edc8ba4a173015184c8484ffda1044a2db85d5aa06c3f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Adds an option to configure a cron job that automatically closes diff --git a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py index 03e8287eb4..9d38801466 100644 --- a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py +++ b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py @@ -38,13 +38,13 @@ def setUp(self): "stage_id": self.stage_warning.id, "category_id": self.type_warning.id, "description": "Please help me", - "last_stage_update": datetime.today() - timedelta(days=8), + "last_stage_update": datetime.today() - timedelta(days=7), } ) def test_warning_email_sent(self): """Test that a warning email is sent after the warning day limit is reached.""" - self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=8)}) + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=7)}) result = self.team.close_team_inactive_tickets() sent_mails = self.env["mail.mail"].search( [("id", "in", result["warning_email_ids"])] @@ -72,7 +72,7 @@ def test_closing_email_sent(self): def test_remaining_days_in_context(self): """Test that the correct remaining days are set in the context for the warning email.""" - self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=8)}) + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=7)}) result = self.team.close_team_inactive_tickets() sent_mail = self.env["mail.mail"].search( [("id", "in", result["warning_email_ids"])], limit=1 From 0cc04d11bd51e0800940b94ce15da0e22e6be04a Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Wed, 19 Feb 2025 12:22:58 +0530 Subject: [PATCH 06/13] [IMP] helpdesk_ticket_close_inactive: pre-commit auto fixes --- .../data/helpdesk_data.xml | 74 +++++++++---------- .../models/helpdesk_ticket_team.py | 7 +- helpdesk_ticket_close_inactive/pyproject.toml | 3 + .../tests/test_ticket_autoclose.py | 8 +- 4 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 helpdesk_ticket_close_inactive/pyproject.toml diff --git a/helpdesk_ticket_close_inactive/data/helpdesk_data.xml b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml index f75b1265a8..75f64570f0 100644 --- a/helpdesk_ticket_close_inactive/data/helpdesk_data.xml +++ b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml @@ -40,86 +40,86 @@ model.close_team_inactive_tickets() - - +
- - - -
- + + -
- + + + + - - +
- - - -
+ -

Ticket with subject "" will be closed in days if it is not updated .

-
- +

Ticket with subject "" will be closed in days if it is not updated .

+ + + + - - +
- - - + - + - -
+ - - + - - + - -
- + + + + + diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py index 78d914211c..59bcb5c26c 100644 --- a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -32,7 +32,8 @@ def _default_closing_email_template(self): ticket_stage_ids = fields.Many2many( comodel_name="helpdesk.ticket.stage", string="Ticket Stage", - help="The cronjob will check for inactivity in tickets that are in these stages.", + help="The cronjob will check for inactivity in \ + tickets that are in these stages.", ) ticket_category_ids = fields.Many2many( comodel_name="helpdesk.ticket.category", @@ -45,7 +46,8 @@ def _default_closing_email_template(self): default=7, string="Inactive days limit before send a warning", required=1, - help="Day limit for email notification of upcoming ticket closure due to inactivity.", + help="Day limit for email notification of upcoming \ + ticket closure due to inactivity.", ) warning_inactive_mail_template_id = fields.Many2one( "mail.template", @@ -71,7 +73,6 @@ def _default_closing_email_template(self): ) def close_team_inactive_tickets(self): - if len(self) > 0: teams = self else: diff --git a/helpdesk_ticket_close_inactive/pyproject.toml b/helpdesk_ticket_close_inactive/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/helpdesk_ticket_close_inactive/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py index 9d38801466..446a62068c 100644 --- a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py +++ b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py @@ -6,7 +6,7 @@ class TestHelpdeskTicketAutoclose(TransactionCase): def setUp(self): - super(TestHelpdeskTicketAutoclose, self).setUp() + super().setUp() self.team = self.env["helpdesk.ticket.team"].create( { "name": "Test Team", @@ -71,7 +71,8 @@ def test_closing_email_sent(self): self.assertTrue(sent_mails, "Closing email should have been sent") def test_remaining_days_in_context(self): - """Test that the correct remaining days are set in the context for the warning email.""" + """Test that the correct remaining days are + set in the context for the warning email.""" self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=7)}) result = self.team.close_team_inactive_tickets() sent_mail = self.env["mail.mail"].search( @@ -80,5 +81,6 @@ def test_remaining_days_in_context(self): self.assertIn( str(self.remaining_days) + " days", sent_mail.body_html, - "The warning email should contain the remaining days until the ticket is closed.", + "The warning email should contain the remaining " + "days until the ticket is closed.", ) From b5fae2510a50b145061869765891d80928e817bc Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Wed, 19 Feb 2025 12:25:32 +0530 Subject: [PATCH 07/13] [MIG] helpdesk_ticket_close_inactive: Migration to 18.0 --- helpdesk_ticket_close_inactive/README.rst | 22 +++-- .../__manifest__.py | 2 +- .../data/helpdesk_data.xml | 2 - .../i18n/helpdesk_ticket_close_inactive.pot | 82 +++++++++---------- .../models/helpdesk_ticket_team.py | 4 +- .../readme/CONTRIBUTORS.md | 2 + .../static/description/index.html | 36 +++++--- .../tests/test_ticket_autoclose.py | 9 +- .../views/helpdesk_ticket_team.xml | 12 +-- 9 files changed, 95 insertions(+), 76 deletions(-) diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst index 02d95c7b36..2cc1b8e908 100644 --- a/helpdesk_ticket_close_inactive/README.rst +++ b/helpdesk_ticket_close_inactive/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ============================== Helpdesk Ticket Close Inactive ============================== @@ -7,23 +11,23 @@ Helpdesk Ticket Close Inactive !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:341adadf64f38f1bad7edc8ba4a173015184c8484ffda1044a2db85d5aa06c3f + !! source digest: sha256:b19fdcb5b6ff7490da146a0e95c71ac3a660841aaf6f9c3f5534c5b109cac066 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png :target: https://odoo-community.org/page/development-status :alt: Alpha -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-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/16.0/helpdesk_ticket_close_inactive + :target: https://github.com/OCA/helpdesk/tree/18.0/helpdesk_ticket_close_inactive :alt: OCA/helpdesk .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/helpdesk-16-0/helpdesk-16-0-helpdesk_ticket_close_inactive + :target: https://translation.odoo-community.org/projects/helpdesk-18-0/helpdesk-18-0-helpdesk_ticket_close_inactive :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=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/helpdesk&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -66,7 +70,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -85,6 +89,10 @@ Contributors - Miquel Alzanillas miquel.alzanillas@nagarro.com +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia + Maintainers ----------- @@ -106,6 +114,6 @@ Current `maintainer `__: |maintainer-miquelalzanillas| -This module is part of the `OCA/helpdesk `_ project on GitHub. +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_ticket_close_inactive/__manifest__.py b/helpdesk_ticket_close_inactive/__manifest__.py index 2adbcb54c9..7fc22026ee 100644 --- a/helpdesk_ticket_close_inactive/__manifest__.py +++ b/helpdesk_ticket_close_inactive/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Helpdesk Ticket Close Inactive", - "version": "16.0.1.1.0", + "version": "18.0.1.0.0", "development_status": "Alpha", "category": "Helpdesk", "website": "https://github.com/OCA/helpdesk", diff --git a/helpdesk_ticket_close_inactive/data/helpdesk_data.xml b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml index 75f64570f0..89cc8987df 100644 --- a/helpdesk_ticket_close_inactive/data/helpdesk_data.xml +++ b/helpdesk_ticket_close_inactive/data/helpdesk_data.xml @@ -11,12 +11,10 @@ model.close_team_inactive_tickets() 1 days - -1 - 0 Helpdesk Inactivity Warning Ticket Notification Email diff --git a/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot index 8830eb6763..b0e1e2d023 100644 --- a/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot +++ b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -20,45 +20,45 @@ msgid "" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -"
\n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +" \n" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" -"
\n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +" \n" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" " \n" " \n" " \n" @@ -73,7 +73,6 @@ msgstr "" #. module: helpdesk_ticket_close_inactive #: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server -#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets msgid "Close Inactive Tickets" msgstr "" @@ -95,7 +94,7 @@ msgstr "" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning msgid "" -"Day limit for email notification of upcoming ticket closure due to " +"Day limit for email notification of upcoming ticket closure due to " "inactivity." msgstr "" @@ -141,16 +140,17 @@ msgid "Template to be sent on inactive ticket closing notification" msgstr "" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "" -"The cronjob will check for inactivity in tickets that belongs to " -"this categories." +"The cronjob will check for inactivity in tickets that are in these " +"stages." msgstr "" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids msgid "" -"The cronjob will check for inactivity in tickets that are in these stages." +"The cronjob will check for inactivity in tickets that belongs to " +"this categories." msgstr "" #. module: helpdesk_ticket_close_inactive diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py index 59bcb5c26c..54430056de 100644 --- a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -45,7 +45,7 @@ def _default_closing_email_template(self): inactive_tickets_day_limit_warning = fields.Integer( default=7, string="Inactive days limit before send a warning", - required=1, + required=True, help="Day limit for email notification of upcoming \ ticket closure due to inactivity.", ) @@ -57,7 +57,7 @@ def _default_closing_email_template(self): ) inactive_tickets_day_limit_closing = fields.Integer( default=14, - required=1, + required=True, help="Day limit for automatic ticket closing due to inactivity.", ) close_inactive_mail_template_id = fields.Many2one( diff --git a/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md b/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md index 48eaca2575..4dd4c802fa 100644 --- a/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md +++ b/helpdesk_ticket_close_inactive/readme/CONTRIBUTORS.md @@ -1,3 +1,5 @@ * `APSL-Nagarro `_: * Miquel Alzanillas +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/helpdesk_ticket_close_inactive/static/description/index.html b/helpdesk_ticket_close_inactive/static/description/index.html index 1858a86996..757960e177 100644 --- a/helpdesk_ticket_close_inactive/static/description/index.html +++ b/helpdesk_ticket_close_inactive/static/description/index.html @@ -3,7 +3,7 @@ -Helpdesk Ticket Close Inactive +README.rst -
-

Helpdesk Ticket Close Inactive

+
+ + +Odoo Community Association + +
+

Helpdesk Ticket Close Inactive

-

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

+

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

Adds an option to configure a cron job that automatically closes inactive helpdesk tickets after a specified number of days, set in the helpdesk team settings. Sends notification emails to the customer @@ -396,7 +401,7 @@

Helpdesk Ticket Close Inactive

-

Configuration

+

Configuration

To configure this module, you need to:

  • Go to Helpdesk > Settings > Teams.
  • @@ -411,32 +416,36 @@

    Configuration

-

Bug Tracker

+

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.

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • APSL-Nagarro
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -446,10 +455,11 @@

Maintainers

promote its widespread use.

Current maintainer:

miquelalzanillas

-

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

+

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_ticket_close_inactive/tests/test_ticket_autoclose.py b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py index 446a62068c..35a928d68d 100644 --- a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py +++ b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py @@ -1,12 +1,13 @@ # Copyright 2024 APSL-Nagarro - Miquel Alzanillas from datetime import datetime, timedelta -from odoo.tests import TransactionCase +from odoo.addons.base.tests.common import BaseCommon -class TestHelpdeskTicketAutoclose(TransactionCase): - def setUp(self): - super().setUp() +class TestHelpdeskTicketAutoclose(BaseCommon): + @classmethod + def setUpClass(self): + super().setUpClass() self.team = self.env["helpdesk.ticket.team"].create( { "name": "Test Team", diff --git a/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml index 87fa037618..668ab972a5 100644 --- a/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml +++ b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml @@ -12,7 +12,7 @@ From 543920aec1e8d01bbf6f5862b0f7ee6c63aadc68 Mon Sep 17 00:00:00 2001 From: Jan Suhr Date: Fri, 1 May 2026 10:04:36 +0200 Subject: [PATCH 08/13] [18.0][IMP] helpdesk_ticket_close_inactive: make warning email, closing email, and category optional --- helpdesk_ticket_close_inactive/README.rst | 27 ++-- .../models/helpdesk_ticket_team.py | 135 ++++++++++-------- .../readme/CONFIGURE.md | 17 ++- .../tests/test_ticket_autoclose.py | 58 ++++++++ .../views/helpdesk_ticket_team.xml | 14 +- 5 files changed, 163 insertions(+), 88 deletions(-) diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst index 2cc1b8e908..36ef2be364 100644 --- a/helpdesk_ticket_close_inactive/README.rst +++ b/helpdesk_ticket_close_inactive/README.rst @@ -34,10 +34,11 @@ Helpdesk Ticket Close Inactive Adds an option to configure a cron job that automatically closes inactive helpdesk tickets after a specified number of days, set in the -helpdesk team settings. Sends notification emails to the customer -(partner) and assigned team members, providing a warning after an -initial period of inactivity and a final closure notification when the -maximum inactivity period is reached. +helpdesk team settings. Optionally sends a warning email after an +initial period of inactivity (set the warning day limit to 0 to skip +this phase entirely) and an optional closing notification when the +ticket is auto-closed (leave the closing email template empty to close +tickets silently). .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -57,12 +58,18 @@ To configure this module, you need to: - Go to Helpdesk > Settings > Teams. - Select a team. - Enable 'Automatic closure of inactive tickets' option. -- Set number of days to be reached before send a warning notification to - the partner. -- Set warning email template or use the one provided by default. -- Set number of days to be reached before closing ticket. -- Set closing email template or use the one provided by default. -- Set stages to be filtered on the domain to execute action. +- Set the number of inactive days before a warning email is sent, or set it + to 0 to disable the warning phase entirely. When greater than 0, a + warning email template must be selected. +- Set the warning email template, or leave it hidden (by setting days to 0) + to skip warning notifications. +- Set the number of inactive days after which the ticket is automatically + closed (must be greater than 0). +- Optionally set a closing email template. Leave it empty to close tickets + silently without sending a notification email. +- Set the closing stage that tickets will be moved to when auto-closed. +- Set stages to be filtered on the domain to execute the action. +- Set ticket categories to be filtered on the domain to execute the action. Bug Tracker =========== diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py index 54430056de..ca6955ac40 100644 --- a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -39,32 +39,36 @@ def _default_closing_email_template(self): comodel_name="helpdesk.ticket.category", relation="closing_ticket_type_filter", string="Ticket Category", - help="The cronjob will check for inactivity in tickets \ - that belongs to this categories.", + help="The cronjob will check for inactivity in tickets that belong to " + "these categories. Leave empty to apply to all categories.", ) inactive_tickets_day_limit_warning = fields.Integer( default=7, string="Inactive days limit before send a warning", required=True, - help="Day limit for email notification of upcoming \ - ticket closure due to inactivity.", + help="Number of days of inactivity before a warning email is sent. " + "Set to 0 to disable the warning phase entirely.", ) warning_inactive_mail_template_id = fields.Many2one( "mail.template", default=_default_warning_email_template, string="Inactivity warning email template", - help="Template to be sent on inactive ticket closing notification", + help="Template to be sent as an inactivity warning. " + "Required when the warning day limit is greater than 0.", ) inactive_tickets_day_limit_closing = fields.Integer( default=14, required=True, - help="Day limit for automatic ticket closing due to inactivity.", + help="Number of days of inactivity after which the ticket is " + "automatically closed. Must be greater than 0.", ) close_inactive_mail_template_id = fields.Many2one( "mail.template", default=_default_closing_email_template, string="Closing email template", - help="Template to be sent on inactive ticket closing notification", + help="Template to be sent when a ticket is automatically closed. " + "Leave empty to close the ticket silently without sending " + "a notification email.", ) closing_ticket_stage = fields.Many2one( "helpdesk.ticket.stage", @@ -81,78 +85,83 @@ def close_team_inactive_tickets(self): for team_id in teams: ticket_stage_ids = team_id.ticket_stage_ids.ids ticket_category_ids = team_id.ticket_category_ids.ids - warning_limit = datetime.today() - timedelta( - days=team_id.inactive_tickets_day_limit_warning - ) - warning_limit_day_first_hour = datetime.combine(warning_limit, time.min) - warning_limit_day_last_hour = datetime.combine(warning_limit, time.max) closing_limit = datetime.today() - timedelta( days=team_id.inactive_tickets_day_limit_closing ) - closing_remaining_days = ( - team_id.inactive_tickets_day_limit_closing - - team_id.inactive_tickets_day_limit_warning - ) closing_stage = team_id.closing_ticket_stage - warning_ticket_ids = self.env["helpdesk.ticket"].search( - [ + warning_email_ids = [] + closing_email_ids = [] + + # Warning phase — only active when warning day limit is greater than 0 + if team_id.inactive_tickets_day_limit_warning > 0: + warning_limit = datetime.today() - timedelta( + days=team_id.inactive_tickets_day_limit_warning + ) + + warning_limit_day_first_hour = datetime.combine(warning_limit, time.min) + warning_limit_day_last_hour = datetime.combine(warning_limit, time.max) + closing_remaining_days = ( + team_id.inactive_tickets_day_limit_closing + - team_id.inactive_tickets_day_limit_warning + ) + warning_domain = [ ("team_id", "=", team_id.id), ("stage_id", "in", ticket_stage_ids), - ("category_id", "in", ticket_category_ids), ("last_stage_update", ">=", warning_limit_day_first_hour), ("last_stage_update", "<=", warning_limit_day_last_hour), ] - ) - warning_email_ids = [] - closing_email_ids = [] - if warning_ticket_ids: - for ticket in warning_ticket_ids: - # Set template context - context = { - "stage": ticket.stage_id.name, - "close": False, - "remaining_days": closing_remaining_days, - } - # Send warning email - warning_email_id = ( - team_id.warning_inactive_mail_template_id.with_context( - **context - ).send_mail(ticket.id) - ) - if warning_email_id: - _logger.info( - "Sending warning ticket email for %s", ticket.number + if ticket_category_ids: + warning_domain.append(("category_id", "in", ticket_category_ids)) + warning_ticket_ids = self.env["helpdesk.ticket"].search(warning_domain) + if warning_ticket_ids: + for ticket in warning_ticket_ids: + # Set template context + context = { + "stage": ticket.stage_id.name, + "close": False, + "remaining_days": closing_remaining_days, + } + # Send warning email + warning_email_id = ( + team_id.warning_inactive_mail_template_id.with_context( + **context + ).send_mail(ticket.id) ) - warning_email_ids.append(warning_email_id) + if warning_email_id: + _logger.info( + "Sending warning ticket email for %s", ticket.number + ) + warning_email_ids.append(warning_email_id) - closing_ticket_ids = self.env["helpdesk.ticket"].search( - [ - ("team_id", "=", team_id.id), - ("stage_id", "in", ticket_stage_ids), - ("category_id", "in", ticket_category_ids), - ("last_stage_update", "<=", closing_limit), - ] - ) + closing_domain = [ + ("team_id", "=", team_id.id), + ("stage_id", "in", ticket_stage_ids), + ("last_stage_update", "<=", closing_limit), + ] + if ticket_category_ids: + closing_domain.append(("category_id", "in", ticket_category_ids)) + closing_ticket_ids = self.env["helpdesk.ticket"].search(closing_domain) if closing_ticket_ids: for ticket in closing_ticket_ids: context = {"stage": ticket.stage_id.name, "close": True} ticket.write({"stage_id": closing_stage.id}) - # Send closing email - closing_email_id = ( - team_id.close_inactive_mail_template_id.with_context( - **context - ).send_mail(ticket.id) - ) - if closing_email_id: - _logger.info( - "Sending autoclosing ticket email for %s", ticket.number + # Log automated closing ticket action into chatter + msg = "Ticket closed automatically because have \ + reached the inactivity days limit" + ticket.message_post(body=msg) + # Send closing email (optional — skipped if no template is set) + if team_id.close_inactive_mail_template_id: + closing_email_id = ( + team_id.close_inactive_mail_template_id.with_context( + **context + ).send_mail(ticket.id) ) - closing_email_ids.append(closing_email_id) - - # Log atomated closing ticket action into chatter - msg = "Ticket closed automatically because have \ - reached the inactivity days limit" - ticket.message_post(body=msg) + if closing_email_id: + _logger.info( + "Sending autoclosing ticket email for %s", + ticket.number, + ) + closing_email_ids.append(closing_email_id) return { "warning_email_ids": warning_email_ids, "closing_email_ids": closing_email_ids, diff --git a/helpdesk_ticket_close_inactive/readme/CONFIGURE.md b/helpdesk_ticket_close_inactive/readme/CONFIGURE.md index e0929f7987..382acbe952 100644 --- a/helpdesk_ticket_close_inactive/readme/CONFIGURE.md +++ b/helpdesk_ticket_close_inactive/readme/CONFIGURE.md @@ -4,8 +4,15 @@ To configure this module, you need to: - Go to Helpdesk > Settings > Teams. - Select a team. - Enable 'Automatic closure of inactive tickets' option. -- Set number of days to be reached before send a warning notification to the partner. -- Set warning email template or use the one provided by default. -- Set number of days to be reached before closing ticket. -- Set closing email template or use the one provided by default. -- Set stages to be filtered on the domain to execute action. +- Set the number of inactive days before a warning email is sent, or set it + to 0 to disable the warning phase entirely. When greater than 0, a + warning email template must be selected. +- Set the warning email template, or leave it hidden (by setting days to 0) + to skip warning notifications. +- Set the number of inactive days after which the ticket is automatically + closed (must be greater than 0). +- Optionally set a closing email template. Leave it empty to close tickets + silently without sending a notification email. +- Set the closing stage that tickets will be moved to when auto-closed. +- Set stages to be filtered on the domain to execute the action. +- Set ticket categories to be filtered on the domain to execute the action. diff --git a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py index 35a928d68d..ebda54c1b0 100644 --- a/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py +++ b/helpdesk_ticket_close_inactive/tests/test_ticket_autoclose.py @@ -85,3 +85,61 @@ def test_remaining_days_in_context(self): "The warning email should contain the remaining " "days until the ticket is closed.", ) + + def test_warning_phase_disabled_when_days_zero(self): + """Test that no warning email is sent when the warning day limit is 0.""" + self.team.write({"inactive_tickets_day_limit_warning": 0}) + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=7)}) + result = self.team.close_team_inactive_tickets() + self.assertFalse( + result["warning_email_ids"], + "No warning email should be sent when the warning day limit is 0.", + ) + self.assertEqual( + self.ticket.stage_id, + self.stage_warning, + "Ticket should not be closed when it has not reached the closing limit.", + ) + + def test_closing_email_not_sent_when_no_template(self): + """Test that the ticket is closed but no closing email is sent + when the closing email template is not set.""" + self.team.write({"close_inactive_mail_template_id": False}) + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=15)}) + result = self.team.close_team_inactive_tickets() + self.assertEqual( + self.ticket.stage_id, + self.stage_closing, + "Ticket should still be moved to the closing stage.", + ) + self.assertFalse( + result["closing_email_ids"], + "No closing email should be sent when the template is not set.", + ) + + def test_closing_applies_to_all_categories_when_none_selected(self): + """Test that tickets of all categories are closed when no category + filter is set on the team.""" + self.team.write({"ticket_category_ids": [(5, 0, 0)]}) + ticket_no_category = self.env["helpdesk.ticket"].create( + { + "name": "Ticket Without Category", + "team_id": self.team.id, + "stage_id": self.stage_warning.id, + "description": "Please help me", + "last_stage_update": datetime.today() - timedelta(days=15), + } + ) + self.ticket.write({"last_stage_update": datetime.today() - timedelta(days=15)}) + self.team.close_team_inactive_tickets() + self.assertEqual( + self.ticket.stage_id, + self.stage_closing, + "Ticket with a category should be closed when no category filter is set.", + ) + self.assertEqual( + ticket_no_category.stage_id, + self.stage_closing, + "Ticket without a category should also be closed " + "when no category filter is set.", + ) diff --git a/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml index 668ab972a5..6c711fd539 100644 --- a/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml +++ b/helpdesk_ticket_close_inactive/views/helpdesk_ticket_team.xml @@ -24,15 +24,13 @@ - + - + From 0cc7b7c1f613413064ae8891618f8ad8eccd8852 Mon Sep 17 00:00:00 2001 From: Ed-Spain Date: Sun, 10 May 2026 10:06:43 +0000 Subject: [PATCH 09/13] Translated using Weblate (Spanish) Currently translated at 100.0% (24 of 24 strings) Translation: helpdesk-18.0/helpdesk-18.0-helpdesk_ticket_close_inactive Translate-URL: https://translation.odoo-community.org/projects/helpdesk-18-0/helpdesk-18-0-helpdesk_ticket_close_inactive/es/ --- helpdesk_ticket_close_inactive/i18n/es.po | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/helpdesk_ticket_close_inactive/i18n/es.po b/helpdesk_ticket_close_inactive/i18n/es.po index 6e8c17d849..527afb195b 100644 --- a/helpdesk_ticket_close_inactive/i18n/es.po +++ b/helpdesk_ticket_close_inactive/i18n/es.po @@ -7,14 +7,15 @@ msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-15 08:29+0000\n" -"PO-Revision-Date: 2024-11-15 08:29+0000\n" -"Last-Translator: \n" +"PO-Revision-Date: 2026-05-10 10:19+0000\n" +"Last-Translator: Ed-Spain \n" "Language-Team: \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" #. module: helpdesk_ticket_close_inactive #: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template @@ -212,7 +213,7 @@ msgstr "Límite de dias de inactividad para enviar un aviso" #. module: helpdesk_ticket_close_inactive #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Inactivity Warning Notification" -msgstr "" +msgstr "Notificación de advertencia por inactividad" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id @@ -237,12 +238,16 @@ msgid "" "The cronjob will check for inactivity in tickets that belongs to " "this categories." msgstr "" +"El trabajo programado verificará la inactividad en los tickets que " +"pertenecen a estas categorías." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "" "The cronjob will check for inactivity in tickets that are in these stages." msgstr "" +"El trabajo programado verificará la inactividad en los tickets que se " +"encuentran en estas etapas." #. module: helpdesk_ticket_close_inactive #: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template From a29fb980516f220bdfa46ef74c8b4d86cd2c6dbd Mon Sep 17 00:00:00 2001 From: QuiJoQuim Date: Tue, 12 May 2026 21:22:49 +0000 Subject: [PATCH 10/13] Translated using Weblate (Spanish) Currently translated at 100.0% (24 of 24 strings) Translation: helpdesk-18.0/helpdesk-18.0-helpdesk_ticket_close_inactive Translate-URL: https://translation.odoo-community.org/projects/helpdesk-18-0/helpdesk-18-0-helpdesk_ticket_close_inactive/es/ --- helpdesk_ticket_close_inactive/i18n/es.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helpdesk_ticket_close_inactive/i18n/es.po b/helpdesk_ticket_close_inactive/i18n/es.po index 527afb195b..b95d2206e2 100644 --- a/helpdesk_ticket_close_inactive/i18n/es.po +++ b/helpdesk_ticket_close_inactive/i18n/es.po @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-15 08:29+0000\n" -"PO-Revision-Date: 2026-05-10 10:19+0000\n" -"Last-Translator: Ed-Spain \n" +"PO-Revision-Date: 2026-05-12 23:45+0000\n" +"Last-Translator: QuiJoQuim \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" @@ -179,7 +179,7 @@ msgstr "Plantilla de correo de cierre" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing msgid "Day limit for automatic ticket closing due to inactivity." -msgstr "Número de días límite antes del cierre del ticket" +msgstr "Número de días límite antes del cierre del ticket." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning From 0bcce4f0a2f154f46a89d7702d88922eb37b171c Mon Sep 17 00:00:00 2001 From: Mohamed Essam Salem Date: Sun, 17 May 2026 11:44:06 +0000 Subject: [PATCH 11/13] Added translation using Weblate (Arabic) --- helpdesk_ticket_close_inactive/README.rst | 30 +- .../__manifest__.py | 2 +- helpdesk_ticket_close_inactive/i18n/ar.po | 223 ++++++++++ helpdesk_ticket_close_inactive/i18n/es.po | 381 +++++++++++------- .../i18n/helpdesk_ticket_close_inactive.pot | 42 +- helpdesk_ticket_close_inactive/i18n/it.po | 374 +++++++++++------ .../static/description/index.html | 21 +- 7 files changed, 777 insertions(+), 296 deletions(-) create mode 100644 helpdesk_ticket_close_inactive/i18n/ar.po diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst index 36ef2be364..f0660a5b1e 100644 --- a/helpdesk_ticket_close_inactive/README.rst +++ b/helpdesk_ticket_close_inactive/README.rst @@ -11,7 +11,7 @@ Helpdesk Ticket Close Inactive !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b19fdcb5b6ff7490da146a0e95c71ac3a660841aaf6f9c3f5534c5b109cac066 + !! source digest: sha256:41bf5955c42edf0ffa27ea703304fd7a8110afa9441f510dfc4a7a2b7eb45884 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png @@ -34,11 +34,10 @@ Helpdesk Ticket Close Inactive Adds an option to configure a cron job that automatically closes inactive helpdesk tickets after a specified number of days, set in the -helpdesk team settings. Optionally sends a warning email after an -initial period of inactivity (set the warning day limit to 0 to skip -this phase entirely) and an optional closing notification when the -ticket is auto-closed (leave the closing email template empty to close -tickets silently). +helpdesk team settings. Sends notification emails to the customer +(partner) and assigned team members, providing a warning after an +initial period of inactivity and a final closure notification when the +maximum inactivity period is reached. .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -58,18 +57,19 @@ To configure this module, you need to: - Go to Helpdesk > Settings > Teams. - Select a team. - Enable 'Automatic closure of inactive tickets' option. -- Set the number of inactive days before a warning email is sent, or set it - to 0 to disable the warning phase entirely. When greater than 0, a +- Set the number of inactive days before a warning email is sent, or set + it to 0 to disable the warning phase entirely. When greater than 0, a warning email template must be selected. -- Set the warning email template, or leave it hidden (by setting days to 0) - to skip warning notifications. -- Set the number of inactive days after which the ticket is automatically - closed (must be greater than 0). -- Optionally set a closing email template. Leave it empty to close tickets - silently without sending a notification email. +- Set the warning email template, or leave it hidden (by setting days to + 0) to skip warning notifications. +- Set the number of inactive days after which the ticket is + automatically closed (must be greater than 0). +- Optionally set a closing email template. Leave it empty to close + tickets silently without sending a notification email. - Set the closing stage that tickets will be moved to when auto-closed. - Set stages to be filtered on the domain to execute the action. -- Set ticket categories to be filtered on the domain to execute the action. +- Set ticket categories to be filtered on the domain to execute the + action. Bug Tracker =========== diff --git a/helpdesk_ticket_close_inactive/__manifest__.py b/helpdesk_ticket_close_inactive/__manifest__.py index 7fc22026ee..739729b0c9 100644 --- a/helpdesk_ticket_close_inactive/__manifest__.py +++ b/helpdesk_ticket_close_inactive/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Helpdesk Ticket Close Inactive", - "version": "18.0.1.0.0", + "version": "18.0.1.1.0", "development_status": "Alpha", "category": "Helpdesk", "website": "https://github.com/OCA/helpdesk", diff --git a/helpdesk_ticket_close_inactive/i18n/ar.po b/helpdesk_ticket_close_inactive/i18n/ar.po new file mode 100644 index 0000000000..2746a5cf09 --- /dev/null +++ b/helpdesk_ticket_close_inactive/i18n/ar.po @@ -0,0 +1,223 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_ticket_close_inactive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Automatic closure of inactive tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server +msgid "Close Inactive Tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Closing Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "Closing email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "Helpdesk Inactivity Warning Ticket Notification Email" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model,name:helpdesk_ticket_close_inactive.model_helpdesk_ticket_team +msgid "Helpdesk Ticket Team" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "Inactive Tickets Day Limit Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "Inactive days limit before send a warning" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Inactivity Warning Notification" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "Inactivity warning email template" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "" +"Number of days of inactivity after which the ticket is automatically closed. " +"Must be greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Number of days of inactivity before a warning email is sent. Set to 0 to " +"disable the warning phase entirely." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage +msgid "Set this stage for autoclosing tickets" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id +msgid "" +"Template to be sent as an inactivity warning. Required when the warning day " +"limit is greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "" +"Template to be sent when a ticket is automatically closed. Leave empty to " +"close the ticket silently without sending a notification email." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "" +"The cronjob will check for inactivity in tickets that are in these " +"stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belong to these " +"categories. Leave empty to apply to all categories." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template +msgid "The ticket {{object.number}} will be closed." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets +msgid "This option enables a cronjob to automatically close inactive tickets." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "Ticket Category" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Category Filter" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Closing" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids +msgid "Ticket Stage" +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project +msgid "Ticket Stage Filter" +msgstr "" diff --git a/helpdesk_ticket_close_inactive/i18n/es.po b/helpdesk_ticket_close_inactive/i18n/es.po index b95d2206e2..2812f83555 100644 --- a/helpdesk_ticket_close_inactive/i18n/es.po +++ b/helpdesk_ticket_close_inactive/i18n/es.po @@ -26,133 +26,70 @@ msgid "" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -"
\n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +" \n" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" -"
\n" -" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +"
\n" +" \n" " \n" " \n" " \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" -" \n" +" \n" -" \n" +" \n" -" \n" -"
\n" -" \n" -" \n" +" \n" -" \n" -" \n" +" \n" -" \n" -"
\n" -"
\n" +" \n" " \n" " \n" " \n" " " msgstr "" -"\n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -"
\n" -"
\n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"

El ticket con asunto \"\" se va a cerrar en días si no recibe ninguna actualización.

\n" -"
\n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"
\n" -" " #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets @@ -162,7 +99,6 @@ msgstr "Cerrar automáticamente los tickets inactivos" #. module: helpdesk_ticket_close_inactive #: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server -#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets msgid "Close Inactive Tickets" msgstr "Cerrar Tickets Inactivos" @@ -176,20 +112,6 @@ msgstr "Etapa de Cierre" msgid "Closing email template" msgstr "Plantilla de correo de cierre" -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing -msgid "Day limit for automatic ticket closing due to inactivity." -msgstr "Número de días límite antes del cierre del ticket." - -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning -msgid "" -"Day limit for email notification of upcoming ticket closure due to " -"inactivity." -msgstr "" -"Límite de días de inactividad para el aviso por email del cierre próximo de " -"un ticket." - #. module: helpdesk_ticket_close_inactive #: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "Helpdesk Inactivity Warning Ticket Notification Email" @@ -220,34 +142,52 @@ msgstr "Notificación de advertencia por inactividad" msgid "Inactivity warning email template" msgstr "Plantilla de correo del aviso de inactividad" +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "" +"Number of days of inactivity after which the ticket is automatically closed. " +"Must be greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Number of days of inactivity before a warning email is sent. Set to 0 to " +"disable the warning phase entirely." +msgstr "" + #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage msgid "Set this stage for autoclosing tickets" msgstr "Establecer esta etapa para el autocierre de tickets" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id -msgid "Template to be sent on inactive ticket closing notification" +msgid "" +"Template to be sent as an inactivity warning. Required when the warning day " +"limit is greater than 0." msgstr "" -"Plantilla que se enviará en la notificación del cierre del ticket inactivo" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id msgid "" -"The cronjob will check for inactivity in tickets that belongs to " -"this categories." +"Template to be sent when a ticket is automatically closed. Leave empty to " +"close the ticket silently without sending a notification email." msgstr "" -"El trabajo programado verificará la inactividad en los tickets que " -"pertenecen a estas categorías." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "" -"The cronjob will check for inactivity in tickets that are in these stages." +"The cronjob will check for inactivity in tickets that are in these " +"stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belong to these " +"categories. Leave empty to apply to all categories." msgstr "" -"El trabajo programado verificará la inactividad en los tickets que se " -"encuentran en estas etapas." #. module: helpdesk_ticket_close_inactive #: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template @@ -285,3 +225,172 @@ msgstr "Etapa del Ticket" #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Ticket Stage Filter" msgstr "Filtro de Etapas de Ticket" + +#~ msgid "" +#~ "\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "

El ticket con asunto \"\" se va a cerrar en días si no recibe ninguna " +#~ "actualización.

\n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " " + +#~ msgid "Day limit for automatic ticket closing due to inactivity." +#~ msgstr "Número de días límite antes del cierre del ticket." + +#~ msgid "" +#~ "Day limit for email notification of upcoming ticket closure due to " +#~ "inactivity." +#~ msgstr "" +#~ "Límite de días de inactividad para el aviso por email del cierre próximo " +#~ "de un ticket." + +#~ msgid "Template to be sent on inactive ticket closing notification" +#~ msgstr "" +#~ "Plantilla que se enviará en la notificación del cierre del ticket inactivo" + +#~ msgid "" +#~ "The cronjob will check for inactivity in tickets that belongs to " +#~ "this categories." +#~ msgstr "" +#~ "El trabajo programado verificará la inactividad en los tickets que " +#~ "pertenecen a estas categorías." + +#~ msgid "" +#~ "The cronjob will check for inactivity in tickets that are in these stages." +#~ msgstr "" +#~ "El trabajo programado verificará la inactividad en los tickets que se " +#~ "encuentran en estas etapas." diff --git a/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot index b0e1e2d023..7c6aeb3330 100644 --- a/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot +++ b/helpdesk_ticket_close_inactive/i18n/helpdesk_ticket_close_inactive.pot @@ -86,18 +86,6 @@ msgstr "" msgid "Closing email template" msgstr "" -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing -msgid "Day limit for automatic ticket closing due to inactivity." -msgstr "" - -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning -msgid "" -"Day limit for email notification of upcoming ticket closure due to " -"inactivity." -msgstr "" - #. module: helpdesk_ticket_close_inactive #: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "Helpdesk Inactivity Warning Ticket Notification Email" @@ -128,15 +116,37 @@ msgstr "" msgid "Inactivity warning email template" msgstr "" +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "" +"Number of days of inactivity after which the ticket is automatically closed." +" Must be greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Number of days of inactivity before a warning email is sent. Set to 0 to " +"disable the warning phase entirely." +msgstr "" + #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage msgid "Set this stage for autoclosing tickets" msgstr "" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id -msgid "Template to be sent on inactive ticket closing notification" +msgid "" +"Template to be sent as an inactivity warning. Required when the warning day " +"limit is greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id +msgid "" +"Template to be sent when a ticket is automatically closed. Leave empty to " +"close the ticket silently without sending a notification email." msgstr "" #. module: helpdesk_ticket_close_inactive @@ -149,8 +159,8 @@ msgstr "" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids msgid "" -"The cronjob will check for inactivity in tickets that belongs to " -"this categories." +"The cronjob will check for inactivity in tickets that belong to these " +"categories. Leave empty to apply to all categories." msgstr "" #. module: helpdesk_ticket_close_inactive diff --git a/helpdesk_ticket_close_inactive/i18n/it.po b/helpdesk_ticket_close_inactive/i18n/it.po index dc804dd620..a17e46bcbf 100644 --- a/helpdesk_ticket_close_inactive/i18n/it.po +++ b/helpdesk_ticket_close_inactive/i18n/it.po @@ -19,117 +19,76 @@ msgstr "" #. module: helpdesk_ticket_close_inactive #: model:mail.template,body_html:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "" -"\n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -"
\n" -"
\n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" -"
\n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"
\n" -" " -msgstr "" "\n" +"style=\"padding: 20px; background-color: #ededed; border-collapse:separate;" +"\">\n" " \n" " \n" " \n" -" \n" +" \n" " \n" " \n" " \n" -" \n" " \n" " \n" " \n" -" \n" +" \n" " \n" " \n" "
\n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -"
\n" -"
\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +"
\n" +"
\n" -" \n" -" \n" -" \n" +"

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" -" \n" -"
\n" -"

Il ticket con oggetto \"\" verrà chiuso in giorni se non aggiornato.

\n" -"
\n" -"
\n" +"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -" \n" -" \n" -" \n" -" \n" -" \n" -"
\n" -"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" " " +msgstr "" #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,field_description:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_tickets @@ -139,7 +98,6 @@ msgstr "Chiusura automatica dei ticket non attivi" #. module: helpdesk_ticket_close_inactive #: model:ir.actions.server,name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets_ir_actions_server -#: model:ir.cron,cron_name:helpdesk_ticket_close_inactive.ir_cron_close_inactive_tickets msgid "Close Inactive Tickets" msgstr "Chiudi ticket non attivi" @@ -153,20 +111,6 @@ msgstr "Chiusura fase" msgid "Closing email template" msgstr "Modello email chiusura" -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing -msgid "Day limit for automatic ticket closing due to inactivity." -msgstr "Limite giornaliero per chiusura automatica ticket dovuta ad inattività." - -#. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning -msgid "" -"Day limit for email notification of upcoming ticket closure due to " -"inactivity." -msgstr "" -"Limite giornaliero per notifica e-mail di prossima chiusura ticket dovuta ad " -"inattività." - #. module: helpdesk_ticket_close_inactive #: model:mail.template,name:helpdesk_ticket_close_inactive.warning_inactive_ticket_template msgid "Helpdesk Inactivity Warning Ticket Notification Email" @@ -197,32 +141,52 @@ msgstr "Notifica avviso inattività" msgid "Inactivity warning email template" msgstr "Modello e-mail avviso inattività" +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_closing +msgid "" +"Number of days of inactivity after which the ticket is automatically closed. " +"Must be greater than 0." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__inactive_tickets_day_limit_warning +msgid "" +"Number of days of inactivity before a warning email is sent. Set to 0 to " +"disable the warning phase entirely." +msgstr "" + #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__closing_ticket_stage msgid "Set this stage for autoclosing tickets" msgstr "Imposta questa fase per ticket a chiusura automatica" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__warning_inactive_mail_template_id -msgid "Template to be sent on inactive ticket closing notification" -msgstr "Modello da inviare alla notifica chiusura ticket inattivo" +msgid "" +"Template to be sent as an inactivity warning. Required when the warning day " +"limit is greater than 0." +msgstr "" #. module: helpdesk_ticket_close_inactive -#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__close_inactive_mail_template_id msgid "" -"The cronjob will check for inactivity in tickets that belongs to " -"this categories." +"Template to be sent when a ticket is automatically closed. Leave empty to " +"close the ticket silently without sending a notification email." msgstr "" -"Il lavoro cron controllerà l'inattività per ticket che appartengono " -"a queste categorie." #. module: helpdesk_ticket_close_inactive #: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_stage_ids msgid "" -"The cronjob will check for inactivity in tickets that are in these stages." +"The cronjob will check for inactivity in tickets that are in these " +"stages." +msgstr "" + +#. module: helpdesk_ticket_close_inactive +#: model:ir.model.fields,help:helpdesk_ticket_close_inactive.field_helpdesk_ticket_team__ticket_category_ids +msgid "" +"The cronjob will check for inactivity in tickets that belong to these " +"categories. Leave empty to apply to all categories." msgstr "" -"Il lavoro cron controllerà l'inattività dei ticket che sono in questa fase." #. module: helpdesk_ticket_close_inactive #: model:mail.template,subject:helpdesk_ticket_close_inactive.warning_inactive_ticket_template @@ -260,3 +224,171 @@ msgstr "Fase ticket" #: model_terms:ir.ui.view,arch_db:helpdesk_ticket_close_inactive.inherit_view_project msgid "Ticket Stage Filter" msgstr "Filtro fase ticket" + +#~ msgid "" +#~ "\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "

Ticket with subject \"\" will be closed in days if it is not updated .

\n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "

Il ticket con oggetto \"\" verrà chiuso in giorni se non aggiornato.

\n" +#~ "
\n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "
\n" +#~ "
\n" +#~ " " + +#~ msgid "Day limit for automatic ticket closing due to inactivity." +#~ msgstr "" +#~ "Limite giornaliero per chiusura automatica ticket dovuta ad inattività." + +#~ msgid "" +#~ "Day limit for email notification of upcoming ticket closure due to " +#~ "inactivity." +#~ msgstr "" +#~ "Limite giornaliero per notifica e-mail di prossima chiusura ticket dovuta " +#~ "ad inattività." + +#~ msgid "Template to be sent on inactive ticket closing notification" +#~ msgstr "Modello da inviare alla notifica chiusura ticket inattivo" + +#~ msgid "" +#~ "The cronjob will check for inactivity in tickets that belongs to " +#~ "this categories." +#~ msgstr "" +#~ "Il lavoro cron controllerà l'inattività per ticket che " +#~ "appartengono a queste categorie." + +#~ msgid "" +#~ "The cronjob will check for inactivity in tickets that are in these stages." +#~ msgstr "" +#~ "Il lavoro cron controllerà l'inattività dei ticket che sono in questa " +#~ "fase." diff --git a/helpdesk_ticket_close_inactive/static/description/index.html b/helpdesk_ticket_close_inactive/static/description/index.html index 757960e177..f46d2c612b 100644 --- a/helpdesk_ticket_close_inactive/static/description/index.html +++ b/helpdesk_ticket_close_inactive/static/description/index.html @@ -372,7 +372,7 @@

Helpdesk Ticket Close Inactive

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b19fdcb5b6ff7490da146a0e95c71ac3a660841aaf6f9c3f5534c5b109cac066 +!! source digest: sha256:41bf5955c42edf0ffa27ea703304fd7a8110afa9441f510dfc4a7a2b7eb45884 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Adds an option to configure a cron job that automatically closes @@ -407,12 +407,19 @@

Configuration

  • Go to Helpdesk > Settings > Teams.
  • Select a team.
  • Enable ‘Automatic closure of inactive tickets’ option.
  • -
  • Set number of days to be reached before send a warning notification to -the partner.
  • -
  • Set warning email template or use the one provided by default.
  • -
  • Set number of days to be reached before closing ticket.
  • -
  • Set closing email template or use the one provided by default.
  • -
  • Set stages to be filtered on the domain to execute action.
  • +
  • Set the number of inactive days before a warning email is sent, or set +it to 0 to disable the warning phase entirely. When greater than 0, a +warning email template must be selected.
  • +
  • Set the warning email template, or leave it hidden (by setting days to +0) to skip warning notifications.
  • +
  • Set the number of inactive days after which the ticket is +automatically closed (must be greater than 0).
  • +
  • Optionally set a closing email template. Leave it empty to close +tickets silently without sending a notification email.
  • +
  • Set the closing stage that tickets will be moved to when auto-closed.
  • +
  • Set stages to be filtered on the domain to execute the action.
  • +
  • Set ticket categories to be filtered on the domain to execute the +action.
  • From 641a6f02aa1319fd4d2cba9bb65fcd6a7c1e215b Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Sun, 14 Jun 2026 14:57:07 -0400 Subject: [PATCH 12/13] [IMP] helpdesk_ticket_close_inactive: pre-commit auto fixes --- helpdesk_ticket_close_inactive/README.rst | 12 ++++++------ .../static/description/index.html | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/helpdesk_ticket_close_inactive/README.rst b/helpdesk_ticket_close_inactive/README.rst index f0660a5b1e..1e05bb6279 100644 --- a/helpdesk_ticket_close_inactive/README.rst +++ b/helpdesk_ticket_close_inactive/README.rst @@ -11,7 +11,7 @@ Helpdesk Ticket Close Inactive !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:41bf5955c42edf0ffa27ea703304fd7a8110afa9441f510dfc4a7a2b7eb45884 + !! source digest: sha256:0236ea793cba8c54cd654531712f276f63bd025b47de5999bfcbc9b0277a369b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png @@ -21,13 +21,13 @@ Helpdesk Ticket Close Inactive :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_ticket_close_inactive + :target: https://github.com/OCA/helpdesk/tree/19.0/helpdesk_ticket_close_inactive :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_ticket_close_inactive + :target: https://translation.odoo-community.org/projects/helpdesk-19-0/helpdesk-19-0-helpdesk_ticket_close_inactive :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 + :target: https://runboat.odoo-community.org/builds?repo=OCA/helpdesk&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -77,7 +77,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -121,6 +121,6 @@ Current `maintainer `__: |maintainer-miquelalzanillas| -This module is part of the `OCA/helpdesk `_ project on GitHub. +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_ticket_close_inactive/static/description/index.html b/helpdesk_ticket_close_inactive/static/description/index.html index f46d2c612b..4ffda62023 100644 --- a/helpdesk_ticket_close_inactive/static/description/index.html +++ b/helpdesk_ticket_close_inactive/static/description/index.html @@ -372,9 +372,9 @@

    Helpdesk Ticket Close Inactive

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:41bf5955c42edf0ffa27ea703304fd7a8110afa9441f510dfc4a7a2b7eb45884 +!! source digest: sha256:0236ea793cba8c54cd654531712f276f63bd025b47de5999bfcbc9b0277a369b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    Adds an option to configure a cron job that automatically closes inactive helpdesk tickets after a specified number of days, set in the helpdesk team settings. Sends notification emails to the customer @@ -427,7 +427,7 @@

    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.

    +feedback.

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

    @@ -462,7 +462,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    miquelalzanillas

    -

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

    +

    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.

    From 0a7aa7cf865ec7c5d086fb38b8568aaf621fe883 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Sun, 14 Jun 2026 14:57:07 -0400 Subject: [PATCH 13/13] [MIG] helpdesk_ticket_close_inactive: Migration to 19.0 --- helpdesk_ticket_close_inactive/__manifest__.py | 2 +- helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helpdesk_ticket_close_inactive/__manifest__.py b/helpdesk_ticket_close_inactive/__manifest__.py index 739729b0c9..b47c5ebb0a 100644 --- a/helpdesk_ticket_close_inactive/__manifest__.py +++ b/helpdesk_ticket_close_inactive/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Helpdesk Ticket Close Inactive", - "version": "18.0.1.1.0", + "version": "19.0.1.0.0", "development_status": "Alpha", "category": "Helpdesk", "website": "https://github.com/OCA/helpdesk", diff --git a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py index ca6955ac40..840716b593 100644 --- a/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py +++ b/helpdesk_ticket_close_inactive/models/helpdesk_ticket_team.py @@ -51,7 +51,7 @@ def _default_closing_email_template(self): ) warning_inactive_mail_template_id = fields.Many2one( "mail.template", - default=_default_warning_email_template, + default=lambda self: self._default_warning_email_template(), string="Inactivity warning email template", help="Template to be sent as an inactivity warning. " "Required when the warning day limit is greater than 0.", @@ -64,7 +64,7 @@ def _default_closing_email_template(self): ) close_inactive_mail_template_id = fields.Many2one( "mail.template", - default=_default_closing_email_template, + default=lambda self: self._default_closing_email_template(), string="Closing email template", help="Template to be sent when a ticket is automatically closed. " "Leave empty to close the ticket silently without sending "