From 30b538f4d69f8766654f3d47de0b4bda5e8be9db Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Tue, 17 Jun 2025 18:13:19 +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 | 42 +++++++++++++++++++ yuthon_property/models/property_rent_list.py | 4 +- .../views/property_bank_statements_views.xml | 5 ++- .../views/property_rent_list_views.xml | 2 +- .../wizard/property_statements_wizard.py | 19 ++++++++- .../models/inherit_yuthon_property.py | 13 ++---- .../views/inherit_yuthon_property_views.xml | 5 +-- .../wizard/property_rental_wizard.py | 26 +++++++++--- 8 files changed, 91 insertions(+), 25 deletions(-) diff --git a/yuthon_property/models/property_bank_statements.py b/yuthon_property/models/property_bank_statements.py index 688939625..ab397540a 100644 --- a/yuthon_property/models/property_bank_statements.py +++ b/yuthon_property/models/property_bank_statements.py @@ -1,7 +1,11 @@ # -*- coding: utf-8 -*- from dateutil.relativedelta import relativedelta from odoo import models, fields, api, exceptions, _ +from odoo.exceptions import ValidationError, UserError from datetime import datetime, timedelta +import logging +from odoo.osv import expression +_logger = logging.getLogger(__name__) class PropertyBankStatements(models.Model): _name = 'property.bank.statements' @@ -11,6 +15,7 @@ class PropertyBankStatements(models.Model): company_id = fields.Many2one('yuthon.property.company', string="收款账户") sequence_number = fields.Char('顺序号') your_own_account = fields.Char('本方账号') + your_own_unit = fields.Char('账号单位') name_account = fields.Char('对方户名') bank_branch = fields.Char('对方开户机构') bank_number = fields.Char('对方行号') @@ -29,8 +34,45 @@ class PropertyBankStatements(models.Model): voucher_type = fields.Selection([('electronic_transfer', '电子转账凭证'), ('telegraphic_transfer', '电汇凭证')], string='凭证种类') remake = fields.Text('备注') registered = fields.Float('挂账') + company_select = fields.Selection([('jhtz', '天河投资'), ('thwg', '天河物管'), ('thcj', '天河城建')]) property_ids = fields.Many2many('yuthon.property', string='物业地址') bank_state = fields.Selection([('not_reconciled', '未对账'), ('reconciled', '已对账'), ('other', '其他')], string='状态', default='not_reconciled') + is_company = fields.Boolean(compute='_compute_is_company', search='_search_part_of_company') + + @api.depends_context('uid', 'company') + @api.depends('your_own_account') + def _compute_is_company(self): + user_companies = self.env['res.company'].browse(self.env.companies.ids) + user_company_names = set(user_companies.mapped('name')) + # 预定义账号映射关系 + account_mapping = { + '集团本部': ['天河投资', '天投城建'], + '天河物管': ['天河物管'] + } + for record in self: + # 默认不可见 + record.is_company = False + # 检查账号是否符合规则 + for company_name, allowed_accounts in account_mapping.items(): + if company_name in user_company_names: + if record.your_own_unit in allowed_accounts: + record.is_company = True + break + + def _search_part_of_company(self, operator, value): + if operator not in ('=', '!=') or not isinstance(value, bool): + raise UserError(_('操作不支持')) + user_companies = self.env['res.company'].browse(self.env.companies.ids) + company_names = user_companies.mapped('name') + visible_accounts = [] + if "集团本部" in company_names: + visible_accounts.extend(['天河投资', '天投城建']) + if "天河物管" in company_names: + visible_accounts.append('天河物管') + if not value: + operator = '!=' if operator == '=' else '=' + domain = [('your_own_unit', 'in', visible_accounts)] if operator == '=' and visible_accounts else [] + return domain or [('id', '=', 0)] def other(self): for rec in self: diff --git a/yuthon_property/models/property_rent_list.py b/yuthon_property/models/property_rent_list.py index 345e482af..b8177b498 100644 --- a/yuthon_property/models/property_rent_list.py +++ b/yuthon_property/models/property_rent_list.py @@ -44,8 +44,8 @@ class PropertyRentList(models.Model): vals['last_update_time'] = fields.Datetime.now() return super(PropertyRentList, self).write(vals) - def unlink(self): + def receivable_unlink(self): receivable_ids = self.env['property.accounts.receivable'].search([('lessee_id', '=', self.lessee_id.id)]) for receivable in receivable_ids: receivable.write({'receivable_log': f'当前登录人{self.env.user.name}于{fields.Datetime.now()}将物业为 {self.property_id.name} 的租金列表进行删除'}) - return super().unlink() + receivable.unlink() diff --git a/yuthon_property/views/property_bank_statements_views.xml b/yuthon_property/views/property_bank_statements_views.xml index 042e33161..cb7bac040 100644 --- a/yuthon_property/views/property_bank_statements_views.xml +++ b/yuthon_property/views/property_bank_statements_views.xml @@ -37,7 +37,8 @@ - + + @@ -52,6 +53,7 @@ + @@ -78,6 +80,7 @@ 银行流水 property.bank.statements tree + [('is_company', '=', True)] {'group_by': 'bank_state'} diff --git a/yuthon_property/views/property_rent_list_views.xml b/yuthon_property/views/property_rent_list_views.xml index 5dec4eb0d..c9416bf6f 100644 --- a/yuthon_property/views/property_rent_list_views.xml +++ b/yuthon_property/views/property_rent_list_views.xml @@ -19,7 +19,7 @@ -