[IMP] hr_work_entry_contract: Allow regenerating work entries for several employees

closes odoo/odoo#98036

Taskid: 2917741
Related: odoo/upgrade#3772
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Yannick Tivisse
2022-08-16 09:19:20 +02:00
parent 5c5876d74f
commit d2ad74f8bd
3 changed files with 16 additions and 16 deletions
@@ -364,7 +364,7 @@ class HrContract(models.Model):
def _recompute_work_entries(self, date_from, date_to):
self.ensure_one()
wizard = self.env['hr.work.entry.regeneration.wizard'].create({
'employee_id': self.employee_id.id,
'employee_ids': [(4, self.employee_id.id)],
'date_from': date_from,
'date_to': date_to,
})
@@ -17,7 +17,7 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
date_from = fields.Date('From', required=True, default=lambda self: self.env.context.get('date_start'))
date_to = fields.Date('To', required=True, compute='_compute_date_to', store=True,
readonly=False, default=lambda self: self.env.context.get('date_end'))
employee_id = fields.Many2one('hr.employee', 'Employee', required=True)
employee_ids = fields.Many2many('hr.employee', string='Employees', required=True)
validated_work_entry_ids = fields.Many2many('hr.work.entry', string='Work Entries Within Interval',
compute='_compute_validated_work_entry_ids')
search_criteria_completed = fields.Boolean(compute='_compute_search_criteria_completed')
@@ -28,26 +28,26 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
for wizard in self:
wizard.date_to = wizard.date_from + relativedelta(months=+1, day=1, days=-1)
@api.depends('employee_id')
@api.depends('employee_ids')
def _compute_earliest_available_date(self):
for wizard in self:
dates = wizard.mapped('employee_id.contract_ids.date_generated_from')
dates = wizard.employee_ids.contract_ids.mapped('date_generated_from')
wizard.earliest_available_date = min(dates) if dates else None
@api.depends('employee_id')
@api.depends('employee_ids')
def _compute_latest_available_date(self):
for wizard in self:
dates = wizard.mapped('employee_id.contract_ids.date_generated_to')
dates = wizard.employee_ids.contract_ids.mapped('date_generated_to')
wizard.latest_available_date = max(dates) if dates else None
@api.depends('date_from', 'date_to', 'employee_id')
@api.depends('date_from', 'date_to', 'employee_ids')
def _compute_validated_work_entry_ids(self):
for wizard in self:
validated_work_entry_ids = self.env['hr.work.entry']
if wizard.search_criteria_completed:
search_domain = [('employee_id', '=', self.employee_id.id),
('date_start', '>=', self.date_from),
('date_stop', '<=', self.date_to),
search_domain = [('employee_id', 'in', wizard.employee_ids.ids),
('date_start', '>=', wizard.date_from),
('date_stop', '<=', wizard.date_to),
('state', '=', 'validated')]
validated_work_entry_ids = self.env['hr.work.entry'].search(search_domain, order="date_start")
wizard.validated_work_entry_ids = validated_work_entry_ids
@@ -57,12 +57,12 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
for wizard in self:
wizard.valid = wizard.search_criteria_completed and len(wizard.validated_work_entry_ids) == 0
@api.depends('date_from', 'date_to', 'employee_id')
@api.depends('date_from', 'date_to', 'employee_ids')
def _compute_search_criteria_completed(self):
for wizard in self:
wizard.search_criteria_completed = wizard.date_from and wizard.date_to and wizard.employee_id and wizard.earliest_available_date and wizard.latest_available_date
wizard.search_criteria_completed = wizard.date_from and wizard.date_to and wizard.employee_ids and wizard.earliest_available_date and wizard.latest_available_date
@api.onchange('date_from', 'date_to', 'employee_id')
@api.onchange('date_from', 'date_to', 'employee_ids')
def _check_dates(self):
for wizard in self:
wizard.earliest_available_date_message = ''
@@ -103,11 +103,11 @@ class HrWorkEntryRegenerationWizard(models.TransientModel):
date_from = max(self.date_from, self.earliest_available_date) if self.earliest_available_date else self.date_from
date_to = min(self.date_to, self.latest_available_date) if self.latest_available_date else self.date_to
work_entries = self.env['hr.work.entry'].search([
('employee_id', '=', self.employee_id.id),
('employee_id', 'in', self.employee_ids.ids),
('date_stop', '>=', date_from),
('date_start', '<=', date_to),
('state', '!=', 'validated')])
write_vals = {field: False for field in self._work_entry_fields_to_nullify()}
work_entries.write(write_vals)
self.employee_id.generate_work_entries(date_from, date_to, True)
self.employee_ids.generate_work_entries(date_from, date_to, True)
@@ -7,7 +7,7 @@
<form string="Regenerate Employee Work Entries">
<group>
<group>
<field name="employee_id"/>
<field name="employee_ids" widget="many2many_tags"/>
<label for="date_from"></label>
<div name="date_from">
<div class="text-info" attrs="{'invisible': [('earliest_available_date_message', '=', '')]}">