添加功能

This commit is contained in:
zhou
2025-06-17 10:18:13 +08:00
parent 70115d1f2c
commit a9e8e4c737
4 changed files with 81 additions and 15 deletions
@@ -8,6 +8,7 @@ from odoo.exceptions import ValidationError, UserError
class SoongWorkflowInspector(models.Model):
_name = "soong.workflow.inspector"
_description = "督查督办"
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
name = fields.Char(string="标题")
start_data = fields.Date(string="督办日期", default=fields.Date.today)
+7 -2
View File
@@ -46,7 +46,9 @@ class HrAttendance(models.Model):
noon_duty = fields.Datetime(string="中值")
night_duty = fields.Datetime(string="晚值")
is_approval = fields.Boolean(string="是否审批修正", default=False)
is_red = fields.Boolean()
is_check_in_red = fields.Boolean(string="是否上班打卡异常")
is_check_out_red = fields.Boolean(string="是否下班打卡异常")
approval_check_in = fields.Datetime(string="修正前上班打卡时间")
approval_check_out = fields.Datetime(string="修正前下班打卡时间")
is_month = fields.Boolean(string="是否为本月数据", compute='_compute_month_status', store=True)
@@ -200,7 +202,10 @@ class HrAttendance(models.Model):
self.is_late_card = self.is_approval_late
self.is_abnormal = self.is_approval_abnormal
self.absenteeism_card = self.is_approval_abs
self.is_red = False
if self.is_check_in_red == True:
self.is_check_in_red = False
if self.is_check_out_red == True:
self.is_check_out_red = False
def button_correct_wizard(self):
self.approval_check_in = self.check_in
@@ -4,7 +4,7 @@
<field name="name">hr.attendance.going.tree2</field>
<field name="model">hr.attendance</field>
<field name="arch" type="xml">
<tree string="出勤" decoration-danger="abnormal == 1 or is_red == 1"
<tree string="出勤"
edit="false" delete="false" create="false"
editable="bottom" limit="20">
<header>
@@ -14,8 +14,8 @@
</header>
<field name="employee_id" class="list_current_data" options="{'no_create': True}"/>
<field name="current_data" optional="show" class="list_current_data"/>
<field name="check_in" optional="show" widget="time"/>
<field name="check_out" optional="show" widget="time" class="list_current_data"/>
<field name="check_in" optional="show" widget="time" decoration-danger="is_check_in_red == 1"/>
<field name="check_out" optional="show" widget="time" class="list_current_data" decoration-danger="is_check_out_red == 1"/>
<field name="shift_id" optional="hidden"/>
<field name="shift_name" optional="show" class="list_current_data"/>
<field name="create_date" optional="hidden"/>
@@ -31,10 +31,11 @@
<field name="abnormal" optional="show" column_invisible="1"/>
<field name="work_time_type" optional="hidden"/>
<field name="is_approval" optional="hidden"/>
<field name="is_red" column_invisible="1"/>
<field name="is_check_in_red" column_invisible="1"/>
<field name="is_check_out_red" column_invisible="1"/>
<button name="button_controls_wizard" type="object" string="操作" class="oe_highlight" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)"/>
<button name="button_correct_wizard" type="object" string="修正" class="btn btn-primary" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="revoke" type="object" string="撤销" class="btn btn-primary" invisible="not is_red" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="revoke" type="object" string="撤销" class="btn btn-primary" invisible="not is_check_out_red or is_check_in_red" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="button_source" type="object" string="详情" class="oe_highlight" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
</tree>
</field>
@@ -43,7 +44,7 @@
<field name="name">hr.attendance.going.tree2</field>
<field name="model">hr.attendance</field>
<field name="arch" type="xml">
<tree string="出勤" decoration-danger="abnormal == 1 or is_red == 1"
<tree string="出勤"
edit="false" delete="false" create="false"
editable="bottom" limit="20">
<!-- <header>-->
@@ -69,10 +70,11 @@
<field name="is_approval" optional="hidden"/>
<field name="is_month" optional="hidden"/>
<field name="is_last_month" optional="hidden"/>
<field name="is_red" column_invisible="1"/>
<field name="is_check_in_red" column_invisible="1"/>
<field name="is_check_out_red" column_invisible="1"/>
<button name="button_controls_wizard" type="object" string="操作" class="oe_highlight" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)"/>
<button name="button_correct_wizard" type="object" string="修正" class="btn btn-primary" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="revoke" type="object" string="撤销" class="btn btn-primary" invisible="not is_red" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="revoke" type="object" string="撤销" class="btn btn-primary" invisible="not is_check_out_red or is_check_in_red" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
<button name="button_source" type="object" string="详情" class="oe_highlight" groups="yuthon_hr_attendance.group_he_attendance_sign_manager"/>
</tree>
</field>
@@ -16,6 +16,17 @@ class AttendanceCorrectWizard(models.TransientModel):
def confirm(self):
for record in self:
# 准备更新的值
values = {
'is_approval': True,
'is_abnormal': False,
'is_no_card': False,
'is_early_card': False,
'is_late_card': False,
'is_check_in_red': False,
'is_check_out_red': False
}
if not record.attendance_id.shift_id:
year = record.attendance_id.current_data.year
month = record.attendance_id.current_data.month
@@ -25,12 +36,41 @@ class AttendanceCorrectWizard(models.TransientModel):
min_hour = int(min_hour_from)
min_minute = int(min_hour_from * 10 % min_hour_from)
will_datetime_start = current_date.replace(year=year, month=month, day=day, hour=min_hour, minute=min_minute) - timedelta(hours=8)
record.attendance_id.write({'check_in': will_datetime_start, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False, 'is_red':True})
max_hour_to = record.attendance_id.employee_id.resource_id.calendar_id.attendance_ids[-1].hour_to
max_hour = int(max_hour_to)
max_minute = int(max_hour_to * 10 % max_hour_to)
will_datetime_end = current_date.replace(year=year, month=month, day=day, hour=max_hour, minute=max_minute) - timedelta(hours=8)
record.attendance_id.write({'check_out': will_datetime_end, 'is_approval': True, 'is_abnormal':False, 'is_no_card':False, 'is_early_card':False, 'is_late_card':False, 'absenteeism_card':False, 'is_red':True})
# 准备更新的值
values = {
'is_approval': True,
'is_abnormal': False,
'is_no_card': False,
'is_early_card': False,
'is_late_card': False,
'is_check_in_red': False,
'is_check_out_red': False
}
# 处理上班打卡
if not self.attendance_id.check_in:
values['check_in'] = will_datetime_start
values['is_check_in_red'] = True
values['is_no_card'] = False
elif self.attendance_id.check_in > will_datetime_start:
values['check_in'] = will_datetime_start
values['is_check_in_red'] = True
values['is_late_card'] = False
# 处理下班打卡
if not self.attendance_id.check_out:
values['check_out'] = will_datetime_end
values['is_check_out_red'] = True
values['is_no_card'] = False
elif self.attendance_id.check_out < will_datetime_end:
values['check_out'] = will_datetime_end
values['is_check_out_red'] = True
values['is_early_card'] = False
# 应用修改
self.attendance_id.write(values)
else:
check_in_start = record.attendance_id.shift_id.template_id.check_in_start
check_out_end = record.attendance_id.shift_id.template_id.check_out_end
@@ -48,6 +88,24 @@ class AttendanceCorrectWizard(models.TransientModel):
)
if record.attendance_id.shift_id.template_id.day2 == '次日':
end_datetime = end_datetime + timedelta(days=1)
record.attendance_id.write(
{'check_out': end_datetime, 'check_in':start_datetime, 'is_approval': True, 'is_abnormal': False, 'is_no_card': False,
'is_early_card': False, 'is_late_card': False, 'absenteeism_card':False})
# 处理上班打卡
if not self.attendance_id.check_in:
values['check_in'] = start_datetime
values['is_check_in_red'] = True
values['is_no_card'] = False
elif self.attendance_id.check_in > start_datetime:
values['check_in'] = start_datetime
values['is_check_in_red'] = True
values['is_late_card'] = False
# 处理下班打卡
if not self.attendance_id.check_out:
values['check_out'] = end_datetime
values['is_check_out_red'] = True
values['is_no_card'] = False
elif self.attendance_id.check_out < end_datetime:
values['check_out'] = end_datetime
values['is_check_out_red'] = True
values['is_early_card'] = False
# 应用修改
self.attendance_id.write(values)