diff --git a/yuthon_hr_attendance/models/go_approval.py b/yuthon_hr_attendance/models/go_approval.py index bea068b3d..5aa35efb2 100644 --- a/yuthon_hr_attendance/models/go_approval.py +++ b/yuthon_hr_attendance/models/go_approval.py @@ -31,8 +31,8 @@ class GoApprovals(models.Model): date_start = fields.Datetime(string="开始时间", default=fields.Datetime.now) date_end = fields.Datetime(string="结束时间", default=fields.Datetime.now) meal = fields.Selection([('yes', '是'), ('no', '否')], string="误餐费", default=None) - days = fields.Integer(string="天数") - hours = fields.Integer(string="小时") + days = fields.Float(string="天数") + hours = fields.Float(string="小时") urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', default='normal') active = fields.Boolean('Active', default=True, tracking=True) diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index 5e2851eb3..d350afef3 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -1297,13 +1297,16 @@ class HrAttendance(models.Model): def action_update_attendance(self): pass #todo 待过 - def update_attendance(self, employee, current_date): current_date_str = fields.Date.to_string(current_date) + current_date_start = datetime.combine(current_date, datetime.min.time()) # 当天 00:00:00 datetime类型 + current_date_end = datetime.combine(current_date, datetime.max.time()) # 当天 23:59:59 datetime类型 + + # ====================== 1. 请假审批 ====================== leave_domain = [ ('employee_id', '=', employee.id), - ('date_from', '<=', fields.Datetime.to_string(datetime.combine(current_date, datetime.max.time()))), - ('date_to', '>=', fields.Datetime.to_string(datetime.combine(current_date, datetime.min.time()))), + ('date_from', '<=', fields.Datetime.to_string(current_date_end)), + ('date_to', '>=', fields.Datetime.to_string(current_date_start)), ('state', '=', 'validate') ] leave_records = self.env['hr.leave'].search(leave_domain) @@ -1325,22 +1328,33 @@ class HrAttendance(models.Model): 'is_abnormal': False, 'absenteeism_card': False }) - else: - self.write({ - 'workflow_id': False, - 'is_workflow': False, - }) + return + # ====================== 2. 外出审批(按天 + 按小时,全部统一datetime) ====================== go_approval_domain = [ ('employee_ids', 'in', employee.id), - ('start_date', '<=', current_date_str), - ('end_date', '>=', current_date_str), ('work_end', '=', True), ] - go_approval_record = self.env['go.approval'].search(go_approval_domain, limit=1) - if go_approval_record: + go_approval_records = self.env['go.approval'].search(go_approval_domain) + + match_record = False + for go in go_approval_records: + # 按天匹配 + if go.start_date and go.end_date: + if go.start_date <= current_date <= go.end_date: + match_record = go + break + # 按小时匹配 + if go.date_start and go.date_end: + go_start = fields.Datetime.from_string(go.date_start) + go_end = fields.Datetime.from_string(go.date_end) + if go_start <= current_date_end and go_end >= current_date_start: + match_record = go + break + + if match_record: workflow = self.env['soong.workflow.record'].search([ - ('code', '=', go_approval_record.code) + ('code', '=', match_record.code) ], limit=1) if workflow and workflow.approve_state == 'end': self.write({ @@ -1352,7 +1366,11 @@ class HrAttendance(models.Model): 'is_abnormal': False, 'absenteeism_card': False }) - + else: + self.write({ + 'workflow_id': False, + 'is_workflow': False, + }) class card_remind_form(models.Model): _name = 'card.remind.form'