Files
gzth/yuthon_report/models/rentable_area_report.py
T
2026-03-02 11:40:42 +08:00

78 lines
2.4 KiB
Python

from odoo import api, models
class RentableAreaReport(models.Model):
_inherit = 'yuthon.property'
@api.model
def get_rentable_area_report(self, params):
"""
可租面积报表:
- 金额字段用 rent_area
- 物业状态取 property_state 映射
- 空置时长取 vacant_duration
"""
domain = []
keyword = params.get("keyword")
if keyword:
domain += [
'|', '|',
('name', 'ilike', keyword),
('title_deed', 'ilike', keyword),
('code', 'ilike', keyword),
]
condition = params.get('condition')
partner_id = params.get('partner_id')
company_id = params.get('company_id')
if condition:
domain.append(('tenure_type', '=', condition))
if partner_id:
domain.append(('precinct_id', '=', partner_id))
if company_id:
domain.append(('company_id', '=', company_id))
properties = self.search(domain, limit=3000)
state_map = {
'on_rent': '已租',
'vacant': '空置',
}
rows = []
total_area = 0.0
for idx, prop in enumerate(properties, start=1):
area = prop.rent_area or 0.0
total_area += area
rows.append({
"序号": idx,
"物业ID": prop.id,
"物业名称": prop.name or "",
"面积": round(area, 4),
"物业状态": state_map.get(prop.property_state, ""),
"空置时长": prop.vacant_duration or 0,
"管理员": {
'model': 'res.users',
'id': prop.admin_id.id,
'display_name': prop.admin_id.name,
} if prop.admin_id else "",
"所属公司": prop.company_id.referred if prop.company_id and hasattr(prop.company_id, 'referred') else prop.company_id.name if prop.company_id else "",
})
return {
"rows": rows,
"summary": {
"序号": False,
"物业ID": False,
"物业名称": "合计",
"面积": round(total_area, 4),
"物业状态": False,
"空置时长": False,
"管理员": False,
"所属公司": False,
}
}