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..cb2891c4 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/__manifest__.py @@ -0,0 +1,23 @@ +{ + "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", + "hr_personal_equipment_stock", + ], + "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..e4671b34 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/__init__.py @@ -0,0 +1,5 @@ +from . import hr_personal_equipment_request +from . import res_company +from . import res_config_settings +from . import sign_oca_request +from . import stock_picking 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..5452e7b8 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/hr_personal_equipment_request.py @@ -0,0 +1,69 @@ +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 _get_pdf_report(self): + 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] + return base64.b64encode(pdf) + + 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 + ) + request_dict.update({"data": self._get_pdf_report()}) + request = sign_request_obj.create(request_dict) + request.action_send() + + def check_sign_oca_request(self): + if all(line.state in ["valid", "cancelled"] for line in self.line_ids) and any( + line.state == "valid" for line in self.line_ids + ): + self._generate_sign_oca_request() + + 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..f200c64e --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/res_company.py @@ -0,0 +1,13 @@ +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", + ) + + ppe_report_show_sn = fields.Boolean(string="S/N in PPE Request Report") 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..383d86ac --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/res_config_settings.py @@ -0,0 +1,16 @@ +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, + ) + + ppe_report_show_sn = fields.Boolean( + related="company_id.ppe_report_show_sn", + 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/models/stock_picking.py b/hr_personal_equipment_request_sign_oca/models/stock_picking.py new file mode 100644 index 00000000..b2bd9a04 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/models/stock_picking.py @@ -0,0 +1,22 @@ +from odoo import models + + +class StockPicking(models.Model): + + _inherit = "stock.picking" + + def _action_done(self): + is_return = any(x.origin_returned_move_id for x in self.move_ids) + res = super()._action_done() + if self.equipment_request_id and not is_return: + self.equipment_request_id.check_sign_oca_request() + + return res + + def action_cancel(self): + is_return = any(x.origin_returned_move_id for x in self.move_ids) + res = super().action_cancel() + if self.equipment_request_id and not is_return: + self.equipment_request_id.check_sign_oca_request() + + return res 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..26b57f3e --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/reports/ppe_sign_report_template.xml @@ -0,0 +1,84 @@ + + + + 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..e8df4026 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/tests/test_hr_personal_equipment_request_sign_oca.py @@ -0,0 +1,204 @@ +from odoo.tests.common import Form, TransactionCase + + +class TestHrPersonalEquipmentRequestSignOca(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.template = cls.env.ref( + "hr_personal_equipment_request_sign_oca." + "sign_oca_template_personal_equipment_request_demo" + ) + cls.company = cls.env.company + cls.company.personal_equipment_request_sign_oca_template_id = cls.template + cls.warehouse = cls.env.ref("stock.warehouse0") + + 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.location_employee = cls.env["stock.location"].create( + { + "name": "Employee Personal Equipment Virtual Location", + "location_id": cls.warehouse.view_location_id.id, + "usage": "transit", + "is_personal_equipment_location": True, + } + ) + + cls.ressuply_loc = cls.env["stock.location"].create( + { + "name": "Warehouse Test", + "location_id": cls.warehouse.view_location_id.id, + } + ) + + cls.route = cls.env["stock.route"].create( + { + "name": "Employee Personal Equipment Route", + "product_categ_selectable": False, + "product_selectable": True, + "company_id": cls.company.id, + "sequence": 10, + } + ) + + cls.env["stock.rule"].create( + { + "name": "Employee Personal Equipment Rule", + "route_id": cls.route.id, + "location_src_id": cls.ressuply_loc.id, + "location_dest_id": cls.location_employee.id, + "action": "pull", + "picking_type_id": cls.warehouse.int_type_id.id, + "procure_method": "make_to_stock", + "warehouse_id": cls.warehouse.id, + "company_id": cls.company.id, + "propagate_cancel": False, + } + ) + + cls.ppe_1 = cls.env["product.template"].create( + { + "name": "Product Test Employee PPE 1", + "is_personal_equipment": True, + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "route_ids": [(6, 0, cls.route.ids)], + "qty_available": 100, + "type": "product", + } + ) + cls.ppe_2 = cls.env["product.template"].create( + { + "name": "Product Test Employee PPE 2", + "is_personal_equipment": True, + "uom_id": cls.env.ref("uom.product_uom_unit").id, + "route_ids": [(6, 0, cls.route.ids)], + "qty_available": 100, + "type": "product", + } + ) + + lines = [ + { + "name": "PPE 1", + "product_id": cls.ppe_1.product_variant_id.id, + "quantity": 3, + "product_uom_id": cls.ppe_1.uom_id.id, + }, + { + "name": "PPE 2", + "product_id": cls.ppe_2.product_variant_id.id, + "quantity": 2, + "product_uom_id": cls.ppe_2.uom_id.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, + "location_id": cls.location_employee.id, + "line_ids": [(0, 0, line) for line in lines], + } + ) + ) + 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, + "location_id": cls.location_employee.id, + "line_ids": [(0, 0, line) for line in lines], + } + ) + ) + + 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_picking_done(self): + self.ppe_request_1.accept_request() + for allocation in self.ppe_request_1.line_ids: + allocation.move_ids[0].quantity_done = allocation.quantity + self.ppe_request_1.picking_ids[0]._action_done() + + self.assertEqual( + self.partner_1, + self.ppe_request_1.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(self.ppe_request_1.sign_request_count, 1) + + def test_personal_equipment_request_picking_cancel(self): + self.ppe_request_1.accept_request() + self.ppe_request_1.picking_ids[0].action_cancel() + + self.assertFalse( + self.ppe_request_1.sign_request_ids.mapped("signer_ids.partner_id"), + ) + self.assertEqual(self.ppe_request_1.sign_request_count, 0) + + def test_personal_equipment_request_write(self): + 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..123fd190 --- /dev/null +++ b/hr_personal_equipment_request_sign_oca/views/res_config_settings.xml @@ -0,0 +1,53 @@ + + + + res.config.settings.view.form.inherit + res.config.settings + + + +
+

Personal Equipment

+
+
+
+ +
+
+
+
+
+
+ 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, +)