class Ach::Creator
Public Class Methods
block_count(filelines)
click to toggle source
# File lib/ach/creator.rb, line 6 def self.block_count(filelines) filelines = ((filelines.to_f+1)/10) return filelines.round end
create_file(structure,iterator,ach_filename)
click to toggle source
# File lib/ach/creator.rb, line 36 def self.create_file(structure,iterator,ach_filename) # records = iterator.get_entry_details @create_ach_file = File.new(ach_filename,"w+") @create_ach_file.close @addenda_count = 1 @addenda_record_count = Array.new @trace_number = 0 @trace_number_counter = Array.new @sequence_number = 1 @entry_hash_collector = Array.new @filecontrol_debits = [] @filecontrol_credits = [] @entrydetails_counter= [] SecurityHeaderRecord.new( :security_header => structure[:bank_params][:security_header], :write_to_file => @create_ach_file) file_header_obj = FileHeaderRecord.new( :record_type => "1", :priority_code => "01", :record_size => "094", :blocking_factor => "10", :file_creation_date => structure[:file_header_record][:file_creation_date], :file_creation_time => structure[:file_header_record][:file_creation_time], :format_code => "1", :file_id => structure[:bank_params][:file_id_yml], :bank_name => structure[:bank_params][:name], :company_name => structure[:file_header_record][:company_name], :file_id_modifier => structure[:file_header_record][:file_id_modifier], :origination_bank => "WELLS FARGO", :wellsfargo_routing_number => " 091000019", :write_to_file => @create_ach_file) structure[:batch_header_records].each_with_index do |bhr,index| @batch_debit_collector = [] @batch_credit_collector = [] @batch_header_obj = BatchHeaderRecord.new( :record_type => '5', :service_class_code => bhr[:service_class_code], :company_name => bhr[:company_name], :company_discretionary_data => (bhr[:company_discretionary_data] ? bhr[:company_discretionary_data] : nil), :company_id => structure[:bank_params][:company_id_yml], :standard_entry_class_code => bhr[:standard_entry_class_code], :company_entry_description => bhr[:company_entry_description], :company_descriptive_date => (bhr[:company_descriptive_date] ? bhr[:company_descriptive_date] : nil), :effective_entry_date => bhr[:effective_entry_date], :batch_number => (index+1).to_s, :originator_status_code => "1", :wellsfargo_routing_number => structure[:bank_params][:routing_num_originating_dfi_yml], :write_to_file => @create_ach_file) #chunk which supports creation of entry_detail db entries. Send in batch db entry's id @entry_details = iterator.get_entry_details @entrydetails_counter << @entry_details.size.to_i @entry_details.each do |i| @receiving_dfi_routing_num = i[:receiving_dfi_routing_number] rt_num_check_mod = mod_operation(@receiving_dfi_routing_num) @trace_number_counter.push @trace_number @trace_number+=1 entry_detail = EntryDetailRecord.new( :transaction_code => i[:transaction_code], :receiving_dfi_routing_num => @receiving_dfi_routing_num, :rt_num_check => rt_num_check_mod, :receiving_dfi_acc_num => i[:receiving_dfi_account_number], :amount => i[:amount].to_s.sub(/[.]/,''), :individual_id => i[:individual_id], :individual_name => (i[:individual_name].nil? ? "" : i[:individual_name]), :routing_number => structure[:bank_params][:routing_num_originating_dfi_yml], :trace_number => @trace_number, :settlement_id => i.respond_to?(:settlement_id) ? i[:settlement_id] : nil, :loan_payment_id => i.respond_to?(:loan_payment_id) ? i[:loan_payment_id] : nil, :write_to_file => @create_ach_file, :db_entry_amount => i[:amount]) #amount for storing the ach_@entry_details_table if (i[:transaction_code]=="22" or i[:transaction_code]=="32") @batch_credit_collector.push i[:amount].to_f else @batch_debit_collector.push i[:amount].to_f end @rdfi_rtn_split = @receiving_dfi_routing_num.slice(0..7) @rdfi_rtn_split.each {|i| @entry_hash_collector.push i.to_i} @addenda_count+=1 @addenda_record_count.push @addenda_count end #TODO: REPLACE addendacount!!! @entry_details[:records].size batch_control = BatchControlRecord.new( :service_class_code => bhr[:service_class_code], :addenda_count => @entry_details.size, :entry_hash => @entry_hash_collector.inject(0) {|sum,i| sum+i}, :total_debits => @batch_debit_collector.inject(0) {|sum,i| sum+i}.to_s.sub(/[.]/,''), :total_credits => @batch_credit_collector.inject(0) {|sum,i| sum+i}.to_s.sub(/[.]/,''), :company_id => structure[:bank_params][:company_id_yml], :routing_num => structure[:bank_params][:routing_num_originating_dfi_yml], :batch_number => (index+1).to_s, :write_to_file => @create_ach_file) @batch_credit_collector.each {|x| @filecontrol_credits << x} @batch_debit_collector.each {|x| @filecontrol_debits << x} end # rt_num_check_mod = mod_operation(structure[:bank_params][:receiving_dfi_routing_num]) @count_filelines = %x(wc -l #{"#{ach_filename}"}).split.first.to_i @block_count = block_count(@count_filelines) #((@trace_number_counter.last-1)+(@addenda_record_count.last-1)), #TODO: REPLACE THIS!!! @entry_details[:records].size file_control = FileControlRecord.new( :batch_count => structure[:batch_header_records].size, :block_count => @block_count, :entry_addenda => @entrydetails_counter.inject(0) {|sum,i| sum+i}, :entry_hash_total => @entry_hash_collector.inject(0) {|sum,i| sum+i}, :total_debits => @filecontrol_debits.inject(0) {|sum,i| sum+i}.to_s.sub(/[.]/,''), :total_credits => @filecontrol_credits.inject(0) {|sum,i| sum+i}.to_s.sub(/[.]/,''), :write_to_file => @create_ach_file) end
mod_operation(routing_num_mod)
click to toggle source
# File lib/ach/creator.rb, line 17 def self.mod_operation(routing_num_mod) @rtnum = routing_num_mod.to_s.split(//) @multiply = Array.new @multiply.push(@rtnum[0].to_i * 3) @multiply.push(@rtnum[1].to_i * 7) @multiply.push(@rtnum[2].to_i * 1) @multiply.push(@rtnum[3].to_i * 3) @multiply.push(@rtnum[4].to_i * 7) @multiply.push(@rtnum[5].to_i * 1) @multiply.push(@rtnum[6].to_i * 3) @multiply.push(@rtnum[7].to_i * 7) @add = (@multiply[0] + @multiply[1] + @multiply[2] + @multiply[3] + @multiply[4] + @multiply[5] + @multiply[6] + @multiply[7]) if (@add % 10) == 0 return (@add % 10) else return ((@add + 10 - (@add % 10)) - @add) end end
write_header(content,ach_filename)
click to toggle source
# File lib/ach/creator.rb, line 11 def self.write_header(content,ach_filename) ach_file = File.new(ach_filename.path,"a+") ach_file.puts(content) ach_file.close end