diff --git a/yuthon_hr_attendance/models/resource_calendar_leaves.py b/yuthon_hr_attendance/models/resource_calendar_leaves.py index 95f242423..c7264104d 100644 --- a/yuthon_hr_attendance/models/resource_calendar_leaves.py +++ b/yuthon_hr_attendance/models/resource_calendar_leaves.py @@ -2,8 +2,7 @@ from odoo import models, api, fields import requests import json -import datetime -from datetime import timedelta +from datetime import datetime, timedelta class ResourceCalendar(models.Model): @@ -17,9 +16,7 @@ class ResourceCalendar(models.Model): 通过百度日历接口获取法定节假日信息 :return: """ - self = self.sudo() # 获取系统管理员权限 - date_list = [] # 法定节假日 - date_list2 = [] # 法定工作日 + date_list = [] years = str(fields.Date.today().year) for i in range(1, 13): headers = {"Content-Type": "application/json;charset=UTF-8"} @@ -40,50 +37,39 @@ class ResourceCalendar(models.Model): for one in sort_month_list: if 'status' in one and one['status'] == '1': date = one['oDate'].split('T')[0] - date_obj = datetime.datetime.strptime(date, "%Y-%m-%d") - next_day = date_obj + datetime.timedelta(days=1) + date_obj = datetime.strptime(date, "%Y-%m-%d") + next_day = date_obj + timedelta(days=1) next_day_str = next_day.strftime("%Y-%m-%d") if 'festivalList' in one: - if one['festivalList'] in ['端午节', '中秋节', '国庆节,国际音乐日', '劳动节', '清明', - '春节', '元旦', '除夕']: - if one['festivalList'] == '国庆节,国际音乐日': - one['festivalList'] = '国庆节' - date_list.append([next_day_str, one['festivalList']]) - else: - date_list.append([next_day_str, '']) + for holiday in ['端午节', '中秋节', '国庆节', '劳动节', '清明', '春节', '元旦', '除夕']: + if holiday in one['festivalList']: + if '春节' in one['festivalList']: + one['festivalList'] = '春节' + if '国庆节' in one['festivalList']: + one['festivalList'] = '国庆节' + date_list.append([next_day_str, one['festivalList']]) + else: + date_list.append([next_day_str, '']) else: date_list.append([next_day_str, '']) - - if 'status' in one and one['status'] == '2': - date = one['oDate'].split('T')[0] - date_obj = datetime.datetime.strptime(date, "%Y-%m-%d") - next_day = date_obj + datetime.timedelta(days=1) - next_day_str = next_day.strftime("%Y-%m-%d") - date_list2.append(next_day_str) - new_list = [list(x) for x in set(tuple(x) for x in date_list)] new_list2 = sorted(new_list, key=lambda x: x[0]) - other_date_list = [] - for other in new_list2: - other_date_list.append(other[0]) - self.holiday_data_lines = other_date_list - q = 0 a = ['元旦', '春节', '清明', '劳动节', '端午节', '中秋节', '国庆节'] - new_list2[0][1] = '元旦' - for i in new_list2: - if i[1] == '': - if a[q] == '清明': - q = q + 1 - i[1] = a[q] + j = 0 + for i in range(len(new_list2)): + prev_date = datetime.strptime(new_list2[i - 1][0], '%Y-%m-%d') + curr_date = datetime.strptime(new_list2[i][0], '%Y-%m-%d') + if (curr_date - prev_date).days > 1: # 判断日期之间差大于1 + new_list2[i][1] = a[j + 1] + j = j + 1 else: - if a[q] != i[1]: - q = q + 1 + new_list2[i][1] = a[j] holidays_dic = {} for date, holiday in new_list2: if holiday not in holidays_dic: - holidays_dic[holiday] = [datetime.datetime.strptime(date, "%Y-%m-%d"), - datetime.datetime.strptime(date, "%Y-%m-%d")] - holidays_dic[holiday][1] = datetime.datetime.strptime(date, "%Y-%m-%d") + holidays_dic[holiday] = [datetime.strptime(date, "%Y-%m-%d"), + datetime.strptime(date, "%Y-%m-%d")] + holidays_dic[holiday][1] = datetime.strptime(date, "%Y-%m-%d") holiday_list = [] for holiday, time in holidays_dic.items(): holiday_values = { @@ -93,6 +79,7 @@ class ResourceCalendar(models.Model): } holiday_list.append((0, 0, holiday_values)) self.calendar_holiday_ids.unlink() + self.holiday_data_lines = holiday_list self.write({'calendar_holiday_ids': holiday_list})