添加功能

This commit is contained in:
李鹏宇
2026-03-03 18:00:27 +08:00
parent a0a0267254
commit 8c01bfa458
2 changed files with 88 additions and 67 deletions
@@ -5,6 +5,7 @@ from odoo import models, fields, api, exceptions, _
from datetime import datetime, timedelta, date
from dateutil.relativedelta import relativedelta
from odoo.exceptions import UserError
import calendar
class PropertyLeaseRenewal(models.Model):
@@ -44,7 +45,7 @@ class PropertyLeaseRenewal(models.Model):
contact = fields.Char(string='联系人')
phone = fields.Char(string='联系电话')
card = fields.Char(string='身份证号')
effective_date = fields.Date(string='生效日期')
effective_date = fields.Date(string='生效日期', required=True)
entity_type = fields.Selection([('person', '个人'), ('company', '企业')], string='承租方类型')
reason = fields.Text(string='变更原因')
fee = fields.Float(string='变更费用')
@@ -84,50 +85,59 @@ class PropertyLeaseRenewal(models.Model):
def end_approval(self):
for rec in self:
if rec.renewal_type == 'lease':
rec.hide = True
origin_contract = rec.contract_id
original_lessee_id = origin_contract.lessee_id.id if origin_contract.lessee_id else False
version_str = origin_contract.version.lstrip('V')
main_version = version_str.split('.')[0]
new_main_version = int(main_version) + 1
new_version = f"V{new_main_version}.0"
# 删除原承租方的物业合同信息
contract_to_unlink = origin_contract.lessee_id.property_contract_ids.filtered(
lambda line: line.lease_contract_id.id == rec.contract_id.id
)
if contract_to_unlink:
contract_to_unlink.unlink()
# 新增新承租方的物业合同信息
property_contract_list = []
origin_contract.write({
'version': new_version,
'lessee_id': rec.new_lessee_id.id
})
if original_lessee_id and origin_contract.id and rec.effective_date:
origin_contract.is_lessee = True
self.env['lessee.alteration.line'].create({
contract_actual_end = origin_contract.actual_end_time if origin_contract else None
effective_date = fields.Date.to_date(rec.effective_date)
last_day = calendar.monthrange(effective_date.year, effective_date.month)[1]
month_end_date = date(effective_date.year, effective_date.month, last_day)
contract_actual_end_date = fields.Date.to_date(contract_actual_end) if contract_actual_end else None
if not contract_actual_end_date or contract_actual_end_date >= month_end_date:
rec.hide = True
origin_contract = rec.contract_id
original_lessee_id = origin_contract.lessee_id.id if origin_contract.lessee_id else False
version_str = origin_contract.version.lstrip('V')
main_version = version_str.split('.')[0]
new_main_version = int(main_version) + 1
new_version = f"V{new_main_version}.0"
# 删除原承租方的物业合同信息
contract_to_unlink = origin_contract.lessee_id.property_contract_ids.filtered(
lambda line: line.lease_contract_id.id == rec.contract_id.id
)
if contract_to_unlink:
contract_to_unlink.unlink()
# 新增新承租方的物业合同信息
property_contract_list = []
if original_lessee_id and origin_contract.id and rec.effective_date and origin_contract.contact_state == 'ing':
origin_contract.write({
'version': new_version,
'lessee_id': rec.new_lessee_id.id
})
origin_contract.is_lessee = True
self.env['lessee.alteration.line'].create({
'contract_id': origin_contract.id,
'lessee_id': original_lessee_id,
'start_date': origin_contract.actual_start_time,
'end_date': rec.effective_date - relativedelta(days=1),
})
origin_contract._compute_contract_count()
property_contract_list.append([0, 0, {
'tenant_id': rec.new_lessee_id.id,
'lease_contract_id': rec.contract_id.id,
'rent': rec.contract_id.rent,
}])
rec.new_lessee_id.write({'property_contract_ids': property_contract_list})
# 新增一条更名应收账单
management_type_id = rec.env["yuthon.management.type"].search([('name', '=', '更名费')])
if not management_type_id:
management_type_id = rec.env["yuthon.management.type"].create({'name': '更名费'})
self.env['property.accounts.receivable'].create({
'contract_id': origin_contract.id,
'lessee_id': original_lessee_id,
'start_date': origin_contract.actual_start_time,
'end_date': rec.effective_date - relativedelta(days=1),
'original_amount': rec.fee,
'management_type_id': management_type_id.id,
'due_date': rec.effective_date,
})
origin_contract._compute_contract_count()
property_contract_list.append([0, 0, {
'tenant_id': rec.new_lessee_id.id,
'lease_contract_id': rec.contract_id.id,
'rent': rec.contract_id.rent,
}])
rec.new_lessee_id.write({'property_contract_ids': property_contract_list})
# 新增一条更名应收账单
management_type_id = rec.env["yuthon.management.type"].search([('name', '=', '更名费')])
if not management_type_id:
management_type_id = rec.env["yuthon.management.type"].create({'name': '更名费'})
self.env['property.accounts.receivable'].create({
'contract_id': origin_contract.id,
'original_amount': rec.fee,
'management_type_id': management_type_id.id,
'due_date': rec.effective_date,
})
else:
rec.contract_id.write({
'actual_end_time': rec.early_quitting_date
@@ -4,6 +4,8 @@
from odoo import models, fields, api, exceptions, _
from datetime import timedelta
from dateutil.relativedelta import relativedelta
import calendar
from datetime import datetime, date
class PropertyManagement(models.Model):
@@ -93,34 +95,43 @@ class PropertyManagement(models.Model):
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
original_lessor_id = lease_contract_ids.lessor_id.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)
])
lease_contract_ids.lessor_id = record.company_id.id
lease_contract_ids.is_lessor = True
lease_contract_ids.version = new_version
lease_contract_ids.users_id = record.user_id
if record_id:
contract_actual_end = lease_contract.lease_id.actual_end_time
start_time = record.start_time
if not contract_actual_end or not start_time:
continue
lease_contract_ids._compute_name()
lease_contract_ids._update_wkf_records()
if (original_lessor_id and lease_contract_ids.actual_start_time and record.start_time):
self.env['lessor.alteration.line'].create({
'contract_id': lease_contract_ids.id,
'lessor_id': original_lessor_id,
'start_date': lease_contract_ids.actual_start_time,
'end_date': record.start_time - relativedelta(days=1)
})
start_date = fields.Date.to_date(start_time)
last_day = calendar.monthrange(start_date.year, start_date.month)[1]
month_end_date = date(start_date.year, start_date.month, last_day)
contract_actual_end_date = fields.Date.to_date(contract_actual_end) if contract_actual_end else None
if not contract_actual_end_date or contract_actual_end_date >= month_end_date:
lease_contract_ids = lease_contract.lease_id
original_lessor_id = lease_contract_ids.lessor_id.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)
])
lease_contract_ids.lessor_id = record.company_id.id
lease_contract_ids.is_lessor = True
lease_contract_ids.version = new_version
lease_contract_ids.users_id = record.user_id
if record_id:
continue
lease_contract_ids._compute_name()
lease_contract_ids._update_wkf_records()
if (original_lessor_id and lease_contract_ids.actual_start_time and record.start_time):
self.env['lessor.alteration.line'].create({
'contract_id': lease_contract_ids.id,
'lessor_id': original_lessor_id,
'start_date': lease_contract_ids.actual_start_time,
'end_date': record.start_time - relativedelta(days=1)
})
existing_info = self.env['manage.information.line'].search([
('yuthon_property_id', '=', target_property_id),