Merge PR #780 into 12.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2021-07-02 11:57:50 +00:00
3 changed files with 37 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
# Copyright Akretion (http://www.akretion.com/)
# Copyright 2017 Carlos Dauden <carlos.dauden@tecnativa.com>
# Copyright 2017-2021 Carlos Dauden <carlos.dauden@tecnativa.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
@@ -25,12 +25,8 @@ class AccountMoveLine(models.Model):
mandate = mandate.browse(vals['mandate_id'])
partner_bank_id = vals.get('partner_bank_id', False)
if not mandate:
if partner_bank_id:
domain = [('partner_bank_id', '=', partner_bank_id)]
else:
domain = [('partner_id', '=', self.partner_id.id)]
domain.append(('state', '=', 'valid'))
mandate = mandate.search(domain, limit=1)
mandate = self.partner_id._get_first_valid_mandate(
partner_bank_id=partner_bank_id)
vals.update({
'mandate_id': mandate.id,
'partner_bank_id': mandate.partner_bank_id.id or partner_bank_id,

View File

@@ -1,8 +1,9 @@
# Copyright 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# Copyright 2017 Carlos Dauden <carlos.dauden@tecnativa.com>
# Copyright 2017-2021 Carlos Dauden <carlos.dauden@tecnativa.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models, fields, api
from odoo.fields import first
class ResPartner(models.Model):
@@ -26,25 +27,31 @@ class ResPartner(models.Model):
for partner in self:
partner.mandate_count = mapped_data.get(partner.id, 0)
@api.multi
def _compute_valid_mandate_id(self):
# Dict for reducing the duplicated searches on parent/child partners
def _get_first_valid_mandate(self, partner_bank_id=False):
self.ensure_one()
company_id = self.env.context.get('force_company', False)
if company_id:
company = self.env['res.company'].browse(company_id)
else:
company = self.env['res.company']._company_default_get(
'account.banking.mandate')
mandates = self.commercial_partner_id.bank_ids.mapped('mandate_ids')
mandates = mandates.filtered(
lambda x: x.state == 'valid' and x.company_id == company)
if partner_bank_id:
mandates = mandates.filtered(
lambda m: m.partner_bank_id.id == partner_bank_id) or mandates
return first(mandates)
@api.multi
def _compute_valid_mandate_id(self):
# Dict for reducing the duplicated searches on parent/child partners
mandates_dic = {}
for partner in self:
commercial_partner_id = partner.commercial_partner_id.id
if commercial_partner_id in mandates_dic:
partner.valid_mandate_id = mandates_dic[commercial_partner_id]
else:
mandates = partner.commercial_partner_id.bank_ids.mapped(
'mandate_ids').filtered(
lambda x: x.state == 'valid' and x.company_id == company)
first_valid_mandate_id = mandates[:1].id
first_valid_mandate_id = partner._get_first_valid_mandate()
partner.valid_mandate_id = first_valid_mandate_id
mandates_dic[commercial_partner_id] = first_valid_mandate_id

View File

@@ -60,6 +60,25 @@ class TestInvoiceMandate(TransactionCase):
with self.assertRaises(ValidationError):
payable_move_lines[0].mandate_id = mandate_2
def test_post_invoice_default_mandate(self):
self.invoice.mandate_id = False
self.invoice.partner_bank_id = self.mandate.partner_bank_id
self.invoice.action_invoice_open()
self.env['account.invoice.payment.line.multi'].with_context(
active_model='account.invoice',
active_ids=self.invoice.ids
).create({}).run()
payment_order = self.env['account.payment.order'].search([])
self.assertEqual(len(payment_order.ids), 1)
payment_order.payment_mode_id_change()
payment_order.draft2open()
payment_order.open2generated()
payment_order.generated2uploaded()
self.assertEqual(self.mandate.payment_line_ids_count, 1)
def test_post_invoice_and_refund_02(self):
self.invoice._onchange_partner_id()
self.invoice.action_invoice_open()