From f8f1923a9fda7dc6c0af1cbdfb16d3471e931f6d Mon Sep 17 00:00:00 2001 From: Abdurrahman Saber Date: Wed, 17 Sep 2025 05:02:24 +0300 Subject: [PATCH] [IMP] hr_base, *: activate multi-company for various custom models --- .../models/employee_custody.py | 3 +- .../security/custody_security.xml | 6 + odex25_hr/exp_payroll_custom/__manifest__.py | 1 + .../exp_payroll_custom/models/hr_contract.py | 1 + .../exp_payroll_custom/security/ir_rule.xml | 124 ++++++++++++++++++ .../exp_payroll_custom/security/security.xml | 118 ----------------- .../views/contract_advantage.xml | 1 - .../exp_payroll_promotion/__manifest__.py | 2 +- .../exp_payroll_promotion/data/ir_rule.xml | 10 ++ .../models/hr_payroll_promotion_setting.py | 1 + .../hr_payroll_promotion_setting_view.xml | 2 + odex25_hr/hr_base/__manifest__.py | 1 + odex25_hr/hr_base/data/ir_rule.xml | 10 ++ .../hr_base/models/employee_iqama_renewal.py | 3 +- .../views/employee_iqama_renewal_view.xml | 3 + odex25_hr/hr_docs_expiry/__manifest__.py | 1 + odex25_hr/hr_docs_expiry/data/ir_rule.xml | 10 ++ .../models/employee_documents.py | 2 +- .../models/exit_and_return.py | 2 +- .../models/request_visa.py | 1 + .../hr_government_relations_security.xml | 12 ++ .../security/hr_holidays_security.xml | 2 +- 22 files changed, 191 insertions(+), 125 deletions(-) create mode 100644 odex25_hr/exp_payroll_custom/security/ir_rule.xml create mode 100644 odex25_hr/exp_payroll_promotion/data/ir_rule.xml create mode 100644 odex25_hr/hr_base/data/ir_rule.xml create mode 100644 odex25_hr/hr_docs_expiry/data/ir_rule.xml diff --git a/odex25_hr/exp_employee_custody/models/employee_custody.py b/odex25_hr/exp_employee_custody/models/employee_custody.py index 53bc7b819..4ab770362 100644 --- a/odex25_hr/exp_employee_custody/models/employee_custody.py +++ b/odex25_hr/exp_employee_custody/models/employee_custody.py @@ -33,6 +33,7 @@ class EmployeeCustody(models.Model): department_id = fields.Many2one(related="employee_id.department_id", readonly=True) job_id = fields.Many2one(related="employee_id.job_id", readonly=True) country_id = fields.Many2one(related="employee_id.country_id", readonly=True) + company_id = fields.Many2one(related="employee_id.company_id", store=True) def draft(self): self.state = "draft" @@ -84,7 +85,7 @@ class EmployeeCustodyLine(models.Model): amount = fields.Float() # Relational fields - employee_custody_line = fields.Many2one(comodel_name='custom.employee.custody') # Inverse field + employee_custody_line = fields.Many2one('custom.employee.custody') # Inverse field EmployeeCustodyLine() \ No newline at end of file diff --git a/odex25_hr/exp_employee_custody/security/custody_security.xml b/odex25_hr/exp_employee_custody/security/custody_security.xml index 7e307a59e..df61107bf 100644 --- a/odex25_hr/exp_employee_custody/security/custody_security.xml +++ b/odex25_hr/exp_employee_custody/security/custody_security.xml @@ -2,6 +2,12 @@ + + Employee custody multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + Employee: views custody diff --git a/odex25_hr/exp_payroll_custom/__manifest__.py b/odex25_hr/exp_payroll_custom/__manifest__.py index 1a0d20c68..f27ac87c4 100644 --- a/odex25_hr/exp_payroll_custom/__manifest__.py +++ b/odex25_hr/exp_payroll_custom/__manifest__.py @@ -23,6 +23,7 @@ 'data': [ 'security/security.xml', 'security/ir.model.access.csv', + 'security/ir_rule.xml', 'data/data.xml', diff --git a/odex25_hr/exp_payroll_custom/models/hr_contract.py b/odex25_hr/exp_payroll_custom/models/hr_contract.py index 18415ca21..33ff16f81 100644 --- a/odex25_hr/exp_payroll_custom/models/hr_contract.py +++ b/odex25_hr/exp_payroll_custom/models/hr_contract.py @@ -288,6 +288,7 @@ class Advantages(models.Model): comments = fields.Text(string='Comments') payroll_month = fields.Text(string='Payroll Month', tracking=True) + company_id = fields.Many2one('res.company', string='Company', related='employee_id.company_id', store=True) @api.constrains('date_from', 'date_to', 'amount') def _chick_date(self): diff --git a/odex25_hr/exp_payroll_custom/security/ir_rule.xml b/odex25_hr/exp_payroll_custom/security/ir_rule.xml new file mode 100644 index 000000000..52961af12 --- /dev/null +++ b/odex25_hr/exp_payroll_custom/security/ir_rule.xml @@ -0,0 +1,124 @@ + + + + Employee promotions multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee reward multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee hr payslip run multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee hr_salary_rule multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee hr_salary_rule multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Advance Request Multi Company + + + ['|', ('company_id','=',False), ('company_id', 'in',company_ids)] + + + + + Employee hr payslip multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Employee contract advantage multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + + Salary Advance + + + + + + + + + + Salary Advance Rule For Employee + [('employee_id.user_id','=',user.id)] + + + + + + + + + + + Employee Payslip + + [('employee_id.user_id.id', '=', user.id),('state', '=', 'transfered')] + + + + + All Payslip + + [(1,'=',1)] + + + + + Employee: views its promotions only + + [('employee_id.user_id','=',user.id)] + + + + + Division/Dep Manager: views promotions of its subordinates + + ['|','|',('employee_id.department_id.manager_id','=',False), + ('employee_id.department_id.manager_id.user_id','child_of', [user.id]), + ('employee_id.department_id.parent_id.manager_id.user_id','child_of', [user.id])] + + + + + + Manager: views promotions of all employee + + [(1 ,'=', 1)] + + + \ No newline at end of file diff --git a/odex25_hr/exp_payroll_custom/security/security.xml b/odex25_hr/exp_payroll_custom/security/security.xml index 077dbd3d6..41ee2db2d 100644 --- a/odex25_hr/exp_payroll_custom/security/security.xml +++ b/odex25_hr/exp_payroll_custom/security/security.xml @@ -17,123 +17,5 @@ - - Advance Request Multi Company - - - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] - - - - - Salary Advance - - - - - - - - - - Salary Advance Rule For Employee - [('employee_id.user_id','=',user.id)] - - - - - - - - - - - Employee Payslip - - [('employee_id.user_id.id', '=', user.id),('state', '=', 'transfered')] - - - - - All Payslip - - [(1,'=',1)] - - - - - - Employee hr payslip multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - - Employee: views its promotions only - - [('employee_id.user_id','=',user.id)] - - - - - Division/Dep Manager: views promotions of its subordinates - - ['|','|',('employee_id.department_id.manager_id','=',False), - ('employee_id.department_id.manager_id.user_id','child_of', [user.id]), - ('employee_id.department_id.parent_id.manager_id.user_id','child_of', [user.id])] - - - - - - Manager: views promotions of all employee - - [(1 ,'=', 1)] - - - - - Employee promotions multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - - Employee reward multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - - Employee hr payslip run multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - - Employee hr_salary_rule multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - - Employee hr_salary_rule multi company rule - - ['|',('company_id','=',False),('company_id', 'in', company_ids)] - - - diff --git a/odex25_hr/exp_payroll_custom/views/contract_advantage.xml b/odex25_hr/exp_payroll_custom/views/contract_advantage.xml index e80a0e8a4..c7d3349cc 100644 --- a/odex25_hr/exp_payroll_custom/views/contract_advantage.xml +++ b/odex25_hr/exp_payroll_custom/views/contract_advantage.xml @@ -100,7 +100,6 @@ parent="exp_hr_payroll.menu_hr_payroll_root" action="employee_advantage_list_action" sequence="10" groups="hr_base.group_executive_manager,hr_base.group_general_manager,exp_hr_payroll.group_hr_payroll_user"/> - /> diff --git a/odex25_hr/exp_payroll_promotion/__manifest__.py b/odex25_hr/exp_payroll_promotion/__manifest__.py index 6b8383494..730daab45 100644 --- a/odex25_hr/exp_payroll_promotion/__manifest__.py +++ b/odex25_hr/exp_payroll_promotion/__manifest__.py @@ -15,7 +15,7 @@ 'exp_official_mission'], 'data': [ 'security/ir.model.access.csv', - + 'data/ir_rule.xml', 'views/hr_employee_view.xml', 'views/hr_payroll_structure_view.xml', 'views/hr_payroll_raise_view.xml', diff --git a/odex25_hr/exp_payroll_promotion/data/ir_rule.xml b/odex25_hr/exp_payroll_promotion/data/ir_rule.xml new file mode 100644 index 000000000..f77463c7c --- /dev/null +++ b/odex25_hr/exp_payroll_promotion/data/ir_rule.xml @@ -0,0 +1,10 @@ + + + + + Employee hr payroll promotion setting multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + diff --git a/odex25_hr/exp_payroll_promotion/models/hr_payroll_promotion_setting.py b/odex25_hr/exp_payroll_promotion/models/hr_payroll_promotion_setting.py index b0977fb16..c4002050e 100644 --- a/odex25_hr/exp_payroll_promotion/models/hr_payroll_promotion_setting.py +++ b/odex25_hr/exp_payroll_promotion/models/hr_payroll_promotion_setting.py @@ -41,6 +41,7 @@ class HrPromotionPromotionSetting(models.Model): exceptional_timeframe = fields.Integer('Years Between Two Exceptional Promotions') regular_timeframe = fields.Integer('Years Between Exceptional And Regular Promotion') + company_id = fields.Many2one('res.company', string='Company', required=True) @api.constrains('active', 'date_from', 'date_to') def check_active(self): diff --git a/odex25_hr/exp_payroll_promotion/views/hr_payroll_promotion_setting_view.xml b/odex25_hr/exp_payroll_promotion/views/hr_payroll_promotion_setting_view.xml index a5ddd5801..8c0f5d01a 100644 --- a/odex25_hr/exp_payroll_promotion/views/hr_payroll_promotion_setting_view.xml +++ b/odex25_hr/exp_payroll_promotion/views/hr_payroll_promotion_setting_view.xml @@ -17,6 +17,7 @@ + @@ -98,6 +99,7 @@ + diff --git a/odex25_hr/hr_base/__manifest__.py b/odex25_hr/hr_base/__manifest__.py index e3acb4721..0085eac88 100644 --- a/odex25_hr/hr_base/__manifest__.py +++ b/odex25_hr/hr_base/__manifest__.py @@ -22,6 +22,7 @@ "security/ir.model.access.csv", "data/ir_sequence.xml", "data/ir_cron.xml", + "data/ir_rule.xml", # "views/assets_document_view.xml", "views/hr_base_view.xml", "views/employee_iqama_renewal_view.xml", diff --git a/odex25_hr/hr_base/data/ir_rule.xml b/odex25_hr/hr_base/data/ir_rule.xml new file mode 100644 index 000000000..3244d6125 --- /dev/null +++ b/odex25_hr/hr_base/data/ir_rule.xml @@ -0,0 +1,10 @@ + + + + + Employee iqama renewal multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + diff --git a/odex25_hr/hr_base/models/employee_iqama_renewal.py b/odex25_hr/hr_base/models/employee_iqama_renewal.py index 7dde533d2..49a932579 100644 --- a/odex25_hr/hr_base/models/employee_iqama_renewal.py +++ b/odex25_hr/hr_base/models/employee_iqama_renewal.py @@ -14,6 +14,7 @@ class EmployeeIqamaRenew(models.Model): date = fields.Date() line_ids = fields.One2many("employee.iqama.renewal.line", "line_id") x_description = fields.Char() + company_id = fields.Many2one("res.company", string="Company", default=lambda self: self.env.user.company_id) state = fields.Selection( [('draft', _('Draft')), ('submit', _('Submit')), ('hr_depart', _('HR Department')), ('effective_department', _('Effective_Department')), @@ -196,7 +197,7 @@ class EmployeeIqamaRenewLine(models.Model): renewal_fees = fields.Float(required=True, default=0) work_premint_fees = fields.Float(required=True, default=0) total = fields.Float(readonly=True, compute="get_total_fees") - line_id = fields.Many2one(comodel_name="employee.iqama.renewal") + line_id = fields.Many2one("employee.iqama.renewal", required=True, ondelete="cascade") iqama_new_expiry = fields.Date() account_id = fields.Many2one("account.account") account_id2 = fields.Many2one("account.account") diff --git a/odex25_hr/hr_base/views/employee_iqama_renewal_view.xml b/odex25_hr/hr_base/views/employee_iqama_renewal_view.xml index ae467d195..2cf44882b 100644 --- a/odex25_hr/hr_base/views/employee_iqama_renewal_view.xml +++ b/odex25_hr/hr_base/views/employee_iqama_renewal_view.xml @@ -121,6 +121,8 @@ attrs="{'readonly':[('state','!=','draft')]}"/> + @@ -170,6 +172,7 @@ + diff --git a/odex25_hr/hr_docs_expiry/__manifest__.py b/odex25_hr/hr_docs_expiry/__manifest__.py index 9c8473301..ab265b803 100644 --- a/odex25_hr/hr_docs_expiry/__manifest__.py +++ b/odex25_hr/hr_docs_expiry/__manifest__.py @@ -9,6 +9,7 @@ "data": [ "security/ir.model.access.csv", "data/data.xml", + "data/ir_rule.xml", "data/ir_cron.xml", "data/mail_template.xml", "views/employee_check_list_view.xml", diff --git a/odex25_hr/hr_docs_expiry/data/ir_rule.xml b/odex25_hr/hr_docs_expiry/data/ir_rule.xml new file mode 100644 index 000000000..486b5d16f --- /dev/null +++ b/odex25_hr/hr_docs_expiry/data/ir_rule.xml @@ -0,0 +1,10 @@ + + + + + Employee hr employee document multi company rule + + ['|', ('company_id','=',False), ('company_id', 'in', company_ids)] + + + diff --git a/odex25_hr/hr_docs_expiry/models/employee_documents.py b/odex25_hr/hr_docs_expiry/models/employee_documents.py index 151c33596..7c26f71a3 100644 --- a/odex25_hr/hr_docs_expiry/models/employee_documents.py +++ b/odex25_hr/hr_docs_expiry/models/employee_documents.py @@ -96,7 +96,7 @@ class HrEmployeeDocument(models.Model): specialization = fields.Char(string="Specialization") category = fields.Many2one(comodel_name="membership.categorys",string="Category") - company_id = fields.Many2one('res.company',string="Company", default=lambda self: self.env.user.company_id) + company_id = fields.Many2one('res.company',string="Company", related="employee_ref.company_id", store=True) employee_number = fields.Char(related="employee_ref.contract_id.name", copy=False, string='Employee Number') diff --git a/odex25_hr/hr_government_relations/models/exit_and_return.py b/odex25_hr/hr_government_relations/models/exit_and_return.py index 0f6b5dc3a..ccc6e4795 100644 --- a/odex25_hr/hr_government_relations/models/exit_and_return.py +++ b/odex25_hr/hr_government_relations/models/exit_and_return.py @@ -56,7 +56,7 @@ class hr_exit_return(models.Model): iqama_end_date = fields.Date(related="employee_id.iqama_number.expiry_date",string='Identity End Date', readonly=True) iqama_number = fields.Char(related="employee_id.iqama_number.iqama_id",string='Identity Number', readonly=True) - + company_id = fields.Many2one(related="employee_id.company_id", store=True) # @api.onchange('employee_id') # def _get_leave_request_domain(self): # self.leave_request_id = False diff --git a/odex25_hr/hr_government_relations/models/request_visa.py b/odex25_hr/hr_government_relations/models/request_visa.py index 749a0f6eb..50c1f2c31 100644 --- a/odex25_hr/hr_government_relations/models/request_visa.py +++ b/odex25_hr/hr_government_relations/models/request_visa.py @@ -47,6 +47,7 @@ class hr_request_visa(models.Model): account_move_id = fields.Many2one(comodel_name='account.move') account_journal_id = fields.Many2one(comodel_name='account.journal') account_debit_id = fields.Many2one(comodel_name='account.account') + company_id = fields.Many2one(related="employee_id.company_id", store=True) def request(self): self.state = 'request' diff --git a/odex25_hr/hr_government_relations/security/hr_government_relations_security.xml b/odex25_hr/hr_government_relations/security/hr_government_relations_security.xml index e288012ff..3d7b1fb8b 100644 --- a/odex25_hr/hr_government_relations/security/hr_government_relations_security.xml +++ b/odex25_hr/hr_government_relations/security/hr_government_relations_security.xml @@ -28,6 +28,12 @@ (4, ref('hr_base.group_government_relations')), ]"/> + + + Employee hr_exit_return multi company rule + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + @@ -37,6 +43,12 @@ + + Employee hr_request_visa multi company rule + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + Manager: views Request Visa of its subordinates diff --git a/odex25_hr/hr_holidays_community/security/hr_holidays_security.xml b/odex25_hr/hr_holidays_community/security/hr_holidays_security.xml index b5a464fdd..722a1f76b 100644 --- a/odex25_hr/hr_holidays_community/security/hr_holidays_security.xml +++ b/odex25_hr/hr_holidays_community/security/hr_holidays_security.xml @@ -54,7 +54,7 @@ Leaves multi company rule - ['|',('company_id','=',False),('company_id','in',[user.company_id.id])] + ['|',('company_id','=',False),('company_id','in',company_ids)]