mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
Better handling of partner_bank_id and mandate_id on invoice: invisible/required/onchange
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
14
account_payment_partner/models/account_payment_method.py
Normal file
14
account_payment_partner/models/account_payment_method.py
Normal 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.")
|
||||
@@ -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>
|
||||
|
||||
20
account_payment_partner/views/account_payment_method.xml
Normal file
20
account_payment_partner/views/account_payment_method.xml
Normal 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>
|
||||
Reference in New Issue
Block a user