mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user