From a220de85b926b9f0826875868ec33533445ce541 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: Thu, 18 Jun 2026 19:07:18 +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_bank_statements.py | 41 +++++++++++++++++-- .../views/property_bank_statements_views.xml | 8 ++-- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/yuthon_property/models/property_bank_statements.py b/yuthon_property/models/property_bank_statements.py index e16b757fc..c1238f551 100644 --- a/yuthon_property/models/property_bank_statements.py +++ b/yuthon_property/models/property_bank_statements.py @@ -2,7 +2,7 @@ from dateutil.relativedelta import relativedelta from odoo import models, fields, api, exceptions, _ from odoo.exceptions import ValidationError, UserError -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date import logging from odoo.osv import expression _logger = logging.getLogger(__name__) @@ -230,14 +230,47 @@ class ReceivableModifyLine(models.Model): original_amount = fields.Float(related='bank_id.original_amount', string='流水金额', store=False) payout_date = fields.Date(related='receivable_id.payout_date', string='最终收款日期') no_amount = fields.Float(compute="_compute_no_amount", string='未对') - bank_state = fields.Selection(related='bank_id.bank_state', string='状态', store=False) - receivable_id = fields.Many2one('property.accounts.receivable', string='合同编号') + is_reconciliation = fields.Boolean(related='receivable_id.is_reconciliation', string='已对') + receivable_id = fields.Many2one('property.accounts.receivable', string='应收账单id') contract_id = fields.Many2one('property.lease.contract', string='关联租赁合同', compute='_compute_contract_id') management_type_id = fields.Many2one('yuthon.management.type', related='receivable_id.management_type_id', string='应收类型', store=True) due_date = fields.Date(related='receivable_id.due_date', string='应收开始', store=True) due_date_end = fields.Date(related='receivable_id.due_date_end', string='应收结束', store=True) property_name = fields.Text(string='物业名称', compute='_compute_property_name', store=False, search='_search_property_name') - delivered1 = fields.Float(related='receivable_id.original_amount', string='当期金额', store=False) + delivered1 = fields.Float(string='当期金额', compute='_compute_delivered1') + + @api.depends('receivable_id', 'receivable_id.original_amount', + 'receivable_id.management_type_id', 'amount', 'reconciliation_date') + def _compute_delivered1(self): + """按 receivable_id 分组,收款日期升序,逐行累减计算当期金额。 + 仅租金类型生效,非租金取 original_amount。 + """ + for rec in self: + if not rec.receivable_id: + rec.delivered1 = 0 + continue + + if rec.receivable_id.management_type_id.name != '租金': + rec.delivered1 = rec.receivable_id.original_amount + continue + + all_lines = self.search([('receivable_id', '=', rec.receivable_id.id)]) + sorted_lines = all_lines.sorted( + key=lambda l: ( + 0 if l.reconciliation_date else 1, + l.reconciliation_date or date.max, + l.id, + ) + ) + + cumsum = 0.0 + for line in sorted_lines: + if line.id == rec.id: + remaining = rec.receivable_id.original_amount - cumsum + rec.delivered1 = rec.receivable_id.original_amount if remaining <= 0 else remaining + break + cumsum += line.amount + remake = fields.Text(related='receivable_id.remark', string='备注', store=False) # lessee_id = fields.Many2one( # "property.tenant.information", diff --git a/yuthon_property/views/property_bank_statements_views.xml b/yuthon_property/views/property_bank_statements_views.xml index 20f3ec8b0..a786edda2 100644 --- a/yuthon_property/views/property_bank_statements_views.xml +++ b/yuthon_property/views/property_bank_statements_views.xml @@ -122,16 +122,17 @@ - + + - + - + @@ -179,7 +180,6 @@ -