diff --git a/addons/hr_contract/security/security.xml b/addons/hr_contract/security/security.xml index 6a922ba15b2..1e4cd3a829f 100644 --- a/addons/hr_contract/security/security.xml +++ b/addons/hr_contract/security/security.xml @@ -10,5 +10,13 @@ + + + HR Contract: Multi Company + + + ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + diff --git a/addons/hr_payroll/data/hr_payroll_data.xml b/addons/hr_payroll/data/hr_payroll_data.xml index 72c2b198699..0775b47795e 100644 --- a/addons/hr_payroll/data/hr_payroll_data.xml +++ b/addons/hr_payroll/data/hr_payroll_data.xml @@ -87,7 +87,6 @@ BASE Base for new structures - diff --git a/addons/hr_payroll/data/hr_payroll_demo.xml b/addons/hr_payroll/data/hr_payroll_demo.xml index b8914e79d85..d099924d4ee 100644 --- a/addons/hr_payroll/data/hr_payroll_demo.xml +++ b/addons/hr_payroll/data/hr_payroll_demo.xml @@ -88,7 +88,6 @@ ME Marketing Executive - @@ -96,7 +95,6 @@ MEGG Marketing Executive for Gilles Gravie - diff --git a/addons/hr_payroll/models/hr_payslip.py b/addons/hr_payroll/models/hr_payslip.py index dcfa2d133ad..0d15f51269f 100644 --- a/addons/hr_payroll/models/hr_payslip.py +++ b/addons/hr_payroll/models/hr_payslip.py @@ -47,7 +47,7 @@ class HrPayslip(models.Model): \n* When user cancel payslip the status is \'Rejected\'.""") line_ids = fields.One2many('hr.payslip.line', 'slip_id', string='Payslip Lines', readonly=True, states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) - company_id = fields.Many2one('res.company', string='Company', required=True, readonly=True, copy=False, + company_id = fields.Many2one('res.company', string='Company', readonly=True, copy=False, required=True, default=lambda self: self.env['res.company']._company_default_get(), states={'draft': [('readonly', False)], 'verify': [('readonly', False)]}) worked_days_line_ids = fields.One2many('hr.payslip.worked_days', 'payslip_id', diff --git a/addons/hr_payroll/models/hr_salary_rule.py b/addons/hr_payroll/models/hr_salary_rule.py index 0fe344897db..2031663ca40 100644 --- a/addons/hr_payroll/models/hr_salary_rule.py +++ b/addons/hr_payroll/models/hr_salary_rule.py @@ -27,8 +27,7 @@ class HrPayrollStructure(models.Model): name = fields.Char(required=True) code = fields.Char(string='Reference', required=True) - company_id = fields.Many2one('res.company', string='Company', required=True, - copy=False, default=lambda self: self.env['res.company']._company_default_get()) + country_id = fields.Many2one('res.country', string='Country') note = fields.Text(string='Description') parent_id = fields.Many2one('hr.payroll.structure', string='Parent', default=_get_parent) children_ids = fields.One2many('hr.payroll.structure', 'parent_id', string='Children', copy=True) @@ -70,8 +69,6 @@ class HrContributionRegister(models.Model): _name = 'hr.contribution.register' _description = 'Contribution Register' - company_id = fields.Many2one('res.company', string='Company', - default=lambda self: self.env['res.company']._company_default_get()) partner_id = fields.Many2one('res.partner', string='Partner') name = fields.Char(required=True) register_line_ids = fields.One2many('hr.payslip.line', 'register_id', @@ -89,8 +86,6 @@ class HrSalaryRuleCategory(models.Model): help="Linking a salary category to its parent is used only for the reporting purpose.") children_ids = fields.One2many('hr.salary.rule.category', 'parent_id', string='Children') note = fields.Text(string='Description') - company_id = fields.Many2one('res.company', string='Company', - default=lambda self: self.env['res.company']._company_default_get()) @api.constrains('parent_id') def _check_parent_id(self): @@ -120,8 +115,6 @@ class HrSalaryRule(models.Model): appears_on_payslip = fields.Boolean(string='Appears on Payslip', default=True, help="Used to display the salary rule on payslip.") parent_rule_id = fields.Many2one('hr.salary.rule', string='Parent Salary Rule', index=True) - company_id = fields.Many2one('res.company', string='Company', - default=lambda self: self.env['res.company']._company_default_get()) condition_select = fields.Selection([ ('none', 'Always True'), ('range', 'Range'), diff --git a/addons/hr_payroll/security/hr_payroll_security.xml b/addons/hr_payroll/security/hr_payroll_security.xml index ba26e5966a6..e666a36cb80 100644 --- a/addons/hr_payroll/security/hr_payroll_security.xml +++ b/addons/hr_payroll/security/hr_payroll_security.xml @@ -55,5 +55,19 @@ + + HR Payroll Structure: Multi Company + + + ['|', ('country_id', '=', False), ('country_id', '=', user.company_id.country_id.id)] + + + + HR Payslip: Multi Company + + + ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + diff --git a/addons/hr_payroll/tests/common.py b/addons/hr_payroll/tests/common.py index 8d50dec7621..3848011849c 100644 --- a/addons/hr_payroll/tests/common.py +++ b/addons/hr_payroll/tests/common.py @@ -32,7 +32,6 @@ class TestPayslipBase(TransactionCase): self.developer_pay_structure = self.env['hr.payroll.structure'].create({ 'name': 'Salary Structure for Software Developer', 'code': 'SD', - 'company_id': self.ref('base.main_company'), 'rule_ids': [(4, self.hra_rule_id), (4, self.conv_rule_id), (4, self.prof_tax_rule_id), (4, self.pf_rule_id), (4, self.mv_rule_id)], diff --git a/addons/hr_payroll/views/hr_payslip_views.xml b/addons/hr_payroll/views/hr_payslip_views.xml index 60c5ff4ba2b..01c8ff8f138 100644 --- a/addons/hr_payroll/views/hr_payslip_views.xml +++ b/addons/hr_payroll/views/hr_payslip_views.xml @@ -228,7 +228,7 @@ - + diff --git a/addons/hr_payroll/views/hr_salary_rule_views.xml b/addons/hr_payroll/views/hr_salary_rule_views.xml index 29190e6893a..4266a0074a8 100644 --- a/addons/hr_payroll/views/hr_salary_rule_views.xml +++ b/addons/hr_payroll/views/hr_salary_rule_views.xml @@ -2,6 +2,7 @@ + hr.payroll.structure.tree hr.payroll.structure @@ -10,7 +11,7 @@ - + @@ -48,7 +49,7 @@ - + @@ -74,7 +75,7 @@ - + @@ -161,7 +162,6 @@ - @@ -190,7 +190,6 @@ - @@ -203,7 +202,6 @@ - @@ -283,7 +281,6 @@ - @@ -303,7 +300,6 @@ - diff --git a/addons/hr_payroll_account/tests/test_hr_payroll_account.py b/addons/hr_payroll_account/tests/test_hr_payroll_account.py index 5bb4bdcced2..b82f358dd78 100644 --- a/addons/hr_payroll_account/tests/test_hr_payroll_account.py +++ b/addons/hr_payroll_account/tests/test_hr_payroll_account.py @@ -46,7 +46,6 @@ class TestHrPayrollAccount(common.TransactionCase): self.hr_structure_softwaredeveloper = self.env['hr.payroll.structure'].create({ 'name': 'Salary Structure for Software Developer', 'code': 'SD', - 'company_id': self.ref('base.main_company'), 'parent_id': self.ref('hr_payroll.structure_base'), 'rule_ids': [(6, 0, [ self.ref('hr_payroll.hr_salary_rule_houserentallowance1'), diff --git a/addons/l10n_be_hr_payroll/__manifest__.py b/addons/l10n_be_hr_payroll/__manifest__.py index 5a1f5c00865..3dbf4eab5d7 100644 --- a/addons/l10n_be_hr_payroll/__manifest__.py +++ b/addons/l10n_be_hr_payroll/__manifest__.py @@ -25,5 +25,8 @@ Belgian Payroll Rules. 'data/l10n_be_hr_payroll_data.xml', 'views/res_config_settings_views.xml', ], + 'demo':[ + 'data/l10n_be_hr_payroll_demo.xml' + ], 'auto_install': True, } diff --git a/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_data.xml b/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_data.xml index 1a2a4f4079e..c1ddd9cb4b1 100644 --- a/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_data.xml +++ b/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_data.xml @@ -511,7 +511,7 @@ result = -min(ip_amount * tax_rate, 11745) ref('hr_salary_rule_ip_part'), ref('hr_salary_rule_gross_with_ip') ])]" name="rule_ids"/> - + @@ -529,7 +529,7 @@ result = -min(ip_amount * tax_rate, 11745) ref('hr_payroll_rules_suppl_net'), ref('hr_payroll_rules_retained_net'), ])]" name="rule_ids"/> - + diff --git a/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_demo.xml b/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_demo.xml new file mode 100644 index 00000000000..02044439e56 --- /dev/null +++ b/addons/l10n_be_hr_payroll/data/l10n_be_hr_payroll_demo.xml @@ -0,0 +1,14 @@ + + + + My Belgian Company + + + + + + + + + + diff --git a/addons/l10n_be_hr_payroll_fleet/models/hr_contract.py b/addons/l10n_be_hr_payroll_fleet/models/hr_contract.py index 70e04f0706b..a680b2f1cfe 100644 --- a/addons/l10n_be_hr_payroll_fleet/models/hr_contract.py +++ b/addons/l10n_be_hr_payroll_fleet/models/hr_contract.py @@ -11,8 +11,8 @@ class HrContract(models.Model): default=lambda self: self.env['fleet.vehicle'].search([('driver_id', '=', self.employee_id.address_home_id.id)], limit=1), tracking=True, help="Employee's company car.") - car_atn = fields.Float(compute='_compute_car_atn_and_costs', string='ATN Company Car', store=True) - company_car_total_depreciated_cost = fields.Float(compute='_compute_car_atn_and_costs', store=True) + car_atn = fields.Float(compute='_compute_car_atn_and_costs', string='ATN Company Car', store=True, compute_sudo=True) + company_car_total_depreciated_cost = fields.Float(compute='_compute_car_atn_and_costs', store=True, compute_sudo=True) available_cars_amount = fields.Integer(compute='_compute_available_cars_amount', string='Number of available cars') new_car = fields.Boolean('Request a new car') # YTI: Check if could be removed diff --git a/addons/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_data.xml b/addons/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_data.xml index 0ec114aff8a..f1aa76c7622 100644 --- a/addons/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_data.xml +++ b/addons/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_data.xml @@ -1231,7 +1231,7 @@ Fr-Base Cotisations de base Employe Francais - + @@ -1240,7 +1240,7 @@ Fr-NC Employe non-cadre - + @@ -1249,7 +1249,7 @@ Fr-C Employe cadre - + diff --git a/addons/l10n_in_hr_payroll/demo/l10n_in_hr_payroll_demo.xml b/addons/l10n_in_hr_payroll/demo/l10n_in_hr_payroll_demo.xml index 541204b1ad0..98795542586 100644 --- a/addons/l10n_in_hr_payroll/demo/l10n_in_hr_payroll_demo.xml +++ b/addons/l10n_in_hr_payroll/demo/l10n_in_hr_payroll_demo.xml @@ -6,7 +6,7 @@ NE Non-Executive Employee - + diff --git a/odoo/addons/test_new_api/static/tests/x2many.js b/odoo/addons/test_new_api/static/tests/x2many.js index c12669d17a2..06a804fca9e 100644 --- a/odoo/addons/test_new_api/static/tests/x2many.js +++ b/odoo/addons/test_new_api/static/tests/x2many.js @@ -59,7 +59,7 @@ odoo.define('web.test.x2many', function (require) { trigger: '[data-toggle="tab"]:contains(Participants)' }, { content: "click to add participants", - trigger: '.tab-pane:eq(2).active .o_field_x2many_list_row_add a' + trigger: '.o_form_sheet .tab-pane:eq(2).active .o_field_x2many_list_row_add a' }, { content: "select Admin", trigger: 'tr:has(td:containsExact(Mitchell Admin)) .o_list_record_selector input[type="checkbox"]' @@ -70,7 +70,7 @@ odoo.define('web.test.x2many', function (require) { }, { // save content: "save discussion", trigger: 'button.o_form_button_save', - extra_trigger: '.tab-pane:eq(2) .o_field_widget tbody tr:has(td:containsExact(Mitchell Admin))', + extra_trigger: '.o_form_sheet .tab-pane:eq(2) .o_field_widget tbody tr:has(td:containsExact(Mitchell Admin))', }, { // edit content: "edit discussion", trigger: 'button.o_form_button_edit', @@ -79,7 +79,7 @@ odoo.define('web.test.x2many', function (require) { trigger: 'a[role=tab]:first', }, { content: "create new message a", - trigger: '.tab-pane:eq(0) .o_field_x2many_list_row_add a' + trigger: '.o_form_sheet .tab-pane:eq(0) .o_field_x2many_list_row_add a' }, { content: "insert body a", trigger: '.modal-body textarea:first', @@ -330,7 +330,7 @@ odoo.define('web.test.x2many', function (require) { { content: "switch to the second form view to test one2many with editable list (toggle menu dropdown)", - trigger: 'nav .o_menu_sections .dropdown-toggle:containsExact(Discussions)', + trigger: 'nav .o_menu_sections .dropdown-toggle:containsExact(Discussions), li.o_extra_menu_items a i.fa-plus', extra_trigger: '.tab-pane:eq(0) .o_field_widget tbody .o_data_row:eq(2)', }, { content: "switch to the second form view to test one2many with editable list (open submenu)", @@ -447,7 +447,7 @@ odoo.define('web.test.x2many', function (require) { { content: "switch to the third form view to test onchange changing one2many (toggle menu dropdown)", - trigger: 'nav .o_menu_sections .dropdown-toggle:containsExact(Discussions)', + trigger: 'nav .o_menu_sections .dropdown-toggle:containsExact(Discussions), li.o_extra_menu_items a i.fa-plus', extra_trigger: '.tab-pane:eq(0) .o_field_widget tbody .o_data_row:eq(2)', }, { content: "switch to the thied form view to test onchange changing one2many (open submenu)",