diff --git a/pms_hr_property/__manifest__.py b/pms_hr_property/__manifest__.py index 35d8ad8ae..842831c9a 100644 --- a/pms_hr_property/__manifest__.py +++ b/pms_hr_property/__manifest__.py @@ -14,8 +14,6 @@ "hr", "pms", ], - "data": [ - "views/hr_employee_view.xml", - ], + "data": ["views/hr_employee_view.xml", "views/pms_hr_property_view.xml"], "installable": True, } diff --git a/pms_hr_property/models/__init__.py b/pms_hr_property/models/__init__.py index e11a62f98..89372ccd3 100644 --- a/pms_hr_property/models/__init__.py +++ b/pms_hr_property/models/__init__.py @@ -1 +1,2 @@ from . import hr_employee +from . import pms_property diff --git a/pms_hr_property/models/hr_employee.py b/pms_hr_property/models/hr_employee.py index 3478af16a..20c000685 100644 --- a/pms_hr_property/models/hr_employee.py +++ b/pms_hr_property/models/hr_employee.py @@ -1,7 +1,7 @@ # Copyright 2023 OsoTranquilo +# Copyright 2024 Irlui Ramírez +# From Consultores Hoteleros Integrales (ALDA Hotels) - 2024 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - - from odoo import fields, models @@ -9,4 +9,10 @@ class HrEmployeeBase(models.AbstractModel): _inherit = "hr.employee.base" - property_ids = fields.Many2many("pms.property", string="Workplaces asigned") + property_ids = fields.Many2many( + comodel_name="pms.property", + string="Workplaces asigned", + relation="hr_employee_pms_property_rel", + column1="hr_employee_id", + column2="pms_property_id", + ) diff --git a/pms_hr_property/models/pms_property.py b/pms_hr_property/models/pms_property.py new file mode 100644 index 000000000..75ff1817a --- /dev/null +++ b/pms_hr_property/models/pms_property.py @@ -0,0 +1,17 @@ +# Copyright 2024 OsoTranquilo - José Luis Algara +# Copyright 2024 Irlui Ramírez +# From Consultores Hoteleros Integrales (ALDA Hotels) - 2024 +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class PmsHrProperty(models.Model): + _inherit = "pms.property" + + employee_ids = fields.Many2many( + comodel_name="hr.employee", + string="Assigned Employees", + relation="hr_employee_pms_property_rel", + column1="pms_property_id", + column2="hr_employee_id", + ) diff --git a/pms_hr_property/static/description/index.html b/pms_hr_property/static/description/index.html index 06f6842f7..6fa573edb 100644 --- a/pms_hr_property/static/description/index.html +++ b/pms_hr_property/static/description/index.html @@ -1,4 +1,3 @@ - diff --git a/pms_hr_property/tests/__init__.py b/pms_hr_property/tests/__init__.py new file mode 100644 index 000000000..2980d4ea0 --- /dev/null +++ b/pms_hr_property/tests/__init__.py @@ -0,0 +1 @@ +from . import test_pms_hr_property diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py new file mode 100644 index 000000000..00e487e6b --- /dev/null +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -0,0 +1,84 @@ +# Copyright 2024 OsoTranquilo - José Luis Algara +# Copyright 2024 Irlui Ramírez +# From Consultores Hoteleros Integrales (ALDA Hotels) - 2024 +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase + + +class TestPmsHrProperty(TransactionCase): + def setUp(self): + super(TestPmsHrProperty, self).setUp() + self.PmsProperty = self.env["pms.property"] + self.HrEmployee = self.env["hr.employee"] + self.Company = self.env["res.company"] + + self.company1 = self.Company.create({"name": "Company 1"}) + + self.property1 = self.PmsProperty.create( + {"name": "Property 1", "company_id": self.company1.id} + ) + + user_dict = { + "name": "User 1", + "login": "tua@example.com", + "password": "base-test-passwd", + } + self.user_test = self.env["res.users"].create(user_dict) + + user_dict2 = { + "name": "User 2", + "login": "user2@example.com", + "password": "base-test-passwd", + } + self.user_test2 = self.env["res.users"].create(user_dict2) + + employee_dict = { + "name": "Employee 1", + "user_id": self.user_test.id, + "address_id": self.user_test.partner_id.id, + } + self.employee = self.env["hr.employee"].create(employee_dict) + + employee_dict2 = { + "name": "Employee 2", + "user_id": self.user_test2.id, + "address_id": self.user_test2.partner_id.id, + } + self.employee2 = self.env["hr.employee"].create(employee_dict2) + + def test_employee_assignment(self): + """Check if employees are correctly assigned to properties""" + self.employee.write({"property_ids": [(4, self.property1.id)]}) + + assigned_employees = self.property1.employee_ids + self.assertIn( + self.employee, + assigned_employees, + "The employee is not correctly assigned to the property.", + ) + + def test_employee_removal(self): + """Check if employees can be unassigned from properties correctly""" + self.employee.write({"property_ids": [(4, self.property1.id)]}) + + self.employee.write({"property_ids": [(3, self.property1.id)]}) + + assigned_employees = self.property1.employee_ids + self.assertNotIn( + self.employee, + assigned_employees, + "The employee is still assigned to the property after removal.", + ) + + def test_multiple_employees_assignment(self): + """Check if multiple employees can be assigned to a single property""" + self.employee.write({"property_ids": [(4, self.property1.id)]}) + self.employee2.write({"property_ids": [(4, self.property1.id)]}) + + assigned_employees = self.property1.employee_ids + self.assertIn( + self.employee, assigned_employees, "Employee 1 is not correctly assigned." + ) + self.assertIn( + self.employee2, assigned_employees, "Employee 2 is not correctly assigned." + ) diff --git a/pms_hr_property/views/pms_hr_property_view.xml b/pms_hr_property/views/pms_hr_property_view.xml new file mode 100644 index 000000000..f3aa20b4a --- /dev/null +++ b/pms_hr_property/views/pms_hr_property_view.xml @@ -0,0 +1,22 @@ + + + + pms.hr.property.form + pms.property + + + + + + + + + + + + + + + + +