mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
Start to port bank-payment to v9 (with a lot of improvements) during the Sorrento Code sprint 2016
Improvements include: - full re-organisation of modules and big re-organisation of the code - simplification of the code related to the fact that support for direct debit is now in t he base module, not added by an optional module account_direct_debit (module was removed) - new design of the wizard to select move lines to pay - support for non-SEPA file transfer- - support for German direct debit SEPA files (fixes bug #129) - remove workflow of payment.order This port to v9 is not finished... there is still a lot of work: - finish the code of account_payment_order/wizard/account_payment_line_create.py - port account_banking_payment_transfer and integrate it inside account_payment_order - fix bugs - clean-up code, remove dead code - test in several complex scenarios
This commit is contained in:
committed by
Enric Tobella
parent
eec3b4c092
commit
f319243b72
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2015 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
@@ -7,7 +7,7 @@
|
||||
{
|
||||
'name': 'Account Banking PAIN Base Module',
|
||||
'summary': 'Base module for PAIN file generation',
|
||||
'version': '8.0.0.4.0',
|
||||
'version': '9.0.1.0.0',
|
||||
'license': 'AGPL-3',
|
||||
'author': "Akretion, "
|
||||
"Noviat, "
|
||||
@@ -17,16 +17,18 @@
|
||||
'website': 'https://github.com/OCA/bank-payment',
|
||||
'contributors': ['Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>'],
|
||||
'category': 'Hidden',
|
||||
'depends': ['account_banking_payment_export'],
|
||||
'depends': ['account_payment_order'],
|
||||
'external_dependencies': {
|
||||
'python': ['unidecode', 'lxml'],
|
||||
},
|
||||
'data': [
|
||||
'views/payment_line_view.xml',
|
||||
'views/account_payment_line.xml',
|
||||
'views/account_payment_order.xml',
|
||||
'views/bank_payment_line_view.xml',
|
||||
'views/payment_mode_view.xml',
|
||||
'views/account_payment_mode.xml',
|
||||
'views/res_company_view.xml',
|
||||
'views/account_payment_method.xml',
|
||||
],
|
||||
'post_init_hook': 'set_default_initiating_party',
|
||||
'installable': False,
|
||||
'installable': True,
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import payment_line
|
||||
from . import account_payment_line
|
||||
from . import account_payment_order
|
||||
from . import bank_payment_line
|
||||
from . import payment_mode
|
||||
from . import account_payment_mode
|
||||
from . import res_company
|
||||
from . import banking_export_pain
|
||||
from . import res_partner_bank
|
||||
from . import account_payment_method
|
||||
|
||||
23
account_banking_pain_base/models/account_payment_line.py
Normal file
23
account_banking_pain_base/models/account_payment_line.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openerp import models, fields
|
||||
|
||||
|
||||
class AccountPaymentLine(models.Model):
|
||||
_inherit = 'account.payment.line'
|
||||
|
||||
priority = fields.Selection([
|
||||
('NORM', 'Normal'),
|
||||
('HIGH', 'High')],
|
||||
string='Priority', default='NORM',
|
||||
help="This field will be used as the 'Instruction Priority' in "
|
||||
"the generated PAIN file.")
|
||||
# PAIN allows 140 caracters
|
||||
communication = fields.Char(size=140)
|
||||
# The field struct_communication_type has been dropped in v9
|
||||
# We now use communication_type ; you should add an option
|
||||
# in communication_type with selection_add=[]
|
||||
communication_type = fields.Selection(selection_add=[('ISO', 'ISO')])
|
||||
19
account_banking_pain_base/models/account_payment_method.py
Normal file
19
account_banking_pain_base/models/account_payment_method.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- 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, api, _
|
||||
from openerp.exceptions import UserError
|
||||
|
||||
|
||||
class AccountPaymentMethod(models.Model):
|
||||
_inherit = 'account.payment.method'
|
||||
|
||||
pain_version = fields.Selection([], string='PAIN Version')
|
||||
|
||||
@api.multi
|
||||
def get_xsd_file_path(self):
|
||||
"""This method is designed to be inherited in the SEPA modules"""
|
||||
self.ensure_one()
|
||||
raise UserError(_(
|
||||
"No XSD file path found for payment method '%s'") % self.name)
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2015 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
@@ -7,8 +7,8 @@
|
||||
from openerp import models, fields, api
|
||||
|
||||
|
||||
class PaymentMode(models.Model):
|
||||
_inherit = 'payment.mode'
|
||||
class AccountPaymentMode(models.Model):
|
||||
_inherit = 'account.payment.mode'
|
||||
|
||||
convert_to_ascii = fields.Boolean(
|
||||
string='Convert to ASCII', default=True,
|
||||
@@ -33,17 +33,18 @@ class PaymentMode(models.Model):
|
||||
"- Country code (2, optional)\n"
|
||||
"- Company idenfier (N, VAT)\n"
|
||||
"- Service suffix (N, issued by bank)")
|
||||
sepa_type = fields.Char(compute="_compute_sepa_type")
|
||||
# I plan to change this -- Alexis
|
||||
#sepa_type = fields.Char(compute="_compute_sepa_type")
|
||||
|
||||
def _sepa_type_get(self):
|
||||
"""Defined to be inherited by child addons, for instance:
|
||||
- account_banking_sepa_credit_transfer
|
||||
- account_banking_sepa_direct_debit
|
||||
"""
|
||||
return False
|
||||
#def _sepa_type_get(self):
|
||||
# """Defined to be inherited by child addons, for instance:
|
||||
# - account_banking_sepa_credit_transfer
|
||||
# - account_banking_sepa_direct_debit
|
||||
# """
|
||||
# return False
|
||||
|
||||
@api.multi
|
||||
@api.depends('type')
|
||||
def _compute_sepa_type(self):
|
||||
for mode in self:
|
||||
mode.sepa_type = mode._sepa_type_get()
|
||||
#@api.multi
|
||||
#@api.depends('type')
|
||||
#def _compute_sepa_type(self):
|
||||
# for mode in self:
|
||||
# mode.sepa_type = mode._sepa_type_get()
|
||||
55
account_banking_pain_base/models/account_payment_order.py
Normal file
55
account_banking_pain_base/models/account_payment_order.py
Normal file
@@ -0,0 +1,55 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openerp import models, fields, api
|
||||
|
||||
|
||||
class AccountPaymentOrder(models.Model):
|
||||
_inherit = 'account.payment.order'
|
||||
|
||||
sepa = fields.Boolean(
|
||||
compute='compute_sepa', readonly=True,
|
||||
string="SEPA Payment")
|
||||
charge_bearer = fields.Selection([
|
||||
('SLEV', 'Following Service Level'),
|
||||
('SHAR', 'Shared'),
|
||||
('CRED', 'Borne by Creditor'),
|
||||
('DEBT', 'Borne by Debtor')], string='Charge Bearer',
|
||||
default='SLEV',
|
||||
help="Following service level : transaction charges are to be "
|
||||
"applied following the rules agreed in the service level "
|
||||
"and/or scheme (SEPA Core messages must use this). Shared : "
|
||||
"transaction charges on the debtor side are to be borne by "
|
||||
"the debtor, transaction charges on the creditor side are to "
|
||||
"be borne by the creditor. Borne by creditor : all "
|
||||
"transaction charges are to be borne by the creditor. Borne "
|
||||
"by debtor : all transaction charges are to be borne by the "
|
||||
"debtor.")
|
||||
batch_booking = fields.Boolean(
|
||||
string='Batch Booking',
|
||||
help="If true, the bank statement will display only one debit "
|
||||
"line for all the wire transfers of the SEPA XML file ; if "
|
||||
"false, the bank statement will display one debit line per wire "
|
||||
"transfer of the SEPA XML file.")
|
||||
|
||||
@api.multi
|
||||
@api.depends(
|
||||
'company_partner_bank_id.acc_type',
|
||||
'payment_line_ids.currency_id',
|
||||
'payment_line_ids.partner_bank_id.acc_type')
|
||||
def compute_sepa(self):
|
||||
eur = self.env.ref('base.EUR')
|
||||
for order in self:
|
||||
sepa = True
|
||||
if order.company_partner_bank_id.acc_type != 'iban':
|
||||
sepa = False
|
||||
for pline in order.payment_line_ids:
|
||||
if pline.currency_id != eur:
|
||||
sepa = False
|
||||
break
|
||||
if pline.partner_bank_id.acc_type != 'iban':
|
||||
sepa = False
|
||||
break
|
||||
self.sepa = sepa
|
||||
@@ -10,13 +10,10 @@ class BankPaymentLine(models.Model):
|
||||
|
||||
priority = fields.Selection(
|
||||
related='payment_line_ids.priority', string='Priority')
|
||||
struct_communication_type = fields.Selection(
|
||||
related='payment_line_ids.struct_communication_type',
|
||||
string='Structured Communication Type')
|
||||
|
||||
@api.model
|
||||
def same_fields_payment_line_and_bank_payment_line(self):
|
||||
res = super(BankPaymentLine, self).\
|
||||
same_fields_payment_line_and_bank_payment_line()
|
||||
res += ['priority', 'struct_communication_type']
|
||||
res += ['priority']
|
||||
return res
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2015 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2013-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openerp import models, api, _
|
||||
from openerp.exceptions import Warning
|
||||
from openerp.exceptions import UserError
|
||||
from openerp.tools.safe_eval import safe_eval
|
||||
from datetime import datetime
|
||||
from lxml import etree
|
||||
from openerp import tools
|
||||
import logging
|
||||
import base64
|
||||
|
||||
|
||||
try:
|
||||
@@ -22,17 +21,8 @@ except ImportError:
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BankingExportPain(models.AbstractModel):
|
||||
_name = 'banking.export.pain'
|
||||
|
||||
@api.model
|
||||
def _validate_iban(self, iban):
|
||||
"""if IBAN is valid, returns IBAN
|
||||
if IBAN is NOT valid, raises an error message"""
|
||||
if self.env['res.partner.bank'].is_iban_valid(iban):
|
||||
return iban.replace(' ', '')
|
||||
else:
|
||||
raise Warning(_("This IBAN is not valid : %s") % iban)
|
||||
class AccountPaymentOrder(models.Model):
|
||||
_inherit = 'account.payment.order'
|
||||
|
||||
@api.model
|
||||
def _prepare_field(self, field_name, field_value, eval_ctx,
|
||||
@@ -58,20 +48,20 @@ class BankingExportPain(models.AbstractModel):
|
||||
except:
|
||||
line = eval_ctx.get('line')
|
||||
if line:
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("Cannot compute the '%s' of the Payment Line with "
|
||||
"reference '%s'.")
|
||||
% (field_name, line.name))
|
||||
else:
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("Cannot compute the '%s'.") % field_name)
|
||||
if not isinstance(value, (str, unicode)):
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("The type of the field '%s' is %s. It should be a string "
|
||||
"or unicode.")
|
||||
% (field_name, type(value)))
|
||||
if not value:
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("The '%s' is empty or 0. It should have a non-null value.")
|
||||
% field_name)
|
||||
if max_size and len(value) > max_size:
|
||||
@@ -92,7 +82,7 @@ class BankingExportPain(models.AbstractModel):
|
||||
"The XML file is invalid against the XML Schema Definition")
|
||||
logger.warning(xml_string)
|
||||
logger.warning(e)
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("The generated XML file is not valid against the official "
|
||||
"XML Schema Definition. The generated XML file and the "
|
||||
"full error have been written in the server logs. Here "
|
||||
@@ -102,8 +92,7 @@ class BankingExportPain(models.AbstractModel):
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def finalize_sepa_file_creation(
|
||||
self, xml_root, total_amount, transactions_count, gen_args):
|
||||
def finalize_sepa_file_creation(self, xml_root, gen_args):
|
||||
xml_string = etree.tostring(
|
||||
xml_root, pretty_print=True, encoding='UTF-8',
|
||||
xml_declaration=True)
|
||||
@@ -113,30 +102,8 @@ class BankingExportPain(models.AbstractModel):
|
||||
logger.debug(xml_string)
|
||||
self._validate_xml(xml_string, gen_args)
|
||||
|
||||
order_ref = []
|
||||
for order in self.payment_order_ids:
|
||||
if order.reference:
|
||||
order_ref.append(order.reference.replace('/', '-'))
|
||||
filename = '%s%s.xml' % (gen_args['file_prefix'], '-'.join(order_ref))
|
||||
|
||||
self.write({
|
||||
'nb_transactions': transactions_count,
|
||||
'total_amount': total_amount,
|
||||
'filename': filename,
|
||||
'file': base64.encodestring(xml_string),
|
||||
'state': 'finish',
|
||||
})
|
||||
|
||||
action = {
|
||||
'name': _('SEPA File'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': self._name,
|
||||
'res_id': self.ids[0],
|
||||
'target': 'new',
|
||||
}
|
||||
return action
|
||||
filename = '%s%s.xml' % (gen_args['file_prefix'], self.name)
|
||||
return (xml_string, filename)
|
||||
|
||||
@api.model
|
||||
def generate_group_header_block(self, parent_node, gen_args):
|
||||
@@ -145,7 +112,7 @@ class BankingExportPain(models.AbstractModel):
|
||||
group_header_1_0, 'MsgId')
|
||||
message_identification_1_1.text = self._prepare_field(
|
||||
'Message Identification',
|
||||
'self.payment_order_ids[0].reference',
|
||||
'self.name',
|
||||
{'self': self}, 35, gen_args=gen_args)
|
||||
creation_date_time_1_2 = etree.SubElement(group_header_1_0, 'CreDtTm')
|
||||
creation_date_time_1_2.text = datetime.strftime(
|
||||
@@ -196,10 +163,11 @@ class BankingExportPain(models.AbstractModel):
|
||||
instruction_priority_2_7 = etree.SubElement(
|
||||
payment_type_info_2_6, 'InstrPrty')
|
||||
instruction_priority_2_7.text = priority
|
||||
service_level_2_8 = etree.SubElement(
|
||||
payment_type_info_2_6, 'SvcLvl')
|
||||
service_level_code_2_9 = etree.SubElement(service_level_2_8, 'Cd')
|
||||
service_level_code_2_9.text = 'SEPA'
|
||||
if self.sepa:
|
||||
service_level_2_8 = etree.SubElement(
|
||||
payment_type_info_2_6, 'SvcLvl')
|
||||
service_level_code_2_9 = etree.SubElement(service_level_2_8, 'Cd')
|
||||
service_level_code_2_9.text = 'SEPA'
|
||||
if local_instrument:
|
||||
local_instrument_2_11 = etree.SubElement(
|
||||
payment_type_info_2_6, 'LclInstrm')
|
||||
@@ -230,18 +198,17 @@ class BankingExportPain(models.AbstractModel):
|
||||
def generate_initiating_party_block(self, parent_node, gen_args):
|
||||
my_company_name = self._prepare_field(
|
||||
'Company Name',
|
||||
'self.payment_order_ids[0].mode.bank_id.partner_id.name',
|
||||
'self.company_partner_bank_id.partner_id.name',
|
||||
{'self': self}, gen_args.get('name_maxsize'), gen_args=gen_args)
|
||||
initiating_party_1_8 = etree.SubElement(parent_node, 'InitgPty')
|
||||
initiating_party_name = etree.SubElement(initiating_party_1_8, 'Nm')
|
||||
initiating_party_name.text = my_company_name
|
||||
payment = self.payment_order_ids[0]
|
||||
initiating_party_identifier = (
|
||||
payment.mode.initiating_party_identifier or
|
||||
payment.company_id.initiating_party_identifier)
|
||||
self.payment_mode_id.initiating_party_identifier or
|
||||
self.payment_mode_id.company_id.initiating_party_identifier)
|
||||
initiating_party_issuer = (
|
||||
payment.mode.initiating_party_issuer or
|
||||
payment.company_id.initiating_party_issuer)
|
||||
self.payment_mode_id.initiating_party_issuer or
|
||||
self.payment_mode_id.company_id.initiating_party_issuer)
|
||||
if initiating_party_identifier and initiating_party_issuer:
|
||||
iniparty_id = etree.SubElement(initiating_party_1_8, 'Id')
|
||||
iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
|
||||
@@ -252,11 +219,11 @@ class BankingExportPain(models.AbstractModel):
|
||||
iniparty_org_other, 'Issr')
|
||||
iniparty_org_other_issuer.text = initiating_party_issuer
|
||||
elif self._must_have_initiating_party(gen_args):
|
||||
raise Warning(
|
||||
raise UserError(
|
||||
_("Missing 'Initiating Party Issuer' and/or "
|
||||
"'Initiating Party Identifier' for the company '%s'. "
|
||||
"Both fields must have a value.")
|
||||
% payment.company_id.name)
|
||||
% self.company_id.name)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
@@ -275,11 +242,10 @@ class BankingExportPain(models.AbstractModel):
|
||||
party_agent_bic = etree.SubElement(
|
||||
party_agent_institution, gen_args.get('bic_xml_tag'))
|
||||
party_agent_bic.text = bic
|
||||
except Warning:
|
||||
except UserError:
|
||||
if order == 'C':
|
||||
if iban[0:2] != gen_args['initiating_party_country_code']:
|
||||
raise Warning(
|
||||
_('Error:'),
|
||||
raise UserError(
|
||||
_("The bank account with IBAN '%s' of partner '%s' "
|
||||
"must have an associated BIC because it is a "
|
||||
"cross-border SEPA operation.")
|
||||
@@ -314,9 +280,10 @@ class BankingExportPain(models.AbstractModel):
|
||||
party_name = self._prepare_field(
|
||||
'%s Name' % party_type_label, name, eval_ctx,
|
||||
gen_args.get('name_maxsize'), gen_args=gen_args)
|
||||
piban = self._prepare_field(
|
||||
viban = self._prepare_field(
|
||||
'%s IBAN' % party_type_label, iban, eval_ctx, gen_args=gen_args)
|
||||
viban = self._validate_iban(piban)
|
||||
# TODO : add support for bank accounts other than IBAN
|
||||
#viban = self._validate_iban(piban)
|
||||
# At C level, the order is : BIC, Name, IBAN
|
||||
# At B level, the order is : Name, IBAN, BIC
|
||||
if order == 'B':
|
||||
@@ -353,11 +320,6 @@ class BankingExportPain(models.AbstractModel):
|
||||
'line.communication', {'line': line}, 140,
|
||||
gen_args=gen_args)
|
||||
else:
|
||||
if not line.struct_communication_type:
|
||||
raise Warning(
|
||||
_("Missing 'Structured Communication Type' on payment "
|
||||
"line with reference '%s'.")
|
||||
% line.name)
|
||||
remittance_info_structured_2_100 = etree.SubElement(
|
||||
remittance_info_2_91, 'Strd')
|
||||
creditor_ref_information_2_120 = etree.SubElement(
|
||||
@@ -385,7 +347,7 @@ class BankingExportPain(models.AbstractModel):
|
||||
|
||||
creditor_ref_info_type_code_2_123.text = 'SCOR'
|
||||
creditor_ref_info_type_issuer_2_125.text = \
|
||||
line.struct_communication_type
|
||||
line.communication_type
|
||||
creditor_reference_2_126.text = \
|
||||
self._prepare_field(
|
||||
'Creditor Structured Reference',
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2013-2015 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openerp import models, fields, api
|
||||
|
||||
|
||||
class PaymentLine(models.Model):
|
||||
_inherit = 'payment.line'
|
||||
|
||||
@api.model
|
||||
def _get_struct_communication_types(self):
|
||||
return [('ISO', 'ISO')]
|
||||
|
||||
priority = fields.Selection([
|
||||
('NORM', 'Normal'),
|
||||
('HIGH', 'High')],
|
||||
string='Priority', default='NORM',
|
||||
help="This field will be used as the 'Instruction Priority' in "
|
||||
"the generated PAIN file.")
|
||||
# Update size from 64 to 140, because PAIN allows 140 caracters
|
||||
communication = fields.Char(size=140)
|
||||
struct_communication_type = fields.Selection(
|
||||
'_get_struct_communication_types',
|
||||
string='Structured Communication Type', default='ISO')
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2015 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# © 2015-2016 Akretion - Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
|
||||
|
||||
22
account_banking_pain_base/views/account_payment_line.xml
Normal file
22
account_banking_pain_base/views/account_payment_line.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013-2016 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="account_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.account.payment.line</field>
|
||||
<field name="model">account.payment.line</field>
|
||||
<field name="inherit_id" ref="account_payment_order.account_payment_line_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="communication_type" position="before">
|
||||
<field name="priority"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
30
account_banking_pain_base/views/account_payment_method.xml
Normal file
30
account_banking_pain_base/views/account_payment_method.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<record id="account_payment_method_form" model="ir.ui.view">
|
||||
<field name="name">pain_base.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="pain_version"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_payment_method_tree" model="ir.ui.view">
|
||||
<field name="name">pain_base.account_payment_method.tree</field>
|
||||
<field name="model">account.payment.method</field>
|
||||
<field name="inherit_id" ref="account_payment_mode.account_payment_method_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="pain_version"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
30
account_banking_pain_base/views/account_payment_mode.xml
Normal file
30
account_banking_pain_base/views/account_payment_mode.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013-2016 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
© 2015 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<record id="account_payment_mode_form" model="ir.ui.view">
|
||||
<field name="name">pain_base.account.payment.mode.form</field>
|
||||
<field name="model">account.payment.mode</field>
|
||||
<field name="inherit_id" ref="account_payment_order.account_payment_mode_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="payment_order_options" position="after">
|
||||
<group name="pain_options" string="Options for PAIN">
|
||||
<field name="convert_to_ascii"/>
|
||||
<!-- To be set visible in the localisation modules that need it -->
|
||||
<field name="initiating_party_identifier" invisible="1"/>
|
||||
<field name="initiating_party_issuer" invisible="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
24
account_banking_pain_base/views/account_payment_order.xml
Normal file
24
account_banking_pain_base/views/account_payment_order.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2016 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="account_payment_order_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.account.payment.order.form</field>
|
||||
<field name="model">account.payment.order</field>
|
||||
<field name="inherit_id" ref="account_payment_order.account_payment_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="company_partner_bank_id" position="after">
|
||||
<field name="sepa"/>
|
||||
<field name="batch_booking"/>
|
||||
<field name="charge_bearer" attrs="{'invisible': [('sepa', '=', True)]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 Akretion (http://www.akretion.com)
|
||||
Copyright (C) 2015-2016 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
@@ -10,14 +10,11 @@
|
||||
<record id="bank_payment_line_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.bank.payment.line.form</field>
|
||||
<field name="model">bank.payment.line</field>
|
||||
<field name="inherit_id" ref="account_banking_payment_export.bank_payment_line_form"/>
|
||||
<field name="inherit_id" ref="account_payment_order.bank_payment_line_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="bank_id" position="after">
|
||||
<field name="partner_bank_id" position="after">
|
||||
<field name="priority"/>
|
||||
</field>
|
||||
<field name="state" position="after">
|
||||
<field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_payment_order_form" model="ir.ui.view">
|
||||
<field name="name">pain.base.payment.line.inside.order.form</field>
|
||||
<field name="model">payment.order</field>
|
||||
<field name="inherit_id" ref="account_banking_payment_export.view_payment_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='line_ids']/form//field[@name='bank_id']" position="after">
|
||||
<field name="priority"/>
|
||||
<newline />
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='line_ids']/form//field[@name='state']" position="after">
|
||||
<field name="struct_communication_type" attrs="{'invisible': [('state', '!=', 'structured')], 'required': [('state', '=', 'structured')]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2013 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
© 2015 Antiun Ingenieria S.L. - Antonio Espinosa
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_payment_mode_form_inherit" model="ir.ui.view">
|
||||
<field name="name">add.convert_to_ascii.in.payment.mode.form</field>
|
||||
<field name="model">payment.mode</field>
|
||||
<field name="inherit_id" ref="account_banking_payment_export.view_payment_mode_form_inherit"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="type" position="after">
|
||||
<field name="convert_to_ascii"/>
|
||||
</field>
|
||||
<xpath expr="//form/group" position="after">
|
||||
<group name="sepa_identifiers" string="SEPA identifiers"
|
||||
attrs="{'invisible': [('sepa_type', '=', False)]}">
|
||||
<field name="sepa_type" invisible="1"/>
|
||||
<group>
|
||||
<field name="initiating_party_identifier" />
|
||||
<field name="initiating_party_issuer"/>
|
||||
</group>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user