diff --git a/account_banking_mandate/models/account_invoice.py b/account_banking_mandate/models/account_invoice.py
index 23255c58e..46d884493 100644
--- a/account_banking_mandate/models/account_invoice.py
+++ b/account_banking_mandate/models/account_invoice.py
@@ -15,6 +15,9 @@ class AccountInvoice(models.Model):
'account.banking.mandate', string='Direct Debit Mandate',
ondelete='restrict',
readonly=True, states={'draft': [('readonly', False)]})
+ mandate_required = fields.Boolean(
+ related='payment_mode_id.payment_method_id.mandate_required',
+ readonly=True)
@api.model
def line_get_convert(self, line, part):
@@ -41,16 +44,32 @@ class AccountInvoice(models.Model):
vals['mandate_id'] = invoice.mandate_id.id
return vals
- @api.onchange('payment_mode_id')
- def payment_mode_change(self):
+ @api.onchange('partner_id', 'company_id')
+ def _onchange_partner_id(self):
"""Select by default the first valid mandate of the partner"""
+ super(AccountInvoice, self)._onchange_partner_id()
if (
- self.type in ('out_invoice', 'out_refund') and
- self.payment_mode_id.payment_type == 'inbound' and
- self.payment_mode_id.payment_method_id.mandate_required and
- self.partner_id):
+ self.type == 'out_invoice' and
+ self.partner_id.customer_payment_mode_id.\
+ payment_type == 'inbound' and
+ self.partner_id.customer_payment_mode_id.payment_method_id.\
+ mandate_required and
+ self.commercial_partner_id):
mandates = self.env['account.banking.mandate'].search([
('state', '=', 'valid'),
('partner_id', '=', self.commercial_partner_id.id),
])
self.mandate_id = mandates[0]
+ else:
+ self.mandate_id = False
+
+ @api.onchange('payment_mode_id')
+ def payment_mode_id_change(self):
+ super(AccountInvoice, self).payment_mode_id_change()
+ if (
+ self.payment_mode_id and
+ self.payment_mode_id.payment_type == 'inbound' and
+ not self.payment_mode_id.payment_method_id.mandate_required):
+ self.mandate_id = False
+ elif not self.payment_mode_id:
+ self.mandate_id = False
diff --git a/account_banking_mandate/views/account_invoice_view.xml b/account_banking_mandate/views/account_invoice_view.xml
index 41fcc966c..1c1e46647 100644
--- a/account_banking_mandate/views/account_invoice_view.xml
+++ b/account_banking_mandate/views/account_invoice_view.xml
@@ -12,9 +12,11 @@
account.invoice
-
+
+ domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"
+ attrs="{'required': [('mandate_required', '=', True)], 'invisible': [('mandate_required', '=', False)]}"/>
+
diff --git a/account_banking_mandate/views/account_payment_method.xml b/account_banking_mandate/views/account_payment_method.xml
index 2d4079533..c6067e150 100644
--- a/account_banking_mandate/views/account_payment_method.xml
+++ b/account_banking_mandate/views/account_payment_method.xml
@@ -6,7 +6,7 @@
account_banking_mandate.account.payment.method.form
account.payment.method
-
+
SEPA Credit Transfer to suppliers
sepa_credit_transfer
outbound
+
pain.001.001.03
diff --git a/account_payment_partner/__openerp__.py b/account_payment_partner/__openerp__.py
index 8c1068021..844f5a553 100644
--- a/account_payment_partner/__openerp__.py
+++ b/account_payment_partner/__openerp__.py
@@ -16,6 +16,7 @@
'depends': ['account_payment_mode'],
'data': [
'views/res_partner_view.xml',
+ 'views/account_payment_method.xml',
'views/account_invoice_view.xml',
'views/account_move_line.xml',
'views/report_invoice.xml',
diff --git a/account_payment_partner/models/__init__.py b/account_payment_partner/models/__init__.py
index 152bb919c..caea9e62c 100644
--- a/account_payment_partner/models/__init__.py
+++ b/account_payment_partner/models/__init__.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from . import res_partner
+from . import account_payment_method
from . import account_invoice
from . import account_move_line
diff --git a/account_payment_partner/models/account_invoice.py b/account_payment_partner/models/account_invoice.py
index b5fbb539f..ac7d6827e 100644
--- a/account_payment_partner/models/account_invoice.py
+++ b/account_payment_partner/models/account_invoice.py
@@ -13,22 +13,46 @@ class AccountInvoice(models.Model):
comodel_name='account.payment.mode', string="Payment Mode",
ondelete='restrict',
readonly=True, states={'draft': [('readonly', False)]})
+ bank_account_required = fields.Boolean(
+ related='payment_mode_id.payment_method_id.bank_account_required',
+ readonly=True)
- @api.onchange('partner_id', 'company_id', 'type')
+ @api.onchange('partner_id', 'company_id')
def _onchange_partner_id(self):
super(AccountInvoice, self)._onchange_partner_id()
- if self.partner_id and self.type:
+ if self.partner_id:
if self.type == 'in_invoice':
- self.payment_mode_id =\
- self.partner_id.supplier_payment_mode_id
+ pay_mode = self.partner_id.supplier_payment_mode_id
+ self.payment_mode_id = pay_mode
+ if (
+ pay_mode and
+ pay_mode.payment_type == 'outbound' and
+ pay_mode.payment_method_id.bank_account_required and
+ self.commercial_partner_id.bank_ids):
+ self.partner_bank_id = self.commercial_partner_id.bank_ids[0]
elif self.type == 'out_invoice':
- payment_mode = self.partner_id.customer_payment_mode_id
- self.payment_mode_id = payment_mode
- if payment_mode and payment_mode.bank_account_link == 'fixed':
- self.partner_bank_id = payment_mode.fixed_journal_id.\
+ pay_mode = self.partner_id.customer_payment_mode_id
+ self.payment_mode_id = pay_mode
+ if pay_mode and pay_mode.bank_account_link == 'fixed':
+ self.partner_bank_id = pay_mode.fixed_journal_id.\
bank_account_id
else:
self.payment_mode_id = False
+ if self.type == 'in_invoice':
+ self.partner_bank_id = False
+
+ @api.onchange('payment_mode_id')
+ def payment_mode_id_change(self):
+ if (
+ self.payment_mode_id and
+ self.payment_mode_id.payment_type == 'outbound' and
+ not self.payment_mode_id.payment_method_id.\
+ bank_account_required):
+ self.partner_bank_id = False
+ print "false"
+ elif not self.payment_mode_id:
+ self.partner_bank_id = False
+ print "false"
@api.model
def line_get_convert(self, line, part):
diff --git a/account_payment_partner/models/account_payment_method.py b/account_payment_partner/models/account_payment_method.py
new file mode 100644
index 000000000..97289f14f
--- /dev/null
+++ b/account_payment_partner/models/account_payment_method.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+# © 2016 Akretion (Alexis de Lattre )
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from openerp import models, fields
+
+
+class AccountPaymentMethod(models.Model):
+ _inherit = "account.payment.method"
+
+ bank_account_required = fields.Boolean(
+ string='Bank Account Required',
+ help="Activate this option if this payment method requires to "
+ "set the bank account of your supplier on the vendor bills.")
diff --git a/account_payment_partner/views/account_invoice_view.xml b/account_payment_partner/views/account_invoice_view.xml
index 045efe7f9..0e59c514d 100644
--- a/account_payment_partner/views/account_invoice_view.xml
+++ b/account_payment_partner/views/account_invoice_view.xml
@@ -43,15 +43,17 @@
account.invoice
-
+
+
[('partner_id', '=', commercial_partner_id)]
0
+ {'invisible': [('bank_account_required', '=', False)], 'required': [('bank_account_required', '=', True)]}
diff --git a/account_payment_partner/views/account_payment_method.xml b/account_payment_partner/views/account_payment_method.xml
new file mode 100644
index 000000000..4f2448ffa
--- /dev/null
+++ b/account_payment_partner/views/account_payment_method.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ account_payment_partner.account.payment.method.form
+ account.payment.method
+
+
+
+
+
+
+
+
+
+
+