我如何才能将字段更改为取决于另一个模型的两个字段的计算字段

时间:2019-05-30 10:26:03

标签: python-3.x odoo-11

我如何修改此函数以使字段overtime_hours计算为字段,并且它取决于另一个模型(hr.attendance)的check_in和check_out字段。有任何帮助的想法吗?我陷入了这个问题

class BtHrOvertime(models.Model):
employee_id = fields.Many2one('hr.employee', string="Employee")
manager_id = fields.Many2one('hr.employee', string='Manager')
start_date = fields.Datetime('Date')
overtime_hours = fields.Float('Overtime Hours')
notes = fields.Text(string='Notes')
state = fields.Selection([('draft', 'Draft'), ('confirm', 'Waiting Approval'), ('refuse', 'Refused'),
       ('validate', 'Approved'), ('cancel', 'Cancelled')], default='draft', copy=False)
attendance_id = fields.Many2one('hr.attendance', string='Attendance')
@api.model
def run_overtime_scheduler(self):
    """ This Function is called by scheduler. """
    current_date = date.today()
    working_hours_empl = self.env['hr.contract']
    attend_signin_ids = self.env['hr.attendance'].search([('overtime_created', '=', False)])
    for obj in attend_signin_ids:
        if obj.check_in and obj.check_out:
            start_date = datetime.datetime.strptime(obj.check_in, DEFAULT_SERVER_DATETIME_FORMAT)
            end_date = datetime.datetime.strptime(obj.check_out, DEFAULT_SERVER_DATETIME_FORMAT) 
            difference = end_date - start_date
            hour_diff = str(difference).split(':')[0]
            min_diff = str(difference).split(':')[1]
            tot_diff = hour_diff + '.' + min_diff
            actual_working_hours = float(tot_diff)
            contract_obj = self.env['hr.contract'].search([('employee_id', '=', obj.employee_id.id),('work_hours','!=',0)])
            for contract in contract_obj:
                working_hours = contract.work_hours
                if actual_working_hours > working_hours:
                    overtime_hours = actual_working_hours - working_hours
                    vals = {
                        'employee_id':obj.employee_id and obj.employee_id.id or False,
                        'manager_id' : obj.employee_id and obj.employee_id.parent_id and obj.employee_id.parent_id.id or False,
                        'start_date' : obj.check_in,
                        'overtime_hours': round(overtime_hours,2),
                        'attendance_id': obj.id,
                        }
                    self.env['bt.hr.overtime'].create(vals)
                    obj.overtime_created = True

0 个答案:

没有答案