class BankStatementTxt
Attributes
px[R]
Public Class Methods
new()
click to toggle source
# File lib/bankstatement_txt.rb, line 14 def initialize() end
Public Instance Methods
import(filepath)
click to toggle source
# File lib/bankstatement_txt.rb, line 17 def import(filepath) new_import(filepath) end
inspect()
click to toggle source
# File lib/bankstatement_txt.rb, line 23 def inspect() "<bankstatement #{object.id}>" end
summary()
click to toggle source
# File lib/bankstatement_txt.rb, line 27 def summary() @dx end
Private Instance Methods
new_import(filepath)
click to toggle source
# File lib/bankstatement_txt.rb, line 34 def new_import(filepath) data = File.read filepath csv = CSV.new(data, :headers => true, :header_converters => :symbol, :converters => :all) a = csv.to_a.map(&:to_hash) a.reject!(&:empty?) a2 = a.group_by {|x| Date.parse(x[:date]).year } a3 = a2.inject({}) do |r, pair| year, x = pair r.merge(year => x.group_by {|y| Date.parse(y[:date]).month}) end px = PxLite.new("statement[title,tags]/year[title]/month[title, " + "credit, debit]/entry[date, type, desc, credit, " + "debit, balance, tags]") rec = [] a3.each do |year, year_entries| rec << yearx = [{title: year.to_s}, []] year_entries.each do |month, entries| yearx.last << monthx = [{title: Date::ABBR_MONTHNAMES[month]}, []] entries.each do |x| v = x[:value] credit, debit = v > 0 ? [v, nil] : [nil, v.abs] monthx.last << [{date: x[:date], type: x[:type], desc: x[:description], credit: credit, debit: debit, balance: x[:balance]}, []] end end end # totalise each the credit and debit columns for each month rec.each do |year, months| months.each do |month, entries| month[:credit] = entries.map {|x| x[0][:credit].to_f }.inject(:+) month[:debit] = entries.map {|x| x[0][:debit].to_f }.inject(:+) end end # create a Dynarex document for the totals for each month @dx = Dynarex.new('months[title]/month(uid, year, month, ' + 'debit, credit, net_income)') rec.each do |year, months| months.each do |month, entries| debit, credit = month[:debit], month[:credit] @dx.create year: year[:title], month: month[:title], debit: debit.round(2), credit: credit.round(2), net_income: (credit - debit).round(2) end end px.records = rec @px = px end