diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py index 5349efa3f..79df907f2 100644 --- a/yuthon_hr_attendance/models/hr_attendance.py +++ b/yuthon_hr_attendance/models/hr_attendance.py @@ -342,21 +342,16 @@ class HrAttendance(models.Model): continue url = f'https://phone.thtzjt.com/phone/AttendanceSummary/{fields.date.today().year}/{fields.date.today().month}/{emp.user_id.id}' - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att_ok', + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id=emp.wecom_userid, title=f'【{title}】', description='考勤异常请尽快处理', url=url, btntxt="查看详情") - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att_ok', + self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att', user_id='18562027762', title='【考勤异常提醒】', description='考勤异常请尽快处理', url=url, btntxt="查看详情") - self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att_ok', - user_id='78', - title=f'【{title}】', - description=f'单独给叶发的测试{emp.name}后续关掉', - url=url, btntxt="查看详情") def missing_card_judgment(self): today = fields.Date.today() diff --git a/yuthon_property_approval/models/property_management.py b/yuthon_property_approval/models/property_management.py index f0e3b1eb0..7f6e3af28 100644 --- a/yuthon_property_approval/models/property_management.py +++ b/yuthon_property_approval/models/property_management.py @@ -3,6 +3,7 @@ from odoo import models, fields, api, exceptions, _ from datetime import timedelta +from dateutil.relativedelta import relativedelta class PropertyManagement(models.Model): @@ -79,14 +80,88 @@ class PropertyManagement(models.Model): def approval_end(self): for record in self: - for line in record.management_line2_ids: + for manage_line in record.management_line2_ids: # 更新信息行的结束日期 - if line.information_line_id: - line.information_line_id.write({'end_date': fields.Date.today()}) + if manage_line.information_line_id: + manage_line.information_line_id.write({'end_date': fields.Date.today()}) # 直接从关联的上一条记录获取值(如果存在) - prev_info = line.information_line_id + prev_info = manage_line.information_line_id target_start_time = record.start_time - target_property_id = line.property_id.id + target_property_id = manage_line.property_id.id + + if prev_info.company_id.id != record.company_id.id: + lease_contract = self.env['property.lease.contract.line'].search( + [('address_id', '=', manage_line.property_id.id), + ('lease_id', '!=', False), + ('lease_id.contact_state', '=', 'ing'), + ], limit=1) + if lease_contract: + lease_contract_ids = lease_contract.lease_id + version_str = lease_contract_ids.version.lstrip('V') + main_version = version_str.split('.')[0] + new_main_version = int(main_version) + 1 + new_version = f"V{new_main_version}.0" + record_id = self.env['property.lease.contract'].search( + [('contract_code', '=', lease_contract_ids.contract_code), + ('version', '=', new_version) + ]) + if record_id: + continue + new_contract = lease_contract_ids.with_context(skip_contract_code_check=True).copy() + new_contract.write({ + 'work_end': False, + 'version': new_version, + 'condition': 'new', + 'code': self.env['ir.sequence'].next_by_code('property_lease_contract_code'), + 'self_users_ids': [(6, 0, [self.env.user.id])], + 'contact_state': 'to', + }) + new_contract.lessor_id = record.company_id.id + new_contract.users_id = record.user_id + lease_contract.lease_id.contact_state = 'terminate' + water_lines = self.env['property.water.fee.line'].search([ + ('contract_id', '=', lease_contract.lease_id.id) + ]) + for line in water_lines: + line.copy({'contract_id': new_contract.id}) + # 复制电费明细行 + electric_lines = self.env['property.electric.fee.line'].search([ + ('contract_id', '=', lease_contract.lease_id.id) + ]) + for line in electric_lines: + line.copy({'contract_id': new_contract.id}) + # 复制物业管理费明细行 + manage_lines = self.env['property.management.breakdown.line'].search([ + ('breakdown_id', '=', lease_contract.lease_id.id) + ]) + for line in manage_lines: + line.copy({'breakdown_id': new_contract.id}) + # 复制其他费用明细行 + other_lines = self.env['property.other.fee.line'].search([ + ('other_id', '=', lease_contract.lease_id.id) + ]) + for line in other_lines: + line.copy({'other_id': new_contract.id}) + # 复制子合同明细 + subset_lines = self.env['property.subset.contract'].search([ + ('subset_id', '=', lease_contract.lease_id.id) + ]) + for line in subset_lines: + line.copy({'subset_id': new_contract.id}) + lease_lines = self.env['property.lease.contract.line'].search([ + ('lease_id', '=', lease_contract.lease_id.id) + ]) + for line in lease_lines: + line.copy({'lease_id': new_contract.id}) + lease_contract.lease_id.term_end_time = record.start_time - relativedelta(days=1) + lease_contract.lease_id.actual_end_time = record.start_time - relativedelta(days=1) + new_contract.term_start_time = record.start_time + new_contract.actual_start_time = record.start_time + new_contract._compute_name() + new_contract._onchange_contract_sort() + new_contract._update_wkf_records() + new_contract._onchange_action_generate_details() + existing_info = self.env['manage.information.line'].search([ ('yuthon_property_id', '=', target_property_id), ('start_time', '=', target_start_time) @@ -97,7 +172,7 @@ class PropertyManagement(models.Model): # 创建新的信息行记录,从prev_info获取缺失的值 info_line_vals = { - 'yuthon_property_id': line.property_id.id, + 'yuthon_property_id': manage_line.property_id.id, 'purpose_id': record.purpose_id.id if record.purpose_id else prev_info.purpose_id.id, 'precinct_id': record.precinct_id.id if record.precinct_id else prev_info.precinct_id.id, 'management_area': prev_info.management_area if prev_info else 0.0, @@ -110,8 +185,7 @@ class PropertyManagement(models.Model): prev_info.end_date = record.start_time - timedelta(days=1) # 创建新记录 self.env['manage.information.line'].create(info_line_vals) - line.property_id.compute_information_fields() - + manage_line.property_id.compute_information_fields() record.write({'is_line': True}) def put_property_management(self):