[IMP] base, account: bank accounts management
Class ResPartnerBank modified to: - Add field 'allow_out_payment', true iff account can be recipient of out payments (False by default for new accounts except when created from res.partner) - Enable chatter tracking for base fields - Remove barely used/useful view view_company_partner_bank_form closes odoo/odoo#94801 See: odoo/enterprise#29916 Task: 2856231 Related: odoo/upgrade#3637 Signed-off-by: Olivier Colson (oco) <oco@odoo.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import base64
|
||||
from collections import defaultdict
|
||||
|
||||
import werkzeug
|
||||
import werkzeug.exceptions
|
||||
@@ -9,12 +10,22 @@ from odoo.tools.image import image_data_uri
|
||||
|
||||
|
||||
class ResPartnerBank(models.Model):
|
||||
_inherit = 'res.partner.bank'
|
||||
_name = 'res.partner.bank'
|
||||
_inherit = ['res.partner.bank', 'mail.thread', 'mail.activity.mixin']
|
||||
|
||||
journal_id = fields.One2many(
|
||||
'account.journal', 'bank_account_id', domain=[('type', '=', 'bank')], string='Account Journal', readonly=True,
|
||||
help="The accounting journal corresponding to this bank account.")
|
||||
|
||||
# Add tracking to the base fields
|
||||
bank_id = fields.Many2one(tracking=True)
|
||||
active = fields.Boolean(tracking=True)
|
||||
acc_number = fields.Char(tracking=True)
|
||||
acc_holder_name = fields.Char(tracking=True)
|
||||
partner_id = fields.Many2one(tracking=True)
|
||||
allow_out_payment = fields.Boolean(tracking=True)
|
||||
currency_id = fields.Many2one(tracking=True)
|
||||
|
||||
@api.constrains('journal_id')
|
||||
def _check_journal_id(self):
|
||||
for bank in self:
|
||||
@@ -158,3 +169,48 @@ class ResPartnerBank(models.Model):
|
||||
so that it can be reported to the user.
|
||||
"""
|
||||
return None
|
||||
|
||||
def create(self, vals_list):
|
||||
# EXTENDS base res.partner.bank
|
||||
res = super().create(vals_list)
|
||||
for account in res:
|
||||
msg = _("Bank Account %s created", account._get_html_link(title=f"#{account.id}"))
|
||||
account.partner_id._message_log(body=msg)
|
||||
return res
|
||||
|
||||
def write(self, vals):
|
||||
# EXTENDS base res.partner.bank
|
||||
# Track and log changes to partner_id, heavily inspired from account_move
|
||||
account_initial_values = defaultdict(dict)
|
||||
# Get all tracked fields (without related fields because these fields must be managed on their own model)
|
||||
tracking_fields = []
|
||||
for field_name in vals:
|
||||
field = self._fields[field_name]
|
||||
if not (hasattr(field, 'related') and field.related) and hasattr(field, 'tracking') and field.tracking:
|
||||
tracking_fields.append(field_name)
|
||||
fields_definition = self.env['res.partner.bank'].fields_get(tracking_fields)
|
||||
|
||||
# Get initial values for each account
|
||||
for account in self:
|
||||
for field in tracking_fields:
|
||||
# Group initial values by partner_id
|
||||
account_initial_values[account][field] = account[field]
|
||||
|
||||
res = super().write(vals)
|
||||
|
||||
# Log changes to move lines on each move
|
||||
for account, initial_values in account_initial_values.items():
|
||||
tracking_value_ids = account._mail_track(fields_definition, initial_values)[1]
|
||||
if tracking_value_ids:
|
||||
msg = _("Bank Account %s updated", account._get_html_link(title=f"#{account.id}"))
|
||||
account.partner_id._message_log(body=msg, tracking_value_ids=tracking_value_ids)
|
||||
if 'partner_id' in initial_values: # notify previous partner as well
|
||||
initial_values['partner_id']._message_log(body=msg, tracking_value_ids=tracking_value_ids)
|
||||
return res
|
||||
|
||||
def unlink(self):
|
||||
# EXTENDS base res.partner.bank
|
||||
for account in self:
|
||||
msg = _("Bank Account %s with number %s deleted", account._get_html_link(title=f"#{account.id}"), account.acc_number)
|
||||
account.partner_id._message_log(body=msg)
|
||||
return super().unlink()
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
</group>
|
||||
<group string="Bank Account Number" attrs="{'invisible': [('type', '!=', 'bank')]}">
|
||||
<field name="company_partner_id" invisible="1"/>
|
||||
<field name="bank_account_id" string="Account Number" context="{'default_partner_id': company_partner_id, 'form_view_ref': 'account.view_company_partner_bank_form'}"/>
|
||||
<field name="bank_account_id" string="Account Number" context="{'default_partner_id': company_partner_id}"/>
|
||||
<field name="bank_id" attrs="{'invisible': [('bank_account_id', '=', False)]}"/>
|
||||
<field name="bank_statements_source" widget="radio" attrs="{'required': [('type', '=', 'bank')]}" groups="account.group_account_readonly"/>
|
||||
</group>
|
||||
|
||||
@@ -204,17 +204,18 @@
|
||||
<field name="show_credit_limit" invisible="1"/>
|
||||
<group>
|
||||
<group string="Bank Accounts" name="banks" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<field name="bank_ids" nolabel="1" colspan="2">
|
||||
<field name="bank_ids" nolabel="1" colspan="2" context="{'default_allow_out_payment': True}">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="bank_id"/>
|
||||
<field name="acc_number"/>
|
||||
<field name="allow_out_payment" widget="boolean_toggle"/>
|
||||
<field name="acc_holder_name" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<button type="action" class="btn-link"
|
||||
name="%(base.action_res_partner_bank_account_form)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id, 'form_view_ref': 'account.view_company_partner_bank_form'}"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
|
||||
string="View accounts detail"
|
||||
colspan="2"
|
||||
/>
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_company_partner_bank_form" model="ir.ui.view">
|
||||
<field name="name">company.res.partner.bank.form</field>
|
||||
<record id="view_partner_bank_form_inherit_account" model="ir.ui.view">
|
||||
<field name="name">res.partner.bank.form.inherit.account</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_form"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="priority">14</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='partner_id']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
<xpath expr="//form[@name='bank_account_form']/sheet[1]" position="after">
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -78,6 +78,7 @@ class ResPartnerBank(models.Model):
|
||||
sanitized_acc_number = fields.Char(compute='_compute_sanitized_acc_number', string='Sanitized Account Number', readonly=True, store=True)
|
||||
acc_holder_name = fields.Char(string='Account Holder Name', help="Account holder name, in case it is different than the name of the Account Holder")
|
||||
partner_id = fields.Many2one('res.partner', 'Account Holder', ondelete='cascade', index=True, domain=['|', ('is_company', '=', True), ('parent_id', '=', False)], required=True)
|
||||
allow_out_payment = fields.Boolean('Send Money', help='This account can be used for outgoing payments', default=False, copy=False, readonly=False)
|
||||
bank_id = fields.Many2one('res.bank', string='Bank')
|
||||
bank_name = fields.Char(related='bank_id.name', readonly=False)
|
||||
bank_bic = fields.Char(related='bank_id.bic', readonly=False)
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="priority">15</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Bank account">
|
||||
<form string="Bank account" name="bank_account_form">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<group>
|
||||
@@ -89,11 +89,12 @@
|
||||
<field name="acc_number"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="acc_holder_name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="bank_id"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency" options="{'no_create': True}"/>
|
||||
<field name="acc_holder_name"/>
|
||||
<field name="allow_out_payment" widget="boolean_toggle"/>
|
||||
<field name="active" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
@@ -113,6 +114,7 @@
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="acc_holder_name" invisible="1"/>
|
||||
<field name="allow_out_payment" widget="boolean_toggle"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
Reference in New Issue
Block a user