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