From 9fe93b377d22f0a6d713a657167e807b5c459c6c Mon Sep 17 00:00:00 2001 From: Quirino Leone Date: Tue, 9 Sep 2025 14:10:13 +0200 Subject: [PATCH] [ADD] hr_personal_equipment_request_sign_oca: new module --- .../README.rst | 130 +++++ .../__init__.py | 1 + .../__manifest__.py | 18 + .../data/sign_oca_role.xml | 10 + .../data/sign_oca_template.xml | 34 ++ .../models/__init__.py | 4 + .../models/hr_personal_equipment_request.py | 66 +++ .../models/res_company.py | 11 + .../models/res_config_settings.py | 11 + .../models/sign_oca_request.py | 29 ++ .../readme/CONFIGURE.md | 14 + .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 2 + .../readme/USAGE.md | 17 + .../reports/ppe_sign_report.xml | 16 + .../reports/ppe_sign_report_template.xml | 74 +++ .../static/description/index.html | 486 ++++++++++++++++++ .../tests/__init__.py | 1 + ..._hr_personal_equipment_request_sign_oca.py | 115 +++++ .../views/hr_personal_equipment_request.xml | 35 ++ .../views/res_config_settings.xml | 38 ++ .../views/sign_oca_request.xml | 21 + .../hr_personal_equipment_request_sign_oca | 1 + .../setup.py | 6 + 24 files changed, 1142 insertions(+) create mode 100644 hr_personal_equipment_request_sign_oca/README.rst create mode 100644 hr_personal_equipment_request_sign_oca/__init__.py create mode 100644 hr_personal_equipment_request_sign_oca/__manifest__.py create mode 100644 hr_personal_equipment_request_sign_oca/data/sign_oca_role.xml create mode 100644 hr_personal_equipment_request_sign_oca/data/sign_oca_template.xml create mode 100644 hr_personal_equipment_request_sign_oca/models/__init__.py create mode 100644 hr_personal_equipment_request_sign_oca/models/hr_personal_equipment_request.py create mode 100644 hr_personal_equipment_request_sign_oca/models/res_company.py create mode 100644 hr_personal_equipment_request_sign_oca/models/res_config_settings.py create mode 100644 hr_personal_equipment_request_sign_oca/models/sign_oca_request.py create mode 100644 hr_personal_equipment_request_sign_oca/readme/CONFIGURE.md create mode 100644 hr_personal_equipment_request_sign_oca/readme/CONTRIBUTORS.md create mode 100644 hr_personal_equipment_request_sign_oca/readme/DESCRIPTION.md create mode 100644 hr_personal_equipment_request_sign_oca/readme/USAGE.md create mode 100644 hr_personal_equipment_request_sign_oca/reports/ppe_sign_report.xml create mode 100644 hr_personal_equipment_request_sign_oca/reports/ppe_sign_report_template.xml create mode 100644 hr_personal_equipment_request_sign_oca/static/description/index.html create mode 100644 hr_personal_equipment_request_sign_oca/tests/__init__.py create mode 100644 hr_personal_equipment_request_sign_oca/tests/test_hr_personal_equipment_request_sign_oca.py create mode 100644 hr_personal_equipment_request_sign_oca/views/hr_personal_equipment_request.xml create mode 100644 hr_personal_equipment_request_sign_oca/views/res_config_settings.xml create mode 100644 hr_personal_equipment_request_sign_oca/views/sign_oca_request.xml create mode 120000 setup/hr_personal_equipment_request_sign_oca/odoo/addons/hr_personal_equipment_request_sign_oca create mode 100644 setup/hr_personal_equipment_request_sign_oca/setup.py diff --git a/hr_personal_equipment_request_sign_oca/README.rst b/hr_personal_equipment_request_sign_oca/README.rst new file mode 100644 index 00000000..dc742e01 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/README.rst @@ -0,0 +1,130 @@ +====================================== +Hr Personal Equipment Request Sign Oca +====================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:adb18013225c7e07e55f00281a5bf96055ba36b61a11354a582bab7a55a62cd1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/16.0/hr_personal_equipment_request_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-16-0/sign-16-0-hr_personal_equipment_request_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=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to generate manual and automatic signature +requests from Personal Equipment Request to For employees who request +it. A new PPE sign report has been created in order to manage dynamic +Personal Equipments' table. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +1. Go to Sign > Settings > Roles and create a role with the following + data: + +- Partner type: Expression +- Expression: {{object.employee_id.user_id.partner_id.id}} + +2. Go to Sign > Templates and create a template with the following data: + +- Model: "This model allows to create a personal equipment request" +- In one of the fields, you must set the previously created role. + +3. (Optional) Go to Employees > Configuration > Settings. + +- In the Personal Equipment Request Sign section, define a template to + enable automatic task sign requests. +- Use the template previously created. + +Usage +===== + +Creating a Signature Request from a Personal Equipment Request: + +- Go to Employees > Personal Equipment > Personal Equipment Request. +- Create a new Personal Equipment Request. +- In the list or form view, click on the action "Sign from template". +- Sign Requests will have been generated (and sent) linked to the + selected Personal Equipment Request. + +Automatic Signature Request creation: + +- Define a template in Employees > Configuration > Settings. +- When a Personal Equipment Request is created, or employee in an + existing one changes, a Sign Request will be created (and sent) + automatically. + +Viewing Signature Requests: + +- Go to Employees > Personal Equipment > Personal Equipment Request. +- Open a personal equipment request 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 Employess. + +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 +------- + +* PyTech SRL + +Contributors +------------ + +- `PyTech SRL `__: + + - Quirino Leone + +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/hr_personal_equipment_request_sign_oca/__init__.py b/hr_personal_equipment_request_sign_oca/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/hr_personal_equipment_request_sign_oca/__manifest__.py b/hr_personal_equipment_request_sign_oca/__manifest__.py new file mode 100644 index 00000000..c3ffea46 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/__manifest__.py @@ -0,0 +1,18 @@ +{ + "name": "Hr Personal Equipment Request Sign Oca", + "summary": """Hr Personal Equipment Request Sign Oca""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "PyTech SRL, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/sign", + "depends": ["sign_oca", "hr_personal_equipment_request", "hr_employee_ppe"], + "data": [ + "data/sign_oca_role.xml", + "data/sign_oca_template.xml", + "reports/ppe_sign_report.xml", + "reports/ppe_sign_report_template.xml", + "views/hr_personal_equipment_request.xml", + "views/res_config_settings.xml", + "views/sign_oca_request.xml", + ], +} diff --git a/hr_personal_equipment_request_sign_oca/data/sign_oca_role.xml b/hr_personal_equipment_request_sign_oca/data/sign_oca_role.xml new file mode 100644 index 00000000..16eec342 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/data/sign_oca_role.xml @@ -0,0 +1,10 @@ + + + + Personal Equipment Request owner + expression + {{object.employee_id.user_id.partner_id.id}} + + diff --git a/hr_personal_equipment_request_sign_oca/data/sign_oca_template.xml b/hr_personal_equipment_request_sign_oca/data/sign_oca_template.xml new file mode 100644 index 00000000..41903672 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/data/sign_oca_template.xml @@ -0,0 +1,34 @@ + + + + Personal Equipment Request + + + + + + + + 1 + 10 + 10 + 30 + 4 + + + diff --git a/hr_personal_equipment_request_sign_oca/models/__init__.py b/hr_personal_equipment_request_sign_oca/models/__init__.py new file mode 100644 index 00000000..7f0cccbd --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/__init__.py @@ -0,0 +1,4 @@ +from . import hr_personal_equipment_request +from . import res_company +from . import res_config_settings +from . import sign_oca_request diff --git a/hr_personal_equipment_request_sign_oca/models/hr_personal_equipment_request.py b/hr_personal_equipment_request_sign_oca/models/hr_personal_equipment_request.py new file mode 100644 index 00000000..c085d466 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/hr_personal_equipment_request.py @@ -0,0 +1,66 @@ +import base64 + +from odoo import api, fields, models + + +class HrPersonalEquipmentRequest(models.Model): + _inherit = "hr.personal.equipment.request" + + sign_request_ids = fields.One2many( + comodel_name="sign.oca.request", + inverse_name="personal_equipment_request_id", + string="Sign Requests", + ) + sign_request_count = fields.Integer( + string="Sign request count", + compute="_compute_sign_request_count", + store=True, + ) + + @api.depends("sign_request_ids") + def _compute_sign_request_count(self): + for item in self: + item.sign_request_count = len(item.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 item in self: + sign_template = ( + item.employee_id.company_id.personal_equipment_request_sign_oca_template_id + ) + if sign_template: + sign_template = sign_template.sudo() + request_dict = sign_template._prepare_sign_oca_request_vals_from_record( + item + ) + report = self.env["ir.actions.report"]._get_report_from_name( + "hr_personal_equipment_request_sign_oca.ppe_sign_report_template" + ) + pdf = report._render_qweb_pdf(report.report_name, [self.id])[0] + request_dict.update({"data": base64.b64encode(pdf)}) + request = sign_request_obj.create(request_dict) + request.action_send() + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + res._generate_sign_oca_request() + return res + + def write(self, vals): + if "employee_id" in vals: + old_employees = {rec.id: rec.employee_id for rec in self} + res = super().write(vals) + if "employee_id" in vals: + for rec in self: + if rec.employee_id and rec.employee_id != old_employees.get(rec.id): + rec._generate_sign_oca_request() + return res diff --git a/hr_personal_equipment_request_sign_oca/models/res_company.py b/hr_personal_equipment_request_sign_oca/models/res_company.py new file mode 100644 index 00000000..cb1c4f23 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/res_company.py @@ -0,0 +1,11 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + personal_equipment_request_sign_oca_template_id = fields.Many2one( + comodel_name="sign.oca.template", + domain="[('model_id.model', '=', 'hr.personal.equipment.request')]", + string="Personal Equipment Request Sign Oca Template", + ) diff --git a/hr_personal_equipment_request_sign_oca/models/res_config_settings.py b/hr_personal_equipment_request_sign_oca/models/res_config_settings.py new file mode 100644 index 00000000..12921c9b --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/res_config_settings.py @@ -0,0 +1,11 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + personal_equipment_request_sign_oca_template_id = fields.Many2one( + comodel_name="sign.oca.template", + related="company_id.personal_equipment_request_sign_oca_template_id", + readonly=False, + ) diff --git a/hr_personal_equipment_request_sign_oca/models/sign_oca_request.py b/hr_personal_equipment_request_sign_oca/models/sign_oca_request.py new file mode 100644 index 00000000..4d865174 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/sign_oca_request.py @@ -0,0 +1,29 @@ +from odoo import api, fields, models + + +class SignOcaRequest(models.Model): + _inherit = "sign.oca.request" + + personal_equipment_request_id = fields.Many2one( + comodel_name="hr.personal.equipment.request", + string="Personal Equipment Request", + compute="_compute_personal_equipment_request_id", + store=True, + ) + + ppe_employee_id = fields.Many2one( + comodel_name="hr.employee", + related="personal_equipment_request_id.employee_id", + store=True, + ) + + @api.depends("record_ref") + def _compute_personal_equipment_request_id(self): + for item in self: + if ( + item.record_ref + and item.record_ref._name == "hr.personal.equipment.request" + ): + item.personal_equipment_request_id = item.record_ref.id + else: + item.personal_equipment_request_id = False diff --git a/hr_personal_equipment_request_sign_oca/readme/CONFIGURE.md b/hr_personal_equipment_request_sign_oca/readme/CONFIGURE.md new file mode 100644 index 00000000..ea8312a6 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/readme/CONFIGURE.md @@ -0,0 +1,14 @@ +1. Go to Sign > Settings > Roles and create a role with the following data: + +- Partner type: Expression +- Expression: {{object.employee_id.user_id.partner_id.id}} + +2. Go to Sign > Templates and create a template with the following data: + +- Model: "This model allows to create a personal equipment request" +- In one of the fields, you must set the previously created role. + +3. (Optional) Go to Employees > Configuration > Settings. + +- In the Personal Equipment Request Sign section, define a template to enable automatic task sign requests. +- Use the template previously created. diff --git a/hr_personal_equipment_request_sign_oca/readme/CONTRIBUTORS.md b/hr_personal_equipment_request_sign_oca/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..a6570315 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [PyTech SRL](https://pytech.it): + - Quirino Leone \<\> diff --git a/hr_personal_equipment_request_sign_oca/readme/DESCRIPTION.md b/hr_personal_equipment_request_sign_oca/readme/DESCRIPTION.md new file mode 100644 index 00000000..5507792c --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module allows you to generate manual and automatic signature requests from Personal Equipment Request to For employees who request it. +A new PPE sign report has been created in order to manage dynamic Personal Equipments' table. diff --git a/hr_personal_equipment_request_sign_oca/readme/USAGE.md b/hr_personal_equipment_request_sign_oca/readme/USAGE.md new file mode 100644 index 00000000..16494584 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/readme/USAGE.md @@ -0,0 +1,17 @@ +Creating a Signature Request from a Personal Equipment Request: +- Go to Employees > Personal Equipment > Personal Equipment Request. +- Create a new Personal Equipment Request. +- In the list or form view, click on the action "Sign from template". +- Sign Requests will have been generated (and sent) linked to the selected Personal Equipment Request. + +Automatic Signature Request creation: +- Define a template in Employees > Configuration > Settings. +- When a Personal Equipment Request is created, or employee in an existing one changes, a Sign Request will be created (and sent) automatically. + +Viewing Signature Requests: +- Go to Employees > Personal Equipment > Personal Equipment Request. +- Open a personal equipment request 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 Employess. diff --git a/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report.xml b/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report.xml new file mode 100644 index 00000000..f47ad17a --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report.xml @@ -0,0 +1,16 @@ + + + + Receipt of Personal protection Equipment + hr.personal.equipment.request + qweb-pdf + hr_personal_equipment_request_sign_oca.ppe_sign_report_template + hr_personal_equipment_request_sign_oca.ppe_sign_report_template + + report + + diff --git a/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report_template.xml b/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report_template.xml new file mode 100644 index 00000000..c378476d --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report_template.xml @@ -0,0 +1,74 @@ + + + + diff --git a/hr_personal_equipment_request_sign_oca/static/description/index.html b/hr_personal_equipment_request_sign_oca/static/description/index.html new file mode 100644 index 00000000..b94a9f45 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/static/description/index.html @@ -0,0 +1,486 @@ + + + + + +Hr Personal Equipment Request Sign Oca + + + +
+

Hr Personal Equipment Request 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 Personal Equipment Request to For employees who request +it. A new PPE sign report has been created in order to manage dynamic +Personal Equipments’ table.

+

Table of contents

+ +
+

Configuration

+
    +
  1. Go to Sign > Settings > Roles and create a role with the following +data:
  2. +
+
    +
  • Partner type: Expression
  • +
  • Expression: {{object.employee_id.user_id.partner_id.id}}
  • +
+
    +
  1. Go to Sign > Templates and create a template with the following data:
  2. +
+
    +
  • Model: “This model allows to create a personal equipment request”
  • +
  • In one of the fields, you must set the previously created role.
  • +
+
    +
  1. (Optional) Go to Employees > Configuration > Settings.
  2. +
+
    +
  • In the Personal Equipment Request Sign section, define a template to +enable automatic task sign requests.
  • +
  • Use the template previously created.
  • +
+
+
+

Usage

+

Creating a Signature Request from a Personal Equipment Request:

+
    +
  • Go to Employees > Personal Equipment > Personal Equipment Request.
  • +
  • Create a new Personal Equipment Request.
  • +
  • In the list or form view, click on the action “Sign from template”.
  • +
  • Sign Requests will have been generated (and sent) linked to the +selected Personal Equipment Request.
  • +
+

Automatic Signature Request creation:

+
    +
  • Define a template in Employees > Configuration > Settings.
  • +
  • When a Personal Equipment Request is created, or employee in an +existing one changes, a Sign Request will be created (and sent) +automatically.
  • +
+

Viewing Signature Requests:

+
    +
  • Go to Employees > Personal Equipment > Personal Equipment Request.
  • +
  • Open a personal equipment request 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 Employess.
  • +
+
+
+

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

+
    +
  • PyTech SRL
  • +
+
+
+

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/hr_personal_equipment_request_sign_oca/tests/__init__.py b/hr_personal_equipment_request_sign_oca/tests/__init__.py new file mode 100644 index 00000000..214b453b --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/tests/__init__.py @@ -0,0 +1 @@ +from . import test_hr_personal_equipment_request_sign_oca diff --git a/hr_personal_equipment_request_sign_oca/tests/test_hr_personal_equipment_request_sign_oca.py b/hr_personal_equipment_request_sign_oca/tests/test_hr_personal_equipment_request_sign_oca.py new file mode 100644 index 00000000..7f80fd38 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/tests/test_hr_personal_equipment_request_sign_oca.py @@ -0,0 +1,115 @@ +from odoo.tests.common import Form, TransactionCase + + +class TestHrPersonalEquipmentRequestSignOca(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.company_id = cls.env.company + cls.template = cls.env.ref( + "hr_personal_equipment_request_sign_oca.sign_oca_template_personal_equipment_request_demo" + ) + + cls.partner_1 = cls.env["res.partner"].create( + { + "name": "Test Partner 1", + } + ) + cls.partner_2 = cls.env["res.partner"].create( + { + "name": "Test Partner 2", + } + ) + + cls.user_1 = cls.env["res.users"].create( + { + "name": "Test User 1", + "login": "user1@test.com", + "partner_id": cls.partner_1.id, + } + ) + cls.user_2 = cls.env["res.users"].create( + { + "name": "Test User 2", + "login": "user2@test.com", + "partner_id": cls.partner_2.id, + } + ) + + cls.employee_1 = cls.env["hr.employee"].create( + {"name": "Employee Test 1", "user_id": cls.user_1.id} + ) + cls.employee_2 = cls.env["hr.employee"].create( + {"name": "Employee Test 2", "user_id": cls.user_2.id} + ) + + cls.ppe_request_1 = ( + cls.env["hr.personal.equipment.request"] + .with_user(cls.user_1.id) + .create( + { + "name": "Personal Equipment Request 1", + "employee_id": cls.employee_1.id, + } + ) + ) + cls.ppe_request_2 = ( + cls.env["hr.personal.equipment.request"] + .with_user(cls.user_2.id) + .create( + { + "name": "Personal Equipment Request 2", + "employee_id": cls.employee_2.id, + } + ) + ) + + def test_template_generate_multi_equipment_request(self): + ppe_requests = self.ppe_request_1 + self.ppe_request_2 + wizard_form = Form( + self.env["sign.oca.template.generate.multi"].with_context( + default_model="hr.personal.equipment.request", + active_ids=ppe_requests.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) + + sign_request_1 = requests.filtered( + lambda x: x.personal_equipment_request_id == self.ppe_request_1 + ) + sign_request_2 = requests.filtered( + lambda x: x.personal_equipment_request_id == self.ppe_request_2 + ) + self.assertEqual(self.partner_1, sign_request_1.mapped("signer_ids.partner_id")) + self.assertEqual(self.partner_2, sign_request_2.mapped("signer_ids.partner_id")) + + def test_personal_equipment_request_create(self): + self.company_id.personal_equipment_request_sign_oca_template_id = self.template + request_3 = self.env["hr.personal.equipment.request"].create( + { + "name": "Personal Equipment Request 3", + "employee_id": self.employee_1.id, + } + ) + self.assertEqual( + self.partner_1, + request_3.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(request_3.sign_request_count, 1) + + def test_personal_equipment_request_write(self): + # flake8: noqa: B950 + self.company_id.personal_equipment_request_sign_oca_template_id = self.template + self.ppe_request_1.employee_id = False + self.assertFalse(self.ppe_request_1.sign_request_ids) + self.assertEqual(self.ppe_request_1.sign_request_count, 0) + + self.ppe_request_1.employee_id = self.employee_2.id + self.assertEqual( + self.partner_2, + self.ppe_request_1.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(self.ppe_request_1.sign_request_count, 1) diff --git a/hr_personal_equipment_request_sign_oca/views/hr_personal_equipment_request.xml b/hr_personal_equipment_request_sign_oca/views/hr_personal_equipment_request.xml new file mode 100644 index 00000000..fd453e0f --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/views/hr_personal_equipment_request.xml @@ -0,0 +1,35 @@ + + + + personal.equipment.request.form + hr.personal.equipment.request + + + + 1 + +
+ +
+
+
+
diff --git a/hr_personal_equipment_request_sign_oca/views/res_config_settings.xml b/hr_personal_equipment_request_sign_oca/views/res_config_settings.xml new file mode 100644 index 00000000..280ac1c6 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/views/res_config_settings.xml @@ -0,0 +1,38 @@ + + + + res.config.settings.view.form.inherit + res.config.settings + + + +
+
+
+ Personal Equipment Request Sign +
+ Template for automatic sign requests for PPEs requests +
+
+
+
+
+
+
+
+
diff --git a/hr_personal_equipment_request_sign_oca/views/sign_oca_request.xml b/hr_personal_equipment_request_sign_oca/views/sign_oca_request.xml new file mode 100644 index 00000000..66bb3804 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/views/sign_oca_request.xml @@ -0,0 +1,21 @@ + + + + sign.oca.request.search + sign.oca.request + + + + + + + + + + + + diff --git a/setup/hr_personal_equipment_request_sign_oca/odoo/addons/hr_personal_equipment_request_sign_oca b/setup/hr_personal_equipment_request_sign_oca/odoo/addons/hr_personal_equipment_request_sign_oca new file mode 120000 index 00000000..6bb91829 --- /dev/null +++ b/setup/hr_personal_equipment_request_sign_oca/odoo/addons/hr_personal_equipment_request_sign_oca @@ -0,0 +1 @@ +../../../../hr_personal_equipment_request_sign_oca \ No newline at end of file diff --git a/setup/hr_personal_equipment_request_sign_oca/setup.py b/setup/hr_personal_equipment_request_sign_oca/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/hr_personal_equipment_request_sign_oca/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)