Files
gzth/yuthon_report/models/yuthon_contract_report.py
2026-05-13 16:41:48 +08:00

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