From c49d63c407cbcccd90c0279ea752f87b1f125c23 Mon Sep 17 00:00:00 2001 From: irluidev Date: Thu, 1 Aug 2024 15:14:07 +0200 Subject: [PATCH 01/10] [IMP]pms_hr_property: add list of employees on the property card --- pms_hr_property/__manifest__.py | 4 +-- pms_hr_property/models/__init__.py | 1 + pms_hr_property/models/pms_hr_property.py | 35 +++++++++++++++++++ pms_hr_property/static/description/index.html | 1 - .../views/pms_hr_property_view.xml | 22 ++++++++++++ 5 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 pms_hr_property/models/pms_hr_property.py create mode 100644 pms_hr_property/views/pms_hr_property_view.xml 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..8a3d3ba90 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_hr_property diff --git a/pms_hr_property/models/pms_hr_property.py b/pms_hr_property/models/pms_hr_property.py new file mode 100644 index 000000000..7e74bcb88 --- /dev/null +++ b/pms_hr_property/models/pms_hr_property.py @@ -0,0 +1,35 @@ +# 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 api, fields, models + + +class PmsHrProperty(models.Model): + _inherit = "pms.property" + + employee_ids = fields.Many2many( + comodel_name="hr.employee", + string="Assigned Employees", + compute="_compute_employee_ids", + ) + + # @api.depends('employee_ids') + # def _compute_employee_ids(self): + # specific_job_names = ['Regional Manager','Revenue Manager', 'TAZ', 'TMZ'] + # for record in self: + # specific_jobs = self.env['hr.job'].search([('name', 'in', specific_job_names)]) + # specific_job_ids = specific_jobs.ids + # employees = self.env['hr.employee'].search([ + # ('property_ids', 'in', record.id), + # ('job_id', 'in', specific_job_ids) + # ]) + # record.employee_ids = employees + + @api.depends("employee_ids") + def _compute_employee_ids(self): + for record in self: + employees = self.env["hr.employee"].search( + [("property_ids", "in", record.id)] + ) + record.employee_ids = employees 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/views/pms_hr_property_view.xml b/pms_hr_property/views/pms_hr_property_view.xml new file mode 100644 index 000000000..64ce24776 --- /dev/null +++ b/pms_hr_property/views/pms_hr_property_view.xml @@ -0,0 +1,22 @@ + + + + pms.hr.property.form + pms.property + + + + + + + + + + + + + + + + + From ddb9872f384cdb46bab8d1d924388f0b6d78bed1 Mon Sep 17 00:00:00 2001 From: irluidev Date: Mon, 5 Aug 2024 12:10:55 +0200 Subject: [PATCH 02/10] [IMP]pms_hr_prroperty: add module test --- pms_hr_property/tests/__init__.py | 1 + pms_hr_property/tests/test_pms_hr_property.py | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 pms_hr_property/tests/__init__.py create mode 100644 pms_hr_property/tests/test_pms_hr_property.py 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..6d4fc5107 --- /dev/null +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -0,0 +1,53 @@ +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.HrJob = self.env["hr.job"] + + # Create jobs + self.job_regional_manager = self.HrJob.create({"name": "Regional Manager"}) + self.job_revenue_manager = self.HrJob.create({"name": "Revenue Manager"}) + self.job_taz = self.HrJob.create({"name": "TAZ"}) + self.job_tmz = self.HrJob.create({"name": "TMZ"}) + + # Create employees + self.employee_1 = self.HrEmployee.create( + {"name": "Employee 1", "job_id": self.job_regional_manager.id} + ) + self.employee_2 = self.HrEmployee.create( + {"name": "Employee 2", "job_id": self.job_revenue_manager.id} + ) + self.employee_3 = self.HrEmployee.create( + {"name": "Employee 3", "job_id": self.job_taz.id} + ) + self.employee_4 = self.HrEmployee.create( + {"name": "Employee 4", "job_id": self.job_tmz.id} + ) + + # Create property + self.property = self.PmsProperty.create({"name": "Test Property"}) + + # Assign employees to property + self.employee_1.write({"property_ids": [(4, self.property.id)]}) + self.employee_2.write({"property_ids": [(4, self.property.id)]}) + self.employee_3.write({"property_ids": [(4, self.property.id)]}) + self.employee_4.write({"property_ids": [(4, self.property.id)]}) + + def test_assigned_employees(self): + """Test that the employees are correctly assigned to the property""" + self.property._compute_employee_ids() + + assigned_employees = self.property.employee_ids + expected_employees = self.HrEmployee.search( + [("property_ids", "in", self.property.id)] + ) + + self.assertEqual( + assigned_employees, + expected_employees, + "The assigned employees do not match the expected employees.", + ) From b0f5bb5bec4a6b97d20337e9db807b9ceba6666c Mon Sep 17 00:00:00 2001 From: irluidev Date: Mon, 5 Aug 2024 14:10:15 +0200 Subject: [PATCH 03/10] [FIX]pms_hr_property: module test --- pms_hr_property/tests/test_pms_hr_property.py | 145 ++++++++++++++---- 1 file changed, 111 insertions(+), 34 deletions(-) diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py index 6d4fc5107..33a0c2c37 100644 --- a/pms_hr_property/tests/test_pms_hr_property.py +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -6,48 +6,125 @@ class TestPmsHrProperty(TransactionCase): super(TestPmsHrProperty, self).setUp() self.PmsProperty = self.env["pms.property"] self.HrEmployee = self.env["hr.employee"] - self.HrJob = self.env["hr.job"] + self.Company = self.env["res.company"] - # Create jobs - self.job_regional_manager = self.HrJob.create({"name": "Regional Manager"}) - self.job_revenue_manager = self.HrJob.create({"name": "Revenue Manager"}) - self.job_taz = self.HrJob.create({"name": "TAZ"}) - self.job_tmz = self.HrJob.create({"name": "TMZ"}) - - # Create employees - self.employee_1 = self.HrEmployee.create( - {"name": "Employee 1", "job_id": self.job_regional_manager.id} - ) - self.employee_2 = self.HrEmployee.create( - {"name": "Employee 2", "job_id": self.job_revenue_manager.id} - ) - self.employee_3 = self.HrEmployee.create( - {"name": "Employee 3", "job_id": self.job_taz.id} - ) - self.employee_4 = self.HrEmployee.create( - {"name": "Employee 4", "job_id": self.job_tmz.id} + # Crear empresa + self.company1 = self.Company.create( + { + "name": "Company 1", + } ) - # Create property - self.property = self.PmsProperty.create({"name": "Test Property"}) + # Crear propiedad + self.property1 = self.PmsProperty.create( + { + "name": "Property 1", + "company_id": self.company1.id, + } + ) - # Assign employees to property - self.employee_1.write({"property_ids": [(4, self.property.id)]}) - self.employee_2.write({"property_ids": [(4, self.property.id)]}) - self.employee_3.write({"property_ids": [(4, self.property.id)]}) - self.employee_4.write({"property_ids": [(4, self.property.id)]}) + # Crear usuarios + user_dict = { + "name": "User 1", + "login": "tua@example.com", + "password": "base-test-passwd", + } + self.user_test = self.env["res.users"].create(user_dict) - def test_assigned_employees(self): - """Test that the employees are correctly assigned to the property""" - self.property._compute_employee_ids() + user_dict2 = { + "name": "User 2", + "login": "user2@example.com", + "password": "base-test-passwd", + } + self.user_test2 = self.env["res.users"].create(user_dict2) - assigned_employees = self.property.employee_ids + # Crear empleados + 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) + + # Asignar la propiedad al empleado + self.employee.write({"property_ids": [(4, self.property1.id)]}) + + def test_compute_employee_ids(self): + """Verifica que el método _compute_employee_ids + calcule correctamente el campo employee_ids""" + + # Forzar el cálculo del campo employee_ids en property1 + self.property1._compute_employee_ids() + + # Obtener el campo calculado para property1 + assigned_employees = self.property1.employee_ids + + # Empleados esperados (los asignados a property1) expected_employees = self.HrEmployee.search( - [("property_ids", "in", self.property.id)] + [("property_ids", "in", self.property1.id)] ) + # Comprobar que el campo calculado coincide con los empleados esperados self.assertEqual( - assigned_employees, - expected_employees, - "The assigned employees do not match the expected employees.", + sorted(assigned_employees.ids), + sorted(expected_employees.ids), + "Property 1 no coincide con los empleados esperados.", + ) + + def test_no_employees_assigned(self): + """Verifica el comportamiento si no hay empleados asignados a una propiedad""" + + # Eliminar la asignación de property1 a employee + self.employee.write({"property_ids": [(5, self.property1.id)]}) + + # Forzar el cálculo del campo employee_ids en property1 + self.property1._compute_employee_ids() + + # Obtener el campo calculado para property1 + assigned_employees = self.property1.employee_ids + + # Comprobar que no haya empleados asignados a property1 + self.assertEqual( + len(assigned_employees), + 0, + "Se esperaba que no hubiera empleados asignados a la propiedad 1.", + ) + + def test_multiple_properties(self): + """Verifica que los empleados se asignen correctamente a múltiples propiedades""" + + # Crear otra propiedad + self.property2 = self.PmsProperty.create( + { + "name": "Property 2", + "company_id": self.company1.id, + } + ) + + # Asignar la propiedad 2 a el empleado 2 + self.employee2.write({"property_ids": [(4, self.property2.id)]}) + + # Forzar el cálculo del campo employee_ids en property2 + self.property2._compute_employee_ids() + + # Obtener el campo calculado para property2 + assigned_employees = self.property2.employee_ids + + # Empleado esperado (asignado a property2) + expected_employees = self.HrEmployee.search( + [("property_ids", "in", self.property2.id)] + ) + + # Comprobar que el campo calculado coincide con los empleados esperados + self.assertEqual( + sorted(assigned_employees.ids), + sorted(expected_employees.ids), + "employee_ids calculado para la propiedad 2 no coincide con los empleados.", ) From b3cf7ee12e04cd24870a41183a27072b2f93c8dc Mon Sep 17 00:00:00 2001 From: irluidev Date: Mon, 5 Aug 2024 14:20:27 +0200 Subject: [PATCH 04/10] [FIX]pms_hr_property: name card and --- pms_hr_property/models/pms_hr_property.py | 12 ------------ pms_hr_property/views/pms_hr_property_view.xml | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/pms_hr_property/models/pms_hr_property.py b/pms_hr_property/models/pms_hr_property.py index 7e74bcb88..e82abdfcc 100644 --- a/pms_hr_property/models/pms_hr_property.py +++ b/pms_hr_property/models/pms_hr_property.py @@ -14,18 +14,6 @@ class PmsHrProperty(models.Model): compute="_compute_employee_ids", ) - # @api.depends('employee_ids') - # def _compute_employee_ids(self): - # specific_job_names = ['Regional Manager','Revenue Manager', 'TAZ', 'TMZ'] - # for record in self: - # specific_jobs = self.env['hr.job'].search([('name', 'in', specific_job_names)]) - # specific_job_ids = specific_jobs.ids - # employees = self.env['hr.employee'].search([ - # ('property_ids', 'in', record.id), - # ('job_id', 'in', specific_job_ids) - # ]) - # record.employee_ids = employees - @api.depends("employee_ids") def _compute_employee_ids(self): for record in self: diff --git a/pms_hr_property/views/pms_hr_property_view.xml b/pms_hr_property/views/pms_hr_property_view.xml index 64ce24776..f3aa20b4a 100644 --- a/pms_hr_property/views/pms_hr_property_view.xml +++ b/pms_hr_property/views/pms_hr_property_view.xml @@ -6,7 +6,7 @@ - + From 635041d8ed65bf465a53f14bf57d482f60557fcc Mon Sep 17 00:00:00 2001 From: irluidev Date: Mon, 5 Aug 2024 14:23:04 +0200 Subject: [PATCH 05/10] [FIX]pms_hr_property: module test --- pms_hr_property/tests/test_pms_hr_property.py | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py index 33a0c2c37..aa41b3d3a 100644 --- a/pms_hr_property/tests/test_pms_hr_property.py +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -1,3 +1,7 @@ +# 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 @@ -8,22 +12,17 @@ class TestPmsHrProperty(TransactionCase): self.HrEmployee = self.env["hr.employee"] self.Company = self.env["res.company"] - # Crear empresa self.company1 = self.Company.create( { "name": "Company 1", } ) - - # Crear propiedad self.property1 = self.PmsProperty.create( { "name": "Property 1", "company_id": self.company1.id, } ) - - # Crear usuarios user_dict = { "name": "User 1", "login": "tua@example.com", @@ -37,8 +36,6 @@ class TestPmsHrProperty(TransactionCase): "password": "base-test-passwd", } self.user_test2 = self.env["res.users"].create(user_dict2) - - # Crear empleados employee_dict = { "name": "Employee 1", "user_id": self.user_test.id, @@ -52,26 +49,20 @@ class TestPmsHrProperty(TransactionCase): "address_id": self.user_test2.partner_id.id, } self.employee2 = self.env["hr.employee"].create(employee_dict2) - - # Asignar la propiedad al empleado self.employee.write({"property_ids": [(4, self.property1.id)]}) def test_compute_employee_ids(self): """Verifica que el método _compute_employee_ids calcule correctamente el campo employee_ids""" - # Forzar el cálculo del campo employee_ids en property1 self.property1._compute_employee_ids() - # Obtener el campo calculado para property1 assigned_employees = self.property1.employee_ids - # Empleados esperados (los asignados a property1) expected_employees = self.HrEmployee.search( [("property_ids", "in", self.property1.id)] ) - # Comprobar que el campo calculado coincide con los empleados esperados self.assertEqual( sorted(assigned_employees.ids), sorted(expected_employees.ids), @@ -81,16 +72,11 @@ class TestPmsHrProperty(TransactionCase): def test_no_employees_assigned(self): """Verifica el comportamiento si no hay empleados asignados a una propiedad""" - # Eliminar la asignación de property1 a employee self.employee.write({"property_ids": [(5, self.property1.id)]}) - # Forzar el cálculo del campo employee_ids en property1 self.property1._compute_employee_ids() - - # Obtener el campo calculado para property1 assigned_employees = self.property1.employee_ids - # Comprobar que no haya empleados asignados a property1 self.assertEqual( len(assigned_employees), 0, @@ -99,8 +85,6 @@ class TestPmsHrProperty(TransactionCase): def test_multiple_properties(self): """Verifica que los empleados se asignen correctamente a múltiples propiedades""" - - # Crear otra propiedad self.property2 = self.PmsProperty.create( { "name": "Property 2", @@ -108,21 +92,16 @@ class TestPmsHrProperty(TransactionCase): } ) - # Asignar la propiedad 2 a el empleado 2 self.employee2.write({"property_ids": [(4, self.property2.id)]}) - # Forzar el cálculo del campo employee_ids en property2 self.property2._compute_employee_ids() - # Obtener el campo calculado para property2 assigned_employees = self.property2.employee_ids - # Empleado esperado (asignado a property2) expected_employees = self.HrEmployee.search( [("property_ids", "in", self.property2.id)] ) - # Comprobar que el campo calculado coincide con los empleados esperados self.assertEqual( sorted(assigned_employees.ids), sorted(expected_employees.ids), From 7f3d7e05558ea06aa776262fc82588e8cc3c375b Mon Sep 17 00:00:00 2001 From: irluidev Date: Tue, 15 Oct 2024 12:48:48 +0200 Subject: [PATCH 06/10] [UPD]pms_hr_property: update structure DB --- pms_hr_property/__manifest__.py | 2 +- .../migrations/14.0.2.0.0/pre_migration.py | 24 +++++++++++++++++++ pms_hr_property/models/__init__.py | 2 +- pms_hr_property/models/hr_employee.py | 8 ++++++- .../{pms_hr_property.py => pms_property.py} | 14 ++++------- 5 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 pms_hr_property/migrations/14.0.2.0.0/pre_migration.py rename pms_hr_property/models/{pms_hr_property.py => pms_property.py} (53%) diff --git a/pms_hr_property/__manifest__.py b/pms_hr_property/__manifest__.py index 842831c9a..8ae1f1c90 100644 --- a/pms_hr_property/__manifest__.py +++ b/pms_hr_property/__manifest__.py @@ -5,7 +5,7 @@ "name": "PMS Hr Property", "summary": """ Adds to the employee the property on which he works.""", - "version": "14.0.1.0.0", + "version": "14.0.2.0.0", "license": "AGPL-3", "author": "OsoTranquilo,Odoo Community Association (OCA)", "website": "https://github.com/OCA/pms", diff --git a/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py b/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py new file mode 100644 index 000000000..778b291cd --- /dev/null +++ b/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py @@ -0,0 +1,24 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.logged_query( + env.cr, + """ + UPDATE pms_ rl + SET sale_channel_id = r.sale_channel_origin_id + FROM pms_reservation r + WHERE r.id = rl.reservation_id + """, + ) + + openupgrade.logged_query( + env.cr, + """ + UPDATE pms_service ser + SET sale_channel_origin_id = fol.sale_channel_origin_id + FROM pms_folio fol + WHERE fol.id = ser.folio_id + """, + ) diff --git a/pms_hr_property/models/__init__.py b/pms_hr_property/models/__init__.py index 8a3d3ba90..89372ccd3 100644 --- a/pms_hr_property/models/__init__.py +++ b/pms_hr_property/models/__init__.py @@ -1,2 +1,2 @@ from . import hr_employee -from . import pms_hr_property +from . import pms_property diff --git a/pms_hr_property/models/hr_employee.py b/pms_hr_property/models/hr_employee.py index 3478af16a..af758277a 100644 --- a/pms_hr_property/models/hr_employee.py +++ b/pms_hr_property/models/hr_employee.py @@ -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_hr_property.py b/pms_hr_property/models/pms_property.py similarity index 53% rename from pms_hr_property/models/pms_hr_property.py rename to pms_hr_property/models/pms_property.py index e82abdfcc..75ff1817a 100644 --- a/pms_hr_property/models/pms_hr_property.py +++ b/pms_hr_property/models/pms_property.py @@ -2,7 +2,7 @@ # 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 api, fields, models +from odoo import fields, models class PmsHrProperty(models.Model): @@ -11,13 +11,7 @@ class PmsHrProperty(models.Model): employee_ids = fields.Many2many( comodel_name="hr.employee", string="Assigned Employees", - compute="_compute_employee_ids", + relation="hr_employee_pms_property_rel", + column1="pms_property_id", + column2="hr_employee_id", ) - - @api.depends("employee_ids") - def _compute_employee_ids(self): - for record in self: - employees = self.env["hr.employee"].search( - [("property_ids", "in", record.id)] - ) - record.employee_ids = employees From 2b54acb78d6fe40c933d3930608f20c367cdaf83 Mon Sep 17 00:00:00 2001 From: irlui Date: Tue, 15 Oct 2024 13:57:43 +0200 Subject: [PATCH 07/10] [FIX]hr_pms_property: fix version manifest and delete migration file --- pms_hr_property/__manifest__.py | 2 +- .../migrations/14.0.2.0.0/pre_migration.py | 24 ------------------- pms_hr_property/models/hr_employee.py | 4 ++-- 3 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 pms_hr_property/migrations/14.0.2.0.0/pre_migration.py diff --git a/pms_hr_property/__manifest__.py b/pms_hr_property/__manifest__.py index 8ae1f1c90..842831c9a 100644 --- a/pms_hr_property/__manifest__.py +++ b/pms_hr_property/__manifest__.py @@ -5,7 +5,7 @@ "name": "PMS Hr Property", "summary": """ Adds to the employee the property on which he works.""", - "version": "14.0.2.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "OsoTranquilo,Odoo Community Association (OCA)", "website": "https://github.com/OCA/pms", diff --git a/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py b/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py deleted file mode 100644 index 778b291cd..000000000 --- a/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py +++ /dev/null @@ -1,24 +0,0 @@ -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - openupgrade.logged_query( - env.cr, - """ - UPDATE pms_ rl - SET sale_channel_id = r.sale_channel_origin_id - FROM pms_reservation r - WHERE r.id = rl.reservation_id - """, - ) - - openupgrade.logged_query( - env.cr, - """ - UPDATE pms_service ser - SET sale_channel_origin_id = fol.sale_channel_origin_id - FROM pms_folio fol - WHERE fol.id = ser.folio_id - """, - ) diff --git a/pms_hr_property/models/hr_employee.py b/pms_hr_property/models/hr_employee.py index af758277a..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 From 471712e672543a48e6f8801753a6e96e9f3ce316 Mon Sep 17 00:00:00 2001 From: irlui Date: Tue, 15 Oct 2024 16:32:03 +0200 Subject: [PATCH 08/10] [FIX]:hr_pms_property: remove class method and update test module --- pms_hr_property/tests/test_pms_hr_property.py | 113 ++++++------------ 1 file changed, 34 insertions(+), 79 deletions(-) diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py index aa41b3d3a..1833e0b19 100644 --- a/pms_hr_property/tests/test_pms_hr_property.py +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -4,7 +4,6 @@ # 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() @@ -12,98 +11,54 @@ class TestPmsHrProperty(TransactionCase): self.HrEmployee = self.env["hr.employee"] self.Company = self.env["res.company"] - self.company1 = self.Company.create( - { - "name": "Company 1", - } - ) + # Create company and property + self.company1 = self.Company.create({"name": "Company 1"}) self.property1 = self.PmsProperty.create( - { - "name": "Property 1", - "company_id": self.company1.id, - } + {"name": "Property 1", "company_id": self.company1.id} ) - user_dict = { - "name": "User 1", - "login": "tua@example.com", - "password": "base-test-passwd", - } + + # Create users + 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", - } + 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, - } + + # Create employees and link them to users + 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, - } + 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""" + # Assign employee to property self.employee.write({"property_ids": [(4, self.property1.id)]}) - def test_compute_employee_ids(self): - """Verifica que el método _compute_employee_ids - calcule correctamente el campo employee_ids""" - - self.property1._compute_employee_ids() - + # Verify the employee is correctly assigned assigned_employees = self.property1.employee_ids + self.assertIn(self.employee, assigned_employees, "The employee is not correctly assigned to the property.") - expected_employees = self.HrEmployee.search( - [("property_ids", "in", self.property1.id)] - ) + def test_employee_removal(self): + """Check if employees can be unassigned from properties correctly""" + # Assign employee to the property + self.employee.write({"property_ids": [(4, self.property1.id)]}) - self.assertEqual( - sorted(assigned_employees.ids), - sorted(expected_employees.ids), - "Property 1 no coincide con los empleados esperados.", - ) + # Unassign employee from the property + self.employee.write({"property_ids": [(3, self.property1.id)]}) - def test_no_employees_assigned(self): - """Verifica el comportamiento si no hay empleados asignados a una propiedad""" - - self.employee.write({"property_ids": [(5, self.property1.id)]}) - - self.property1._compute_employee_ids() + # Verify the employee is no longer assigned to the property assigned_employees = self.property1.employee_ids + self.assertNotIn(self.employee, assigned_employees, "The employee is still assigned to the property after removal.") - self.assertEqual( - len(assigned_employees), - 0, - "Se esperaba que no hubiera empleados asignados a la propiedad 1.", - ) + def test_multiple_employees_assignment(self): + """Check if multiple employees can be assigned to a single property""" + # Assign both employees to the property + self.employee.write({"property_ids": [(4, self.property1.id)]}) + self.employee2.write({"property_ids": [(4, self.property1.id)]}) - def test_multiple_properties(self): - """Verifica que los empleados se asignen correctamente a múltiples propiedades""" - self.property2 = self.PmsProperty.create( - { - "name": "Property 2", - "company_id": self.company1.id, - } - ) - - self.employee2.write({"property_ids": [(4, self.property2.id)]}) - - self.property2._compute_employee_ids() - - assigned_employees = self.property2.employee_ids - - expected_employees = self.HrEmployee.search( - [("property_ids", "in", self.property2.id)] - ) - - self.assertEqual( - sorted(assigned_employees.ids), - sorted(expected_employees.ids), - "employee_ids calculado para la propiedad 2 no coincide con los empleados.", - ) + # Verify both employees are assigned + 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.") \ No newline at end of file From 86141ba90333369c639fd6f464949993f7e37a5a Mon Sep 17 00:00:00 2001 From: irlui Date: Tue, 15 Oct 2024 17:02:23 +0200 Subject: [PATCH 09/10] [FIX]:hr_pms_property: remove class method, DB structure and updated test module --- pms_hr_property/__manifest__.py | 2 +- .../migrations/14.0.2.0.0/pre_migration.py | 24 ---- pms_hr_property/models/hr_employee.py | 4 +- pms_hr_property/tests/test_pms_hr_property.py | 119 +++++++++--------- 4 files changed, 61 insertions(+), 88 deletions(-) delete mode 100644 pms_hr_property/migrations/14.0.2.0.0/pre_migration.py diff --git a/pms_hr_property/__manifest__.py b/pms_hr_property/__manifest__.py index 8ae1f1c90..842831c9a 100644 --- a/pms_hr_property/__manifest__.py +++ b/pms_hr_property/__manifest__.py @@ -5,7 +5,7 @@ "name": "PMS Hr Property", "summary": """ Adds to the employee the property on which he works.""", - "version": "14.0.2.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "OsoTranquilo,Odoo Community Association (OCA)", "website": "https://github.com/OCA/pms", diff --git a/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py b/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py deleted file mode 100644 index 778b291cd..000000000 --- a/pms_hr_property/migrations/14.0.2.0.0/pre_migration.py +++ /dev/null @@ -1,24 +0,0 @@ -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - openupgrade.logged_query( - env.cr, - """ - UPDATE pms_ rl - SET sale_channel_id = r.sale_channel_origin_id - FROM pms_reservation r - WHERE r.id = rl.reservation_id - """, - ) - - openupgrade.logged_query( - env.cr, - """ - UPDATE pms_service ser - SET sale_channel_origin_id = fol.sale_channel_origin_id - FROM pms_folio fol - WHERE fol.id = ser.folio_id - """, - ) diff --git a/pms_hr_property/models/hr_employee.py b/pms_hr_property/models/hr_employee.py index af758277a..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 diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py index aa41b3d3a..a26aeb00e 100644 --- a/pms_hr_property/tests/test_pms_hr_property.py +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -4,7 +4,6 @@ # 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() @@ -12,98 +11,96 @@ class TestPmsHrProperty(TransactionCase): self.HrEmployee = self.env["hr.employee"] self.Company = self.env["res.company"] + # Company creation self.company1 = self.Company.create( - { - "name": "Company 1", - } + {"name": "Company 1"} ) + + # Property creation self.property1 = self.PmsProperty.create( { - "name": "Property 1", - "company_id": self.company1.id, + "name": "Property 1", + "company_id": self.company1.id } ) + + # User creation user_dict = { - "name": "User 1", - "login": "tua@example.com", - "password": "base-test-passwd", + "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", + "name": "User 2", + "login": "user2@example.com", + "password": "base-test-passwd" } self.user_test2 = self.env["res.users"].create(user_dict2) + + # Employee creation employee_dict = { - "name": "Employee 1", - "user_id": self.user_test.id, - "address_id": self.user_test.partner_id.id, + "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, + "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) - self.employee.write({"property_ids": [(4, self.property1.id)]}) - def test_compute_employee_ids(self): - """Verifica que el método _compute_employee_ids - calcule correctamente el campo employee_ids""" - - self.property1._compute_employee_ids() + 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 - - expected_employees = self.HrEmployee.search( - [("property_ids", "in", self.property1.id)] + self.assertIn( + self.employee, + assigned_employees, + "The employee is not correctly assigned to the property." ) - self.assertEqual( - sorted(assigned_employees.ids), - sorted(expected_employees.ids), - "Property 1 no coincide con los empleados esperados.", + def test_employee_removal(self): + """Check if employees can be unassigned from properties correctly""" + self.employee.write( + {"property_ids": [(4, self.property1.id)]} ) - def test_no_employees_assigned(self): - """Verifica el comportamiento si no hay empleados asignados a una propiedad""" + self.employee.write( + {"property_ids": [(3, self.property1.id)]} + ) - self.employee.write({"property_ids": [(5, self.property1.id)]}) - - self.property1._compute_employee_ids() assigned_employees = self.property1.employee_ids - - self.assertEqual( - len(assigned_employees), - 0, - "Se esperaba que no hubiera empleados asignados a la propiedad 1.", + self.assertNotIn( + self.employee, + assigned_employees, + "The employee is still assigned to the property after removal." ) - def test_multiple_properties(self): - """Verifica que los empleados se asignen correctamente a múltiples propiedades""" - self.property2 = self.PmsProperty.create( - { - "name": "Property 2", - "company_id": self.company1.id, - } + 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)]} ) - self.employee2.write({"property_ids": [(4, self.property2.id)]}) - - self.property2._compute_employee_ids() - - assigned_employees = self.property2.employee_ids - - expected_employees = self.HrEmployee.search( - [("property_ids", "in", self.property2.id)] + assigned_employees = self.property1.employee_ids + self.assertIn( + self.employee, + assigned_employees, + "Employee 1 is not correctly assigned." ) - - self.assertEqual( - sorted(assigned_employees.ids), - sorted(expected_employees.ids), - "employee_ids calculado para la propiedad 2 no coincide con los empleados.", + self.assertIn( + self.employee2, + assigned_employees, + "Employee 2 is not correctly assigned." ) From aed9da98850a49c52aed9e84bc7a364ca30d3c7c Mon Sep 17 00:00:00 2001 From: irluidev Date: Tue, 15 Oct 2024 17:25:34 +0200 Subject: [PATCH 10/10] [FIX]:hr_pms_property: fix commit in test --- pms_hr_property/tests/test_pms_hr_property.py | 70 +++++++------------ 1 file changed, 24 insertions(+), 46 deletions(-) diff --git a/pms_hr_property/tests/test_pms_hr_property.py b/pms_hr_property/tests/test_pms_hr_property.py index a26aeb00e..00e487e6b 100644 --- a/pms_hr_property/tests/test_pms_hr_property.py +++ b/pms_hr_property/tests/test_pms_hr_property.py @@ -4,6 +4,7 @@ # 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() @@ -11,96 +12,73 @@ class TestPmsHrProperty(TransactionCase): self.HrEmployee = self.env["hr.employee"] self.Company = self.env["res.company"] - # Company creation - self.company1 = self.Company.create( - {"name": "Company 1"} - ) + self.company1 = self.Company.create({"name": "Company 1"}) - # Property creation self.property1 = self.PmsProperty.create( - { - "name": "Property 1", - "company_id": self.company1.id - } + {"name": "Property 1", "company_id": self.company1.id} ) - # User creation user_dict = { - "name": "User 1", - "login": "tua@example.com", - "password": "base-test-passwd" + "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" + "name": "User 2", + "login": "user2@example.com", + "password": "base-test-passwd", } self.user_test2 = self.env["res.users"].create(user_dict2) - # Employee creation employee_dict = { - "name": "Employee 1", - "user_id": self.user_test.id, - "address_id": self.user_test.partner_id.id + "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 + "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)]} - ) + 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." + "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": [(4, self.property1.id)]}) - self.employee.write( - {"property_ids": [(3, 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." + "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)]} - ) + 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.employee, assigned_employees, "Employee 1 is not correctly assigned." ) self.assertIn( - self.employee2, - assigned_employees, - "Employee 2 is not correctly assigned." + self.employee2, assigned_employees, "Employee 2 is not correctly assigned." )