!7851 添加功能

Merge pull request !7851 from 李鹏宇/dev_zhou
This commit is contained in:
李鹏宇
2026-01-10 07:37:47 +00:00
committed by Gitee
2 changed files with 39 additions and 43 deletions
@@ -53,19 +53,5 @@
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
</record>
<!-- 定时任务: 每天触发一次,判断节假日,生成每个人的出勤数据 -->
<!-- <record forcecreate="True" id="hr_attendance" model="ir.cron">-->
<!-- <field name="name">每天生成出勤数据</field>-->
<!-- <field name="model_id" ref="model_hr_attendance"/>-->
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.create_attendance_data_holiday()</field>-->
<!-- <field eval="False" name="active"/>-->
<!-- <field name="user_id" ref="base.user_root"/>-->
<!-- <field name="interval_number">1</field>-->
<!-- <field name="interval_type">days</field>-->
<!-- <field name="numbercall">-1</field>-->
<!-- <field eval="False" name="doall"/>-->
<!-- </record>-->
</data>
</odoo>
+39 -29
View File
@@ -63,25 +63,25 @@ class HrAttendance(models.Model):
is_last_month = fields.Boolean(string="是否为上月数据", compute='_compute_month_status', store=True)
correct_result = fields.Text(string="修正原因")
# @api.constrains("check_in")
# def _check_in_out(self):
# reminder_id = self.env['message.reminder.tasks'].search([('name', '=', self.employee_id.name), ('state', '=', 'todo'),
# ('type', '=', 'work'),
# ('current_data', '=', self.current_data)], limit=1)
# if reminder_id:
# reminder_id.state = 'done'
@api.constrains("check_in")
def _check_in_out(self):
reminder_id = self.env['message.reminder.tasks'].search([('name', '=', self.employee_id.name), ('state', '=', 'todo'),
('type', '=', 'work'),
('current_data', '=', self.current_data)], limit=1)
if reminder_id:
reminder_id.state = 'done'
# @api.constrains("check_out")
# def _check_out_in(self):
# if self.shift_name in ['夜班', '旧晚(旧区府晚班)']:
# current_data = self.current_data + timedelta(days=1)
# else:
# current_data = self.current_data
# reminder_id = self.env['message.reminder.tasks'].search([('name', '=', self.employee_id.name), ('state', '=', 'todo'),
# ('type', '=', 'offWork'),
# ('current_data', '=', current_data)])
# if reminder_id:
# reminder_id.state = 'done'
@api.constrains("check_out")
def _check_out_in(self):
if self.shift_name in ['夜班', '旧晚(旧区府晚班)']:
current_data = self.current_data + timedelta(days=1)
else:
current_data = self.current_data
reminder_id = self.env['message.reminder.tasks'].search([('name', '=', self.employee_id.name), ('state', '=', 'todo'),
('type', '=', 'offWork'),
('current_data', '=', current_data)], limit=1)
if reminder_id:
reminder_id.state = 'done'
def one_time(self):
for att in self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))):
@@ -100,18 +100,28 @@ class HrAttendance(models.Model):
定时任务create_attendance_data_holiday
:return:
"""
att_ids = self.sudo().env['hr.attendance']
# 补充假期橙色逻辑,班次逻辑
for emp in self.sudo().env['hr.employee'].search([('user_state', '!=', ['withdraw', 'leave'])]):
test1 = att_ids.search([('current_data', '=', fields.Date.today()), ('employee_id', '=', emp.id)])
resource_user_ids = emp.resource_calendar_id.resource_user_ids.ids
is_resource_user = True if emp.id in resource_user_ids else False
if not is_resource_user and not test1:
new_att = att_ids.create({
'employee_id': emp.id,
'current_data': fields.Date.today(),
today = fields.Date.today() + timedelta(hours=8)
today_str = fields.Date.to_string(today)
existing_employees = self.env['hr.employee'].search([
('name', 'not in', ['Administrator'])
])
existing_records = self.search([
('employee_id', 'in', existing_employees.ids),
('current_data', '=', today_str)
])
existing_employee_ids = set()
for record in existing_records:
existing_employee_ids.add(record.employee_id.id)
for employee in existing_employees:
if employee.id not in existing_employee_ids:
self.create({
'employee_id': employee.id,
'current_data': today_str,
'check_in': False,
'check_out': False,
'is_no_card': False,
'is_abnormal': False
})
new_att.compute_attend()
def state_fix(self):
for att in self.env["hr.attendance"].browse(self._context.get('active_ids', self._context.get('active_id'))):