91 lines
4.1 KiB
Python
91 lines
4.1 KiB
Python
import datetime
|
|
|
|
from odoo import fields, models, api
|
|
|
|
|
|
class YuthonContractReport(models.Model):
|
|
_inherit = 'property.lease.contract'
|
|
|
|
@api.model
|
|
def get_contract_info_report(self, params):
|
|
"""
|
|
生成合同信息报表
|
|
:param params: 筛选参数(keyword/date_start/date_end/company_id/manager_id等)
|
|
:return: 合同信息列表
|
|
"""
|
|
domain = []
|
|
if params.get("date_start"):
|
|
date_start = datetime.datetime.fromisoformat(params.get("date_start")).date()
|
|
domain.append(("actual_start_time", ">=", date_start))
|
|
if params.get("date_end"):
|
|
date_end = datetime.datetime.fromisoformat(params.get("date_end")).date()
|
|
domain.append(("actual_end_time", "<=", date_end))
|
|
|
|
if params.get('lessor_id'):
|
|
domain.append(('lessor_id', '=', params['lessor_id']))
|
|
if params.get("precinct_id"):
|
|
domain.append(("precinct_id", "=", params.get("precinct_id")))
|
|
|
|
contracts = self.search(domain, limit=1000)
|
|
report_data = []
|
|
for rec in contracts:
|
|
rent_free_month = rec.rent_free_period_month or 0
|
|
rent_free_days = rec.rent_free_period_days or 0
|
|
if rent_free_month > 0 and rent_free_days > 0:
|
|
rent_free_text = f"{rent_free_month}月{rent_free_days}天"
|
|
elif rent_free_month > 0:
|
|
rent_free_text = f"{rent_free_month}月"
|
|
elif rent_free_days > 0:
|
|
rent_free_text = f"{rent_free_days}天"
|
|
else:
|
|
rent_free_text = "0个月"
|
|
|
|
if rec.term_start_time and rec.term_end_time:
|
|
contract_tenure = f"{rec.term_start_time.strftime('%Y-%m-%d')} 至 {rec.term_end_time.strftime('%Y-%m-%d')}"
|
|
elif rec.term_start_time:
|
|
contract_tenure = f"{rec.term_start_time.strftime('%Y-%m-%d')} 至 未设置结束时间"
|
|
elif rec.term_end_time:
|
|
contract_tenure = f"未设置开始时间 至 {rec.term_end_time.strftime('%Y-%m-%d')}"
|
|
else:
|
|
contract_tenure = "未设置租期"
|
|
|
|
if rec.actual_start_time and rec.actual_end_time:
|
|
actual_tenure = f"{rec.actual_start_time.strftime('%Y-%m-%d')} 至 {rec.actual_end_time.strftime('%Y-%m-%d')}"
|
|
elif rec.actual_start_time:
|
|
actual_tenure = f"{rec.actual_start_time.strftime('%Y-%m-%d')} 至 未结束"
|
|
elif rec.actual_end_time:
|
|
actual_tenure = f"未设置实际开始时间 至 {rec.actual_end_time.strftime('%Y-%m-%d')}"
|
|
else:
|
|
actual_tenure = "未设置实际租期"
|
|
|
|
report_data.append({
|
|
"物业名称": {
|
|
'model': 'yuthon.property',
|
|
'id': rec.lease_ids[0].address_id.id,
|
|
'display_name': rec.property_name,
|
|
} if rec.lease_ids and rec.lease_ids[0].address_id else rec.property_name or "",
|
|
"承租方": {
|
|
'model': 'property.tenant.information',
|
|
'id': rec.lessee_id.id,
|
|
'display_name': rec.lessee_id.name,
|
|
} if rec.lessee_id else "",
|
|
"递增规律": rec.increment_percentage or "",
|
|
"免租期": rent_free_text,
|
|
"面积": f"{rec.total_area} ㎡" if rec.total_area else "0 ㎡",
|
|
"押金": rec.deposit or 0.0,
|
|
"租金": rec.rent or 0.0,
|
|
"未收": round(rec.not_received, 2),
|
|
"本月已收": rec.month_received,
|
|
"违约金": rec.percentage_damages or 0.0,
|
|
"实际租期": actual_tenure,
|
|
"合同租期": contract_tenure,
|
|
"所属公司": rec.lessor_id.name or "" if rec.lessor_id else "",
|
|
"负责人": {
|
|
'model': 'res.users',
|
|
'id': rec.admin_id.id,
|
|
'display_name': rec.admin_id.name,
|
|
} if rec.admin_id else " ",
|
|
"合同编号": rec.contract_code or ""
|
|
})
|
|
|
|
return report_data |