水电报表
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user