Merge pull request !636 from dev
This commit is contained in:
李鹏宇
2024-12-02 03:52:59 +00:00
committed by Gitee
7 changed files with 74 additions and 7 deletions
+18 -3
View File
@@ -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="时长")
+19 -2
View File
@@ -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')
@@ -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,
}
}
@@ -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'
@@ -30,6 +30,7 @@
<group>
<field name="users_id"/>
<field name="yuthon_company"/>
<field name="duration"/>
</group>
<group>
<field name="code"/>
@@ -52,7 +52,9 @@
<button name="button_abnormal_approval" type="object" string="异常提醒" class="oe_highlight"
column_invisible="not is_abnormal"/>
<button name="button_card_approval" type="object" string="补卡" class="oe_highlight"
column_invisible="not is_no_card"/>
column_invisible="not is_abnormal"/>
<button name="button_duty_approval" type="object" string="外出" class="oe_highlight"
column_invisible="not is_abnormal"/>
</tree>
</field>
</record>
@@ -31,6 +31,7 @@
<group>
<field name="yuthon_company"/>
<field name="code"/>
<field name="duration"/>
</group>
<group>
<field name="department_id"/>