Better handling of partner_bank_id and mandate_id on invoice: invisible/required/onchange

This commit is contained in:
Alexis de Lattre
2016-06-07 00:58:19 +02:00
parent ca4dc40c14
commit 21bc911b20
10 changed files with 102 additions and 18 deletions

View File

@@ -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

View File

@@ -12,9 +12,11 @@
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account_payment_partner.invoice_form"/>
<field name="arch" type="xml">
<field name="partner_bank_id" position="after">
<field name="payment_mode_id" position="after">
<field name="mandate_id"
domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"/>
domain="[('partner_id', '=', commercial_partner_id), ('state', '=', 'valid')]"
attrs="{'required': [('mandate_required', '=', True)], 'invisible': [('mandate_required', '=', False)]}"/>
<field name="mandate_required" invisible="1"/>
</field>
</field>
</record>

View File

@@ -6,7 +6,7 @@
<record id="account_payment_method_form" model="ir.ui.view">
<field name="name">account_banking_mandate.account.payment.method.form</field>
<field name="model">account.payment.method</field>
<field name="inherit_id" ref="account_payment_mode.account_payment_method_form"/>
<field name="inherit_id" ref="account_payment_partner.account_payment_method_form"/>
<field name="arch" type="xml">
<field name="payment_type" position="after">
<field name="mandate_required"

View File

@@ -7,6 +7,7 @@
<field name="name">SEPA Credit Transfer to suppliers</field>
<field name="code">sepa_credit_transfer</field>
<field name="payment_type">outbound</field>
<field name="bank_account_required" eval="True"/>
<field name="pain_version">pain.001.001.03</field>
</record>

View File

@@ -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',

View File

@@ -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

View File

@@ -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):

View File

@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# 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.")

View File

@@ -43,15 +43,17 @@
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_supplier_form" />
<field name="arch" type="xml">
<field name="partner_bank_id" position="after">
<field name="partner_bank_id" position="before">
<field name="payment_mode_id"
domain="[('payment_type', '=', 'outbound')]"
widget="selection"/>
<field name="commercial_partner_id" invisible="1"/>
<field name="bank_account_required" invisible="1"/>
</field>
<field name="partner_bank_id" position="attributes">
<attribute name="domain">[('partner_id', '=', commercial_partner_id)]</attribute>
<attribute name="invisible">0</attribute>
<attribute name="attrs">{'invisible': [('bank_account_required', '=', False)], 'required': [('bank_account_required', '=', True)]}</attribute>
</field>
</field>
</record>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="account_payment_method_form" model="ir.ui.view">
<field name="name">account_payment_partner.account.payment.method.form</field>
<field name="model">account.payment.method</field>
<field name="inherit_id" ref="account_payment_mode.account_payment_method_form"/>
<field name="arch" type="xml">
<field name="payment_type" position="after">
<field name="bank_account_required"
attrs="{'invisible': [('payment_type', '!=', 'outbound')]}"/>
</field>
</field>
</record>
</data>
</odoo>