Files
suite/timesheet_grid_work_entry/wizard/timesheet_merge_wizard.py
Jared Kipe bb5784f7d9 [IMP] timesheet_grid_work_entry: dynamic ui for project task timer
WIP for grid views overrides to add work_type_id
2022-01-09 14:28:47 -08:00

62 lines
2.3 KiB
Python

# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
class MergeTimesheets(models.TransientModel):
_inherit = 'hr_timesheet.merge.wizard'
work_type_id = fields.Many2one('hr.work.entry.type', string='Work Type')
@api.constrains('timesheet_ids')
def _check_timesheet_ids(self):
for wizard in self:
if len(set(wizard.timesheet_ids.mapped('work_type_id'))) > 1:
raise ValidationError('The timesheets must have the same work type.')
super()._check_timesheet_ids()
@api.model
def default_get(self, fields_list):
res = super(MergeTimesheets, self).default_get(fields_list)
if 'timesheet_ids' in fields_list and res.get('timesheet_ids'):
timesheets = self.env['account.analytic.line'].browse(res.get('timesheet_ids'))
if timesheets and 'work_type_id' in fields_list:
res['work_type_id'] = timesheets.mapped('work_type_id.id')[0]
return res
def action_merge(self):
"""
super() (timesheet_grid.wizard.timesheet_merge_wizard.action_merge) is CLOSED
to values injection. It is also closed to post-create modification because it
returns a closed window instead of an action with the new timesheet's id (e.g. a redirect)
Thus a direct inline patch...
"""
self.ensure_one()
self.env['account.analytic.line'].create({
'name': self.name,
'date': self.date,
'unit_amount': self.unit_amount,
'encoding_uom_id': self.encoding_uom_id.id,
'project_id': self.project_id.id,
'task_id': self.task_id.id,
'employee_id': self.employee_id.id,
'work_type_id': self.work_type_id.id,
})
self.timesheet_ids.unlink()
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'message': _("The timesheet entries have successfully been merged."),
'type': 'success',
'sticky': False,
'next': {'type': 'ir.actions.act_window_close'},
}
}