ljm 1
This commit is contained in:
@@ -242,295 +242,6 @@ class HrAttendanceDetail(models.Model):
|
||||
_logger.error('检查保存之前的数据分析出想要的数据失败,异常:{0},数据信息{1},异常详情:{2}'.format(str(e), str(data),
|
||||
str(traceback.format_exc())))
|
||||
|
||||
# def _check_wx_attendance_data(self, data, checkin_time, sch_checkin_time):
|
||||
# userid = data.get("userid", "")
|
||||
# # 区分当天的上班,下班,中午打卡,合并一个
|
||||
# checkin_time_now = checkin_time + timedelta(hours=8) if checkin_time else None
|
||||
# sch_checkin_time_now = sch_checkin_time + timedelta(hours=8) if sch_checkin_time else None
|
||||
# current_data = (sch_checkin_time + timedelta(hours=8)).strftime("%Y-%m-%d") if sch_checkin_time_now else checkin_time_now.strftime("%Y-%m-%d")
|
||||
# # 同步整理当天出勤数据
|
||||
# attendance_obj = self.env['hr.attendance'].search(
|
||||
# [("userid", "=", userid), ("current_data", "=", current_data)], limit=1)
|
||||
# attendance_obj.attendance_type = "wx_work"
|
||||
# checkin_type = data.get("checkin_type", "")
|
||||
# exception_type = data.get("exception_type", "")
|
||||
# if not attendance_obj:
|
||||
# res_user_obj = self.env['res.users'].search([("oauth_uid", "=", userid)], limit=1)
|
||||
# hr_employee_obj = self.env['hr.employee'].sudo().search([("user_id", "=", res_user_obj.id)], limit=1)
|
||||
# if not hr_employee_obj.default_planning_role_id:
|
||||
# attendance_obj = self.env['hr.attendance'].sudo().create({
|
||||
# 'employee_id': hr_employee_obj.id,
|
||||
# "userid": userid,
|
||||
# "current_data": current_data,
|
||||
# "attendance_type": "wx_work"
|
||||
# })
|
||||
# else:
|
||||
# current_datetime_start = datetime.combine(datetime.strptime(current_data, '%Y-%m-%d'), datetime.min.time())
|
||||
# current_datetime_end = datetime.combine(datetime.strptime(current_data, '%Y-%m-%d'), datetime.max.time())
|
||||
# planning_slot_id = self.env['planning.slot'].search(
|
||||
# [('resource_id', '=', hr_employee_obj.resource_id.id),
|
||||
# ('start_datetime', '>=', current_datetime_start),
|
||||
# ('start_datetime', '<=', current_datetime_end)])
|
||||
# if planning_slot_id:
|
||||
# attendance_obj = self.env['hr.attendance'].sudo().create({
|
||||
# 'employee_id': hr_employee_obj.id,
|
||||
# "userid": userid,
|
||||
# "current_data": current_data,
|
||||
# "shift_id": planning_slot_id.id,
|
||||
# "attendance_type": "wx_work"
|
||||
# })
|
||||
# if not hr_employee_obj.default_planning_role_id:
|
||||
# # 获取考勤日历的上班下班时间
|
||||
# min_hour_from = self.env['resource.calendar'].search([])[0].attendance_ids[0].hour_from
|
||||
# min_hour = int(min_hour_from)
|
||||
# min_minute = int(min_hour_from * 10 % min_hour_from)
|
||||
# max_hour_to = self.env['resource.calendar'].search([])[-1].attendance_ids[0].hour_to
|
||||
# max_hour = int(max_hour_to)
|
||||
# max_minute = int(max_hour_to * 10 % max_hour_to)
|
||||
# if attendance_obj.is_approval:
|
||||
# # 已经审批修复无需再次进行更新数据
|
||||
# return True
|
||||
# # 赋值企业微信打卡数据
|
||||
# will_datetime_start = checkin_time.replace(hour=min_hour, minute=min_minute)
|
||||
# will_datetime_end = checkin_time.replace(hour=max_hour, minute=max_minute)
|
||||
# if exception_type != "未打卡":
|
||||
# if checkin_time and checkin_type == "上班打卡" and exception_type != "未打卡" and not attendance_obj.check_in:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_in_time": sch_checkin_time,
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > will_datetime_start,
|
||||
# })
|
||||
# elif checkin_time and checkin_type == "下班打卡" and exception_type != "未打卡" and not attendance_obj.check_out:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_out_time": sch_checkin_time,
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": will_datetime_end > checkin_time,
|
||||
# })
|
||||
# elif attendance_obj.check_in and checkin_time and checkin_type == "上班打卡" and exception_type != "未打卡" and checkin_time < attendance_obj.check_in:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_in_time": sch_checkin_time,
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > will_datetime_start,
|
||||
# })
|
||||
# elif attendance_obj.check_out and checkin_time and checkin_type == "下班打卡" and exception_type != "未打卡" and checkin_time > attendance_obj.check_out:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_out_time": sch_checkin_time,
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": will_datetime_end > checkin_time,
|
||||
# })
|
||||
# elif checkin_time and exception_type != "未打卡" and not attendance_obj.check_in and not attendance_obj.check_out:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_in_time": sch_checkin_time,
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > will_datetime_start,
|
||||
# })
|
||||
# elif checkin_time and exception_type != "未打卡" and attendance_obj.check_in and not attendance_obj.check_out:
|
||||
# attendance_obj.sudo().write({
|
||||
# "sch_check_out_time": sch_checkin_time,
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": will_datetime_end > checkin_time,
|
||||
# })
|
||||
# elif attendance_obj.is_early_card or attendance_obj.is_late_card:
|
||||
# attendance_obj.sudo().write({"is_abnormal": True})
|
||||
# else:
|
||||
# attendance_obj.sudo().write({"is_no_card": True, "is_abnormal": True})
|
||||
# else:
|
||||
# current_data = datetime.strptime(current_data, '%Y-%m-%d')
|
||||
# # 获取当天的起始和结束时间
|
||||
# current_datetime_start = datetime.combine(current_data, datetime.min.time())
|
||||
# current_datetime_end = datetime.combine(current_data, datetime.max.time())
|
||||
# # 获取本人当天的班次
|
||||
# planning_id = self.env['planning.slot'].search([('resource_id', '=', hr_employee_obj.resource_id.id),
|
||||
# ('start_datetime', '>=', current_datetime_start),
|
||||
# ('start_datetime', '<=', current_datetime_end)])
|
||||
# if planning_id:
|
||||
# planning_start_time = planning_id.start_datetime + timedelta(hours=8)
|
||||
# planning_end_time = planning_id.end_datetime + timedelta(hours=8)
|
||||
# if planning_id.role_id.name == '保安部':
|
||||
# # {'白班': [['8:30', '9.30'], ['8:30', '9.30']]}white
|
||||
# # {'中班': [['8:30', '9.30'], ['8:30', '9.30']]}mid
|
||||
# # {'夜班': [['8:30', '9.30'], ['8:30', '9.30']]}night
|
||||
# # 白班上班区间
|
||||
# start_time = datetime.combine(current_data, time(6, 0)) + timedelta(hours=8)
|
||||
# end_time = datetime.combine(current_data, time(9, 0)) + timedelta(hours=8)
|
||||
# # 白班下班区间
|
||||
# start_time1 = datetime.combine(current_data, time(2, 0)) + timedelta(hours=8)
|
||||
# end_time1 = datetime.combine(current_data, time(4, 0)) + timedelta(hours=8)
|
||||
# # 中班上班区间
|
||||
# start_time2 = datetime.combine(current_data, time(14, 0)) + timedelta(hours=8)
|
||||
# end_time2 = datetime.combine(current_data, time(17, 0)) + timedelta(hours=8)
|
||||
# # 中班下班区间
|
||||
# start_time3 = datetime.combine(current_data, time(22, 0)) + timedelta(hours=8)
|
||||
# end_time3 = datetime.combine(current_data, time(1, 0)) + timedelta(hours=8)
|
||||
# # 夜班上班区间
|
||||
# start_time4 = datetime.combine(current_data, time(22, 0)) + timedelta(hours=8)
|
||||
# end_time4 = datetime.combine(current_data, time(1, 0)) + timedelta(hours=8)
|
||||
# # 夜班下班区间
|
||||
# start_time5 = datetime.combine(current_data, time(6, 0)) + timedelta(hours=8)
|
||||
# end_time5 = datetime.combine(current_data, time(9, 0)) + timedelta(hours=8)
|
||||
# if checkin_time:
|
||||
# planning_name = planning_id.template_id.planning_name
|
||||
# if start_time <= checkin_time <= end_time and planning_name == '白班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > planning_start_time
|
||||
# })
|
||||
# elif start_time1 <= checkin_time <= end_time1 and planning_name == '白班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": planning_end_time > checkin_time,
|
||||
# })
|
||||
# elif start_time2 <= checkin_time <= end_time2 and planning_name == '中班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > planning_start_time
|
||||
# })
|
||||
# elif start_time3 <= checkin_time <= end_time3 and planning_name == '中班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": planning_end_time > checkin_time,
|
||||
# })
|
||||
# elif start_time4 <= checkin_time <= end_time4 and planning_name == '夜班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_in": checkin_time,
|
||||
# "is_late_card": checkin_time > planning_start_time
|
||||
# })
|
||||
# elif start_time5 <= checkin_time <= end_time5 and planning_name == '夜班':
|
||||
# attendance_obj.sudo().write({
|
||||
# "check_out": checkin_time,
|
||||
# "is_early_card": planning_end_time > checkin_time,
|
||||
# })
|
||||
# elif attendance_obj.is_early_card or attendance_obj.is_late_card:
|
||||
# attendance_obj.sudo().write({"is_abnormal": True})
|
||||
# else:
|
||||
# attendance_obj.sudo().write({"is_no_card": True, "is_abnormal": True})
|
||||
# # elif planning_id.role_id.name == '工程部':
|
||||
# # # 白班和白值上班区间
|
||||
# # start_time = datetime.combine(current_data, time(7, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # end_time = datetime.combine(current_data, time(10, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白班和白值下班区间
|
||||
# # start_time1 = datetime.combine(current_data,
|
||||
# # time(16, 0)) + timedelta(hours=8)
|
||||
# # end_time1 = datetime.combine(current_data, time(19, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白值值班打卡区间
|
||||
# # start_time2 = datetime.combine(current_data,
|
||||
# # time(11, 30)) + timedelta(hours=8)
|
||||
# # end_time2 = datetime.combine(current_data, time(13, 30)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 中夜上班区间 中夜下班区间跟白班上班区间一样
|
||||
# # start_time3 = datetime.combine(current_data,
|
||||
# # time(13, 0)) + timedelta(hours=8)
|
||||
# # end_time3 = datetime.combine(current_data, time(16, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 中夜值班打卡区间
|
||||
# # start_time4 = datetime.combine(current_data,
|
||||
# # time(20, 0)) + timedelta(hours=8)
|
||||
# # end_time4 = datetime.combine(current_data, time(23, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # if planning_id:
|
||||
# # if checkin_time:
|
||||
# # if start_time <= checkin_time <= end_time and not attendance_obj.check_in and (
|
||||
# # planning_name in ['白班', '白值']):
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_in": checkin_time,
|
||||
# # "is_late_card": checkin_time > planning_start_time
|
||||
# # })
|
||||
# # elif end_time1 <= checkin_time <= start_time1 and not attendance_obj.check_out and (
|
||||
# # planning_name in ['白班', '白值']):
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_out": checkin_time,
|
||||
# # "is_early_card": planning_end_time > checkin_time,
|
||||
# # })
|
||||
# # elif start_time3 <= checkin_time <= end_time3 and not attendance_obj.check_in and planning_name == '中夜':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_in": checkin_time,
|
||||
# # "is_late_card": checkin_time > planning_start_time
|
||||
# # })
|
||||
# # elif start_time <= checkin_time <= end_time and not attendance_obj.check_out and planning_name == '中夜':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_out": checkin_time,
|
||||
# # "is_early_card": checkin_time > planning_start_time
|
||||
# # })
|
||||
# # elif planning_id.template_id.planning == '白值' and start_time2 <= checkin_time <= end_time2:
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "sch_check_out_time": sch_checkin_time,
|
||||
# # "noon_duty": checkin_time,
|
||||
# # })
|
||||
# # elif planning_id.template_id.planning == '中夜' and start_time4 <= checkin_time <= end_time4:
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "sch_check_out_time": sch_checkin_time,
|
||||
# # "night_duty": checkin_time,
|
||||
# # })
|
||||
# # # 异常情况处理,移到所有打卡逻辑之后
|
||||
# # if (attendance_obj.is_early_card or attendance_obj.is_late_card or
|
||||
# # (planning_id.template_id.planning == '白值' and not attendance_obj.noon_duty) or
|
||||
# # (planning_id.template_id.planning == '中夜' and not attendance_obj.night_duty)):
|
||||
# # attendance_obj.sudo().write({"is_abnormal": True})
|
||||
# # else:
|
||||
# # attendance_obj.sudo().write({"is_no_card": True, "is_abnormal": True})
|
||||
# # elif planning_id.role_id.name == '联安粮储':
|
||||
# # # 白班上班区间
|
||||
# # start_time = datetime.combine(current_data, time(7, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # end_time = datetime.combine(current_data, time(10, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白班下班区间
|
||||
# # start_time1 = datetime.combine(current_data,
|
||||
# # time(15, 0)) + timedelta(hours=8)
|
||||
# # end_time1 = datetime.combine(current_data, time(18, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白值上班
|
||||
# # start_time2 = datetime.combine(current_data, time(8, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # end_time2 = datetime.combine(current_data, time(10, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白值下班
|
||||
# # start_time4 = datetime.combine(current_data, time(4, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # end_time4 = datetime.combine(current_data, time(7, 0)) + timedelta(
|
||||
# # hours=8)
|
||||
# # # 白值打卡区间、
|
||||
# # start_time3 = datetime.combine(current_data,
|
||||
# # time(11, 30)) + timedelta(hours=8)
|
||||
# # end_time3 = datetime.combine(current_data, time(13, 30)) + timedelta(
|
||||
# # hours=8)
|
||||
# # if planning_id:
|
||||
# # if start_time <= checkin_time <= end_time and not attendance_obj.check_in and planning_name == '白班':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_in": checkin_time,
|
||||
# # "is_late_card": checkin_time > planning_start_time
|
||||
# # })
|
||||
# # elif start_time1 <= checkin_time <= end_time1 and not attendance_obj.check_out and planning_name == '白班':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_out": checkin_time,
|
||||
# # "is_early_card": planning_end_time > checkin_time,
|
||||
# # })
|
||||
# # elif start_time2 <= checkin_time <= end_time2 and not attendance_obj.check_in and planning_name == '白值':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_in": checkin_time,
|
||||
# # "is_late_card": checkin_time > planning_start_time,
|
||||
# # })
|
||||
# # elif start_time4 <= checkin_time <= end_time4 and not attendance_obj.check_out and planning_name == '白值':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "check_out": checkin_time,
|
||||
# # "is_early_card": planning_end_time > checkin_time,
|
||||
# # })
|
||||
# # elif start_time3 <= checkin_time <= end_time3 and planning_name == '白值':
|
||||
# # attendance_obj.sudo().write({
|
||||
# # "noon_duty": checkin_time,
|
||||
# # })
|
||||
# # if (attendance_obj.is_early_card or attendance_obj.is_late_card or
|
||||
# # (planning_id.template_id.planning == '白值班' and not attendance_obj.noon_duty)):
|
||||
# # attendance_obj.sudo().write({"is_abnormal": True})
|
||||
# # else:
|
||||
# # attendance_obj.sudo().write({"is_no_card": True, "is_abnormal": True})
|
||||
# # 进行关联
|
||||
# attendance_detail_obj.hr_attendance_id = attendance_obj.id
|
||||
# return True
|
||||
|
||||
def get_hr_attendance_time(self):
|
||||
"""
|
||||
获取企业微信打卡数据的核心逻辑
|
||||
|
||||
Reference in New Issue
Block a user