diff --git a/yuthon_hr_attendance/controllers/applet_attendance.py b/yuthon_hr_attendance/controllers/applet_attendance.py index 82e6257cd..c680bd2b9 100644 --- a/yuthon_hr_attendance/controllers/applet_attendance.py +++ b/yuthon_hr_attendance/controllers/applet_attendance.py @@ -1,6 +1,6 @@ from odoo.http import Controller, request, route from odoo import models, fields, api, http, SUPERUSER_ID, _ -from datetime import datetime +from datetime import datetime,date import logging from geopy.distance import geodesic from datetime import timedelta @@ -48,10 +48,10 @@ class AppletAttendance(Controller): } """ _logger.info("----------------/yuthon/att/today---------接口收到响应-------------------------------") - current_data = fields.Date.today() + current_date = fields.Date.today() user_id = request.env(user=SUPERUSER_ID)["res.users"].search([('id', '=', int(kw['user_id']))]) employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('name', '=', user_id.name)]) - attendance_id = request.env(user=SUPERUSER_ID)["hr.attendance"].search([('employee_id', '=', employee_id.id), ('current_data', '=', current_data)]) + attendance_id = request.env(user=SUPERUSER_ID)["hr.attendance"].search([('employee_id', '=', employee_id.id), ('current_data', '=', current_date)]) check_in = attendance_id.check_in + timedelta(hours=8) if attendance_id.check_in else '' check_out = attendance_id.check_out + timedelta(hours=8) if attendance_id.check_out else '' check_in_start = attendance_id.shift_id.template_id.check_in_start @@ -86,10 +86,14 @@ class AppletAttendance(Controller): message = '可以打卡' state = 'yes' break + if self.is_workday(current_date): + attendance_id_class = f"{attendance_id.shift_name}{start_time_str}-{end_time_str}" + else: + attendance_id_class = f"{attendance_id.shift_name}/休息" data = { 'location': self_address['formatted_address'], 'user_id': user_id.id, - 'class': f"{attendance_id.shift_name}{start_time_str}-{end_time_str}", + 'class': f"{attendance_id_class}", 'state_result': state_result, 'check_in': check_in_html, 'check_in_status': check_in_status, @@ -102,6 +106,41 @@ class AppletAttendance(Controller): _logger.info(f"人员{employee_id.name}地址{self_address['formatted_address']}__________") return json.dumps(return_data) + def is_workday(self, date): + """判断指定日期是否为工作日(考虑法定节假日和调休) + 如果是工作日返回True + 如果是休息日返回False + """ + calendar_leaves = request.env['resource.calendar.leaves'].sudo().search([("calendar_id", "=", "行政考勤工作日")]) + holidays_set = set() + shift_days_set = set() + for leave in calendar_leaves: + if leave.holidays: + holidays_set.update(leave.holidays.split(',')) + if leave.alternate_rest_day: + holidays_set.update(leave.alternate_rest_day.split(',')) + if leave.shift_replacement_day: + shift_days_set.update(leave.shift_replacement_day.split(',')) + + date_str = date.strftime('%m月%d日') + date_str = self.remove_leading_zero(date_str) + is_weekend = date.weekday() in [5, 6] + + if date_str in holidays_set: + return False + elif date_str in shift_days_set: + return True + else: + return not is_weekend + + def remove_leading_zero(self, date_str): + month, day = date_str.split('月') + month = month.lstrip('0') + day = day.rstrip('日') + day = day.lstrip('0') + return f'{month}月{day}日' + + def is_within_radius_geopy(self, lat1, lon1, lat2, lon2, radius_km): """ 使用geopy库判断是否在范围内 diff --git a/yuthon_hr_employee_approval/models/yuthon_transfer_approval.py b/yuthon_hr_employee_approval/models/yuthon_transfer_approval.py index e758af965..aa5a03111 100644 --- a/yuthon_hr_employee_approval/models/yuthon_transfer_approval.py +++ b/yuthon_hr_employee_approval/models/yuthon_transfer_approval.py @@ -13,7 +13,7 @@ class YutransferApproval(models.Model): code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_leaving_approval_code')) users_id = fields.Many2one('res.users', string="录入人", default=lambda self: self.env.user.id) - department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门") + department_id = fields.Many2one(related='employee_id.department_id', string="部门") main_post = fields.Many2one("hr.job", string="主岗") duties = fields.Char(string="职务") job_type_id = fields.Many2one('hr.job.type', string="岗位类别") diff --git a/yuthon_hr_employee_approval/views/yuthon_reward_approval_views.xml b/yuthon_hr_employee_approval/views/yuthon_reward_approval_views.xml index faaac4f6c..8b53e2369 100644 --- a/yuthon_hr_employee_approval/views/yuthon_reward_approval_views.xml +++ b/yuthon_hr_employee_approval/views/yuthon_reward_approval_views.xml @@ -52,7 +52,7 @@ - + @@ -67,7 +67,7 @@ - +