diff --git a/yuthon_hr_attendance/models/duty_approval.py b/yuthon_hr_attendance/models/duty_approval.py index 1cb801170..ed1e90ca3 100644 --- a/yuthon_hr_attendance/models/duty_approval.py +++ b/yuthon_hr_attendance/models/duty_approval.py @@ -11,15 +11,16 @@ class DutyApprovals(models.Model): _rec_name = 'name' yuthon_company = fields.Selection(related='users_id.employee_id.yuthon_company', string="公司") - name = fields.Char(string="标题") + name = fields.Char(string="标题", compute='_compute_name') code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('overtime_approval')) department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门") users_id = fields.Many2one('res.users', string="申请人",default=lambda self: self.env.user.id) - duty_ids = fields.One2many('duty.approval.line','duty_id',string="值班人明细") + duty_ids = fields.One2many('duty.approval.line','duty_id',string="值班人明细", default=lambda self: self._default_user_lines()) is_issues = fields.Boolean(string='是否上会') reason_application = fields.Html(string="事由") related_issues_id = fields.Many2one('issue.library', string="关联议题") + @api.depends('date_start', 'date_end') def _compute_duration(self): for rec in self: @@ -46,13 +47,27 @@ class DutyApprovals(models.Model): elif self.related_issues_id: raise UserError("已经创建了相关的上会记录,不能取消勾选") + @api.model + def _default_user_lines(self): + return [(0, 0, {'duty_user_id': self.env.user.id})] + + @api.depends('users_id', 'duty_ids') + def _compute_name(self): + for rec in self: + if rec.duty_ids and rec.duty_ids[0].date_start: + date_str = rec.duty_ids[0].date_start.strftime("%Y-%m-%d") + rec.name = f"{rec.users_id.name}值班{date_str}" + elif rec.users_id: + rec.name = f"{rec.users_id.name} 值班" + else: + rec.name = "值班" class DutyApprovalsLine(models.Model): _name = 'duty.approval.line' _description = "值班人明细行" duty_id = fields.Many2one('duty.approval', string="值班审批") - duty_user_id = fields.Many2one('hr.employee', string="值班人员") + duty_user_id = fields.Many2one('res.users', string="值班人员") date_start = fields.Datetime(string="开始时间", default=fields.Datetime.now) date_end = fields.Datetime(string="结束时间") duration = fields.Float(string="时长") diff --git a/yuthon_hr_attendance/models/go_approval.py b/yuthon_hr_attendance/models/go_approval.py index fa825d219..6eb0cd925 100644 --- a/yuthon_hr_attendance/models/go_approval.py +++ b/yuthon_hr_attendance/models/go_approval.py @@ -11,7 +11,7 @@ class GoApprovals(models.Model): _rec_name = 'name' yuthon_company = fields.Selection(related='users_id.employee_id.yuthon_company', string="公司") - name = fields.Char(string="标题") + name = fields.Char(string="标题", compute='_compute_name', store=True) code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('overtime_approval')) users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门") @@ -19,6 +19,19 @@ class GoApprovals(models.Model): go_approval_ids = fields.One2many('go.approvals.line', 'go_approval_id', string="外出详情", default=lambda self: self._default_user_lines()) is_issues = fields.Boolean(string='是否上会') related_issues_id = fields.Many2one('issue.library', string="关联议题") + duration = fields.Float(string="时长", compute='_compute_duration', store=True) + + @api.depends('go_approval_ids') + def _compute_duration(self): + for rec in self: + if rec.go_approval_ids: + first_line = rec.go_approval_ids[0] + if first_line.date_start and first_line.date_end: + rec.duration = (first_line.date_end - first_line.date_start).total_seconds() / 3600 + else: + rec.duration = 0.0 + else: + rec.duration = 0.0 @api.onchange('is_issues') def _onchange_is_issues(self): @@ -41,6 +54,10 @@ class GoApprovals(models.Model): def _default_user_lines(self): return [(0, 0, {'users_id': self.env.user.id})] + @api.depends('users_id', 'duration') + def _compute_name(self): + for rec in self: + rec.name = f"{rec.users_id.name}外出{rec.duration}小时" class GoApprovalsLine(models.Model): _name = 'go.approvals.line' @@ -50,7 +67,7 @@ class GoApprovalsLine(models.Model): users_id = fields.Many2one('res.users', string="外出人") applicants_unit = fields.Selection([('hour', '小时'), ('day', '天')], string="申请单位") documents_ids = fields.Many2many('ir.attachment', string="附件") - date_start = fields.Datetime(string="开始时间") + date_start = fields.Datetime(string="开始时间", date_start = fields.Datetime(string="开始时间", default=lambda self: datetime.now().replace(hour=8, minute=30, second=0, microsecond=0))) date_end = fields.Datetime(string="结束时间") @api.onchange('date_start', 'date_end') diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index dbe67bc3b..2d66fac01 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -139,6 +139,19 @@ class HrAttendance(models.Model): 'default_actual_punch': self.current_data, 'default_replacement_time': replacement_time, 'default_users_id': self.employee_id.user_id.id, + 'default_replacement_time': replacement_time, + } + } + + def button_duty_approval(self): + form_id = self.env.ref('yuthon_hr_attendance.duty_approval_form').id + return { + "type": "ir.actions.act_window", + "name": "外出申请", + "res_model": "duty.approval", + "views": [[form_id, "form"]], + "context": { + 'default_users_id': self.employee_id.user_id.id, } } diff --git a/yuthon_hr_attendance/models/overtime_approval.py b/yuthon_hr_attendance/models/overtime_approval.py index 95290d709..8b1c73924 100644 --- a/yuthon_hr_attendance/models/overtime_approval.py +++ b/yuthon_hr_attendance/models/overtime_approval.py @@ -11,7 +11,7 @@ class OvertimeApprovals(models.Model): _rec_name = 'name' yuthon_company = fields.Selection(related='users_id.employee_id.yuthon_company', string="公司") - name = fields.Char(string="标题") + name = fields.Char(string="标题", compute='_compute_name') code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('overtime_approval')) users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) overtime_approval_ids = fields.One2many('overtime.user.line', 'overtime_approval_id', string="加班审批行", @@ -22,6 +22,19 @@ class OvertimeApprovals(models.Model): details = fields.Text(string="加班说明") related_issues_id = fields.Many2one('issue.library', string="关联议题") documents_ids = fields.Many2many('ir.attachment', string="附件") + duration = fields.Float(string="时长", compute='_compute_duration', store=True) + + @api.depends('overtime_approval_ids') + def _compute_duration(self): + for rec in self: + if rec.overtime_approval_ids: + first_line = rec.overtime_approval_ids[0] + if first_line.start_time and first_line.end_time: + rec.duration = (first_line.end_time - first_line.start_time).total_seconds() / 3600 + else: + rec.duration = 0.0 + else: + rec.duration = 0.0 @api.onchange('is_issues') def _onchange_is_issues(self): @@ -94,6 +107,11 @@ class OvertimeApprovals(models.Model): employee_id.write({'holiday_overtime_hours': employee_id.holiday_overtime_hours + overtime_id.hours}) overtime_id.overtime_hours = employee_id.holiday_overtime_hours + employee_id.weekend_overtime_hours + employee_id.normal_overtime_hours + @api.depends('users_id', 'duration') + def _compute_name(self): + for rec in self: + rec.name = f"{rec.users_id.name}加班{rec.duration}小时" + class OvertimeUserLine(models.Model): _name = 'overtime.user.line' _rec_name = 'overtime_approval_id' diff --git a/yuthon_hr_attendance/views/go_approval.xml b/yuthon_hr_attendance/views/go_approval.xml index 1769410e5..70fef5de0 100644 --- a/yuthon_hr_attendance/views/go_approval.xml +++ b/yuthon_hr_attendance/views/go_approval.xml @@ -30,6 +30,7 @@ + diff --git a/yuthon_hr_attendance/views/hr_attendance_views.xml b/yuthon_hr_attendance/views/hr_attendance_views.xml index b1c253b96..00ec65931 100644 --- a/yuthon_hr_attendance/views/hr_attendance_views.xml +++ b/yuthon_hr_attendance/views/hr_attendance_views.xml @@ -52,7 +52,9 @@