class SEPA::DirectDebit
Private Instance Methods
build_amendment_informations(builder, transaction)
click to toggle source
# File lib/sepa_king/message/direct_debit.rb, line 86 def build_amendment_informations(builder, transaction) builder.AmdmntInd(true) builder.AmdmntInfDtls do if transaction.original_debtor_account builder.OrgnlDbtrAcct do builder.Id do builder.IBAN(transaction.original_debtor_account) end end elsif transaction.same_mandate_new_debtor_agent builder.OrgnlDbtrAgt do builder.FinInstnId do builder.Othr do builder.Id('SMNDA') end end end end if transaction.original_creditor_account builder.OrgnlCdtrSchmeId do if transaction.original_creditor_account.name builder.Nm(transaction.original_creditor_account.name) end if transaction.original_creditor_account.creditor_identifier builder.Id do builder.PrvtId do builder.Othr do builder.Id(transaction.original_creditor_account.creditor_identifier) builder.SchmeNm do builder.Prtry('SEPA') end end end end end end end end end
build_payment_informations(builder)
click to toggle source
# File lib/sepa_king/message/direct_debit.rb, line 27 def build_payment_informations(builder) # Build a PmtInf block for every group of transactions grouped_transactions.each do |group, transactions| builder.PmtInf do builder.PmtInfId(payment_information_identification(group)) builder.PmtMtd('DD') builder.BtchBookg(group[:batch_booking]) builder.NbOfTxs(transactions.length) builder.CtrlSum('%.2f' % amount_total(transactions)) builder.PmtTpInf do builder.SvcLvl do builder.Cd('SEPA') end builder.LclInstrm do builder.Cd(group[:local_instrument]) end builder.SeqTp(group[:sequence_type]) end builder.ReqdColltnDt(group[:requested_date].iso8601) builder.Cdtr do builder.Nm(group[:account].name) end builder.CdtrAcct do builder.Id do builder.IBAN(group[:account].iban) end end builder.CdtrAgt do builder.FinInstnId do if group[:account].bic builder.BIC(group[:account].bic) else builder.Othr do builder.Id('NOTPROVIDED') end end end end builder.ChrgBr('SLEV') builder.CdtrSchmeId do builder.Id do builder.PrvtId do builder.Othr do builder.Id(group[:account].creditor_identifier) builder.SchmeNm do builder.Prtry('SEPA') end end end end end transactions.each do |transaction| build_transaction(builder, transaction) end end end end
build_transaction(builder, transaction)
click to toggle source
# File lib/sepa_king/message/direct_debit.rb, line 126 def build_transaction(builder, transaction) builder.DrctDbtTxInf do builder.PmtId do if transaction.instruction.present? builder.InstrId(transaction.instruction) end builder.EndToEndId(transaction.reference) end builder.InstdAmt('%.2f' % transaction.amount, Ccy: transaction.currency) builder.DrctDbtTx do builder.MndtRltdInf do builder.MndtId(transaction.mandate_id) builder.DtOfSgntr(transaction.mandate_date_of_signature.iso8601) build_amendment_informations(builder, transaction) if transaction.amendment_informations? end end builder.DbtrAgt do builder.FinInstnId do if transaction.bic builder.BIC(transaction.bic) else builder.Othr do builder.Id('NOTPROVIDED') end end end end builder.Dbtr do builder.Nm(transaction.name) if transaction.debtor_address builder.PstlAdr do # Only set the fields that are actually provided. # StrtNm, BldgNb, PstCd, TwnNm provide a structured address # separated into its individual fields. # AdrLine provides the address in free format text. # Both are currently allowed and the actual preference depends on the bank. # Also the fields that are required legally may vary depending on the country # or change over time. if transaction.debtor_address.street_name builder.StrtNm transaction.debtor_address.street_name end if transaction.debtor_address.building_number builder.BldgNb transaction.debtor_address.building_number end if transaction.debtor_address.post_code builder.PstCd transaction.debtor_address.post_code end if transaction.debtor_address.town_name builder.TwnNm transaction.debtor_address.town_name end if transaction.debtor_address.country_code builder.Ctry transaction.debtor_address.country_code end if transaction.debtor_address.address_line1 builder.AdrLine transaction.debtor_address.address_line1 end if transaction.debtor_address.address_line2 builder.AdrLine transaction.debtor_address.address_line2 end end end end builder.DbtrAcct do builder.Id do builder.IBAN(transaction.iban) end end if transaction.remittance_information builder.RmtInf do builder.Ustrd(transaction.remittance_information) end end end end
transaction_group(transaction)
click to toggle source
Find groups of transactions which share the same values of some attributes
# File lib/sepa_king/message/direct_debit.rb, line 18 def transaction_group(transaction) { requested_date: transaction.requested_date, local_instrument: transaction.local_instrument, sequence_type: transaction.sequence_type, batch_booking: transaction.batch_booking, account: transaction.creditor_account || account } end