@@ -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>
|
||||
|
||||
@@ -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'))):
|
||||
|
||||
Reference in New Issue
Block a user