!9914 Merge branch 'dev' of <a href="https://gitee.com/jinan-pengyusen-data/gzth">https://gitee.com/jinan-pengyusen-data/gzth</a> into dev_wang
Merge pull request !9914 from 李鹏宇/dev_wang
This commit is contained in:
@@ -24,110 +24,65 @@ class HydropowerReport(models.Model):
|
||||
start_date = datetime.fromisoformat(date_start).date() if date_start else date.today().replace(day=1)
|
||||
end_date = datetime.fromisoformat(date_end).date() if date_end else date.today()
|
||||
|
||||
# 通过 payout_date 在查询月内的应收账单,取出水费/电费对应的 lessee_id
|
||||
water_receivables = self.env['property.accounts.receivable'].search([
|
||||
# 直接以 property.accounts.receivable 为数据源
|
||||
# 按收款日期(payout_date)过滤居水费/电费记录
|
||||
water_records = self.env['property.accounts.receivable'].search([
|
||||
('payout_date', '>=', start_date),
|
||||
('payout_date', '<=', end_date),
|
||||
('management_type_id.name', '=', '水费'),
|
||||
('is_invalid', '=', False),
|
||||
])
|
||||
water_lessee_ids = water_receivables.mapped('contract_id.lessee_id').ids
|
||||
|
||||
electric_receivables = self.env['property.accounts.receivable'].search([
|
||||
electric_records = self.env['property.accounts.receivable'].search([
|
||||
('payout_date', '>=', start_date),
|
||||
('payout_date', '<=', end_date),
|
||||
('management_type_id.name', '=', '电费'),
|
||||
('is_invalid', '=', False),
|
||||
])
|
||||
electric_lessee_ids = electric_receivables.mapped('contract_id.lessee_id').ids
|
||||
|
||||
# 用 lessee_id 查抄表记录(不限 meter_date,取该租户最近一条 reading 记录)
|
||||
water_data = self.env['meter.water.line'].search([
|
||||
('lessee_id', 'in', water_lessee_ids),
|
||||
('meter_date', '>=', start_date),
|
||||
('meter_date', '<=', end_date),
|
||||
('state', '=', 'reading')
|
||||
]) if water_lessee_ids else self.env['meter.water.line']
|
||||
|
||||
electric_data = self.env['meter.archives.line'].search([
|
||||
('lessee_id', 'in', electric_lessee_ids),
|
||||
('meter_date', '>=', start_date),
|
||||
('meter_date', '<=', end_date),
|
||||
('state', '=', 'reading')
|
||||
]) if electric_lessee_ids else self.env['meter.archives.line']
|
||||
|
||||
# 整合数据
|
||||
# 整合数据,按物业(合同关联的第一个物业)聊合
|
||||
property_dict = {}
|
||||
|
||||
for water in water_data:
|
||||
for property_id in water.yuthon_property_ids:
|
||||
key = property_id.name
|
||||
if key not in property_dict:
|
||||
property_dict[key] = {
|
||||
'房屋名称': property_id.name,
|
||||
'业户名称': property_id.lessee_id.name if property_id.lessee_id else '',
|
||||
'水费': 0.0,
|
||||
'_water_last_meter': None,
|
||||
'_water_meter_date': None,
|
||||
'电费': 0.0,
|
||||
'_electric_last_meter': None,
|
||||
'_electric_meter_date': None,
|
||||
'小计': 0.0
|
||||
}
|
||||
property_dict[key]['水费'] += water.receivables
|
||||
# 期间 = last_meter 到 meter_date - 1天
|
||||
if water.last_meter:
|
||||
if property_dict[key]['_water_last_meter'] is None or water.last_meter < property_dict[key]['_water_last_meter']:
|
||||
property_dict[key]['_water_last_meter'] = water.last_meter
|
||||
if water.meter_date:
|
||||
period_end = water.meter_date - timedelta(days=1)
|
||||
if property_dict[key]['_water_meter_date'] is None or period_end > property_dict[key]['_water_meter_date']:
|
||||
property_dict[key]['_water_meter_date'] = period_end
|
||||
for rec in water_records:
|
||||
prop_name = rec.property_name or ''
|
||||
lessee_name = rec.lessee_id.name if rec.lessee_id else (rec.contract_id.lessee_id.name if rec.contract_id else '')
|
||||
key = prop_name or str(rec.id)
|
||||
if key not in property_dict:
|
||||
property_dict[key] = {
|
||||
'房屋名称': prop_name,
|
||||
'业户名称': lessee_name,
|
||||
'水费': 0.0,
|
||||
'水费期间': rec.charging_range or '',
|
||||
'电费': 0.0,
|
||||
'电费期间': '',
|
||||
'小计': 0.0
|
||||
}
|
||||
property_dict[key]['水费'] += rec.original_amount or 0.0
|
||||
if rec.charging_range:
|
||||
property_dict[key]['水费期间'] = rec.charging_range
|
||||
|
||||
for electric in electric_data:
|
||||
for property_id in electric.yuthon_property_ids:
|
||||
key = property_id.name
|
||||
if key not in property_dict:
|
||||
property_dict[key] = {
|
||||
'房屋名称': property_id.name,
|
||||
'业户名称': property_id.lessee_id.name if property_id.lessee_id else '',
|
||||
'水费': 0.0,
|
||||
'_water_last_meter': None,
|
||||
'_water_meter_date': None,
|
||||
'电费': 0.0,
|
||||
'_electric_last_meter': None,
|
||||
'_electric_meter_date': None,
|
||||
'小计': 0.0
|
||||
}
|
||||
property_dict[key]['电费'] += electric.receivables
|
||||
# 期间 = last_meter 到 meter_date - 1天
|
||||
if electric.last_meter:
|
||||
if property_dict[key]['_electric_last_meter'] is None or electric.last_meter < property_dict[key]['_electric_last_meter']:
|
||||
property_dict[key]['_electric_last_meter'] = electric.last_meter
|
||||
if electric.meter_date:
|
||||
period_end = electric.meter_date - timedelta(days=1)
|
||||
if property_dict[key]['_electric_meter_date'] is None or period_end > property_dict[key]['_electric_meter_date']:
|
||||
property_dict[key]['_electric_meter_date'] = period_end
|
||||
for rec in electric_records:
|
||||
prop_name = rec.property_name or ''
|
||||
lessee_name = rec.lessee_id.name if rec.lessee_id else (rec.contract_id.lessee_id.name if rec.contract_id else '')
|
||||
key = prop_name or str(rec.id)
|
||||
if key not in property_dict:
|
||||
property_dict[key] = {
|
||||
'房屋名称': prop_name,
|
||||
'业户名称': lessee_name,
|
||||
'水费': 0.0,
|
||||
'水费期间': '',
|
||||
'电费': 0.0,
|
||||
'电费期间': rec.charging_range or '',
|
||||
'小计': 0.0
|
||||
}
|
||||
property_dict[key]['电费'] += rec.original_amount or 0.0
|
||||
if rec.charging_range:
|
||||
property_dict[key]['电费期间'] = rec.charging_range
|
||||
|
||||
rows = []
|
||||
total_water = 0.0
|
||||
total_electric = 0.0
|
||||
for idx, (key, value) in enumerate(property_dict.items(), start=1):
|
||||
# 拼装水费期间:最早 last_meter 到 最晚 meter_date
|
||||
w_last = value.pop('_water_last_meter')
|
||||
w_curr = value.pop('_water_meter_date')
|
||||
if w_last and w_curr:
|
||||
value['水费期间'] = f"{w_last}到{w_curr}"
|
||||
else:
|
||||
value['水费期间'] = ''
|
||||
# 拼装电费期间
|
||||
e_last = value.pop('_electric_last_meter')
|
||||
e_curr = value.pop('_electric_meter_date')
|
||||
if e_last and e_curr:
|
||||
value['电费期间'] = f"{e_last}到{e_curr}"
|
||||
else:
|
||||
value['电费期间'] = ''
|
||||
|
||||
value['小计'] = round(value['水费'] + value['电费'], 2)
|
||||
value['水费'] = round(value['水费'], 2)
|
||||
value['电费'] = round(value['电费'], 2)
|
||||
|
||||
Reference in New Issue
Block a user