def process_debts(cls, transactions): import lxml.builder from lxml.builder import E from ..models import TransactionProcess process = TransactionProcess.objects.create() context = cls.get_context(transactions) # http://businessbanking.bankofireland.com/fs/doc/wysiwyg/sepa-direct-debit-pain-008-001-02-xml-file-structure-july-2013.pdf sepa = lxml.builder.ElementMaker( nsmap = { 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', None: 'urn:iso:std:iso:20022:tech:xsd:pain.008.001.02', } ) sepa = sepa.Document( E.CstmrDrctDbtInitn( cls.get_header(context, process), E.PmtInf( # Payment Info E.PmtInfId(str(process.id)), # Payment Id E.PmtMtd("DD"), # Payment Method E.NbOfTxs(context['num_transactions']), # Number of Transactions E.CtrlSum(context['total']), # Control Sum E.PmtTpInf( # Payment Type Info E.SvcLvl( # Service Level E.Cd("SEPA") # Code ), E.LclInstrm( # Local Instrument E.Cd("CORE") # Code ), E.SeqTp("RCUR") # Sequence Type ), E.ReqdColltnDt( # Requested Collection Date context['now'].strftime("%Y-%m-%d") ), E.Cdtr( # Creditor E.Nm(context['name']) ), E.CdtrAcct( # Creditor Account E.Id( E.IBAN(context['iban']) ) ), E.CdtrAgt( # Creditor Agent E.FinInstnId( # Financial Institution Id E.BIC(context['bic']) ) ), *list(cls.get_debt_transactions(transactions, process)) # Transactions ) ) ) file_name = 'direct-debit-%i.xml' % process.id cls.process_xml(sepa, 'pain.008.001.02.xsd', file_name, process) return process
def process_credits(cls, transactions): import lxml.builder from lxml.builder import E from ..models import TransactionProcess process = TransactionProcess.objects.create() context = cls.get_context(transactions) # http://businessbanking.bankofireland.com/fs/doc/wysiwyg/b22440-mss130725-pain001-xml-file-structure-dec13.pdf sepa = lxml.builder.ElementMaker( nsmap = { 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', None: 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03', } ) sepa = sepa.Document( E.CstmrCdtTrfInitn( cls.get_header(context, process), E.PmtInf( # Payment Info E.PmtInfId(str(process.id)), # Payment Id E.PmtMtd("TRF"), # Payment Method E.NbOfTxs(context['num_transactions']), # Number of Transactions E.CtrlSum(context['total']), # Control Sum E.ReqdExctnDt( # Requested Execution Date (context['now']+datetime.timedelta(days=10)).strftime("%Y-%m-%d") ), E.Dbtr( # Debtor E.Nm(context['name']) ), E.DbtrAcct( # Debtor Account E.Id( E.IBAN(context['iban']) ) ), E.DbtrAgt( # Debtor Agent E.FinInstnId( # Financial Institution Id E.BIC(context['bic']) ) ), *list(cls.get_credit_transactions(transactions, process)) # Transactions ) ) ) file_name = 'credit-transfer-%i.xml' % process.id cls.process_xml(sepa, 'pain.001.001.03.xsd', file_name, process) return process