You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

59 lines
2.4 KiB

# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from odoo.exceptions import UserError
class ReAssignTask(models.TransientModel):
_name = 'task.reassign'
pending_tasks = fields.One2many('pending.task', related='leave_req_id.pending_tasks', string='Pending Tasks')
leave_req_id = fields.Many2one('hr.holidays', string='Leave Request')
@api.multi
def action_approve(self):
task_pending = False
e_unavail = False
emp_unavail = []
for task in self.pending_tasks:
if not task.assigned_to:
task_pending = True
if task_pending:
raise UserError(_('Please assign pending task to employees.'))
else:
for task in self.pending_tasks:
if task.assigned_to in task.unavailable_employee:
emp_unavail.append(task.assigned_to.name)
e_unavail = True
emp_unavail = set(emp_unavail)
emp_unavail_count = len(emp_unavail)
if e_unavail:
if emp_unavail_count == 1:
raise UserError(_('Selected employee %s is not available') % (', '.join(emp_unavail),))
else:
raise UserError(_('Selected employees %s are not available') % (', '.join(emp_unavail),))
else:
manager = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
holiday = self.leave_req_id
tasks = self.env['project.task']
for task in self.pending_tasks:
if not task.assigned_to.user_id:
raise UserError(_('Please configure user for the employee %s') % (task.assigned_to.name,))
vals = {
'name': task.name,
'user_id': task.assigned_to.user_id.id,
'project_id': task.project_id.id,
'description': task.description,
}
tasks.sudo().create(vals)
if holiday.double_validation:
return holiday.write({'state': 'validate1', 'manager_id': manager.id if manager else False})
else:
holiday.action_validate()
@api.multi
def cancel(self):
for task in self.pending_tasks:
task.update({'assigned_to': False})
return {'type': 'ir.actions.act_window_close'}