diff --git a/yuthon_hr_attendance/models/overtime_approval.py b/yuthon_hr_attendance/models/overtime_approval.py index b89fea4e5..e88f03ecb 100644 --- a/yuthon_hr_attendance/models/overtime_approval.py +++ b/yuthon_hr_attendance/models/overtime_approval.py @@ -31,6 +31,7 @@ class OvertimeApprovals(models.Model): duration = fields.Float(string="时长", compute='_compute_duration', store=True, help="如果时长大于8则按8小时算") overtime_hours = fields.Float(string="本月加班时长") start_time = fields.Datetime(string="开始时间") + attendance_id = fields.Many2one('hr.attendance', string="当天考勤") start_week = fields.Char(string="星期", compute='_compute_weekday') end_time = fields.Datetime(string="结束时间") end_week = fields.Char(string="星期", compute='_compute_weekday') @@ -52,12 +53,10 @@ class OvertimeApprovals(models.Model): def open_record(self): if self.start_time and self.end_time and self.employee_ids: start_date = fields.Date.to_date(self.start_time) - end_date = fields.Date.to_date(self.end_time) # 构建 domain 查询条件 domain = [ ('employee_id.user_id', 'in', self.employee_ids.user_id.ids), - ('current_data', '>=', fields.Datetime.to_datetime(start_date)), - ('current_data', '<=', fields.Datetime.to_datetime(end_date)), + ('current_data', '=', fields.Datetime.to_datetime(start_date)), ] return { 'name': '考勤记录', @@ -67,6 +66,16 @@ class OvertimeApprovals(models.Model): 'domain': domain, } + @api.onchange('users_id', 'start_time') + def _onchange_att(self): + if self.users_id and self.start_time: + attendance = self.env['hr.attendance'].search([ + ('employee_id.user_id', '=', self.users_id.id), + ('current_data', '=', self.start_time.date()), + ]) + if attendance: + self.attendance_id = attendance.id + @api.depends('users_id') def _compute_is_thwg(self): for rec in self: @@ -74,13 +83,18 @@ class OvertimeApprovals(models.Model): rec.is_thwg = rec.users_id.company_id.name == '天河物管' - @api.depends('start_time', 'end_time') + @api.depends('start_time', 'end_time', 'attendance_id') def _compute_duration(self): for rec in self: rec.duration = 0.0 if not (rec.start_time and rec.end_time): continue - total_seconds = (rec.end_time - rec.start_time).total_seconds() + if rec.attendance_id.shift_id: + rel_end_time = rec.attendance_id.shift_id.end_datetime + timedelta(hours=8) + else: + rel_end_time = rec.start_time.replace(hour=18, minute=0, second=0, microsecond=0) + end_time = rec.end_time + timedelta(hours=8) + total_seconds = (end_time - rel_end_time).total_seconds() original_hours = total_seconds / 3600 # 加班起步一小时 if original_hours < 1.0: @@ -136,37 +150,6 @@ class OvertimeApprovals(models.Model): 'approval_date': fields.Datetime.now(), }) - @api.onchange('overtime_department_id') - def onchange_overtime_users(self): - users_data_list = [] - default_datetime = datetime.combine(datetime.now().date(), time(hour=17, minute=30)) - timedelta(hours=8), - users_list = [] - for user in self.overtime_user_ids: - users_list.append(user.user_id.id) - for over in self: - if not over.overtime_department_id: - if over.users_id.id not in users_list: - users_data_list.append((0, 0, { - 'overtime_approval_id': over.id, - 'user_id': over.users_id.id, - 'start_time': default_datetime[0], - 'type_overtime': 'work', - 'compensation_mode': 'salary', - })) - else: - employee_ids = self.env['hr.employee'].search( - [('department_id', '=', self.overtime_department_id.id)]) - for user in employee_ids: - if user.user_id.id not in users_list: - users_data_list.append((0, 0, { - 'overtime_approval_id': over.id, - 'user_id': user.user_id.id, - 'start_time': default_datetime[0], - 'type_overtime': 'work', - 'compensation_mode': 'salary', - })) - over.overtime_user_ids = users_data_list - @api.onchange('company_id') def onchange_company(self): for record in self: diff --git a/yuthon_hr_attendance/views/overtime_approval.xml b/yuthon_hr_attendance/views/overtime_approval.xml index 9061347e9..4aa85c303 100644 --- a/yuthon_hr_attendance/views/overtime_approval.xml +++ b/yuthon_hr_attendance/views/overtime_approval.xml @@ -88,6 +88,7 @@ + diff --git a/yuthon_property_approval/wizard/property_rental_wizard.py b/yuthon_property_approval/wizard/property_rental_wizard.py index 9196c0b16..297aea419 100644 --- a/yuthon_property_approval/wizard/property_rental_wizard.py +++ b/yuthon_property_approval/wizard/property_rental_wizard.py @@ -196,7 +196,7 @@ class PropertyRentalWizard(models.Model): date_str = f"{date_field_year_month}-{start_day}" start_date = datetime.strptime(date_str, "%Y-%m-%d") # 当期应收日期 - if start_year_month <= date_field_year_month < end_year_month: + if start_year_month <= date_field_year_month <= end_year_month: self.create_rent_list(record, rent_id, rent_amount, start_date, multiplier) self.create_management_list(record, start_date) @@ -219,6 +219,7 @@ class PropertyRentalWizard(models.Model): records = self.env['property.lease.contract'].search([ ('actual_start_time', '<=', last_day), ('actual_end_time', '>=', first_day), + ('contract_code', '=', '租(2022)N01号') ]) for record in records: date_data = {