From bad75f252c05a76c9b55b9f5c05eff9f20a3abf4 Mon Sep 17 00:00:00 2001
From: BojanOD
Date: Mon, 2 Jan 2023 14:51:50 +0100
Subject: [PATCH 1/3] [14.0][ADD] Helpdesk Stage Server Action
---
helpdesk_mgmt_stage_server_action/README.md | 0
helpdesk_mgmt_stage_server_action/__init__.py | 4 +
.../__manifest__.py | 14 +++
.../models/__init__.py | 5 +
.../models/helpdesk_ticket.py | 40 ++++++++
.../models/helpdesk_ticket_stage.py | 17 ++++
.../readme/CONFIGURE.rst | 3 +
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 2 +
.../readme/USAGE.rst | 4 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../tests/__init__.py | 1 +
.../tests/test_helpdesk_ticket_stage.py | 96 ++++++++++++++++++
.../views/helpdesk_ticket_stage.xml | 13 +++
.../addons/helpdesk_mgmt_stage_server_action | 1 +
.../setup.py | 6 ++
16 files changed, 207 insertions(+)
create mode 100644 helpdesk_mgmt_stage_server_action/README.md
create mode 100644 helpdesk_mgmt_stage_server_action/__init__.py
create mode 100644 helpdesk_mgmt_stage_server_action/__manifest__.py
create mode 100644 helpdesk_mgmt_stage_server_action/models/__init__.py
create mode 100644 helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
create mode 100644 helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py
create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
create mode 100644 helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst
create mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.rst
create mode 100644 helpdesk_mgmt_stage_server_action/static/description/icon.png
create mode 100644 helpdesk_mgmt_stage_server_action/tests/__init__.py
create mode 100644 helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
create mode 100644 helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml
create mode 120000 setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action
create mode 100644 setup/helpdesk_mgmt_stage_server_action/setup.py
diff --git a/helpdesk_mgmt_stage_server_action/README.md b/helpdesk_mgmt_stage_server_action/README.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/helpdesk_mgmt_stage_server_action/__init__.py b/helpdesk_mgmt_stage_server_action/__init__.py
new file mode 100644
index 0000000000..f575e55c77
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import models
diff --git a/helpdesk_mgmt_stage_server_action/__manifest__.py b/helpdesk_mgmt_stage_server_action/__manifest__.py
new file mode 100644
index 0000000000..1ab25e76f1
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/__manifest__.py
@@ -0,0 +1,14 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+{
+ "name": "Helpdesk Stage Server Action",
+ "summary": "Execute server actions when reaching a Helpdesk ticket stage",
+ "version": "14.0.1.0.0",
+ "category": "HelpDesk Service",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/helpdesk",
+ "depends": ["helpdesk_mgmt"],
+ "data": ["views/helpdesk_ticket_stage.xml"],
+ "installable": True,
+ "license": "AGPL-3",
+}
diff --git a/helpdesk_mgmt_stage_server_action/models/__init__.py b/helpdesk_mgmt_stage_server_action/models/__init__.py
new file mode 100644
index 0000000000..ad81b3bf9e
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/models/__init__.py
@@ -0,0 +1,5 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import helpdesk_ticket_stage
+from . import helpdesk_ticket
diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
new file mode 100644
index 0000000000..20a113a1e1
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
@@ -0,0 +1,40 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, models
+
+
+class HelpdeskTicket(models.Model):
+ _inherit = "helpdesk.ticket"
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ records = super().create(vals_list)
+ for record in records:
+ action = record.stage_id.action_id
+ if action:
+ context = {
+ "active_model": self._name,
+ "active_ids": [record.id],
+ }
+ action.with_context(**context).run()
+ return records
+
+ def write(self, vals):
+ records = "stage_id" in vals and self.filtered(
+ lambda l: l.stage_id.id != vals.get("stage_id")
+ )
+ if records:
+ res = super().write(vals)
+ action = (
+ self.env["helpdesk.ticket.stage"].browse(vals["stage_id"]).action_id
+ )
+ if action:
+ context = {
+ "active_model": self._name,
+ "active_ids": records.ids,
+ }
+ action.with_context(**context).run()
+ else:
+ res = super().write(vals)
+ return res
diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py
new file mode 100644
index 0000000000..132ff841cc
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket_stage.py
@@ -0,0 +1,17 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class HelpdeskTicketStage(models.Model):
+ _inherit = "helpdesk.ticket.stage"
+
+ action_id = fields.Many2one(
+ "ir.actions.server",
+ string="Server Action",
+ domain="[('model_id', '=', 'helpdesk.ticket')]",
+ help="The assigned action will be executed when a ticket is assigned from a "
+ "different stage to this stage, the context values that will be passed "
+ "to the action are the model name helpdesk.ticket and the ids of the tickets.",
+ )
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
new file mode 100644
index 0000000000..2564cbafde
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
@@ -0,0 +1,3 @@
+* Go to Helpdesk > Configuration > Stages
+* Create or select a stage
+* Select or create a server action
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..7d1a526704
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Bojan Anchev
diff --git a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..dd79e13f93
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module allows you to execute server actions when a Helpdesk ticket enters a
+specific stage.
diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst
new file mode 100644
index 0000000000..76b4bf7f30
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst
@@ -0,0 +1,4 @@
+* Go to Helpdesk
+* Select or create a Helpdesk tickets
+* Move it to the stage configured before to trigger the execution of the
+ server action
diff --git a/helpdesk_mgmt_stage_server_action/static/description/icon.png b/helpdesk_mgmt_stage_server_action/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_mgmt_stage_server_action/tests/__init__.py b/helpdesk_mgmt_stage_server_action/tests/__init__.py
new file mode 100644
index 0000000000..e12b67ce0c
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_helpdesk_ticket_stage
diff --git a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
new file mode 100644
index 0000000000..68e2bc14da
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
@@ -0,0 +1,96 @@
+# Copyright 2023 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests.common import SavepointCase
+
+
+class HelpdeskTicketStageServerAction(SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ super(HelpdeskTicketStageServerAction, cls).setUpClass()
+ cls.ServerAction = cls.env["ir.actions.server"]
+ cls.HelpdeskTicket = cls.env["helpdesk.ticket"]
+ cls.HelpdeskTicketStage = cls.env["helpdesk.ticket.stage"]
+ cls.field = cls.env["ir.model.fields"]._get(cls.HelpdeskTicket._name, "user_id")
+ cls.server_action_helpdesk_ticket = cls.ServerAction.create(
+ {
+ "name": "Helpdesk Ticket Server Action",
+ "model_id": cls.env.ref("helpdesk_mgmt.model_helpdesk_ticket").id,
+ "state": "object_write",
+ "fields_lines": [
+ (
+ 0,
+ 0,
+ {
+ "col1": cls.field.id,
+ "evaluation_type": "value",
+ "value": cls.env.user.id,
+ },
+ )
+ ],
+ }
+ )
+ cls.helpdesk_ticket_stage_1 = cls.HelpdeskTicketStage.create(
+ {"name": "Stage 1", "sequence": 1}
+ )
+ cls.helpdesk_ticket_stage_2 = cls.HelpdeskTicketStage.create(
+ {
+ "name": "Stage 2",
+ "action_id": cls.server_action_helpdesk_ticket.id,
+ "sequence": 2,
+ }
+ )
+
+ def test_helpdesk_ticket_create(self):
+ self.helpdesk_ticket_1 = self.HelpdeskTicket.create(
+ {
+ "name": "Helpdesk Ticket 1",
+ "stage_id": self.helpdesk_ticket_stage_2.id,
+ "description": "Helpdesk Ticket Description",
+ }
+ )
+ self.assertEqual(self.helpdesk_ticket_1.user_id, self.env.user)
+
+ def test_helpdesk_ticket_write(self):
+ self.helpdesk_ticket_2 = self.HelpdeskTicket.create(
+ {
+ "name": "Helpdesk Ticket 2",
+ "stage_id": self.helpdesk_ticket_stage_1.id,
+ "description": "Helpdesk Ticket Description",
+ }
+ )
+ self.helpdesk_ticket_3 = self.HelpdeskTicket.create(
+ {
+ "name": "Helpdesk Ticket 3",
+ "stage_id": self.helpdesk_ticket_stage_1.id,
+ "description": "Helpdesk Ticket Description",
+ }
+ )
+ self.assertNotEqual(self.helpdesk_ticket_2.user_id, self.env.user)
+ self.assertNotEqual(self.helpdesk_ticket_3.user_id, self.env.user)
+ self.helpdesk_ticket_2.write({"stage_id": self.helpdesk_ticket_stage_2.id})
+ self.helpdesk_ticket_3.write({"stage_id": self.helpdesk_ticket_stage_2.id})
+ self.assertEqual(self.helpdesk_ticket_2.user_id, self.env.user)
+ self.assertEqual(self.helpdesk_ticket_3.user_id, self.env.user)
+ self.helpdesk_ticket_3.write({"user_id": False})
+ self.helpdesk_ticket_3.write({"stage_id": self.helpdesk_ticket_stage_2.id})
+ self.assertFalse(self.helpdesk_ticket_3.user_id)
+
+ def test_helpdesk_ticket_without_stage(self):
+ self.helpdesk_ticket_4 = self.HelpdeskTicket.create(
+ {
+ "name": "Helpdesk Ticket 4",
+ "description": "Helpdesk Ticket Description",
+ }
+ )
+ self.assertFalse(self.helpdesk_ticket_4.user_id)
+ self.helpdesk_ticket_stage_3 = self.HelpdeskTicketStage.create(
+ {
+ "name": "Stage 3",
+ "sequence": 3,
+ }
+ )
+ self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_3.id})
+ self.assertFalse(self.helpdesk_ticket_4.user_id)
+ self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_2.id})
+ self.assertEqual(self.helpdesk_ticket_4.user_id, self.env.user)
diff --git a/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml b/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml
new file mode 100644
index 0000000000..947e458249
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/views/helpdesk_ticket_stage.xml
@@ -0,0 +1,13 @@
+
+
+
+ helpdesk.ticket.stage
+
+
+
+
+
+
+
+
+
diff --git a/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action b/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action
new file mode 120000
index 0000000000..f12f97cbf7
--- /dev/null
+++ b/setup/helpdesk_mgmt_stage_server_action/odoo/addons/helpdesk_mgmt_stage_server_action
@@ -0,0 +1 @@
+../../../../helpdesk_mgmt_stage_server_action
\ No newline at end of file
diff --git a/setup/helpdesk_mgmt_stage_server_action/setup.py b/setup/helpdesk_mgmt_stage_server_action/setup.py
new file mode 100644
index 0000000000..28c57bb640
--- /dev/null
+++ b/setup/helpdesk_mgmt_stage_server_action/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From 484553573d5fe7a7771246041627deb9475f96f1 Mon Sep 17 00:00:00 2001
From: Maksym Yankin
Date: Tue, 29 Oct 2024 16:13:38 +0200
Subject: [PATCH 2/3] [IMP] helpdesk_mgmt_stage_server_action: pre-commit auto
fixes
---
helpdesk_mgmt_stage_server_action/README.rst | 92 ++++
.../pyproject.toml | 3 +
.../readme/CONFIGURE.md | 3 +
.../readme/CONFIGURE.rst | 3 -
.../readme/CONTRIBUTORS.md | 1 +
.../readme/CONTRIBUTORS.rst | 1 -
.../{DESCRIPTION.rst => DESCRIPTION.md} | 4 +-
.../readme/USAGE.md | 4 +
.../readme/USAGE.rst | 4 -
.../static/description/index.html | 443 ++++++++++++++++++
10 files changed, 548 insertions(+), 10 deletions(-)
create mode 100644 helpdesk_mgmt_stage_server_action/README.rst
create mode 100644 helpdesk_mgmt_stage_server_action/pyproject.toml
create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md
delete mode 100644 helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
create mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md
delete mode 100644 helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
rename helpdesk_mgmt_stage_server_action/readme/{DESCRIPTION.rst => DESCRIPTION.md} (65%)
create mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.md
delete mode 100644 helpdesk_mgmt_stage_server_action/readme/USAGE.rst
create mode 100644 helpdesk_mgmt_stage_server_action/static/description/index.html
diff --git a/helpdesk_mgmt_stage_server_action/README.rst b/helpdesk_mgmt_stage_server_action/README.rst
new file mode 100644
index 0000000000..21445dee57
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/README.rst
@@ -0,0 +1,92 @@
+============================
+Helpdesk Stage Server Action
+============================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:5088a8a0de0750867808606407f0644523fd0ece3129431c36afeb51a3f2e4cd
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhelpdesk-lightgray.png?logo=github
+ :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_ticket_stage_server_action
+ :alt: OCA/helpdesk
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_ticket_stage_server_action
+ :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=17.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows you to execute server actions when a Helpdesk ticket
+enters a specific stage.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Configuration
+=============
+
+- Go to Helpdesk > Configuration > Stages
+- Create or select a stage
+- Select or create a server action
+
+Usage
+=====
+
+- Go to Helpdesk
+- Select or create a Helpdesk tickets
+- Move it to the stage configured before to trigger the execution of
+ the server 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
+-------
+
+* Camptocamp
+
+Contributors
+------------
+
+- Bojan Anchev
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/helpdesk `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/helpdesk_mgmt_stage_server_action/pyproject.toml b/helpdesk_mgmt_stage_server_action/pyproject.toml
new file mode 100644
index 0000000000..4231d0cccb
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md
new file mode 100644
index 0000000000..5ac151fbc6
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.md
@@ -0,0 +1,3 @@
+- Go to Helpdesk \> Configuration \> Stages
+- Create or select a stage
+- Select or create a server action
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst b/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
deleted file mode 100644
index 2564cbafde..0000000000
--- a/helpdesk_mgmt_stage_server_action/readme/CONFIGURE.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-* Go to Helpdesk > Configuration > Stages
-* Create or select a stage
-* Select or create a server action
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md
new file mode 100644
index 0000000000..2be296829f
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.md
@@ -0,0 +1 @@
+- Bojan Anchev \<\>
diff --git a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
deleted file mode 100644
index 7d1a526704..0000000000
--- a/helpdesk_mgmt_stage_server_action/readme/CONTRIBUTORS.rst
+++ /dev/null
@@ -1 +0,0 @@
-* Bojan Anchev
diff --git a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md
similarity index 65%
rename from helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst
rename to helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md
index dd79e13f93..faebb27935 100644
--- a/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.rst
+++ b/helpdesk_mgmt_stage_server_action/readme/DESCRIPTION.md
@@ -1,2 +1,2 @@
-This module allows you to execute server actions when a Helpdesk ticket enters a
-specific stage.
+This module allows you to execute server actions when a Helpdesk ticket
+enters a specific stage.
diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.md b/helpdesk_mgmt_stage_server_action/readme/USAGE.md
new file mode 100644
index 0000000000..5798481147
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/readme/USAGE.md
@@ -0,0 +1,4 @@
+- Go to Helpdesk
+- Select or create a Helpdesk tickets
+- Move it to the stage configured before to trigger the execution of the
+ server action
diff --git a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst b/helpdesk_mgmt_stage_server_action/readme/USAGE.rst
deleted file mode 100644
index 76b4bf7f30..0000000000
--- a/helpdesk_mgmt_stage_server_action/readme/USAGE.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-* Go to Helpdesk
-* Select or create a Helpdesk tickets
-* Move it to the stage configured before to trigger the execution of the
- server action
diff --git a/helpdesk_mgmt_stage_server_action/static/description/index.html b/helpdesk_mgmt_stage_server_action/static/description/index.html
new file mode 100644
index 0000000000..463772f7d3
--- /dev/null
+++ b/helpdesk_mgmt_stage_server_action/static/description/index.html
@@ -0,0 +1,443 @@
+
+
+
+
+
+Helpdesk Stage Server Action
+
+
+
+
+
Helpdesk Stage Server Action
+
+
+

+
This module allows you to execute server actions when a Helpdesk ticket
+enters a specific stage.
+
Table of contents
+
+
+
+
+- Go to Helpdesk > Configuration > Stages
+- Create or select a stage
+- Select or create a server action
+
+
+
+
+
+- Go to Helpdesk
+- Select or create a Helpdesk tickets
+- Move it to the stage configured before to trigger the execution of
+the server action
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/helpdesk project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
From 5809a6bedb49982960e78e5066200c9606f84b40 Mon Sep 17 00:00:00 2001
From: Maksym Yankin
Date: Tue, 29 Oct 2024 16:36:46 +0200
Subject: [PATCH 3/3] [MIG] helpdesk_mgmt_stage_server_action: Migration to
17.0
---
helpdesk_mgmt_stage_server_action/README.rst | 8 +--
helpdesk_mgmt_stage_server_action/__init__.py | 3 -
.../__manifest__.py | 2 +-
.../models/__init__.py | 3 -
.../models/helpdesk_ticket.py | 17 +++---
.../static/description/index.html | 6 +-
.../tests/test_helpdesk_ticket_stage.py | 61 +++++++++++++------
7 files changed, 62 insertions(+), 38 deletions(-)
diff --git a/helpdesk_mgmt_stage_server_action/README.rst b/helpdesk_mgmt_stage_server_action/README.rst
index 21445dee57..45312dd111 100644
--- a/helpdesk_mgmt_stage_server_action/README.rst
+++ b/helpdesk_mgmt_stage_server_action/README.rst
@@ -17,10 +17,10 @@ Helpdesk Stage Server Action
: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/17.0/helpdesk_ticket_stage_server_action
+ :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_mgmt_stage_server_action
:alt: OCA/helpdesk
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_ticket_stage_server_action
+ :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_stage_server_action
: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=17.0
@@ -57,7 +57,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.
@@ -87,6 +87,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/helpdesk `_ project on GitHub.
+This module is part of the `OCA/helpdesk `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/helpdesk_mgmt_stage_server_action/__init__.py b/helpdesk_mgmt_stage_server_action/__init__.py
index f575e55c77..0650744f6b 100644
--- a/helpdesk_mgmt_stage_server_action/__init__.py
+++ b/helpdesk_mgmt_stage_server_action/__init__.py
@@ -1,4 +1 @@
-# Copyright 2023 Camptocamp SA
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
from . import models
diff --git a/helpdesk_mgmt_stage_server_action/__manifest__.py b/helpdesk_mgmt_stage_server_action/__manifest__.py
index 1ab25e76f1..673fed8e1d 100644
--- a/helpdesk_mgmt_stage_server_action/__manifest__.py
+++ b/helpdesk_mgmt_stage_server_action/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Helpdesk Stage Server Action",
"summary": "Execute server actions when reaching a Helpdesk ticket stage",
- "version": "14.0.1.0.0",
+ "version": "17.0.1.0.0",
"category": "HelpDesk Service",
"author": "Camptocamp, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/helpdesk",
diff --git a/helpdesk_mgmt_stage_server_action/models/__init__.py b/helpdesk_mgmt_stage_server_action/models/__init__.py
index ad81b3bf9e..f6ced2e983 100644
--- a/helpdesk_mgmt_stage_server_action/models/__init__.py
+++ b/helpdesk_mgmt_stage_server_action/models/__init__.py
@@ -1,5 +1,2 @@
-# Copyright 2023 Camptocamp SA
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
from . import helpdesk_ticket_stage
from . import helpdesk_ticket
diff --git a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
index 20a113a1e1..af39931dc3 100644
--- a/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
+++ b/helpdesk_mgmt_stage_server_action/models/helpdesk_ticket.py
@@ -12,17 +12,19 @@ def create(self, vals_list):
records = super().create(vals_list)
for record in records:
action = record.stage_id.action_id
- if action:
- context = {
- "active_model": self._name,
- "active_ids": [record.id],
- }
- action.with_context(**context).run()
+ if not action:
+ continue
+ context = {
+ "active_model": self._name,
+ "active_id": record.id,
+ "active_ids": records.ids,
+ }
+ action.with_context(**context).run()
return records
def write(self, vals):
records = "stage_id" in vals and self.filtered(
- lambda l: l.stage_id.id != vals.get("stage_id")
+ lambda ticket: ticket.stage_id.id != vals.get("stage_id")
)
if records:
res = super().write(vals)
@@ -32,6 +34,7 @@ def write(self, vals):
if action:
context = {
"active_model": self._name,
+ "active_id": records.id,
"active_ids": records.ids,
}
action.with_context(**context).run()
diff --git a/helpdesk_mgmt_stage_server_action/static/description/index.html b/helpdesk_mgmt_stage_server_action/static/description/index.html
index 463772f7d3..c413662bb3 100644
--- a/helpdesk_mgmt_stage_server_action/static/description/index.html
+++ b/helpdesk_mgmt_stage_server_action/static/description/index.html
@@ -369,7 +369,7 @@ Helpdesk Stage Server Action
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5088a8a0de0750867808606407f0644523fd0ece3129431c36afeb51a3f2e4cd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module allows you to execute server actions when a Helpdesk ticket
enters a specific stage.
Table of contents
@@ -408,7 +408,7 @@
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.
@@ -434,7 +434,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/helpdesk project on GitHub.
+
This module is part of the OCA/helpdesk project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
index 68e2bc14da..a4c3b6fb7a 100644
--- a/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
+++ b/helpdesk_mgmt_stage_server_action/tests/test_helpdesk_ticket_stage.py
@@ -1,33 +1,32 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.tests.common import SavepointCase
+from odoo.tests.common import RecordCapturer, TransactionCase
+from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
-class HelpdeskTicketStageServerAction(SavepointCase):
+
+class HelpdeskTicketStageServerAction(TransactionCase):
@classmethod
def setUpClass(cls):
- super(HelpdeskTicketStageServerAction, cls).setUpClass()
- cls.ServerAction = cls.env["ir.actions.server"]
+ super().setUpClass()
+ cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.HelpdeskTicket = cls.env["helpdesk.ticket"]
cls.HelpdeskTicketStage = cls.env["helpdesk.ticket.stage"]
- cls.field = cls.env["ir.model.fields"]._get(cls.HelpdeskTicket._name, "user_id")
+ cls.HelpdeskTicketTag = cls.env["helpdesk.ticket.tag"]
+ cls.ServerAction = cls.env["ir.actions.server"]
cls.server_action_helpdesk_ticket = cls.ServerAction.create(
{
"name": "Helpdesk Ticket Server Action",
- "model_id": cls.env.ref("helpdesk_mgmt.model_helpdesk_ticket").id,
+ "model_id": cls.env["ir.model"]._get_id("helpdesk.ticket"),
+ "crud_model_id": cls.env["ir.model"]._get_id("helpdesk.ticket"),
+ "value": str(cls.env.user.id),
+ "update_path": "user_id",
+ "update_field_id": cls.env["ir.model.fields"]._get_ids(
+ "helpdesk.ticket"
+ )["user_id"],
+ "evaluation_type": "value",
"state": "object_write",
- "fields_lines": [
- (
- 0,
- 0,
- {
- "col1": cls.field.id,
- "evaluation_type": "value",
- "value": cls.env.user.id,
- },
- )
- ],
}
)
cls.helpdesk_ticket_stage_1 = cls.HelpdeskTicketStage.create(
@@ -94,3 +93,31 @@ def test_helpdesk_ticket_without_stage(self):
self.assertFalse(self.helpdesk_ticket_4.user_id)
self.helpdesk_ticket_4.write({"stage_id": self.helpdesk_ticket_stage_2.id})
self.assertEqual(self.helpdesk_ticket_4.user_id, self.env.user)
+
+ def test_helpdesk_ticket_run_action(self):
+ create_tag_action = self.ServerAction.create(
+ {
+ "model_id": self.env["ir.model"]._get_id("helpdesk.ticket.tag"),
+ "crud_model_id": self.env["ir.model"]._get_id("helpdesk.ticket.tag"),
+ "name": "Create new helpdesk tag",
+ "value": "New helpdesk tag",
+ "state": "object_create",
+ }
+ )
+ stage_1 = self.HelpdeskTicketStage.create(
+ {"name": "Stage 1", "sequence": 1, "action_id": create_tag_action.id}
+ )
+ ticket = self.HelpdeskTicket.create(
+ {
+ "name": "Create a tag ticket",
+ "description": "Ticket Description",
+ }
+ )
+ self.assertFalse(
+ self.HelpdeskTicketTag.search([("name", "=", "New helpdesk tag")]).exists()
+ )
+ with RecordCapturer(self.HelpdeskTicketTag, []) as capture:
+ ticket.write({"stage_id": stage_1.id})
+ tag = capture.records
+ self.assertEqual(1, len(tag))
+ self.assertEqual("New helpdesk tag", tag.name)