From ec3f95533483f6ba21a0ba13ba050c7e00e1461a 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: Fri, 28 Nov 2025 18:31:12 +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_lease_contract.py | 76 ++++++++++++++++++- .../views/property_lease_contract.xml | 2 +- .../wizard/property_reconciliation_wizard.py | 2 +- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py index e079c9d9d..8311dc52d 100644 --- a/yuthon_property_approval/models/property_lease_contract.py +++ b/yuthon_property_approval/models/property_lease_contract.py @@ -310,6 +310,69 @@ class PropertyLeaseContract(models.Model): issues_result = fields.Html(string="会议结果") related_issues_id = fields.Many2one('issue.library', string="关联议题") + # 催费通知单字段 + fees_date = fields.Date(string="催费日期", compute='_compute_fees_all', store=True) + fees_rent = fields.Float(string="租金", compute='_compute_fees_all', store=True) + fees_water = fields.Float(string="水费", compute='_compute_fees_all', store=True) + fees_electricity = fields.Float(string="电费", compute='_compute_fees_all', store=True) + fees_manage = fields.Float(string="管理费", compute='_compute_fees_all', store=True) + fees_expenses = fields.Float(string="杂项费", compute='_compute_fees_all', store=True) + fees_bollards = fields.Float(string="灯箱费", compute='_compute_fees_all', store=True) + betweene_tubes = fields.Float(string="管子间", compute='_compute_fees_all', store=True) + fees_total = fields.Float(string="合计", compute='_compute_fees_all', store=True) + + @api.depends() + def _compute_fees_all(self): + receivable_obj = self.env['property.accounts.receivable'] + fee_mapping = { + 'fees_rent': ['租金'], + 'fees_water': ['水费'], + 'fees_electricity': ['电费'], + 'fees_manage': ['管理费'], + 'fees_bollards': ['广告灯箱费'], + 'betweene_tubes': ['管子间'], + 'fees_expenses': ['人工费/日光灯款/代垫用料费'] + } + + for contract in self: + receivable_records = receivable_obj.search([ + ('submitted', '!=', 0), + ('contract_id', '=', contract.id) + ]) + contract.fees_rent = 0.0 + contract.fees_water = 0.0 + contract.fees_electricity = 0.0 + contract.fees_manage = 0.0 + contract.fees_expenses = 0.0 + contract.fees_bollards = 0.0 + contract.betweene_tubes = 0.0 + contract.fees_date = False + contract.fees_total = 0.0 + + if not receivable_records: + continue + all_due_dates = [] + + for field_name, target_names in fee_mapping.items(): + filtered_recs = receivable_records.filtered( + lambda r: r.management_type_id and r.management_type_id.name in target_names + ) + if filtered_recs: + setattr(contract, field_name, sum(filtered_recs.mapped('submitted'))) + valid_dates = [d for d in filtered_recs.mapped('due_date') if d] + all_due_dates.extend(valid_dates) + + if all_due_dates: + contract.fees_date = max(all_due_dates) + + contract.fees_total = ( + contract.fees_rent + contract.fees_water + contract.fees_electricity + + contract.fees_manage + contract.fees_expenses + contract.fees_bollards + + contract.betweene_tubes + ) + + + @api.depends('contract_code', 'version') def _compute_display_name(self): for rec in self: @@ -1967,11 +2030,15 @@ class PropertyLeaseContract(models.Model): if len(lease_contract_ids) > 1: raise UserError("只能单个操作合同续租") for original_contract in lease_contract_ids: + record_id = self.env['property.lease.contract'].search([('contract_id', '=', original_contract)]) + if record_id: + raise UserError("该合同已续租,请勿重复操作") new_contract = original_contract.with_context(skip_contract_code_check=True).copy() new_term_start = original_contract.term_end_time + timedelta( days=1) if original_contract.term_end_time else False new_contract.write({ 'admin_id': original_contract.admin_id, + 'code': self.env['ir.sequence'].next_by_code('property_lease_contract_code'), 'contract_code': None, 'work_end': False, 'lease_term_year': None, @@ -2037,10 +2104,17 @@ class PropertyLeaseContract(models.Model): main_version = version_str.split('.')[0] new_main_version = int(main_version) + 1 new_version = f"V{new_main_version}.0" + record_id = self.env['property.lease.contract'].search([('contract_code', '=', lease_contract_ids.contract_code), + ('version', '=', new_version) + ]) + if record_id: + raise UserError("该合同已有补充协议审批,请勿重复操作") new_contract = lease_contract_ids.with_context(skip_contract_code_check=True).copy() new_contract.write({ 'version': new_version, 'condition': 'new', + 'code': self.env['ir.sequence'].next_by_code('property_lease_contract_code'), + 'self_users_ids': [(6, 0, [self.env.user.id])], 'contact_state': 'to', }) water_lines = self.env['property.water.fee.line'].search([ @@ -2079,7 +2153,7 @@ class PropertyLeaseContract(models.Model): line.copy({'lease_id': new_contract.id}) return { 'type': 'ir.actions.act_window', - 'name': '续期合同', + 'name': '合同补充', 'res_model': 'property.lease.contract', 'view_mode': 'form', 'res_id': new_contract.id, diff --git a/yuthon_property_approval/views/property_lease_contract.xml b/yuthon_property_approval/views/property_lease_contract.xml index 740114dca..fe8328dc8 100644 --- a/yuthon_property_approval/views/property_lease_contract.xml +++ b/yuthon_property_approval/views/property_lease_contract.xml @@ -376,7 +376,7 @@