水电报表

This commit is contained in:
李鹏宇
2026-03-19 10:22:02 +08:00
parent a25d0df482
commit 73e01a365b
+36 -27
View File
@@ -24,19 +24,37 @@ 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()
# 获取水表数据
water_data = self.env['meter.water.line'].search([
('meter_date', '>=', start_date),
('meter_date', '<=', end_date),
('state', '=', 'reading')
# 通过 payout_date 在查询月内的应收账单,取出水费/电费对应的 lessee_id
water_receivables = 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_data = self.env['meter.archives.line'].search([
electric_receivables = 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 = {}
@@ -57,19 +75,14 @@ class HydropowerReport(models.Model):
'小计': 0.0
}
property_dict[key]['水费'] += water.receivables
# 期间结束 = last_meter - 1天(上次抄表日前一天)
# 期间 = last_meter 到 meter_date - 1天
if water.last_meter:
period_end = water.last_meter - timedelta(days=1)
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
# 期间开始 = 上一次抄表记录的 meter_date
prev = self.env['meter.water.line'].search([
('water_id', '=', water.water_id.id),
('meter_date', '<', water.last_meter),
], order='meter_date desc', limit=1)
period_start = prev.meter_date if prev else water.last_meter
if property_dict[key]['_water_last_meter'] is None or period_start < property_dict[key]['_water_last_meter']:
property_dict[key]['_water_last_meter'] = period_start
for electric in electric_data:
for property_id in electric.yuthon_property_ids:
@@ -87,18 +100,14 @@ class HydropowerReport(models.Model):
'小计': 0.0
}
property_dict[key]['电费'] += electric.receivables
# 期间结束 = last_meter - 1天。期间开始 = 上一次抄表记录的 meter_date
# 期间 = last_meter 到 meter_date - 1天
if electric.last_meter:
period_end = electric.last_meter - timedelta(days=1)
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
prev = self.env['meter.archives.line'].search([
('archives_id', '=', electric.archives_id.id),
('meter_date', '<', electric.last_meter),
], order='meter_date desc', limit=1)
period_start = prev.meter_date if prev else electric.last_meter
if property_dict[key]['_electric_last_meter'] is None or period_start < property_dict[key]['_electric_last_meter']:
property_dict[key]['_electric_last_meter'] = period_start
rows = []
total_water = 0.0