From 11baf7218fefb5f31b5b19730ecf49b2764a4701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Mon, 2 Mar 2026 19:29:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=8E=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/property_accounts_receivable.py | 13 +++++++++++++ .../current_receivable_property_fee_report.py | 5 +++-- .../models/current_receivable_rent_report.py | 5 +++-- yuthon_report/models/receivable_report.py | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/yuthon_property/models/property_accounts_receivable.py b/yuthon_property/models/property_accounts_receivable.py index df45bc916..729767ffc 100644 --- a/yuthon_property/models/property_accounts_receivable.py +++ b/yuthon_property/models/property_accounts_receivable.py @@ -54,6 +54,19 @@ class PropertyAccountsReceivable(models.Model): bank_id = fields.Many2one('property.bank.statements', string='流水记录') receivable_log = fields.Text(string='应收日志') + @api.onchange('contract_id') + def _onchange_contract_id(self): + """选择合同时自动填充税率""" + if self.contract_id and self.contract_id.tax_rate: + self.tax = float(self.contract_id.tax_rate.name) + + def action_update_tax_from_contract(self): + """批量更新税率:从合同获取正确税率""" + for rec in self: + if rec.contract_id and rec.contract_id.tax_rate: + rec.tax = float(rec.contract_id.tax_rate.name) + return True + def update_is_invalid(self): record_ids = self.env["property.accounts.receivable"].browse( self._context.get("active_ids", self._context.get("active_id")) diff --git a/yuthon_report/models/current_receivable_property_fee_report.py b/yuthon_report/models/current_receivable_property_fee_report.py index 624f4e48d..6dbe31589 100644 --- a/yuthon_report/models/current_receivable_property_fee_report.py +++ b/yuthon_report/models/current_receivable_property_fee_report.py @@ -78,7 +78,8 @@ class CurrentReceivablePropertyFeeReport(models.Model): for idx, rec in enumerate(receivables, start=1): amt = rec.original_amount or 0.0 - tax_rate = rec.tax or 0.0 + # 从合同获取税率 + tax_rate = float(rec.contract_id.tax_rate.name) * 100 if rec.contract_id and rec.contract_id.tax_rate else 0.0 amt_nt = amt / (1 + tax_rate / 100) if tax_rate else amt total_amount += amt total_amount_nt += amt_nt @@ -99,7 +100,7 @@ class CurrentReceivablePropertyFeeReport(models.Model): 'display_name': rec.lessee_id.name, } if rec.lessee_id else "", "金额(含税)": round(amt, 2), - "税率": tax_rate, + "税率": f"{tax_rate:.1f}%" if tax_rate else "0.0%", "金额(不含税)": round(amt_nt, 2), "物业名称": rec.property_name or "", "产权证": rec.title_deed or "", diff --git a/yuthon_report/models/current_receivable_rent_report.py b/yuthon_report/models/current_receivable_rent_report.py index 9dad81e8f..71b6d2ff0 100644 --- a/yuthon_report/models/current_receivable_rent_report.py +++ b/yuthon_report/models/current_receivable_rent_report.py @@ -63,7 +63,8 @@ class CurrentReceivableRentReport(models.Model): discount = rec.discount_amount or 0.0 # 实际应收 = 原始金额 - 减免金额 actual_amt = amt - discount - tax_rate = rec.tax or 0.0 + # 从合同获取税率 + tax_rate = float(rec.contract_id.tax_rate.name) * 100 if rec.contract_id and rec.contract_id.tax_rate else 0.0 actual_amt_nt = actual_amt / (1 + tax_rate / 100) if tax_rate else actual_amt # 统计每个管理类型的合计 @@ -85,7 +86,7 @@ class CurrentReceivableRentReport(models.Model): "原始金额": round(amt, 2), "减免金额": round(discount, 2) if discount else "", "实际金额(含税)": round(actual_amt, 2), - "税率": tax_rate, + "税率": f"{tax_rate:.1f}%" if tax_rate else "0.0%", "实际金额(不含税)": round(actual_amt_nt, 2), "物业名称": rec.property_name or "", "产权证": rec.title_deed or "", diff --git a/yuthon_report/models/receivable_report.py b/yuthon_report/models/receivable_report.py index f5aaf8d0c..b8792c727 100644 --- a/yuthon_report/models/receivable_report.py +++ b/yuthon_report/models/receivable_report.py @@ -78,7 +78,7 @@ class YuthonProperty(models.Model): 'display_name': rec.contract_id.contract_code, } if rec.contract_id else "", "发票类型": invoice_type_map.get(rec.invoice_type, ""), - "税率": f"{rec.tax}%" if rec.tax else "0%" + "税率": f"{float(rec.contract_id.tax_rate.name) * 100:.1f}%" if rec.contract_id and rec.contract_id.tax_rate else "0.0%" }) summary_stats = []