添加功能

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