78 lines
2.4 KiB
Python
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,
|
|
}
|
|
}
|
|
|