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)], + })