From 8ecba36c8f0068eee07323052c77fb1006ab54d5 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: Tue, 14 Oct 2025 19:00:47 +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 | 33 ++- .../models/property_meter_water.py | 31 ++- ...contract_accounts_receivable_templates.xml | 235 +++++++++++++----- .../report/lease_contract_report.xml | 20 ++ .../views/property_lease_contract.xml | 12 +- .../wizard/property_rental_wizard.py | 20 +- 6 files changed, 249 insertions(+), 102 deletions(-) diff --git a/yuthon_property/models/property_meter_archives.py b/yuthon_property/models/property_meter_archives.py index cfb6b59de..36ceafc66 100644 --- a/yuthon_property/models/property_meter_archives.py +++ b/yuthon_property/models/property_meter_archives.py @@ -35,7 +35,6 @@ class PropertyMeterArchives(models.Model): archives_state = fields.Selection( [("stop", "停用"), ("use", "正常"), ("rent", "出租")], string="状态", - compute="_compute_archives_state", store=True, default="use", ) @@ -103,6 +102,28 @@ class PropertyMeterArchives(models.Model): else: record.lessee_id = False + @api.onchange("yuthon_property_ids") + def _onchange_property_ids(self): + for record in self: + selected_properties = record.yuthon_property_ids + meters_to_remove = self.env['yuthon.property.energy'].search([ + ('property_meter_archives_id', '=', record.id), + ('yuthon_property_id', 'not in', selected_properties.ids) + ]) + if meters_to_remove: + meters_to_remove.unlink() + + for property in selected_properties: + existing_meter = self.env['yuthon.property.energy'].search([ + ('property_meter_archives_id', '=', record.id), + ('yuthon_property_id', '=', property.id) + ], limit=1) + if not existing_meter: + self.env['yuthon.property.energy'].create({ + 'property_meter_archives_id': record.id, + 'yuthon_property_id': property.id, + }) + def open_record(self): return { "type": "ir.actions.act_window", @@ -111,14 +132,6 @@ class PropertyMeterArchives(models.Model): "view_mode": "form", } - @api.depends("lessee_id") - def _compute_archives_state(self): - for record in self: - if record.lessee_id: - record.archives_state = "rent" - else: - record.archives_state = "use" - def button_archives_state(self): archives_ids = self.env["property.meter.archives"].browse( self._context.get("active_ids", self._context.get("active_id")) @@ -238,7 +251,7 @@ class MeterArchivesLine(models.Model): current_read = fields.Float(string="本次读数", group_operator=None) unit_number = fields.Char(string="单元编号/用途") gauge_magnification = fields.Integer( - string="仪表倍率", readonly=True, default=1 + string="仪表倍率", default=1 ) last_reading_time = fields.Date(string="最后读数时间") receivables = fields.Float( diff --git a/yuthon_property/models/property_meter_water.py b/yuthon_property/models/property_meter_water.py index 885576e84..b16520e8c 100644 --- a/yuthon_property/models/property_meter_water.py +++ b/yuthon_property/models/property_meter_water.py @@ -41,7 +41,6 @@ class PropertyMeterWater(models.Model): water_state = fields.Selection( [("stop", "停用"), ("use", "使用"), ("rent", "出租")], string="状态", - compute="_compute_water_state", store=True, ) standards_id = fields.Many2one("yuthon.electricity.setting", string="标准") @@ -106,14 +105,6 @@ class PropertyMeterWater(models.Model): else: record.lessee_id = False - @api.depends("lessee_id") - def _compute_water_state(self): - for record in self: - if record.lessee_id: - record.water_state = "rent" - else: - record.water_state = "use" - def button_water_state(self): water_ids = self.env["property.meter.water"].browse( self._context.get("active_ids", self._context.get("active_id")) @@ -153,6 +144,26 @@ class PropertyMeterWater(models.Model): "context": {"default_water_ids": [(6, 0, active_ids)]}, } + @api.onchange("yuthon_property_ids") + def _onchange_property_ids(self): + for record in self: + selected_properties = record.yuthon_property_ids + meters_to_remove = self.env['yyuthon.property.water'].search([ + ('property_meter_water_id', '=', record.id), + ('yuthon_property_id', 'not in', selected_properties.ids) + ]) + if meters_to_remove: + meters_to_remove.unlink() + for property in selected_properties: + existing_meter = self.env['yuthon.property.water'].search([ + ('property_meter_water_id', '=', record.id), + ('yuthon_property_id', '=', property.id) + ], limit=1) + if not existing_meter: + self.env['yuthon.property.energy'].create({ + 'property_meter_archives_id': record.id, + 'yuthon_property_id': property.id, + }) class MeterWaterLine(models.Model): _name = "meter.water.line" @@ -190,7 +201,7 @@ class MeterWaterLine(models.Model): unit_number = fields.Char(string='单元编号/用途') unit = fields.Float(string='当月单价', group_operator=None) receivables = fields.Float(string="应收", store=True, group_operator=None, help="应收金额=本次用量*单价*(1+线损)") - gauge_magnification = fields.Integer(string='仪表倍率', readonly=True, default=1) + gauge_magnification = fields.Integer(string='仪表倍率', default=1) last_reading_time = fields.Date(string="最后读数时间") type = fields.Selection([("public", "公共"), ("fees", "收费")], string="类型") start_time = fields.Date(string="安装日期") diff --git a/yuthon_property_approval/report/contract_accounts_receivable_templates.xml b/yuthon_property_approval/report/contract_accounts_receivable_templates.xml index 52438d707..9e778f36a 100644 --- a/yuthon_property_approval/report/contract_accounts_receivable_templates.xml +++ b/yuthon_property_approval/report/contract_accounts_receivable_templates.xml @@ -1,80 +1,179 @@ + + + + + +