From 35a8b68485f83d1aabdc8272609be926331eea8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?=
<9664676+pengyuthon@user.noreply.gitee.com>
Date: Sat, 20 Sep 2025 19:40:35 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../models/property_meter_archives.py | 7 ++
.../models/property_meter_water.py | 17 ++---
.../views/property_meter_archives_views.xml | 22 +++++-
.../views/property_meter_water_views.xml | 29 ++++++--
.../wizard/electric_water_wizard.py | 73 ++++++++++++++++---
5 files changed, 119 insertions(+), 29 deletions(-)
diff --git a/yuthon_property/models/property_meter_archives.py b/yuthon_property/models/property_meter_archives.py
index 8958a43b0..05933639d 100644
--- a/yuthon_property/models/property_meter_archives.py
+++ b/yuthon_property/models/property_meter_archives.py
@@ -233,6 +233,13 @@ class MeterArchivesLine(models.Model):
# 当前记录没有抄表日期,无法计算上次用量
line.last_dosage = 0.0
+ def update_date(self):
+ meter_ids = self.env["meter.archives.line"].browse(
+ self._context.get('active_ids', self._context.get('active_id')))
+ for record in meter_ids:
+ if record.last_meter:
+ record.meter_date = record.last_meter
+
class PropertyElectricReading(models.Model):
_name = 'property.electric.reading'
current_meter = fields.Float(string='本次用量', tracking=True)
diff --git a/yuthon_property/models/property_meter_water.py b/yuthon_property/models/property_meter_water.py
index a000f0b31..7aadacd38 100644
--- a/yuthon_property/models/property_meter_water.py
+++ b/yuthon_property/models/property_meter_water.py
@@ -58,16 +58,6 @@ class PropertyMeterWater(models.Model):
if record.line_loss and record.current_meter and record.unit:
record.receivables = record.current_meter * record.unit * (1 + record.line_loss) * record.gauge_magnification
- def format_update(self):
- insurances_ids = self.env["property.meter.water"].browse(
- self._context.get('active_ids', self._context.get('active_id')))
- for record in insurances_ids:
- value = record.unit_number
- if isinstance(value, str) and value.replace('.', '', 1).isdigit():
- unit_number = int(float(value))
- record.write({'unit_number': unit_number})
- record.write({'maximum_count': 99999,
- })
@api.depends('lessee_id')
def _compute_water_state(self):
@@ -221,6 +211,13 @@ class MeterWaterLine(models.Model):
# 当前记录没有抄表日期,无法计算上次用量
line.last_dosage = 0.0
+ def update_date(self):
+ meter_ids = self.env["meter.water.line"].browse(
+ self._context.get('active_ids', self._context.get('active_id')))
+ for record in meter_ids:
+ if record.last_meter:
+ record.meter_date = record.last_meter
+
class PropertyWaterReading(models.Model):
_name = 'property.water.reading'
diff --git a/yuthon_property/views/property_meter_archives_views.xml b/yuthon_property/views/property_meter_archives_views.xml
index b3947dfbb..b5d09feb3 100644
--- a/yuthon_property/views/property_meter_archives_views.xml
+++ b/yuthon_property/views/property_meter_archives_views.xml
@@ -108,6 +108,9 @@
+
@@ -142,6 +145,21 @@
+
+ meter.archives.line.search
+ meter.archives.line
+
+
+
+
+
+
+
+
+
+
+
+
电表库
property.meter.archives
@@ -153,7 +171,9 @@
电表任务
meter.archives.line
- tree
+ tree,search
+ {'search_default_group_by_meter_date_month': True, 'search_default_group_by_name': True}
+
diff --git a/yuthon_property/views/property_meter_water_views.xml b/yuthon_property/views/property_meter_water_views.xml
index a43f22fc4..d8df4af61 100644
--- a/yuthon_property/views/property_meter_water_views.xml
+++ b/yuthon_property/views/property_meter_water_views.xml
@@ -112,6 +112,9 @@
+
@@ -143,6 +146,21 @@
+
+ meter.water.line.search
+ meter.water.line
+
+
+
+
+
+
+
+
+
+
+
+
水表库
property.meter.water
@@ -154,7 +172,9 @@
水表任务
meter.water.line
- tree
+ tree,search
+ {'search_default_group_by_meter_date_month': True, 'search_default_group_by_name': True}
+
@@ -172,11 +192,4 @@
code
action = model.update_meter()
-
- 格式更新
-
-
- code
- action = model.format_update()
-
\ No newline at end of file
diff --git a/yuthon_property/wizard/electric_water_wizard.py b/yuthon_property/wizard/electric_water_wizard.py
index a0d8bf9dd..20b6a9466 100644
--- a/yuthon_property/wizard/electric_water_wizard.py
+++ b/yuthon_property/wizard/electric_water_wizard.py
@@ -11,18 +11,71 @@ class ElectricWaterWizard(models.TransientModel):
water_ids = fields.Many2many('property.meter.water', string='水表库')
def confirm(self):
+ self.ensure_one()
+ if not self.push_date:
+ raise ValidationError('请选择推送日期')
+ push_year = self.push_date.year
+ push_month = self.push_date.month
+
+ # 处理电表推送
if self.meter_ids:
for meter in self.meter_ids:
- meter.write({'meter_date': self.push_date,
- 'is_push': True
- })
- meter.last_dosage += meter.current_meter
- meter.current_meter = 0
+ # 查找是否存在该推送日期的明细行
+ existing_line = meter.line_ids.filtered(
+ lambda l: l.meter_date and
+ l.meter_date.year == push_year and
+ l.meter_date.month == push_month
+ )
+ if not existing_line:
+ meter.line_ids.create({
+ 'archives_id': meter.id,
+ 'name': meter.name,
+ 'epitope_values': meter.epitope_values,
+ 'lessee_id': meter.lessee_id.id,
+ 'yuthon_property_ids': [(6, 0, meter.yuthon_property_ids.ids)],
+ 'last_read': meter.last_read,
+ 'current_read': meter.current_read,
+ 'last_dosage': meter.last_dosage,
+ 'current_meter': 0,
+ 'unit_number': meter.unit_number,
+ 'gauge_magnification': meter.gauge_magnification,
+ 'last_reading_time': self.push_date,
+ 'meter_date': self.push_date,
+ 'type': meter.type,
+ 'start_time': meter.start_time,
+ 'end_time': meter.end_time,
+ 'archives_state': meter.archives_state,
+ 'maximum_count': meter.maximum_count,
+ 'is_push': True
+ })
+
+ # 处理水表推送
if self.water_ids:
for water in self.water_ids:
- water.write({'meter_date': self.push_date,
- 'is_push': True
- })
- water.last_dosage += water.current_meter
- water.current_meter = 0
+ # 查找是否存在该推送日期的明细行
+ existing_line = water.line_ids.filtered(
+ lambda l: l.last_meter == self.push_date
+ )
+
+ if not existing_line:
+ water.line_ids.create({
+ 'water_id': water.id,
+ 'name': water.name,
+ 'epitope_values': water.epitope_values,
+ 'lessee_id': water.lessee_id.id,
+ 'yuthon_property_ids': [(6, 0, water.yuthon_property_ids.ids)],
+ 'last_read': water.last_read,
+ 'current_read': water.current_read,
+ 'last_dosage': water.last_dosage,
+ 'current_meter': 0,
+ 'unit_number': water.unit_number,
+ 'gauge_magnification': water.gauge_magnification,
+ 'meter_date': self.push_date,
+ 'type': water.type,
+ 'start_time': water.start_time,
+ 'end_time': water.end_time,
+ 'water_state': water.water_state,
+ 'maximum_count': water.maximum_count,
+ 'employee_ids': [(6, 0, water.employee_ids.ids)],
+ })