添加功能
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user