diff --git a/addons/account/models/res_partner_bank.py b/addons/account/models/res_partner_bank.py
index 8e93e4c262c..1bc597500c2 100644
--- a/addons/account/models/res_partner_bank.py
+++ b/addons/account/models/res_partner_bank.py
@@ -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()
diff --git a/addons/account/views/account_journal_views.xml b/addons/account/views/account_journal_views.xml
index 4ca6063cd32..51758cc1ec3 100644
--- a/addons/account/views/account_journal_views.xml
+++ b/addons/account/views/account_journal_views.xml
@@ -90,7 +90,7 @@
-
+
diff --git a/addons/account/views/partner_view.xml b/addons/account/views/partner_view.xml
index 7673fbad47a..b1db826d76e 100644
--- a/addons/account/views/partner_view.xml
+++ b/addons/account/views/partner_view.xml
@@ -204,17 +204,18 @@
-
+
+
diff --git a/addons/account/views/res_partner_bank_views.xml b/addons/account/views/res_partner_bank_views.xml
index 0db2de8b500..99103261fcf 100644
--- a/addons/account/views/res_partner_bank_views.xml
+++ b/addons/account/views/res_partner_bank_views.xml
@@ -1,16 +1,19 @@
-
-
- company.res.partner.bank.form
+
+ res.partner.bank.form.inherit.account
res.partner.bank
primary
- 20
+ 14
-
- 1
+
+
+
+
+
+
diff --git a/odoo/addons/base/models/res_bank.py b/odoo/addons/base/models/res_bank.py
index f0fb7dd6a63..f8356590061 100644
--- a/odoo/addons/base/models/res_bank.py
+++ b/odoo/addons/base/models/res_bank.py
@@ -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)
diff --git a/odoo/addons/base/views/res_bank_views.xml b/odoo/addons/base/views/res_bank_views.xml
index 82421c8b456..1c6afd7e57c 100644
--- a/odoo/addons/base/views/res_bank_views.xml
+++ b/odoo/addons/base/views/res_bank_views.xml
@@ -79,7 +79,7 @@
res.partner.bank
15
-
@@ -113,6 +114,7 @@
+