Improve computation of sepa on account.payment.order: check IBAN is in SEPA zone

Update move line generation to get transfer account from bank journal
Update payment mode configuration accordingly (3 fields removed)
Several improvements in payment order tree and form view
This commit is contained in:
Alexis de Lattre
2021-06-09 00:39:32 +02:00
committed by Pedro M. Baeza
parent 20b4db3e27
commit 61c22ea8ea
4 changed files with 92 additions and 1 deletions

View File

@@ -58,17 +58,66 @@ class AccountPaymentOrder(models.Model):
"transfer of the SEPA XML file.",
)
@api.model
def _sepa_iban_prefix_list(self):
# List of IBAN prefixes (not country codes !)
# Source: https://www.europeanpaymentscouncil.eu/sites/default/files/kb/file/2020-10/EPC409-09%20EPC%20List%20of%20SEPA%20Scheme%20Countries%20v3.0_1.pdf # noqa: B950
# Some countries use IBAN but are not part of the SEPA zone
# example: Turkey, Madagascar, Tunisia, etc.
return [
"BE",
"BG",
"ES",
"HR",
"CY",
"CZ",
"DK",
"EE",
"FI",
"FR",
"DE",
"GI",
"GR",
"GB",
"HU",
"IS",
"IE",
"IT",
"LV",
"LI",
"LT",
"LU",
"PT",
"MT",
"MC",
"NL",
"NO",
"PL",
"RO",
"SM",
"SK",
"SI",
"SE",
"CH",
"VA",
]
@api.depends(
"company_partner_bank_id.acc_type",
"company_partner_bank_id.sanitized_acc_number",
"payment_line_ids.currency_id",
"payment_line_ids.partner_bank_id.acc_type",
"payment_line_ids.partner_bank_id.sanitized_acc_number",
)
def _compute_sepa(self):
eur = self.env.ref("base.EUR")
sepa_list = self._sepa_iban_prefix_list()
for order in self:
sepa = True
if order.company_partner_bank_id.acc_type != "iban":
sepa = False
if order.company_partner_bank_id and order.company_partner_bank_id.sanitized_acc_number[:2] not in sepa_list:
sepa = False
for pline in order.payment_line_ids:
if pline.currency_id != eur:
sepa = False
@@ -76,6 +125,9 @@ class AccountPaymentOrder(models.Model):
if pline.partner_bank_id.acc_type != "iban":
sepa = False
break
if pline.partner_bank_id and pline.partner_bank_id.sanitized_acc_number[:2] not in sepa_list:
sepa = False
break
sepa = order.compute_sepa_final_hook(sepa)
self.sepa = sepa

View File

@@ -20,4 +20,18 @@
</field>
</field>
</record>
<record id="account_payment_line_tree" model="ir.ui.view">
<field name="name">pain.base.account.payment.tree</field>
<field name="model">account.payment.line</field>
<field
name="inherit_id"
ref="account_payment_order.account_payment_line_tree"
/>
<field name="arch" type="xml">
<field name="communication" position="after">
<field name="priority" optional="hide" />
</field>
</field>
</record>
</odoo>

View File

@@ -21,5 +21,19 @@
/>
</field>
</field>
</record>
</record>
<record id="account_payment_order_tree" model="ir.ui.view">
<field name="name">pain.base.account.payment.order.tree</field>
<field name="model">account.payment.order</field>
<field
name="inherit_id"
ref="account_payment_order.account_payment_order_tree"
/>
<field name="arch" type="xml">
<field name="description" position="after">
<field name="sepa" optional="hide" />
</field>
</field>
</record>
</odoo>

View File

@@ -17,4 +17,15 @@
</field>
</field>
</record>
<record id="bank_payment_line_tree" model="ir.ui.view">
<field name="name">pain.base.bank.payment.line.tree</field>
<field name="model">bank.payment.line</field>
<field name="inherit_id" ref="account_payment_order.bank_payment_line_tree" />
<field name="arch" type="xml">
<field name="communication" position="after">
<field name="priority" optional="hide" />
</field>
</field>
</record>
</odoo>