mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
Adds flexibility to support direct debit direct debit for switzerland (pain.008.001.02.ch.01)
Implement SEPA Core recommandations for postal address
This commit is contained in:
@@ -282,15 +282,18 @@ class AccountPaymentOrder(models.Model):
|
||||
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:
|
||||
# in pain.008.001.02.ch.01.xsd files they use
|
||||
# initiating_party_identifier but not initiating_party_issuer
|
||||
if initiating_party_identifier:
|
||||
iniparty_id = etree.SubElement(initiating_party_1_8, 'Id')
|
||||
iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
|
||||
iniparty_org_other = etree.SubElement(iniparty_org_id, 'Othr')
|
||||
iniparty_org_other_id = etree.SubElement(iniparty_org_other, 'Id')
|
||||
iniparty_org_other_id.text = initiating_party_identifier
|
||||
iniparty_org_other_issuer = etree.SubElement(
|
||||
iniparty_org_other, 'Issr')
|
||||
iniparty_org_other_issuer.text = initiating_party_issuer
|
||||
if initiating_party_issuer:
|
||||
iniparty_org_other_issuer = etree.SubElement(
|
||||
iniparty_org_other, 'Issr')
|
||||
iniparty_org_other_issuer.text = initiating_party_issuer
|
||||
elif self._must_have_initiating_party(gen_args):
|
||||
raise UserError(
|
||||
_("Missing 'Initiating Party Issuer' and/or "
|
||||
@@ -359,22 +362,6 @@ class AccountPaymentOrder(models.Model):
|
||||
partner = partner_bank.partner_id
|
||||
if partner.country_id:
|
||||
postal_address = etree.SubElement(party, 'PstlAdr')
|
||||
if partner.zip:
|
||||
post_code = etree.SubElement(postal_address, 'PstCd')
|
||||
post_code.text = self._prepare_field(
|
||||
'Postal Code', 'partner.zip',
|
||||
{'partner': partner}, 16, gen_args=gen_args)
|
||||
if partner.city:
|
||||
town = etree.SubElement(postal_address, 'TwnNm')
|
||||
town.text = self._prepare_field(
|
||||
'Town Name', 'partner.city',
|
||||
{'partner': partner}, 35, gen_args=gen_args)
|
||||
if partner.state_id:
|
||||
country_subdiv = etree.SubElement(
|
||||
postal_address, 'CtrySubDvsn')
|
||||
country_subdiv.text = self._prepare_field(
|
||||
'Country SubDivision', 'partner.state_id.name',
|
||||
{'partner': partner}, 35, gen_args=gen_args)
|
||||
country = etree.SubElement(postal_address, 'Ctry')
|
||||
country.text = self._prepare_field(
|
||||
'Country', 'partner.country_id.code',
|
||||
@@ -382,12 +369,12 @@ class AccountPaymentOrder(models.Model):
|
||||
if partner.street:
|
||||
adrline1 = etree.SubElement(postal_address, 'AdrLine')
|
||||
adrline1.text = self._prepare_field(
|
||||
'Street', 'partner.street',
|
||||
'Adress Line1', 'partner.street',
|
||||
{'partner': partner}, 70, gen_args=gen_args)
|
||||
if partner.street2:
|
||||
if partner.city and partner.zip:
|
||||
adrline2 = etree.SubElement(postal_address, 'AdrLine')
|
||||
adrline2.text = self._prepare_field(
|
||||
'Street2', 'partner.street2',
|
||||
'Address Line2', "partner.zip + ' ' + partner.city",
|
||||
{'partner': partner}, 70, gen_args=gen_args)
|
||||
|
||||
party_account = etree.SubElement(
|
||||
|
||||
@@ -10,10 +10,10 @@ class AccountPaymentMethod(models.Model):
|
||||
|
||||
pain_version = fields.Selection(selection_add=[
|
||||
('pain.001.001.02', 'pain.001.001.02'),
|
||||
('pain.001.001.03', 'pain.001.001.03 (recommended)'),
|
||||
('pain.001.001.03', 'pain.001.001.03 (recommended for credit transfer)'),
|
||||
('pain.001.001.04', 'pain.001.001.04'),
|
||||
('pain.001.001.05', 'pain.001.001.05'),
|
||||
('pain.001.003.03', 'pain.001.003.03 (used in Germany)'),
|
||||
('pain.001.003.03', 'pain.001.003.03 (credit transfer in Germany)'),
|
||||
])
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -9,10 +9,10 @@ class AccountPaymentMethod(models.Model):
|
||||
_inherit = 'account.payment.method'
|
||||
|
||||
pain_version = fields.Selection(selection_add=[
|
||||
('pain.008.001.02', 'pain.008.001.02 (recommended)'),
|
||||
('pain.008.001.02', 'pain.008.001.02 (recommended for direct debit)'),
|
||||
('pain.008.001.03', 'pain.008.001.03'),
|
||||
('pain.008.001.04', 'pain.008.001.04'),
|
||||
('pain.008.003.02', 'pain.008.003.02 (used in Germany)'),
|
||||
('pain.008.003.02', 'pain.008.003.02 (direct debit in Germany)'),
|
||||
])
|
||||
|
||||
@api.multi
|
||||
|
||||
@@ -40,19 +40,22 @@ class AccountPaymentOrder(models.Model):
|
||||
'sepa_direct_debit'):
|
||||
return super(AccountPaymentOrder, self).generate_payment_file()
|
||||
pain_flavor = self.payment_mode_id.payment_method_id.pain_version
|
||||
if pain_flavor == 'pain.008.001.02':
|
||||
# We use pain_flavor.startswith('pain.008.001.xx')
|
||||
# to support country-specific extensions such as
|
||||
# pain.008.001.02.ch.01 (cf l10n_ch_sepa)
|
||||
if pain_flavor.startswith('pain.008.001.02'):
|
||||
bic_xml_tag = 'BIC'
|
||||
name_maxsize = 70
|
||||
root_xml_tag = 'CstmrDrctDbtInitn'
|
||||
elif pain_flavor == 'pain.008.003.02':
|
||||
elif pain_flavor.startswith('pain.008.003.02'):
|
||||
bic_xml_tag = 'BIC'
|
||||
name_maxsize = 70
|
||||
root_xml_tag = 'CstmrDrctDbtInitn'
|
||||
elif pain_flavor == 'pain.008.001.03':
|
||||
elif pain_flavor.startswith('pain.008.001.03'):
|
||||
bic_xml_tag = 'BICFI'
|
||||
name_maxsize = 140
|
||||
root_xml_tag = 'CstmrDrctDbtInitn'
|
||||
elif pain_flavor == 'pain.008.001.04':
|
||||
elif pain_flavor.startswith('pain.008.001.04'):
|
||||
bic_xml_tag = 'BICFI'
|
||||
name_maxsize = 140
|
||||
root_xml_tag = 'CstmrDrctDbtInitn'
|
||||
@@ -173,6 +176,12 @@ class AccountPaymentOrder(models.Model):
|
||||
payment_info_2_0, 'DrctDbtTxInf')
|
||||
payment_identification_2_29 = etree.SubElement(
|
||||
dd_transaction_info_2_28, 'PmtId')
|
||||
if pain_flavor == 'pain.008.001.02.ch.01':
|
||||
instruction_identification = etree.SubElement(
|
||||
payment_identification_2_29, 'InstrId')
|
||||
instruction_identification.text = self._prepare_field(
|
||||
'Intruction Identification', 'line.name',
|
||||
{'line': line}, 35, gen_args=gen_args)
|
||||
end2end_identification_2_31 = etree.SubElement(
|
||||
payment_identification_2_29, 'EndToEndId')
|
||||
end2end_identification_2_31.text = self._prepare_field(
|
||||
|
||||
Reference in New Issue
Block a user