mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
Simpler variable names
Rename method
This commit is contained in:
@@ -176,70 +176,69 @@ class AccountPaymentOrder(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def generate_group_header_block(self, parent_node, gen_args):
|
def generate_group_header_block(self, parent_node, gen_args):
|
||||||
group_header_1_0 = etree.SubElement(parent_node, 'GrpHdr')
|
group_header = etree.SubElement(parent_node, 'GrpHdr')
|
||||||
message_identification_1_1 = etree.SubElement(
|
message_identification = etree.SubElement(
|
||||||
group_header_1_0, 'MsgId')
|
group_header, 'MsgId')
|
||||||
message_identification_1_1.text = self._prepare_field(
|
message_identification.text = self._prepare_field(
|
||||||
'Message Identification',
|
'Message Identification',
|
||||||
'self.name',
|
'self.name',
|
||||||
{'self': self}, 35, gen_args=gen_args)
|
{'self': self}, 35, gen_args=gen_args)
|
||||||
creation_date_time_1_2 = etree.SubElement(group_header_1_0, 'CreDtTm')
|
creation_date_time = etree.SubElement(group_header, 'CreDtTm')
|
||||||
creation_date_time_1_2.text = datetime.strftime(
|
creation_date_time.text = datetime.strftime(
|
||||||
datetime.today(), '%Y-%m-%dT%H:%M:%S')
|
datetime.today(), '%Y-%m-%dT%H:%M:%S')
|
||||||
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
||||||
# batch_booking is in "Group header" with pain.001.001.02
|
# batch_booking is in "Group header" with pain.001.001.02
|
||||||
# and in "Payment info" in pain.001.001.03/04
|
# and in "Payment info" in pain.001.001.03/04
|
||||||
batch_booking = etree.SubElement(group_header_1_0, 'BtchBookg')
|
batch_booking = etree.SubElement(group_header, 'BtchBookg')
|
||||||
batch_booking.text = unicode(self.batch_booking).lower()
|
batch_booking.text = unicode(self.batch_booking).lower()
|
||||||
nb_of_transactions_1_6 = etree.SubElement(
|
nb_of_transactions = etree.SubElement(
|
||||||
group_header_1_0, 'NbOfTxs')
|
group_header, 'NbOfTxs')
|
||||||
control_sum_1_7 = etree.SubElement(group_header_1_0, 'CtrlSum')
|
control_sum = etree.SubElement(group_header, 'CtrlSum')
|
||||||
# Grpg removed in pain.001.001.03
|
# Grpg removed in pain.001.001.03
|
||||||
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
||||||
grouping = etree.SubElement(group_header_1_0, 'Grpg')
|
grouping = etree.SubElement(group_header, 'Grpg')
|
||||||
grouping.text = 'GRPD'
|
grouping.text = 'GRPD'
|
||||||
self.generate_initiating_party_block(group_header_1_0, gen_args)
|
self.generate_initiating_party_block(group_header, gen_args)
|
||||||
return group_header_1_0, nb_of_transactions_1_6, control_sum_1_7
|
return group_header, nb_of_transactions, control_sum
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def generate_start_payment_info_block(
|
def generate_start_payment_info_block(
|
||||||
self, parent_node, payment_info_ident,
|
self, parent_node, payment_info_ident,
|
||||||
priority, local_instrument, sequence_type, requested_date,
|
priority, local_instrument, sequence_type, requested_date,
|
||||||
eval_ctx, gen_args):
|
eval_ctx, gen_args):
|
||||||
payment_info_2_0 = etree.SubElement(parent_node, 'PmtInf')
|
payment_info = etree.SubElement(parent_node, 'PmtInf')
|
||||||
payment_info_identification_2_1 = etree.SubElement(
|
payment_info_identification = etree.SubElement(
|
||||||
payment_info_2_0, 'PmtInfId')
|
payment_info, 'PmtInfId')
|
||||||
payment_info_identification_2_1.text = self._prepare_field(
|
payment_info_identification.text = self._prepare_field(
|
||||||
'Payment Information Identification',
|
'Payment Information Identification',
|
||||||
payment_info_ident, eval_ctx, 35, gen_args=gen_args)
|
payment_info_ident, eval_ctx, 35, gen_args=gen_args)
|
||||||
payment_method_2_2 = etree.SubElement(payment_info_2_0, 'PmtMtd')
|
payment_method = etree.SubElement(payment_info, 'PmtMtd')
|
||||||
payment_method_2_2.text = gen_args['payment_method']
|
payment_method.text = gen_args['payment_method']
|
||||||
nb_of_transactions_2_4 = False
|
nb_of_transactions = False
|
||||||
control_sum_2_5 = False
|
control_sum = False
|
||||||
if gen_args.get('pain_flavor') != 'pain.001.001.02':
|
if gen_args.get('pain_flavor') != 'pain.001.001.02':
|
||||||
batch_booking_2_3 = etree.SubElement(payment_info_2_0, 'BtchBookg')
|
batch_booking = etree.SubElement(payment_info, 'BtchBookg')
|
||||||
batch_booking_2_3.text = unicode(self.batch_booking).lower()
|
batch_booking.text = unicode(self.batch_booking).lower()
|
||||||
# The "SEPA Customer-to-bank
|
# The "SEPA Customer-to-bank
|
||||||
# Implementation guidelines" for SCT and SDD says that control sum
|
# Implementation guidelines" for SCT and SDD says that control sum
|
||||||
# and nb_of_transactions should be present
|
# and nb_of_transactions should be present
|
||||||
# at both "group header" level and "payment info" level
|
# at both "group header" level and "payment info" level
|
||||||
nb_of_transactions_2_4 = etree.SubElement(
|
nb_of_transactions = etree.SubElement(
|
||||||
payment_info_2_0, 'NbOfTxs')
|
payment_info, 'NbOfTxs')
|
||||||
control_sum_2_5 = etree.SubElement(payment_info_2_0, 'CtrlSum')
|
control_sum = etree.SubElement(payment_info, 'CtrlSum')
|
||||||
payment_type_info_2_6 = etree.SubElement(
|
payment_type_info = etree.SubElement(
|
||||||
payment_info_2_0, 'PmtTpInf')
|
payment_info, 'PmtTpInf')
|
||||||
if priority and gen_args['payment_method'] != 'DD':
|
if priority and gen_args['payment_method'] != 'DD':
|
||||||
instruction_priority_2_7 = etree.SubElement(
|
instruction_priority = etree.SubElement(
|
||||||
payment_type_info_2_6, 'InstrPrty')
|
payment_type_info, 'InstrPrty')
|
||||||
instruction_priority_2_7.text = priority
|
instruction_priority.text = priority
|
||||||
if self.sepa:
|
if self.sepa:
|
||||||
service_level_2_8 = etree.SubElement(
|
service_level = etree.SubElement(payment_type_info, 'SvcLvl')
|
||||||
payment_type_info_2_6, 'SvcLvl')
|
service_level_code = etree.SubElement(service_level, 'Cd')
|
||||||
service_level_code_2_9 = etree.SubElement(service_level_2_8, 'Cd')
|
service_level_code.text = 'SEPA'
|
||||||
service_level_code_2_9.text = 'SEPA'
|
|
||||||
if local_instrument:
|
if local_instrument:
|
||||||
local_instrument_root = etree.SubElement(
|
local_instrument_root = etree.SubElement(
|
||||||
payment_type_info_2_6, 'LclInstrm')
|
payment_type_info, 'LclInstrm')
|
||||||
if gen_args.get('local_instrument_type') == 'proprietary':
|
if gen_args.get('local_instrument_type') == 'proprietary':
|
||||||
local_instr_value = etree.SubElement(
|
local_instr_value = etree.SubElement(
|
||||||
local_instrument_root, 'Prtry')
|
local_instrument_root, 'Prtry')
|
||||||
@@ -248,18 +247,18 @@ class AccountPaymentOrder(models.Model):
|
|||||||
local_instrument_root, 'Cd')
|
local_instrument_root, 'Cd')
|
||||||
local_instr_value.text = local_instrument
|
local_instr_value.text = local_instrument
|
||||||
if sequence_type:
|
if sequence_type:
|
||||||
sequence_type_2_14 = etree.SubElement(
|
sequence_type_node = etree.SubElement(
|
||||||
payment_type_info_2_6, 'SeqTp')
|
payment_type_info, 'SeqTp')
|
||||||
sequence_type_2_14.text = sequence_type
|
sequence_type_node.text = sequence_type
|
||||||
|
|
||||||
if gen_args['payment_method'] == 'DD':
|
if gen_args['payment_method'] == 'DD':
|
||||||
request_date_tag = 'ReqdColltnDt'
|
request_date_tag = 'ReqdColltnDt'
|
||||||
else:
|
else:
|
||||||
request_date_tag = 'ReqdExctnDt'
|
request_date_tag = 'ReqdExctnDt'
|
||||||
requested_date_2_17 = etree.SubElement(
|
requested_date_node = etree.SubElement(
|
||||||
payment_info_2_0, request_date_tag)
|
payment_info, request_date_tag)
|
||||||
requested_date_2_17.text = requested_date
|
requested_date_node.text = requested_date
|
||||||
return payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5
|
return payment_info, nb_of_transactions, control_sum
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _must_have_initiating_party(self, gen_args):
|
def _must_have_initiating_party(self, gen_args):
|
||||||
@@ -273,8 +272,8 @@ class AccountPaymentOrder(models.Model):
|
|||||||
'Company Name',
|
'Company Name',
|
||||||
'self.company_partner_bank_id.partner_id.name',
|
'self.company_partner_bank_id.partner_id.name',
|
||||||
{'self': self}, gen_args.get('name_maxsize'), gen_args=gen_args)
|
{'self': self}, gen_args.get('name_maxsize'), gen_args=gen_args)
|
||||||
initiating_party_1_8 = etree.SubElement(parent_node, 'InitgPty')
|
initiating_party = etree.SubElement(parent_node, 'InitgPty')
|
||||||
initiating_party_name = etree.SubElement(initiating_party_1_8, 'Nm')
|
initiating_party_name = etree.SubElement(initiating_party, 'Nm')
|
||||||
initiating_party_name.text = my_company_name
|
initiating_party_name.text = my_company_name
|
||||||
initiating_party_identifier = (
|
initiating_party_identifier = (
|
||||||
self.payment_mode_id.initiating_party_identifier or
|
self.payment_mode_id.initiating_party_identifier or
|
||||||
@@ -285,7 +284,7 @@ class AccountPaymentOrder(models.Model):
|
|||||||
# in pain.008.001.02.ch.01.xsd files they use
|
# in pain.008.001.02.ch.01.xsd files they use
|
||||||
# initiating_party_identifier but not initiating_party_issuer
|
# initiating_party_identifier but not initiating_party_issuer
|
||||||
if initiating_party_identifier:
|
if initiating_party_identifier:
|
||||||
iniparty_id = etree.SubElement(initiating_party_1_8, 'Id')
|
iniparty_id = etree.SubElement(initiating_party, 'Id')
|
||||||
iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
|
iniparty_org_id = etree.SubElement(iniparty_id, 'OrgId')
|
||||||
iniparty_org_other = etree.SubElement(iniparty_org_id, 'Othr')
|
iniparty_org_other = etree.SubElement(iniparty_org_id, 'Othr')
|
||||||
iniparty_org_other_id = etree.SubElement(iniparty_org_other, 'Id')
|
iniparty_org_other_id = etree.SubElement(iniparty_org_other, 'Id')
|
||||||
@@ -340,7 +339,7 @@ class AccountPaymentOrder(models.Model):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def generate_party_bank_account(
|
def generate_party_acc_number(
|
||||||
self, parent_node, party_type, order, partner_bank, gen_args,
|
self, parent_node, party_type, order, partner_bank, gen_args,
|
||||||
bank_line=None):
|
bank_line=None):
|
||||||
party_account = etree.SubElement(
|
party_account = etree.SubElement(
|
||||||
@@ -403,7 +402,7 @@ class AccountPaymentOrder(models.Model):
|
|||||||
'Address Line2', "partner.zip + ' ' + partner.city",
|
'Address Line2', "partner.zip + ' ' + partner.city",
|
||||||
{'partner': partner}, 70, gen_args=gen_args)
|
{'partner': partner}, 70, gen_args=gen_args)
|
||||||
|
|
||||||
self.generate_party_bank_account(
|
self.generate_party_acc_number(
|
||||||
parent_node, party_type, order, partner_bank, gen_args,
|
parent_node, party_type, order, partner_bank, gen_args,
|
||||||
bank_line=bank_line)
|
bank_line=bank_line)
|
||||||
|
|
||||||
@@ -415,51 +414,52 @@ class AccountPaymentOrder(models.Model):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def generate_remittance_info_block(self, parent_node, line, gen_args):
|
def generate_remittance_info_block(self, parent_node, line, gen_args):
|
||||||
remittance_info_2_91 = etree.SubElement(
|
remittance_info = etree.SubElement(
|
||||||
parent_node, 'RmtInf')
|
parent_node, 'RmtInf')
|
||||||
if line.communication_type == 'normal':
|
if line.communication_type == 'normal':
|
||||||
remittance_info_unstructured_2_99 = etree.SubElement(
|
remittance_info_unstructured = etree.SubElement(
|
||||||
remittance_info_2_91, 'Ustrd')
|
remittance_info, 'Ustrd')
|
||||||
remittance_info_unstructured_2_99.text = \
|
remittance_info_unstructured.text = \
|
||||||
self._prepare_field(
|
self._prepare_field(
|
||||||
'Remittance Unstructured Information',
|
'Remittance Unstructured Information',
|
||||||
'line.communication', {'line': line}, 140,
|
'line.communication', {'line': line}, 140,
|
||||||
gen_args=gen_args)
|
gen_args=gen_args)
|
||||||
else:
|
else:
|
||||||
remittance_info_structured_2_100 = etree.SubElement(
|
remittance_info_structured = etree.SubElement(
|
||||||
remittance_info_2_91, 'Strd')
|
remittance_info, 'Strd')
|
||||||
creditor_ref_information_2_120 = etree.SubElement(
|
creditor_ref_information = etree.SubElement(
|
||||||
remittance_info_structured_2_100, 'CdtrRefInf')
|
remittance_info_structured, 'CdtrRefInf')
|
||||||
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
if gen_args.get('pain_flavor') == 'pain.001.001.02':
|
||||||
creditor_ref_info_type_2_121 = etree.SubElement(
|
creditor_ref_info_type = etree.SubElement(
|
||||||
creditor_ref_information_2_120, 'CdtrRefTp')
|
creditor_ref_information, 'CdtrRefTp')
|
||||||
creditor_ref_info_type_code_2_123 = etree.SubElement(
|
creditor_ref_info_type_code = etree.SubElement(
|
||||||
creditor_ref_info_type_2_121, 'Cd')
|
creditor_ref_info_type, 'Cd')
|
||||||
creditor_ref_info_type_code_2_123.text = 'SCOR'
|
creditor_ref_info_type_code.text = 'SCOR'
|
||||||
creditor_ref_info_type_issuer_2_125 = etree.SubElement(
|
# SCOR means "Structured Communication Reference"
|
||||||
creditor_ref_info_type_2_121, 'Issr')
|
creditor_ref_info_type_issuer = etree.SubElement(
|
||||||
creditor_ref_info_type_issuer_2_125.text = \
|
creditor_ref_info_type, 'Issr')
|
||||||
|
creditor_ref_info_type_issuer.text = \
|
||||||
line.communication_type
|
line.communication_type
|
||||||
creditor_reference_2_126 = etree.SubElement(
|
creditor_reference = etree.SubElement(
|
||||||
creditor_ref_information_2_120, 'CdtrRef')
|
creditor_ref_information, 'CdtrRef')
|
||||||
else:
|
else:
|
||||||
if gen_args.get('structured_remittance_issuer', True):
|
if gen_args.get('structured_remittance_issuer', True):
|
||||||
creditor_ref_info_type_2_121 = etree.SubElement(
|
creditor_ref_info_type = etree.SubElement(
|
||||||
creditor_ref_information_2_120, 'Tp')
|
creditor_ref_information, 'Tp')
|
||||||
creditor_ref_info_type_or_2_122 = etree.SubElement(
|
creditor_ref_info_type_or = etree.SubElement(
|
||||||
creditor_ref_info_type_2_121, 'CdOrPrtry')
|
creditor_ref_info_type, 'CdOrPrtry')
|
||||||
creditor_ref_info_type_code_2_123 = etree.SubElement(
|
creditor_ref_info_type_code = etree.SubElement(
|
||||||
creditor_ref_info_type_or_2_122, 'Cd')
|
creditor_ref_info_type_or, 'Cd')
|
||||||
creditor_ref_info_type_code_2_123.text = 'SCOR'
|
creditor_ref_info_type_code.text = 'SCOR'
|
||||||
creditor_ref_info_type_issuer_2_125 = etree.SubElement(
|
creditor_ref_info_type_issuer = etree.SubElement(
|
||||||
creditor_ref_info_type_2_121, 'Issr')
|
creditor_ref_info_type, 'Issr')
|
||||||
creditor_ref_info_type_issuer_2_125.text = \
|
creditor_ref_info_type_issuer.text = \
|
||||||
line.communication_type
|
line.communication_type
|
||||||
|
|
||||||
creditor_reference_2_126 = etree.SubElement(
|
creditor_reference = etree.SubElement(
|
||||||
creditor_ref_information_2_120, 'Ref')
|
creditor_ref_information, 'Ref')
|
||||||
|
|
||||||
creditor_reference_2_126.text = \
|
creditor_reference.text = \
|
||||||
self._prepare_field(
|
self._prepare_field(
|
||||||
'Creditor Structured Reference',
|
'Creditor Structured Reference',
|
||||||
'line.communication', {'line': line}, 35,
|
'line.communication', {'line': line}, 35,
|
||||||
|
|||||||
@@ -76,10 +76,10 @@ class AccountPaymentOrder(models.Model):
|
|||||||
xml_root = etree.Element('Document', nsmap=nsmap, attrib=attrib)
|
xml_root = etree.Element('Document', nsmap=nsmap, attrib=attrib)
|
||||||
pain_root = etree.SubElement(xml_root, root_xml_tag)
|
pain_root = etree.SubElement(xml_root, root_xml_tag)
|
||||||
# A. Group header
|
# A. Group header
|
||||||
group_header_1_0, nb_of_transactions_1_6, control_sum_1_7 = \
|
group_header, nb_of_transactions_a, control_sum_a = \
|
||||||
self.generate_group_header_block(pain_root, gen_args)
|
self.generate_group_header_block(pain_root, gen_args)
|
||||||
transactions_count_1_6 = 0
|
transactions_count_a = 0
|
||||||
amount_control_sum_1_7 = 0.0
|
amount_control_sum_a = 0.0
|
||||||
lines_per_group = {}
|
lines_per_group = {}
|
||||||
# key = (requested_date, priority, local_instrument)
|
# key = (requested_date, priority, local_instrument)
|
||||||
# values = list of lines as object
|
# values = list of lines as object
|
||||||
@@ -98,7 +98,7 @@ class AccountPaymentOrder(models.Model):
|
|||||||
for (requested_date, priority, local_instrument), lines in\
|
for (requested_date, priority, local_instrument), lines in\
|
||||||
lines_per_group.items():
|
lines_per_group.items():
|
||||||
# B. Payment info
|
# B. Payment info
|
||||||
payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5 = \
|
payment_info, nb_of_transactions_b, control_sum_b = \
|
||||||
self.generate_start_payment_info_block(
|
self.generate_start_payment_info_block(
|
||||||
pain_root,
|
pain_root,
|
||||||
"self.name + '-' "
|
"self.name + '-' "
|
||||||
@@ -111,56 +111,56 @@ class AccountPaymentOrder(models.Model):
|
|||||||
'local_instrument': local_instrument or 'NOinstr',
|
'local_instrument': local_instrument or 'NOinstr',
|
||||||
}, gen_args)
|
}, gen_args)
|
||||||
self.generate_party_block(
|
self.generate_party_block(
|
||||||
payment_info_2_0, 'Dbtr', 'B',
|
payment_info, 'Dbtr', 'B',
|
||||||
self.company_partner_bank_id, gen_args)
|
self.company_partner_bank_id, gen_args)
|
||||||
charge_bearer_2_24 = etree.SubElement(payment_info_2_0, 'ChrgBr')
|
charge_bearer = etree.SubElement(payment_info, 'ChrgBr')
|
||||||
if self.sepa:
|
if self.sepa:
|
||||||
charge_bearer = 'SLEV'
|
charge_bearer_text = 'SLEV'
|
||||||
else:
|
else:
|
||||||
charge_bearer = self.charge_bearer
|
charge_bearer_text = self.charge_bearer
|
||||||
charge_bearer_2_24.text = charge_bearer
|
charge_bearer.text = charge_bearer_text
|
||||||
transactions_count_2_4 = 0
|
transactions_count_b = 0
|
||||||
amount_control_sum_2_5 = 0.0
|
amount_control_sum_b = 0.0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
transactions_count_1_6 += 1
|
transactions_count_a += 1
|
||||||
transactions_count_2_4 += 1
|
transactions_count_b += 1
|
||||||
# C. Credit Transfer Transaction Info
|
# C. Credit Transfer Transaction Info
|
||||||
credit_transfer_transaction_info_2_27 = etree.SubElement(
|
credit_transfer_transaction_info = etree.SubElement(
|
||||||
payment_info_2_0, 'CdtTrfTxInf')
|
payment_info, 'CdtTrfTxInf')
|
||||||
payment_identification_2_28 = etree.SubElement(
|
payment_identification = etree.SubElement(
|
||||||
credit_transfer_transaction_info_2_27, 'PmtId')
|
credit_transfer_transaction_info, 'PmtId')
|
||||||
end2end_identification_2_30 = etree.SubElement(
|
end2end_identification = etree.SubElement(
|
||||||
payment_identification_2_28, 'EndToEndId')
|
payment_identification, 'EndToEndId')
|
||||||
end2end_identification_2_30.text = self._prepare_field(
|
end2end_identification.text = self._prepare_field(
|
||||||
'End to End Identification', 'line.name',
|
'End to End Identification', 'line.name',
|
||||||
{'line': line}, 35, gen_args=gen_args)
|
{'line': line}, 35, gen_args=gen_args)
|
||||||
currency_name = self._prepare_field(
|
currency_name = self._prepare_field(
|
||||||
'Currency Code', 'line.currency_id.name',
|
'Currency Code', 'line.currency_id.name',
|
||||||
{'line': line}, 3, gen_args=gen_args)
|
{'line': line}, 3, gen_args=gen_args)
|
||||||
amount_2_42 = etree.SubElement(
|
amount = etree.SubElement(
|
||||||
credit_transfer_transaction_info_2_27, 'Amt')
|
credit_transfer_transaction_info, 'Amt')
|
||||||
instructed_amount_2_43 = etree.SubElement(
|
instructed_amount = etree.SubElement(
|
||||||
amount_2_42, 'InstdAmt', Ccy=currency_name)
|
amount, 'InstdAmt', Ccy=currency_name)
|
||||||
instructed_amount_2_43.text = '%.2f' % line.amount_currency
|
instructed_amount.text = '%.2f' % line.amount_currency
|
||||||
amount_control_sum_1_7 += line.amount_currency
|
amount_control_sum_a += line.amount_currency
|
||||||
amount_control_sum_2_5 += line.amount_currency
|
amount_control_sum_b += line.amount_currency
|
||||||
if not line.partner_bank_id:
|
if not line.partner_bank_id:
|
||||||
raise UserError(
|
raise UserError(
|
||||||
_("Bank account is missing on the bank payment line "
|
_("Bank account is missing on the bank payment line "
|
||||||
"of partner '%s' (reference '%s').")
|
"of partner '%s' (reference '%s').")
|
||||||
% (line.partner_id.name, line.name))
|
% (line.partner_id.name, line.name))
|
||||||
self.generate_party_block(
|
self.generate_party_block(
|
||||||
credit_transfer_transaction_info_2_27, 'Cdtr',
|
credit_transfer_transaction_info, 'Cdtr',
|
||||||
'C', line.partner_bank_id, gen_args, line)
|
'C', line.partner_bank_id, gen_args, line)
|
||||||
self.generate_remittance_info_block(
|
self.generate_remittance_info_block(
|
||||||
credit_transfer_transaction_info_2_27, line, gen_args)
|
credit_transfer_transaction_info, line, gen_args)
|
||||||
if not pain_flavor.startswith('pain.001.001.02'):
|
if not pain_flavor.startswith('pain.001.001.02'):
|
||||||
nb_of_transactions_2_4.text = unicode(transactions_count_2_4)
|
nb_of_transactions_b.text = unicode(transactions_count_b)
|
||||||
control_sum_2_5.text = '%.2f' % amount_control_sum_2_5
|
control_sum_b.text = '%.2f' % amount_control_sum_b
|
||||||
if not pain_flavor.startswith('pain.001.001.02'):
|
if not pain_flavor.startswith('pain.001.001.02'):
|
||||||
nb_of_transactions_1_6.text = unicode(transactions_count_1_6)
|
nb_of_transactions_a.text = unicode(transactions_count_a)
|
||||||
control_sum_1_7.text = '%.2f' % amount_control_sum_1_7
|
control_sum_a.text = '%.2f' % amount_control_sum_a
|
||||||
else:
|
else:
|
||||||
nb_of_transactions_1_6.text = unicode(transactions_count_1_6)
|
nb_of_transactions_a.text = unicode(transactions_count_a)
|
||||||
control_sum_1_7.text = '%.2f' % amount_control_sum_1_7
|
control_sum_a.text = '%.2f' % amount_control_sum_a
|
||||||
return self.finalize_sepa_file_creation(xml_root, gen_args)
|
return self.finalize_sepa_file_creation(xml_root, gen_args)
|
||||||
|
|||||||
@@ -81,15 +81,15 @@ class AccountPaymentOrder(models.Model):
|
|||||||
xml_root = etree.Element('Document', nsmap=nsmap, attrib=attrib)
|
xml_root = etree.Element('Document', nsmap=nsmap, attrib=attrib)
|
||||||
pain_root = etree.SubElement(xml_root, root_xml_tag)
|
pain_root = etree.SubElement(xml_root, root_xml_tag)
|
||||||
# A. Group header
|
# A. Group header
|
||||||
group_header_1_0, nb_of_transactions_1_6, control_sum_1_7 = \
|
group_header, nb_of_transactions_a, control_sum_a = \
|
||||||
self.generate_group_header_block(pain_root, gen_args)
|
self.generate_group_header_block(pain_root, gen_args)
|
||||||
transactions_count_1_6 = 0
|
transactions_count_a = 0
|
||||||
amount_control_sum_1_7 = 0.0
|
amount_control_sum_a = 0.0
|
||||||
lines_per_group = {}
|
lines_per_group = {}
|
||||||
# key = (requested_date, priority, sequence type)
|
# key = (requested_date, priority, sequence type)
|
||||||
# value = list of lines as objects
|
# value = list of lines as objects
|
||||||
for line in self.bank_line_ids:
|
for line in self.bank_line_ids:
|
||||||
transactions_count_1_6 += 1
|
transactions_count_a += 1
|
||||||
priority = line.priority
|
priority = line.priority
|
||||||
# The field line.date is the requested payment date
|
# The field line.date is the requested payment date
|
||||||
# taking into account the 'date_prefered' setting
|
# taking into account the 'date_prefered' setting
|
||||||
@@ -138,7 +138,7 @@ class AccountPaymentOrder(models.Model):
|
|||||||
for (requested_date, priority, sequence_type, scheme), lines in \
|
for (requested_date, priority, sequence_type, scheme), lines in \
|
||||||
lines_per_group.items():
|
lines_per_group.items():
|
||||||
# B. Payment info
|
# B. Payment info
|
||||||
payment_info_2_0, nb_of_transactions_2_4, control_sum_2_5 = \
|
payment_info, nb_of_transactions_b, control_sum_b = \
|
||||||
self.generate_start_payment_info_block(
|
self.generate_start_payment_info_block(
|
||||||
pain_root,
|
pain_root,
|
||||||
"self.name + '-' + "
|
"self.name + '-' + "
|
||||||
@@ -152,80 +152,80 @@ class AccountPaymentOrder(models.Model):
|
|||||||
}, gen_args)
|
}, gen_args)
|
||||||
|
|
||||||
self.generate_party_block(
|
self.generate_party_block(
|
||||||
payment_info_2_0, 'Cdtr', 'B',
|
payment_info, 'Cdtr', 'B',
|
||||||
self.company_partner_bank_id, gen_args)
|
self.company_partner_bank_id, gen_args)
|
||||||
charge_bearer_2_24 = etree.SubElement(payment_info_2_0, 'ChrgBr')
|
charge_bearer = etree.SubElement(payment_info, 'ChrgBr')
|
||||||
if self.sepa:
|
if self.sepa:
|
||||||
charge_bearer = 'SLEV'
|
charge_bearer_text = 'SLEV'
|
||||||
else:
|
else:
|
||||||
charge_bearer = self.charge_bearer
|
charge_bearer_text = self.charge_bearer
|
||||||
charge_bearer_2_24.text = charge_bearer
|
charge_bearer.text = charge_bearer_text
|
||||||
creditor_scheme_identification_2_27 = etree.SubElement(
|
creditor_scheme_identification = etree.SubElement(
|
||||||
payment_info_2_0, 'CdtrSchmeId')
|
payment_info, 'CdtrSchmeId')
|
||||||
self.generate_creditor_scheme_identification(
|
self.generate_creditor_scheme_identification(
|
||||||
creditor_scheme_identification_2_27,
|
creditor_scheme_identification,
|
||||||
'self.payment_mode_id.sepa_creditor_identifier or '
|
'self.payment_mode_id.sepa_creditor_identifier or '
|
||||||
'self.company_id.sepa_creditor_identifier',
|
'self.company_id.sepa_creditor_identifier',
|
||||||
'SEPA Creditor Identifier', {'self': self}, 'SEPA', gen_args)
|
'SEPA Creditor Identifier', {'self': self}, 'SEPA', gen_args)
|
||||||
transactions_count_2_4 = 0
|
transactions_count_b = 0
|
||||||
amount_control_sum_2_5 = 0.0
|
amount_control_sum_b = 0.0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
transactions_count_2_4 += 1
|
transactions_count_b += 1
|
||||||
# C. Direct Debit Transaction Info
|
# C. Direct Debit Transaction Info
|
||||||
dd_transaction_info_2_28 = etree.SubElement(
|
dd_transaction_info = etree.SubElement(
|
||||||
payment_info_2_0, 'DrctDbtTxInf')
|
payment_info, 'DrctDbtTxInf')
|
||||||
payment_identification_2_29 = etree.SubElement(
|
payment_identification = etree.SubElement(
|
||||||
dd_transaction_info_2_28, 'PmtId')
|
dd_transaction_info, 'PmtId')
|
||||||
if pain_flavor == 'pain.008.001.02.ch.01':
|
if pain_flavor == 'pain.008.001.02.ch.01':
|
||||||
instruction_identification = etree.SubElement(
|
instruction_identification = etree.SubElement(
|
||||||
payment_identification_2_29, 'InstrId')
|
payment_identification, 'InstrId')
|
||||||
instruction_identification.text = self._prepare_field(
|
instruction_identification.text = self._prepare_field(
|
||||||
'Intruction Identification', 'line.name',
|
'Intruction Identification', 'line.name',
|
||||||
{'line': line}, 35, gen_args=gen_args)
|
{'line': line}, 35, gen_args=gen_args)
|
||||||
end2end_identification_2_31 = etree.SubElement(
|
end2end_identification = etree.SubElement(
|
||||||
payment_identification_2_29, 'EndToEndId')
|
payment_identification, 'EndToEndId')
|
||||||
end2end_identification_2_31.text = self._prepare_field(
|
end2end_identification.text = self._prepare_field(
|
||||||
'End to End Identification', 'line.name',
|
'End to End Identification', 'line.name',
|
||||||
{'line': line}, 35, gen_args=gen_args)
|
{'line': line}, 35, gen_args=gen_args)
|
||||||
currency_name = self._prepare_field(
|
currency_name = self._prepare_field(
|
||||||
'Currency Code', 'line.currency_id.name',
|
'Currency Code', 'line.currency_id.name',
|
||||||
{'line': line}, 3, gen_args=gen_args)
|
{'line': line}, 3, gen_args=gen_args)
|
||||||
instructed_amount_2_44 = etree.SubElement(
|
instructed_amount = etree.SubElement(
|
||||||
dd_transaction_info_2_28, 'InstdAmt', Ccy=currency_name)
|
dd_transaction_info, 'InstdAmt', Ccy=currency_name)
|
||||||
instructed_amount_2_44.text = '%.2f' % line.amount_currency
|
instructed_amount.text = '%.2f' % line.amount_currency
|
||||||
amount_control_sum_1_7 += line.amount_currency
|
amount_control_sum_a += line.amount_currency
|
||||||
amount_control_sum_2_5 += line.amount_currency
|
amount_control_sum_b += line.amount_currency
|
||||||
dd_transaction_2_46 = etree.SubElement(
|
dd_transaction = etree.SubElement(
|
||||||
dd_transaction_info_2_28, 'DrctDbtTx')
|
dd_transaction_info, 'DrctDbtTx')
|
||||||
mandate_related_info_2_47 = etree.SubElement(
|
mandate_related_info = etree.SubElement(
|
||||||
dd_transaction_2_46, 'MndtRltdInf')
|
dd_transaction, 'MndtRltdInf')
|
||||||
mandate_identification_2_48 = etree.SubElement(
|
mandate_identification = etree.SubElement(
|
||||||
mandate_related_info_2_47, 'MndtId')
|
mandate_related_info, 'MndtId')
|
||||||
mandate_identification_2_48.text = self._prepare_field(
|
mandate_identification.text = self._prepare_field(
|
||||||
'Unique Mandate Reference',
|
'Unique Mandate Reference',
|
||||||
'line.mandate_id.unique_mandate_reference',
|
'line.mandate_id.unique_mandate_reference',
|
||||||
{'line': line}, 35, gen_args=gen_args)
|
{'line': line}, 35, gen_args=gen_args)
|
||||||
mandate_signature_date_2_49 = etree.SubElement(
|
mandate_signature_date = etree.SubElement(
|
||||||
mandate_related_info_2_47, 'DtOfSgntr')
|
mandate_related_info, 'DtOfSgntr')
|
||||||
mandate_signature_date_2_49.text = self._prepare_field(
|
mandate_signature_date.text = self._prepare_field(
|
||||||
'Mandate Signature Date',
|
'Mandate Signature Date',
|
||||||
'line.mandate_id.signature_date',
|
'line.mandate_id.signature_date',
|
||||||
{'line': line}, 10, gen_args=gen_args)
|
{'line': line}, 10, gen_args=gen_args)
|
||||||
if sequence_type == 'FRST' and line.mandate_id.last_debit_date:
|
if sequence_type == 'FRST' and line.mandate_id.last_debit_date:
|
||||||
previous_bank = self._get_previous_bank(line)
|
previous_bank = self._get_previous_bank(line)
|
||||||
if previous_bank:
|
if previous_bank:
|
||||||
amendment_indicator_2_50 = etree.SubElement(
|
amendment_indicator = etree.SubElement(
|
||||||
mandate_related_info_2_47, 'AmdmntInd')
|
mandate_related_info, 'AmdmntInd')
|
||||||
amendment_indicator_2_50.text = 'true'
|
amendment_indicator.text = 'true'
|
||||||
amendment_info_details_2_51 = etree.SubElement(
|
amendment_info_details = etree.SubElement(
|
||||||
mandate_related_info_2_47, 'AmdmntInfDtls')
|
mandate_related_info, 'AmdmntInfDtls')
|
||||||
if (
|
if (
|
||||||
previous_bank.bank_bic ==
|
previous_bank.bank_bic ==
|
||||||
line.partner_bank_id.bank_bic):
|
line.partner_bank_id.bank_bic):
|
||||||
ori_debtor_account_2_57 = etree.SubElement(
|
ori_debtor_account = etree.SubElement(
|
||||||
amendment_info_details_2_51, 'OrgnlDbtrAcct')
|
amendment_info_details, 'OrgnlDbtrAcct')
|
||||||
ori_debtor_account_id = etree.SubElement(
|
ori_debtor_account_id = etree.SubElement(
|
||||||
ori_debtor_account_2_57, 'Id')
|
ori_debtor_account, 'Id')
|
||||||
ori_debtor_account_iban = etree.SubElement(
|
ori_debtor_account_iban = etree.SubElement(
|
||||||
ori_debtor_account_id, 'IBAN')
|
ori_debtor_account_id, 'IBAN')
|
||||||
ori_debtor_account_iban.text = self._validate_iban(
|
ori_debtor_account_iban.text = self._validate_iban(
|
||||||
@@ -235,10 +235,10 @@ class AccountPaymentOrder(models.Model):
|
|||||||
{'previous_bank': previous_bank},
|
{'previous_bank': previous_bank},
|
||||||
gen_args=gen_args))
|
gen_args=gen_args))
|
||||||
else:
|
else:
|
||||||
ori_debtor_agent_2_58 = etree.SubElement(
|
ori_debtor_agent = etree.SubElement(
|
||||||
amendment_info_details_2_51, 'OrgnlDbtrAgt')
|
amendment_info_details, 'OrgnlDbtrAgt')
|
||||||
ori_debtor_agent_institution = etree.SubElement(
|
ori_debtor_agent_institution = etree.SubElement(
|
||||||
ori_debtor_agent_2_58, 'FinInstnId')
|
ori_debtor_agent, 'FinInstnId')
|
||||||
ori_debtor_agent_bic = etree.SubElement(
|
ori_debtor_agent_bic = etree.SubElement(
|
||||||
ori_debtor_agent_institution, bic_xml_tag)
|
ori_debtor_agent_institution, bic_xml_tag)
|
||||||
ori_debtor_agent_bic.text = self._prepare_field(
|
ori_debtor_agent_bic.text = self._prepare_field(
|
||||||
@@ -254,16 +254,16 @@ class AccountPaymentOrder(models.Model):
|
|||||||
# SMNDA = Same Mandate New Debtor Agent
|
# SMNDA = Same Mandate New Debtor Agent
|
||||||
|
|
||||||
self.generate_party_block(
|
self.generate_party_block(
|
||||||
dd_transaction_info_2_28, 'Dbtr', 'C',
|
dd_transaction_info, 'Dbtr', 'C',
|
||||||
line.partner_bank_id, gen_args, line)
|
line.partner_bank_id, gen_args, line)
|
||||||
|
|
||||||
self.generate_remittance_info_block(
|
self.generate_remittance_info_block(
|
||||||
dd_transaction_info_2_28, line, gen_args)
|
dd_transaction_info, line, gen_args)
|
||||||
|
|
||||||
nb_of_transactions_2_4.text = unicode(transactions_count_2_4)
|
nb_of_transactions_b.text = unicode(transactions_count_b)
|
||||||
control_sum_2_5.text = '%.2f' % amount_control_sum_2_5
|
control_sum_b.text = '%.2f' % amount_control_sum_b
|
||||||
nb_of_transactions_1_6.text = unicode(transactions_count_1_6)
|
nb_of_transactions_a.text = unicode(transactions_count_a)
|
||||||
control_sum_1_7.text = '%.2f' % amount_control_sum_1_7
|
control_sum_a.text = '%.2f' % amount_control_sum_a
|
||||||
|
|
||||||
return self.finalize_sepa_file_creation(
|
return self.finalize_sepa_file_creation(
|
||||||
xml_root, gen_args)
|
xml_root, gen_args)
|
||||||
|
|||||||
Reference in New Issue
Block a user