[FIX] l10n_be_hr_payroll_fleet: Fix access rights issues

If a user is member of `hr_contract.group_hr_contract_manager`
but not member of `fleet.fleet_group_manager` some access issues arise
The issues are related to the `car_id` field of `hr.contract`
because the user has no access rights for `fleet.vehicle`.

Fix to solve the issue:
Make all car related field of contracts available
to fleet manager only.

If the contract manager want to be able to manage cars on
contracts, he must manually be granted fleet manager access.
This is a requirement if the contract manager want to use the
company car feature.
This commit is contained in:
Lucas Lefèvre
2019-03-19 09:35:31 +01:00
committed by Yannick Tivisse
parent 955427bb49
commit dc19707baa
2 changed files with 13 additions and 13 deletions
@@ -8,8 +8,9 @@ class HrContract(models.Model):
_inherit = 'hr.contract'
car_id = fields.Many2one('fleet.vehicle', string='Company Car',
default=lambda self: self.env['fleet.vehicle'].search([('driver_id', '=', self.employee_id.address_home_id.id)], limit=1),
default=lambda self: self.env['fleet.vehicle'].sudo().search([('driver_id', '=', self.employee_id.address_home_id.id)], limit=1),
tracking=True,
groups="fleet.fleet_group_manager",
help="Employee's company car.")
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)
@@ -18,13 +19,14 @@ class HrContract(models.Model):
# YTI: Check if could be removed
new_car_model_id = fields.Many2one('fleet.vehicle.model', string="Model", domain=lambda self: self._get_possible_model_domain())
max_unused_cars = fields.Integer(compute='_compute_max_unused_cars')
acquisition_date = fields.Date(related='car_id.acquisition_date', readonly=False)
car_value = fields.Float(related="car_id.car_value", readonly=False)
fuel_type = fields.Selection(related="car_id.fuel_type", readonly=False)
co2 = fields.Float(related="car_id.co2", readonly=False)
driver_id = fields.Many2one('res.partner', related="car_id.driver_id", readonly=False)
car_open_contracts_count = fields.Integer(compute='_compute_car_open_contracts_count')
acquisition_date = fields.Date(related='car_id.acquisition_date', readonly=False, groups="fleet.fleet_group_manager")
car_value = fields.Float(related="car_id.car_value", readonly=False, groups="fleet.fleet_group_manager")
fuel_type = fields.Selection(related="car_id.fuel_type", readonly=False, groups="fleet.fleet_group_manager")
co2 = fields.Float(related="car_id.co2", readonly=False, groups="fleet.fleet_group_manager")
driver_id = fields.Many2one('res.partner', related="car_id.driver_id", readonly=False, groups="fleet.fleet_group_manager")
car_open_contracts_count = fields.Integer(compute='_compute_car_open_contracts_count', groups="fleet.fleet_group_manager")
recurring_cost_amount_depreciated = fields.Float(
groups="fleet.fleet_group_manager",
compute='_compute_recurring_cost_amount_depreciated',
inverse="_inverse_recurring_cost_amount_depreciated")
@@ -65,7 +67,7 @@ class HrContract(models.Model):
@api.depends('name')
def _compute_available_cars_amount(self):
for contract in self:
contract.available_cars_amount = self.env['fleet.vehicle'].search_count([('driver_id', '=', False)])
contract.available_cars_amount = self.env['fleet.vehicle'].sudo().search_count([('driver_id', '=', False)])
@api.depends('name')
def _compute_max_unused_cars(self):
@@ -6,20 +6,18 @@
<field name="inherit_id" ref="l10n_be_hr_payroll.hr_contract_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='transport_mode_car']" position="after">
<field name="new_car" invisible="1"/>
<label for="car_id" attrs="{'invisible': [('transport_mode_car', '=', False)]}" name="car_id_label"/>
<div attrs="{'invisible': [('transport_mode_car', '=', False)]}" name="car_id_div">
<label for="car_id" string="Company Car" attrs="{'invisible': [('transport_mode_car', '=', False)]}" name="car_id_label" groups="fleet.fleet_group_manager"/>
<div attrs="{'invisible': [('transport_mode_car', '=', False)]}" name="car_id_div" groups="fleet.fleet_group_manager">
<field name="car_id" nolabel="1"/>
<field name="available_cars_amount" invisible="1"/>
</div>
<field name="new_car_model_id" invisible="1"/>
<field name="max_unused_cars" invisible="1"/>
</xpath>
<xpath expr="//field[@name='car_atn']" position="after">
<field name="company_car_total_depreciated_cost" invisible="1"/>
</xpath>
<group name="yearly_advantages" position="after">
<group string="Company Car" attrs="{'invisible': [('car_id', '=', False)]}">
<group string="Company Car" attrs="{'invisible': [('car_id', '=', False)]}" groups="fleet.fleet_group_manager">
<field name="acquisition_date"/>
<field name="car_value"/>
<field name="fuel_type"/>