From 26b7938d7bddce6817186eb7221ea5a31236b930 Mon Sep 17 00:00:00 2001 From: Wesley Oliveira Date: Thu, 27 Jun 2024 12:35:15 -0300 Subject: [PATCH 1/5] [ADD] project_task_sign_oca: add new module --- project_task_sign_oca/README.rst | 118 +++++ project_task_sign_oca/__init__.py | 1 + project_task_sign_oca/__manifest__.py | 22 + project_task_sign_oca/demo/sign_oca_role.xml | 12 + .../demo/sign_oca_template.xml | 32 ++ project_task_sign_oca/models/__init__.py | 4 + project_task_sign_oca/models/project_task.py | 60 +++ project_task_sign_oca/models/res_company.py | 14 + .../models/res_config_settings.py | 15 + .../models/sign_oca_request.py | 39 ++ project_task_sign_oca/readme/CONFIGURE.rst | 14 + project_task_sign_oca/readme/CONTRIBUTORS.rst | 4 + project_task_sign_oca/readme/DESCRIPTION.rst | 1 + project_task_sign_oca/readme/USAGE.rst | 17 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 471 ++++++++++++++++++ project_task_sign_oca/tests/__init__.py | 1 + .../tests/test_project_task_sign_oca.py | 109 ++++ project_task_sign_oca/views/project_task.xml | 33 ++ .../views/res_config_settings.xml | 43 ++ .../views/sign_oca_request.xml | 59 +++ 21 files changed, 1069 insertions(+) create mode 100644 project_task_sign_oca/README.rst create mode 100644 project_task_sign_oca/__init__.py create mode 100644 project_task_sign_oca/__manifest__.py create mode 100644 project_task_sign_oca/demo/sign_oca_role.xml create mode 100644 project_task_sign_oca/demo/sign_oca_template.xml create mode 100644 project_task_sign_oca/models/__init__.py create mode 100644 project_task_sign_oca/models/project_task.py create mode 100644 project_task_sign_oca/models/res_company.py create mode 100644 project_task_sign_oca/models/res_config_settings.py create mode 100644 project_task_sign_oca/models/sign_oca_request.py create mode 100644 project_task_sign_oca/readme/CONFIGURE.rst create mode 100644 project_task_sign_oca/readme/CONTRIBUTORS.rst create mode 100644 project_task_sign_oca/readme/DESCRIPTION.rst create mode 100644 project_task_sign_oca/readme/USAGE.rst create mode 100644 project_task_sign_oca/static/description/icon.png create mode 100644 project_task_sign_oca/static/description/index.html create mode 100644 project_task_sign_oca/tests/__init__.py create mode 100644 project_task_sign_oca/tests/test_project_task_sign_oca.py create mode 100644 project_task_sign_oca/views/project_task.xml create mode 100644 project_task_sign_oca/views/res_config_settings.xml create mode 100644 project_task_sign_oca/views/sign_oca_request.xml diff --git a/project_task_sign_oca/README.rst b/project_task_sign_oca/README.rst new file mode 100644 index 00000000..41cd08d5 --- /dev/null +++ b/project_task_sign_oca/README.rst @@ -0,0 +1,118 @@ +===================== +Project Task Sign Oca +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:29657adda23cf1e28d4658aefc324414ea987077225edc3677ea4b77519d4bf5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fsign-lightgray.png?logo=github + :target: https://github.com/OCA/sign/tree/14.0/project_task_sign_oca + :alt: OCA/sign +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sign-14-0/sign-14-0-project_task_sign_oca + :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/sign&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to generate manual and automatic signature requests from project tasks to task customers. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +#. Go to Sign > Roles and create a role with the following data: + +- Partner type: Expression +- Expression: ${object.partner_id.id} + +#. Go to Sign > Templates and create a template with the following data: + +- Model: Project Task +- In one of the fields, you must set the previously created role. + +#. (Optional) Go to Project > Configuration > Settings. + +- In the Task Sign section, define a template to enable automatic task sing requests. +- Use the template previously created. + +Usage +===== + +Creating a Signature Request from a Project Task: +- Go to Projects > Tasks. +- Open an existing task or create a new one (make sure to fill in the `partner_id` field). +- In the task tree or form view, click on the action "Sign from template". +- Sign Requests will have been generated (and sent) linked to the selected project and task. + +Automatic Signature Request creation: +- Define a template in Project > Configuration > Settings. +- When an customer is assigned to a task, a Sign Request will be created (and sent) automatically. + +Viewing Signature Requests: +- Go to Projects > Tasks. +- Open a task with an associated signature request. +- Click on the smart-button Sign Requests. +- Click on any signature request to view its details, status, and progress. +- Alternatively, go to Sign > Requests. +- Use the Group By feature to group requests by Project and/or Task. + +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 +~~~~~~~ + +* Escodoo + +Contributors +~~~~~~~~~~~~ + +* `Escodoo `_: + + * Marcel Savegnago + * Wesley Oliveira + +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/sign `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_task_sign_oca/__init__.py b/project_task_sign_oca/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/project_task_sign_oca/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/project_task_sign_oca/__manifest__.py b/project_task_sign_oca/__manifest__.py new file mode 100644 index 00000000..cab8dc72 --- /dev/null +++ b/project_task_sign_oca/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2024 - TODAY, Escodoo +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Project Task Sign Oca", + "summary": """ + Project Task Sign Oca""", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "author": "Escodoo, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/sign", + "depends": ["sign_oca", "project"], + "data": [ + "views/project_task.xml", + "views/res_config_settings.xml", + "views/sign_oca_request.xml", + ], + "demo": [ + "demo/sign_oca_role.xml", + "demo/sign_oca_template.xml", + ], +} diff --git a/project_task_sign_oca/demo/sign_oca_role.xml b/project_task_sign_oca/demo/sign_oca_role.xml new file mode 100644 index 00000000..72077361 --- /dev/null +++ b/project_task_sign_oca/demo/sign_oca_role.xml @@ -0,0 +1,12 @@ + + + + + + Task Customer + expression + ${object.partner_id.id} + + + diff --git a/project_task_sign_oca/demo/sign_oca_template.xml b/project_task_sign_oca/demo/sign_oca_template.xml new file mode 100644 index 00000000..30d72193 --- /dev/null +++ b/project_task_sign_oca/demo/sign_oca_template.xml @@ -0,0 +1,32 @@ + + + + + + Task Approval + + + + + + + + 1 + 10 + 10 + 30 + 4 + + + + diff --git a/project_task_sign_oca/models/__init__.py b/project_task_sign_oca/models/__init__.py new file mode 100644 index 00000000..52bf9877 --- /dev/null +++ b/project_task_sign_oca/models/__init__.py @@ -0,0 +1,4 @@ +from . import project_task +from . import res_company +from . import res_config_settings +from . import sign_oca_request diff --git a/project_task_sign_oca/models/project_task.py b/project_task_sign_oca/models/project_task.py new file mode 100644 index 00000000..f4ceedf5 --- /dev/null +++ b/project_task_sign_oca/models/project_task.py @@ -0,0 +1,60 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ProjectTask(models.Model): + + _inherit = "project.task" + + sign_request_ids = fields.One2many( + comodel_name="sign.oca.request", + inverse_name="task_id", + string="Sign Requests", + ) + sign_request_count = fields.Integer( + string="Sign request count", + compute="_compute_sign_request_count", + compute_sudo=True, + ) + + @api.depends("sign_request_ids") + def _compute_sign_request_count(self): + for task in self: + task.sign_request_count = len(task.sign_request_ids) + + def action_view_sign_requests(self): + self.ensure_one() + result = self.env["ir.actions.act_window"]._for_xml_id( + "sign_oca.sign_oca_request_act_window" + ) + result["domain"] = [("id", "in", self.sign_request_ids.ids)] + return result + + def _generate_sign_oca_request(self): + sign_request_obj = self.env["sign.oca.request"].sudo() + for task in self: + sign_template = task.company_id.project_task_sign_oca_template_id + if sign_template: + sign_template = sign_template.sudo() + request = sign_request_obj.create( + sign_template._prepare_sign_oca_request_vals_from_record(task) + ) + request.action_send() + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + for task in res: + if task.partner_id: + task._generate_sign_oca_request() + return res + + def write(self, vals): + old_partner_id = self.partner_id + new_partner_id = vals.get("partner_id") + res = super().write(vals) + if new_partner_id and new_partner_id != old_partner_id: + self._generate_sign_oca_request() + return res diff --git a/project_task_sign_oca/models/res_company.py b/project_task_sign_oca/models/res_company.py new file mode 100644 index 00000000..5c382c4c --- /dev/null +++ b/project_task_sign_oca/models/res_company.py @@ -0,0 +1,14 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + project_task_sign_oca_template_id = fields.Many2one( + comodel_name="sign.oca.template", + domain="[('model_id.model', '=', 'project.task')]", + string="Project Task Sign Oca Template", + ) diff --git a/project_task_sign_oca/models/res_config_settings.py b/project_task_sign_oca/models/res_config_settings.py new file mode 100644 index 00000000..4ca65732 --- /dev/null +++ b/project_task_sign_oca/models/res_config_settings.py @@ -0,0 +1,15 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + project_task_sign_oca_template_id = fields.Many2one( + comodel_name="sign.oca.template", + related="company_id.project_task_sign_oca_template_id", + string="Project Task Sign Oca Template", + readonly=False, + ) diff --git a/project_task_sign_oca/models/sign_oca_request.py b/project_task_sign_oca/models/sign_oca_request.py new file mode 100644 index 00000000..29165de7 --- /dev/null +++ b/project_task_sign_oca/models/sign_oca_request.py @@ -0,0 +1,39 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SignOcaRequest(models.Model): + _inherit = "sign.oca.request" + + task_id = fields.Many2one( + comodel_name="project.task", + string="Task", + compute="_compute_task_id", + readonly=True, + store=True, + ) + project_id = fields.Many2one( + comodel_name="project.project", + string="Project", + compute="_compute_project_id", + compute_sudo=True, + readonly=True, + store=True, + ) + + @api.depends("record_ref") + def _compute_task_id(self): + for item in self.filtered( + lambda x: x.record_ref and x.record_ref._name == "project.task" + ): + item.task_id = item.record_ref.id + + @api.depends("record_ref") + def _compute_project_id(self): + for item in self.filtered( + lambda x: x.record_ref and x.record_ref._name == "project.task" + ): + task = self.env["project.task"].browse(item.record_ref.id) + item.project_id = task.project_id diff --git a/project_task_sign_oca/readme/CONFIGURE.rst b/project_task_sign_oca/readme/CONFIGURE.rst new file mode 100644 index 00000000..47285ec0 --- /dev/null +++ b/project_task_sign_oca/readme/CONFIGURE.rst @@ -0,0 +1,14 @@ +#. Go to Sign > Roles and create a role with the following data: + +- Partner type: Expression +- Expression: ${object.partner_id.id} + +#. Go to Sign > Templates and create a template with the following data: + +- Model: Project Task +- In one of the fields, you must set the previously created role. + +#. (Optional) Go to Project > Configuration > Settings. + +- In the Task Sign section, define a template to enable automatic task sing requests. +- Use the template previously created. diff --git a/project_task_sign_oca/readme/CONTRIBUTORS.rst b/project_task_sign_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..bc15bdce --- /dev/null +++ b/project_task_sign_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Escodoo `_: + + * Marcel Savegnago + * Wesley Oliveira diff --git a/project_task_sign_oca/readme/DESCRIPTION.rst b/project_task_sign_oca/readme/DESCRIPTION.rst new file mode 100644 index 00000000..db9767d5 --- /dev/null +++ b/project_task_sign_oca/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows you to generate manual and automatic signature requests from project tasks to task customers. diff --git a/project_task_sign_oca/readme/USAGE.rst b/project_task_sign_oca/readme/USAGE.rst new file mode 100644 index 00000000..ba7585fe --- /dev/null +++ b/project_task_sign_oca/readme/USAGE.rst @@ -0,0 +1,17 @@ +Creating a Signature Request from a Project Task: +- Go to Projects > Tasks. +- Open an existing task or create a new one (make sure to fill in the `partner_id` field). +- In the task tree or form view, click on the action "Sign from template". +- Sign Requests will have been generated (and sent) linked to the selected project and task. + +Automatic Signature Request creation: +- Define a template in Project > Configuration > Settings. +- When an customer is assigned to a task, a Sign Request will be created (and sent) automatically. + +Viewing Signature Requests: +- Go to Projects > Tasks. +- Open a task with an associated signature request. +- Click on the smart-button Sign Requests. +- Click on any signature request to view its details, status, and progress. +- Alternatively, go to Sign > Requests. +- Use the Group By feature to group requests by Project and/or Task. diff --git a/project_task_sign_oca/static/description/icon.png b/project_task_sign_oca/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/project_task_sign_oca/static/description/index.html b/project_task_sign_oca/static/description/index.html new file mode 100644 index 00000000..b8ea0f83 --- /dev/null +++ b/project_task_sign_oca/static/description/index.html @@ -0,0 +1,471 @@ + + + + + +Project Task Sign Oca + + + +
+

Project Task Sign Oca

+ + +

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

+

This module allows you to generate manual and automatic signature requests from project tasks to task customers.

+

Table of contents

+ +
+

Configuration

+
    +
  1. Go to Sign > Roles and create a role with the following data:
  2. +
+
    +
  • Partner type: Expression
  • +
  • Expression: ${object.partner_id.id}
  • +
+
    +
  1. Go to Sign > Templates and create a template with the following data:
  2. +
+
    +
  • Model: Project Task
  • +
  • In one of the fields, you must set the previously created role.
  • +
+
    +
  1. (Optional) Go to Project > Configuration > Settings.
  2. +
+
    +
  • In the Task Sign section, define a template to enable automatic task sing requests.
  • +
  • Use the template previously created.
  • +
+
+
+

Usage

+

Creating a Signature Request from a Project Task: +- Go to Projects > Tasks. +- Open an existing task or create a new one (make sure to fill in the partner_id field). +- In the task tree or form view, click on the action “Sign from template”. +- Sign Requests will have been generated (and sent) linked to the selected project and task.

+

Automatic Signature Request creation: +- Define a template in Project > Configuration > Settings. +- When an customer is assigned to a task, a Sign Request will be created (and sent) automatically.

+

Viewing Signature Requests: +- Go to Projects > Tasks. +- Open a task with an associated signature request. +- Click on the smart-button Sign Requests. +- Click on any signature request to view its details, status, and progress. +- Alternatively, go to Sign > Requests. +- Use the Group By feature to group requests by Project and/or Task.

+
+
+

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

+
    +
  • Escodoo
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/project_task_sign_oca/tests/__init__.py b/project_task_sign_oca/tests/__init__.py new file mode 100644 index 00000000..fad82f87 --- /dev/null +++ b/project_task_sign_oca/tests/__init__.py @@ -0,0 +1 @@ +from . import test_project_task_sign_oca diff --git a/project_task_sign_oca/tests/test_project_task_sign_oca.py b/project_task_sign_oca/tests/test_project_task_sign_oca.py new file mode 100644 index 00000000..3d90b957 --- /dev/null +++ b/project_task_sign_oca/tests/test_project_task_sign_oca.py @@ -0,0 +1,109 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import Form, SavepointCase + + +class TestProjectTaskSignOca(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.company_id = cls.env.company + cls.template = cls.env.ref( + "project_task_sign_oca.sign_oca_template_project_task_demo" + ) + cls.customer_a = cls.env["res.partner"].create( + { + "name": "Test Customer A", + } + ) + cls.customer_b = cls.env["res.partner"].create( + { + "name": "Test Customer B", + } + ) + cls.project_a = cls.env["project.project"].create( + { + "name": "Test Project A", + } + ) + cls.project_b = cls.env["project.project"].create( + { + "name": "Test Project B", + } + ) + cls.task_a = cls.env["project.task"].create( + { + "name": "Test Task A", + "project_id": cls.project_a.id, + "partner_id": cls.customer_a.id, + "company_id": cls.company_id.id, + } + ) + cls.task_b = cls.env["project.task"].create( + { + "name": "Test Task B", + "project_id": cls.project_b.id, + "partner_id": cls.customer_b.id, + "company_id": cls.company_id.id, + } + ) + + def test_template_generate_multi_project_task(self): + tasks = self.task_a + self.task_b + wizard_form = Form( + self.env["sign.oca.template.generate.multi"].with_context( + default_model="project.task", active_ids=tasks.ids + ) + ) + wizard_form.template_id = self.template + action = wizard_form.save().generate() + requests = self.env[action["res_model"]].search(action["domain"]) + self.assertEqual(len(requests), 2) + request_a = requests.filtered(lambda x: x.task_id == self.task_a) + request_b = requests.filtered(lambda x: x.task_id == self.task_b) + self.assertIn(self.customer_a, request_a.mapped("signer_ids.partner_id")) + self.assertIn(self.customer_b, request_b.mapped("signer_ids.partner_id")) + + def test_project_task_create(self): + self.company_id.project_task_sign_oca_template_id = self.template + task_c = self.env["project.task"].create( + { + "name": "Test Task C", + "project_id": self.project_a.id, + "partner_id": self.customer_a.id, + "company_id": self.company_id.id, + } + ) + self.assertIn( + self.customer_a, + task_c.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(task_c.sign_request_count, 1) + self.assertEqual(task_c.sign_request_ids[0].task_id, task_c) + self.assertEqual(task_c.sign_request_ids[0].project_id, self.project_a) + + def test_project_task_write(self): + self.company_id.project_task_sign_oca_template_id = self.template + task_d = self.env["project.task"].create( + { + "name": "Test Task D", + "project_id": self.project_a.id, + "partner_id": False, + "company_id": self.company_id.id, + } + ) + self.assertFalse(task_d.sign_request_ids) + self.assertEqual(task_d.sign_request_count, 0) + task_d.write({"partner_id": self.customer_a.id}) + self.assertIn( + self.customer_a, + task_d.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(task_d.sign_request_count, 1) + task_d.write({"partner_id": self.customer_b.id}) + self.assertIn( + self.customer_b, + task_d.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(task_d.sign_request_count, 2) diff --git a/project_task_sign_oca/views/project_task.xml b/project_task_sign_oca/views/project_task.xml new file mode 100644 index 00000000..e155320d --- /dev/null +++ b/project_task_sign_oca/views/project_task.xml @@ -0,0 +1,33 @@ + + + + + + project.task.form (in project_task_sign_oca) + project.task + + + +
+ +
+
+
+ +
diff --git a/project_task_sign_oca/views/res_config_settings.xml b/project_task_sign_oca/views/res_config_settings.xml new file mode 100644 index 00000000..ffbcc069 --- /dev/null +++ b/project_task_sign_oca/views/res_config_settings.xml @@ -0,0 +1,43 @@ + + + + + + res.config.settings.view.form.inherit.project (in project_task_sign_oca) + res.config.settings + + + +
+
+
+ Task Sign +
+ Define a template to enable automatic sign requests for the task customer +
+
+
+
+
+
+
+
+ +
diff --git a/project_task_sign_oca/views/sign_oca_request.xml b/project_task_sign_oca/views/sign_oca_request.xml new file mode 100644 index 00000000..20eb4d65 --- /dev/null +++ b/project_task_sign_oca/views/sign_oca_request.xml @@ -0,0 +1,59 @@ + + + + + + sign.oca.request.search (in project_task_sign_oca) + sign.oca.request + + + + + + + + + + + + + + + + sign.oca.request.form (in project_task_sign_oca) + sign.oca.request + + + + + + + + + + + sign.oca.request.tree (in project_task_sign_oca) + sign.oca.request + + + + + + + + + + From 6486c68688a6ecf48f79a757597ee71d66f1a0af Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 10 Jul 2024 09:00:50 +0000 Subject: [PATCH 2/5] [UPD] Update project_task_sign_oca.pot --- .../i18n/project_task_sign_oca.pot | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 project_task_sign_oca/i18n/project_task_sign_oca.pot diff --git a/project_task_sign_oca/i18n/project_task_sign_oca.pot b/project_task_sign_oca/i18n/project_task_sign_oca.pot new file mode 100644 index 00000000..250be8ab --- /dev/null +++ b/project_task_sign_oca/i18n/project_task_sign_oca.pot @@ -0,0 +1,99 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_sign_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.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: project_task_sign_oca +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.res_config_settings_view_form +msgid "Task Sign" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model,name:project_task_sign_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model,name:project_task_sign_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: project_task_sign_oca +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.res_config_settings_view_form +msgid "" +"Define a template to enable automatic sign requests for the task customer" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_project_task__display_name +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_company__display_name +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:project_task_sign_oca.field_sign_oca_request__display_name +msgid "Display Name" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_project_task__id +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_company__id +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_config_settings__id +#: model:ir.model.fields,field_description:project_task_sign_oca.field_sign_oca_request__id +msgid "ID" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_project_task____last_update +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_company____last_update +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:project_task_sign_oca.field_sign_oca_request____last_update +msgid "Last Modified on" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_sign_oca_request__project_id +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.sign_oca_request_search_view +msgid "Project" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_company__project_task_sign_oca_template_id +#: model:ir.model.fields,field_description:project_task_sign_oca.field_res_config_settings__project_task_sign_oca_template_id +msgid "Project Task Sign Oca Template" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model,name:project_task_sign_oca.model_sign_oca_request +msgid "Sign Request" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_project_task__sign_request_ids +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.view_task_form2 +msgid "Sign Requests" +msgstr "" + +#. module: project_task_sign_oca +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.res_config_settings_view_form +msgid "Sign Template" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model.fields,field_description:project_task_sign_oca.field_project_task__sign_request_count +msgid "Sign request count" +msgstr "" + +#. module: project_task_sign_oca +#: model:ir.model,name:project_task_sign_oca.model_project_task +#: model:ir.model.fields,field_description:project_task_sign_oca.field_sign_oca_request__task_id +#: model_terms:ir.ui.view,arch_db:project_task_sign_oca.sign_oca_request_search_view +msgid "Task" +msgstr "" From f5091c8bb6505631e1a933f43effc5c9d3c7aad7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 10 Jul 2024 09:02:35 +0000 Subject: [PATCH 3/5] [BOT] post-merge updates --- project_task_sign_oca/README.rst | 2 +- project_task_sign_oca/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/project_task_sign_oca/README.rst b/project_task_sign_oca/README.rst index 41cd08d5..ed192800 100644 --- a/project_task_sign_oca/README.rst +++ b/project_task_sign_oca/README.rst @@ -7,7 +7,7 @@ Project Task Sign Oca !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:29657adda23cf1e28d4658aefc324414ea987077225edc3677ea4b77519d4bf5 + !! source digest: sha256:ef9506e1ac22f6f38d91f32bddc1ab62a1f17703d1a3d3b449c1ca148240d7d4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/project_task_sign_oca/static/description/index.html b/project_task_sign_oca/static/description/index.html index b8ea0f83..7deb9a86 100644 --- a/project_task_sign_oca/static/description/index.html +++ b/project_task_sign_oca/static/description/index.html @@ -367,7 +367,7 @@

Project Task Sign Oca

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:29657adda23cf1e28d4658aefc324414ea987077225edc3677ea4b77519d4bf5 +!! source digest: sha256:ef9506e1ac22f6f38d91f32bddc1ab62a1f17703d1a3d3b449c1ca148240d7d4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module allows you to generate manual and automatic signature requests from project tasks to task customers.

From 7d7761e8e89f3b414f61a4bd6f22e04204bfe140 Mon Sep 17 00:00:00 2001 From: Wesley Oliveira Date: Tue, 10 Sep 2024 16:31:03 -0300 Subject: [PATCH 4/5] [IMP] project_task_sign_oca: black, isort, prettier --- project_task_sign_oca/README.rst | 10 +++++----- project_task_sign_oca/static/description/index.html | 6 +++--- .../odoo/addons/project_task_sign_oca | 1 + setup/project_task_sign_oca/setup.py | 6 ++++++ 4 files changed, 15 insertions(+), 8 deletions(-) create mode 120000 setup/project_task_sign_oca/odoo/addons/project_task_sign_oca create mode 100644 setup/project_task_sign_oca/setup.py diff --git a/project_task_sign_oca/README.rst b/project_task_sign_oca/README.rst index ed192800..2f1f78aa 100644 --- a/project_task_sign_oca/README.rst +++ b/project_task_sign_oca/README.rst @@ -17,13 +17,13 @@ Project Task Sign Oca :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsign-lightgray.png?logo=github - :target: https://github.com/OCA/sign/tree/14.0/project_task_sign_oca + :target: https://github.com/OCA/sign/tree/15.0/project_task_sign_oca :alt: OCA/sign .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/sign-14-0/sign-14-0-project_task_sign_oca + :target: https://translation.odoo-community.org/projects/sign-15-0/sign-15-0-project_task_sign_oca :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/sign&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/sign&target_branch=15.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -80,7 +80,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. @@ -113,6 +113,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/sign `_ project on GitHub. +This module is part of the `OCA/sign `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_task_sign_oca/static/description/index.html b/project_task_sign_oca/static/description/index.html index 7deb9a86..b9a2d854 100644 --- a/project_task_sign_oca/static/description/index.html +++ b/project_task_sign_oca/static/description/index.html @@ -369,7 +369,7 @@

Project Task Sign Oca

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:ef9506e1ac22f6f38d91f32bddc1ab62a1f17703d1a3d3b449c1ca148240d7d4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module allows you to generate manual and automatic signature requests from project tasks to task customers.

Table of contents

@@ -432,7 +432,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

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/sign project on GitHub.

+

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

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

diff --git a/setup/project_task_sign_oca/odoo/addons/project_task_sign_oca b/setup/project_task_sign_oca/odoo/addons/project_task_sign_oca new file mode 120000 index 00000000..49f1f4b3 --- /dev/null +++ b/setup/project_task_sign_oca/odoo/addons/project_task_sign_oca @@ -0,0 +1 @@ +../../../../project_task_sign_oca \ No newline at end of file diff --git a/setup/project_task_sign_oca/setup.py b/setup/project_task_sign_oca/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/project_task_sign_oca/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 1306948badfaebbe66b36a3131441c99b8831db5 Mon Sep 17 00:00:00 2001 From: Wesley Oliveira Date: Tue, 10 Sep 2024 16:33:16 -0300 Subject: [PATCH 5/5] [MIG] project_task_sign_oca: Migration to 15.0 --- project_task_sign_oca/README.rst | 4 ++-- project_task_sign_oca/__manifest__.py | 2 +- project_task_sign_oca/demo/sign_oca_role.xml | 2 +- project_task_sign_oca/readme/CONFIGURE.rst | 4 ++-- project_task_sign_oca/static/description/index.html | 4 ++-- project_task_sign_oca/tests/test_project_task_sign_oca.py | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/project_task_sign_oca/README.rst b/project_task_sign_oca/README.rst index 2f1f78aa..31d4125d 100644 --- a/project_task_sign_oca/README.rst +++ b/project_task_sign_oca/README.rst @@ -38,10 +38,10 @@ This module allows you to generate manual and automatic signature requests from Configuration ============= -#. Go to Sign > Roles and create a role with the following data: +#. Go to Sign > Settings > Roles and create a role with the following data: - Partner type: Expression -- Expression: ${object.partner_id.id} +- Expression: {{object.partner_id.id}} #. Go to Sign > Templates and create a template with the following data: diff --git a/project_task_sign_oca/__manifest__.py b/project_task_sign_oca/__manifest__.py index cab8dc72..bf7317eb 100644 --- a/project_task_sign_oca/__manifest__.py +++ b/project_task_sign_oca/__manifest__.py @@ -5,7 +5,7 @@ "name": "Project Task Sign Oca", "summary": """ Project Task Sign Oca""", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "license": "AGPL-3", "author": "Escodoo, Odoo Community Association (OCA)", "website": "https://github.com/OCA/sign", diff --git a/project_task_sign_oca/demo/sign_oca_role.xml b/project_task_sign_oca/demo/sign_oca_role.xml index 72077361..0c438940 100644 --- a/project_task_sign_oca/demo/sign_oca_role.xml +++ b/project_task_sign_oca/demo/sign_oca_role.xml @@ -6,7 +6,7 @@ Task Customer expression - ${object.partner_id.id} + {{object.partner_id.id}} diff --git a/project_task_sign_oca/readme/CONFIGURE.rst b/project_task_sign_oca/readme/CONFIGURE.rst index 47285ec0..6a0dcb3d 100644 --- a/project_task_sign_oca/readme/CONFIGURE.rst +++ b/project_task_sign_oca/readme/CONFIGURE.rst @@ -1,7 +1,7 @@ -#. Go to Sign > Roles and create a role with the following data: +#. Go to Sign > Settings > Roles and create a role with the following data: - Partner type: Expression -- Expression: ${object.partner_id.id} +- Expression: {{object.partner_id.id}} #. Go to Sign > Templates and create a template with the following data: diff --git a/project_task_sign_oca/static/description/index.html b/project_task_sign_oca/static/description/index.html index b9a2d854..e6bfe2b6 100644 --- a/project_task_sign_oca/static/description/index.html +++ b/project_task_sign_oca/static/description/index.html @@ -388,11 +388,11 @@

Project Task Sign Oca

Configuration

    -
  1. Go to Sign > Roles and create a role with the following data:
  2. +
  3. Go to Sign > Settings > Roles and create a role with the following data:
  • Partner type: Expression
  • -
  • Expression: ${object.partner_id.id}
  • +
  • Expression: {{object.partner_id.id}}
  1. Go to Sign > Templates and create a template with the following data:
  2. diff --git a/project_task_sign_oca/tests/test_project_task_sign_oca.py b/project_task_sign_oca/tests/test_project_task_sign_oca.py index 3d90b957..28b99e07 100644 --- a/project_task_sign_oca/tests/test_project_task_sign_oca.py +++ b/project_task_sign_oca/tests/test_project_task_sign_oca.py @@ -1,10 +1,10 @@ # Copyright 2024 - TODAY, Wesley Oliveira # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests.common import Form, SavepointCase +from odoo.tests.common import Form, TransactionCase -class TestProjectTaskSignOca(SavepointCase): +class TestProjectTaskSignOca(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass()