treasurer 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/VERSION +1 -1
 - data/lib/treasurer/accounts.rb +18 -7
 - data/lib/treasurer/analysis.rb +1 -1
 - data/lib/treasurer/report.rb +89 -32
 - data/treasurer.gemspec +2 -2
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 35303062ab1213c78219bc4cee48f130315b8622
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3154086ac7c046ed468f065f0dd8157066335741
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: '0709aac9aa7adfbd5f02e47df4ffa830b05f51e0f48e45ba9b26b3db90cdf593c2b80c220f8fe410783b7283916d084b95c8703491a0aff6572d77717957fa1f'
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2ce89966f7b2b7cec7c9b3a47dcda0eeed7cfe6a4584ce7e77d213dd6144a52056c934147d81a4d55dde60b7d936c6c2cbb426fe6749b15e928789c17428d6e8
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.8.0
         
     | 
    
        data/lib/treasurer/accounts.rb
    CHANGED
    
    | 
         @@ -99,8 +99,9 @@ class Treasurer::Reporter 
     | 
|
| 
       99 
99 
     | 
    
         
             
                def red_line(date)
         
     | 
| 
       100 
100 
     | 
    
         
             
                  if Treasurer::LocalCustomisations.instance_methods.include? :red_line
         
     | 
| 
       101 
101 
     | 
    
         
             
                    val = super(name, date)
         
     | 
| 
       102 
     | 
    
         
            -
                    if rc = @report_currency
         
     | 
| 
      
 102 
     | 
    
         
            +
                    if rc = @reporter.report_currency and rc != @original_currency
         
     | 
| 
       103 
103 
     | 
    
         
             
                      er = EXCHANGE_RATES[[@original_currency,rc]]
         
     | 
| 
      
 104 
     | 
    
         
            +
                      #p ['AAAAAAA', name, @original_currency, er, val, rc]
         
     | 
| 
       104 
105 
     | 
    
         
             
                      val *= er
         
     | 
| 
       105 
106 
     | 
    
         
             
                    end
         
     | 
| 
       106 
107 
     | 
    
         
             
                    val
         
     | 
| 
         @@ -120,10 +121,15 @@ class Treasurer::Reporter 
     | 
|
| 
       120 
121 
     | 
    
         
             
                def has_balance?
         
     | 
| 
       121 
122 
     | 
    
         
             
                  not @runs.find{|r| not r.has_balance?} 
         
     | 
| 
       122 
123 
     | 
    
         
             
                end
         
     | 
| 
       123 
     | 
    
         
            -
                def balance(date = @reporter.today) 
         
     | 
| 
      
 124 
     | 
    
         
            +
                def balance(date = @reporter.today, options={}) 
         
     | 
| 
      
 125 
     | 
    
         
            +
                  @balance_cache ||= {}
         
     | 
| 
      
 126 
     | 
    
         
            +
                  if b = @balance_cache[[date,options]] 
         
     | 
| 
      
 127 
     | 
    
         
            +
                    return b 
         
     | 
| 
      
 128 
     | 
    
         
            +
                  end
         
     | 
| 
       124 
129 
     | 
    
         
             
                  date_i = date.to_datetime.to_time.to_i
         
     | 
| 
       125 
130 
     | 
    
         
             
                  #if !date
         
     | 
| 
       126 
131 
     | 
    
         
             
                  #@runs.sort_by{|r| r.date}[-1].balance
         
     | 
| 
      
 132 
     | 
    
         
            +
                  balance = nil
         
     | 
| 
       127 
133 
     | 
    
         
             
                  if @external or not has_balance?
         
     | 
| 
       128 
134 
     | 
    
         
             
                    #p ['name is ', name, type]
         
     | 
| 
       129 
135 
     | 
    
         
             
                    #
         
     | 
| 
         @@ -140,8 +146,13 @@ class Treasurer::Reporter 
     | 
|
| 
       140 
146 
     | 
    
         
             
                  else
         
     | 
| 
       141 
147 
     | 
    
         
             
                    #p ['name33 is ', name, type, @runs.size, @currency]
         
     | 
| 
       142 
148 
     | 
    
         
             
                    nearest_time = @runs.map{|r| (r.date_i - date_i).to_f.abs}.sort[0]
         
     | 
| 
       143 
     | 
    
         
            -
                    @runs.find_all{|r| (r.date_i - date_i).to_f.abs == nearest_time}.sort_by{|r| r.id}[-1].balance
         
     | 
| 
      
 149 
     | 
    
         
            +
                    balance = @runs.find_all{|r| (r.date_i - date_i).to_f.abs == nearest_time}.sort_by{|r| r.id}[-1].balance
         
     | 
| 
      
 150 
     | 
    
         
            +
                  end
         
     | 
| 
      
 151 
     | 
    
         
            +
                  if options[:original_currency] and @original_currency and @original_currency!=currency
         
     | 
| 
      
 152 
     | 
    
         
            +
                    balance = balance*EXCHANGE_RATES[[currency, @original_currency]]
         
     | 
| 
       144 
153 
     | 
    
         
             
                  end
         
     | 
| 
      
 154 
     | 
    
         
            +
                  @balance_cache[[date,options]]=balance
         
     | 
| 
      
 155 
     | 
    
         
            +
                  balance
         
     | 
| 
       145 
156 
     | 
    
         
             
                end
         
     | 
| 
       146 
157 
     | 
    
         
             
                def deposited(today, days_before, &block)
         
     | 
| 
       147 
158 
     | 
    
         
             
                  p ['name223344 is ', name_c, today, days_before]
         
     | 
| 
         @@ -284,7 +295,7 @@ EOF 
     | 
|
| 
       284 
295 
     | 
    
         
             
                  #exit
         
     | 
| 
       285 
296 
     | 
    
         
             
                  @reporter.projected_account_factor = nil
         
     | 
| 
       286 
297 
     | 
    
         
             
                  kit += ( kit4 + kit5 + kit2)
         
     | 
| 
       287 
     | 
    
         
            -
                  kit.yrange = [(m = kit.data.map{|dk| dk.y.data.min}.min; m-m.abs*0.1), (m=kit.data.map{|dk| dk.y.data.max}.max; m+m.abs*0.1)]
         
     | 
| 
      
 298 
     | 
    
         
            +
                  #kit.yrange = [(m = kit.data.map{|dk| dk.y.data.min}.min; m-m.abs*0.1), (m=kit.data.map{|dk| dk.y.data.max}.max; m+m.abs*0.1)]
         
     | 
| 
       288 
299 
     | 
    
         
             
                  #kit += (kit2)
         
     | 
| 
       289 
300 
     | 
    
         
             
                  kit = kit3 + kit
         
     | 
| 
       290 
301 
     | 
    
         
             
                  kit.title = "Balance for #{name_c}"
         
     | 
| 
         @@ -317,9 +328,9 @@ EOF 
     | 
|
| 
       317 
328 
     | 
    
         | 
| 
       318 
329 
     | 
    
         
             
                  fork do
         
     | 
| 
       319 
330 
     | 
    
         
             
                    (kit).gnuplot_write("#{name_c_file}_balance.eps", size: size) #, latex: true)
         
     | 
| 
       320 
     | 
    
         
            -
                    %x[ 
     | 
| 
      
 331 
     | 
    
         
            +
                    %x[epstopdf #{name_c_file}_balance.eps]
         
     | 
| 
       321 
332 
     | 
    
         
             
                  end
         
     | 
| 
       322 
     | 
    
         
            -
                  #%x[ 
     | 
| 
      
 333 
     | 
    
         
            +
                  #%x[epstopdf #{name}_balance.eps]
         
     | 
| 
       323 
334 
     | 
    
         
             
                end
         
     | 
| 
       324 
335 
     | 
    
         
             
                # A string to include the balance graph in the document
         
     | 
| 
       325 
336 
     | 
    
         
             
                def balance_graph_string
         
     | 
| 
         @@ -355,7 +366,7 @@ EOF 
     | 
|
| 
       355 
366 
     | 
    
         
             
                    else
         
     | 
| 
       356 
367 
     | 
    
         
             
                      0.0
         
     | 
| 
       357 
368 
     | 
    
         
             
                    end
         
     | 
| 
       358 
     | 
    
         
            -
                  }.sum
         
     | 
| 
      
 369 
     | 
    
         
            +
                  }.sum + sum_of_assets
         
     | 
| 
       359 
370 
     | 
    
         
             
                end
         
     | 
| 
       360 
371 
     | 
    
         
             
                def balance(date=@reporter.today)
         
     | 
| 
       361 
372 
     | 
    
         
             
                  @accounts.map{|acc|
         
     | 
    
        data/lib/treasurer/analysis.rb
    CHANGED
    
    | 
         @@ -28,7 +28,7 @@ module Analysis 
     | 
|
| 
       28 
28 
     | 
    
         
             
                #ep ['account', account.name_c]
         
     | 
| 
       29 
29 
     | 
    
         
             
            		counter = 0
         
     | 
| 
       30 
30 
     | 
    
         
             
            		if not account.info[:period]
         
     | 
| 
       31 
     | 
    
         
            -
                  start_dates.push  
     | 
| 
      
 31 
     | 
    
         
            +
                  start_dates.push (account.info[:start]||@start_date)
         
     | 
| 
       32 
32 
     | 
    
         
             
            			end_dates.push date
         
     | 
| 
       33 
33 
     | 
    
         
             
            			account_items.push items
         
     | 
| 
       34 
34 
     | 
    
         
             
            			expenditures.push (items.map{|r| (r.deposit - r.withdrawal) * (account.info[:external] ? -1 : 1)}+[0]).sum
         
     | 
    
        data/lib/treasurer/report.rb
    CHANGED
    
    | 
         @@ -200,6 +200,7 @@ class Treasurer 
     | 
|
| 
       200 
200 
     | 
    
         
             
                  report << footer
         
     | 
| 
       201 
201 
     | 
    
         | 
| 
       202 
202 
     | 
    
         
             
                  File.open('report.tex', 'w'){|f| f.puts report}
         
     | 
| 
      
 203 
     | 
    
         
            +
                  Process.wait
         
     | 
| 
       203 
204 
     | 
    
         
             
                  system "lualatex report.tex && lualatex report.tex"
         
     | 
| 
       204 
205 
     | 
    
         
             
                end
         
     | 
| 
       205 
206 
     | 
    
         
             
                def account_summaries
         
     | 
| 
         @@ -239,14 +240,24 @@ EOF 
     | 
|
| 
       239 
240 
     | 
    
         
             
                end
         
     | 
| 
       240 
241 
     | 
    
         
             
                def expense_account_summary
         
     | 
| 
       241 
242 
     | 
    
         
             
                  <<EOF
         
     | 
| 
       242 
     | 
    
         
            -
            \\section{Expense  
     | 
| 
      
 243 
     | 
    
         
            +
            \\section{Expense and Income Summary}
         
     | 
| 
       243 
244 
     | 
    
         
             
            \\subsection{Totals for #@days_before-day Budget Period}
         
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
      
 245 
     | 
    
         
            +
            \\subsection{Expense}
         
     | 
| 
      
 246 
     | 
    
         
            +
                  #{expense_pie_charts_by_currency('accountperiod_expense', @expense_accounts){|r| r.days_ago(@today) < @days_before}}
         
     | 
| 
      
 247 
     | 
    
         
            +
            \\subsection{Income}
         
     | 
| 
      
 248 
     | 
    
         
            +
                  #{expense_pie_charts_by_currency('accountperiod_income', @accounts.find_all{|acc| acc.type==:Income}){|r| r.days_ago(@today) < @days_before}}
         
     | 
| 
       245 
249 
     | 
    
         
             
            \\subsection{Expense Account Breakdown}
         
     | 
| 
       246 
250 
     | 
    
         
             
                  #{@expense_accounts.find_all{|exaccount| exaccount.should_report?}.map{|exaccount|
         
     | 
| 
       247 
251 
     | 
    
         
             
                      account = exaccount.report_account
         
     | 
| 
       248 
252 
     | 
    
         
             
                      "
         
     | 
| 
       249 
     | 
    
         
            -
            \\ 
     | 
| 
      
 253 
     | 
    
         
            +
            \\subsubsection{#{account.name_c}}
         
     | 
| 
      
 254 
     | 
    
         
            +
                  #{expense_pie_chart(account.name_c_file + 'breakdown', account.sub_accounts, account){|r|r.days_ago(@today) < @days_before }}"
         
     | 
| 
      
 255 
     | 
    
         
            +
                  }.join("\n\n")}
         
     | 
| 
      
 256 
     | 
    
         
            +
            \\subsection{Income Account Breakdown}
         
     | 
| 
      
 257 
     | 
    
         
            +
                  #{@accounts.find_all{|inaccount| inaccount.type==:Income and inaccount.should_report?}.map{|inaccount|
         
     | 
| 
      
 258 
     | 
    
         
            +
                      account = inaccount.report_account
         
     | 
| 
      
 259 
     | 
    
         
            +
                      "
         
     | 
| 
      
 260 
     | 
    
         
            +
            \\subsubsection{#{account.name_c}}
         
     | 
| 
       250 
261 
     | 
    
         
             
                  #{expense_pie_chart(account.name_c_file + 'breakdown', account.sub_accounts, account){|r|r.days_ago(@today) < @days_before }}"
         
     | 
| 
       251 
262 
     | 
    
         
             
                  }.join("\n\n")}
         
     | 
| 
       252 
263 
     | 
    
         
             
            EOF
         
     | 
| 
         @@ -284,21 +295,33 @@ EOF 
     | 
|
| 
       284 
295 
     | 
    
         
             
                          start_dates = start_dates.reverse
         
     | 
| 
       285 
296 
     | 
    
         
             
                          pp ['DATES', start_dates, end_dates, subacc.name]
         
     | 
| 
       286 
297 
     | 
    
         
             
                          return "No expenditure in account period." if end_dates.size==0
         
     | 
| 
      
 298 
     | 
    
         
            +
                          #keylabels = []
         
     | 
| 
       287 
299 
     | 
    
         
             
                          k = (
         
     | 
| 
       288 
300 
     | 
    
         
             
                            end_dates.size.times.map do |i|
         
     | 
| 
       289 
     | 
    
         
            -
                              exps =  
     | 
| 
       290 
     | 
    
         
            -
                               
     | 
| 
      
 301 
     | 
    
         
            +
                              exps = []
         
     | 
| 
      
 302 
     | 
    
         
            +
                              if subacc.type==:Expense
         
     | 
| 
      
 303 
     | 
    
         
            +
                                exps = accounts.map{|acc| acc.deposited(end_dates[i], end_dates[i] - start_dates[i], &block)}
         
     | 
| 
      
 304 
     | 
    
         
            +
                              else
         
     | 
| 
      
 305 
     | 
    
         
            +
                                exps = accounts.map{|acc| acc.withdrawn(end_dates[i], end_dates[i] - start_dates[i], &block) - 
         
     | 
| 
      
 306 
     | 
    
         
            +
                                                    acc.deposited(end_dates[i], end_dates[i] - start_dates[i], &block)
         
     | 
| 
      
 307 
     | 
    
         
            +
                                }
         
     | 
| 
      
 308 
     | 
    
         
            +
                              end
         
     | 
| 
      
 309 
     | 
    
         
            +
                              kt = GraphKit.quick_create([labels.size.times.to_a.map{|l| l.to_f + i.to_f/(end_dates.size+1).to_f}, exps])
         
     | 
| 
       291 
310 
     | 
    
         
             
                              kt.data[0].gp.title = "Ending #{end_dates[i].strftime("#{end_dates[i].mday.ordinalize} %B")}; total = #{exps.sum}"
         
     | 
| 
       292 
     | 
    
         
            -
                              kt.gp.key = " 
     | 
| 
      
 311 
     | 
    
         
            +
                              kt.gp.key = "rmargin"
         
     | 
| 
      
 312 
     | 
    
         
            +
                              #keylabels.push "'Ending #{end_dates[i].strftime("#{end_dates[i].mday.ordinalize} %B")}; total = #{exps.sum}'"
         
     | 
| 
      
 313 
     | 
    
         
            +
                              #kt.gp.key = "off rotate by 90"
         
     | 
| 
       293 
314 
     | 
    
         
             
                              kt
         
     | 
| 
       294 
315 
     | 
    
         
             
                            end
         
     | 
| 
       295 
316 
     | 
    
         
             
                          ).sum
         
     | 
| 
       296 
317 
     | 
    
         
             
                          k
         
     | 
| 
       297 
318 
     | 
    
         
             
                        else
         
     | 
| 
       298 
     | 
    
         
            -
                          exps = accounts.map{|acc| acc.deposited(@today, 50000, &block)}
         
     | 
| 
      
 319 
     | 
    
         
            +
                          exps = accounts.map{|acc| acc.type==:Expense ? acc.deposited(@today, 50000, &block) - acc.withdrawn(@today, 50000, &block): acc.withdrawn(@today, 50000, &block) - acc.deposited(@today, 50000, &block)}
         
     | 
| 
       299 
320 
     | 
    
         
             
                          labels, exps = [labels, exps].transpose.find_all{|l, e| e != 0.0}.transpose
         
     | 
| 
       300 
321 
     | 
    
         
             
                          return "No expenditure in account period." if not labels #<F8> labels.size==0
         
     | 
| 
       301 
     | 
    
         
            -
                          GraphKit.quick_create([labels.size.times.to_a, exps])
         
     | 
| 
      
 322 
     | 
    
         
            +
                          k = GraphKit.quick_create([labels.size.times.to_a, exps])
         
     | 
| 
      
 323 
     | 
    
         
            +
                          k.data[0].gp.title = "Cumulative over budget period. Total = #{exps.sum}"
         
     | 
| 
      
 324 
     | 
    
         
            +
                          k
         
     | 
| 
       302 
325 
     | 
    
         
             
                        end
         
     | 
| 
       303 
326 
     | 
    
         | 
| 
       304 
327 
     | 
    
         | 
| 
         @@ -315,20 +338,38 @@ EOF 
     | 
|
| 
       315 
338 
     | 
    
         
             
                  kit.gp.yrange = "[#{[kit.data[0].y.data.min,0].min}:]"
         
     | 
| 
       316 
339 
     | 
    
         
             
                  #kit.gp.xrange = "[-1:#{labels.size+1}]"
         
     | 
| 
       317 
340 
     | 
    
         
             
                  kit.gp.xrange = "[-1:1]" if labels.size==1
         
     | 
| 
       318 
     | 
    
         
            -
                  kit.gp. 
     | 
| 
      
 341 
     | 
    
         
            +
                  kit.gp.mytics = "5"
         
     | 
| 
      
 342 
     | 
    
         
            +
                  kit.gp.ytics = "autofreq rotate by 45"
         
     | 
| 
      
 343 
     | 
    
         
            +
                  kit.gp.grid = "ytics mytics lw 2,lw 1"
         
     | 
| 
       319 
344 
     | 
    
         
             
                  kit.xlabel = nil
         
     | 
| 
       320 
345 
     | 
    
         
             
                  kit.ylabel = nil
         
     | 
| 
       321 
346 
     | 
    
         
             
                  i = -1
         
     | 
| 
       322 
     | 
    
         
            -
                  kit.gp.xtics = "(#{labels.map{|l| %["#{l}" #{i+=1}]}.join(', ')}) rotate by  
     | 
| 
      
 347 
     | 
    
         
            +
                  kit.gp.xtics = "(#{labels.map{|l| %["#{l}" #{i+=1}]}.join(', ')}) rotate by 90 right"
         
     | 
| 
       323 
348 
     | 
    
         
             
                  pp ['kit222', kit, labels]
         
     | 
| 
       324 
349 
     | 
    
         
             
                  fork do
         
     | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
       326 
     | 
    
         
            -
                     
     | 
| 
      
 350 
     | 
    
         
            +
             
     | 
| 
      
 351 
     | 
    
         
            +
                    kit.gp.key = "off"
         
     | 
| 
      
 352 
     | 
    
         
            +
                    kit.gnuplot_write("#{name}.eps", size: "#{[[labels.size.to_f/4.5, 4.5].min, 1.0].max}in,4.5in")
         
     | 
| 
      
 353 
     | 
    
         
            +
                    kit.gp.key = "tmargin"
         
     | 
| 
      
 354 
     | 
    
         
            +
                    kit.gp.border = "unset"
         
     | 
| 
      
 355 
     | 
    
         
            +
                    kit.gp.xtics = "unset"
         
     | 
| 
      
 356 
     | 
    
         
            +
                    kit.gp.ytics = "unset"
         
     | 
| 
      
 357 
     | 
    
         
            +
                    kit.gp.title = "unset"
         
     | 
| 
      
 358 
     | 
    
         
            +
                    kit.gp.xlabel = "unset"
         
     | 
| 
      
 359 
     | 
    
         
            +
                    kit.gp.ylabel = "unset"
         
     | 
| 
      
 360 
     | 
    
         
            +
                    #kit.gp.xrange = "[-100:-10]"
         
     | 
| 
      
 361 
     | 
    
         
            +
                    kit.gp.boxwidth = "#{0.0/kit.data.size} absolute"
         
     | 
| 
      
 362 
     | 
    
         
            +
                    kit.gp.object = " rect from screen 0, screen 0 to screen 1, graph 1 front fc rgb 'white' fillstyle solid noborder"     
         
     | 
| 
      
 363 
     | 
    
         
            +
                    #kit.gp.style = "fill empty noborder"
         
     | 
| 
      
 364 
     | 
    
         
            +
                    #kit.gp.yrange = "[-10:10]"
         
     | 
| 
      
 365 
     | 
    
         
            +
                    kit.gnuplot_write("#{name}_key.eps", size: "4.0in,1.5in")
         
     | 
| 
      
 366 
     | 
    
         
            +
                    %x[convert -density 500 #{name}_key.eps -resize 4000 -bordercolor white -border 20x20 -background white -flatten -trim  +repage #{name}_key.pdf]
         
     | 
| 
      
 367 
     | 
    
         
            +
                    #%x[convert -density 500 #{name}.eps -resize 4000 -bordercolor white -border 20x20 -background white -flatten -trim  +repage #{name}.pdf]
         
     | 
| 
       327 
368 
     | 
    
         
             
                  end
         
     | 
| 
       328 
369 
     | 
    
         | 
| 
       329 
370 
     | 
    
         
             
                  #"\\begin{center}\\includegraphics[width=3.0in]{#{name}.eps}\\vspace{1em}\\end{center}"
         
     | 
| 
       330 
371 
     | 
    
         
             
                  #"\\begin{center}\\includegraphics[width=0.9\\textwidth]{#{name}.eps}\\vspace{1em}\\end{center}"
         
     | 
| 
       331 
     | 
    
         
            -
                  "\\ 
     | 
| 
      
 372 
     | 
    
         
            +
                  "\\myfigurerot{#{name}.eps}{#{name}_key.pdf}{270}"
         
     | 
| 
       332 
373 
     | 
    
         
             
                end
         
     | 
| 
       333 
374 
     | 
    
         
             
                def get_in_limit_discretionary_account_factor(currency)
         
     | 
| 
       334 
375 
     | 
    
         
             
                  @projected_account_factor = 1.0
         
     | 
| 
         @@ -380,13 +421,17 @@ EOF 
     | 
|
| 
       380 
421 
     | 
    
         
             
            \\section{Discretionary Budget Summary (#{currency})}
         
     | 
| 
       381 
422 
     | 
    
         
             
            \\begin{tabulary}{0.9\\textwidth}{ R | r  r  r r  }
         
     | 
| 
       382 
423 
     | 
    
         
             
            Budget & Average & Projection & Limit & Stable \\\\
         
     | 
| 
       383 
     | 
    
         
            -
                  #{ 
     | 
| 
      
 424 
     | 
    
         
            +
                  #{tls = [0.0, 0.0, 0.0, 0.0] 
         
     | 
| 
      
 425 
     | 
    
         
            +
                    discretionary_accounts.map{|account, info|
         
     | 
| 
       384 
426 
     | 
    
         
             
                  #ep info
         
     | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
       386 
     | 
    
         
            -
                    (account.projection * @in_limit_discretionary_account_factors[currency]). 
     | 
| 
       387 
     | 
    
         
            -
                  #{(account.projection * @stable_discretionary_account_factors[currency]). 
     | 
| 
      
 427 
     | 
    
         
            +
                      "#{account.name_c} & #{(tls[0]+=account.average).to_tex} & #{(tls[1]+=account.projection).to_tex} & #{
         
     | 
| 
      
 428 
     | 
    
         
            +
                    (tls[2]+=account.projection * @in_limit_discretionary_account_factors[currency]).to_tex} &
         
     | 
| 
      
 429 
     | 
    
         
            +
                  #{(tls[3]+=account.projection * @stable_discretionary_account_factors[currency]).to_tex}  \\\\"
         
     | 
| 
       388 
430 
     | 
    
         
             
                  }.join("\n\n")
         
     | 
| 
       389 
431 
     | 
    
         
             
                  }
         
     | 
| 
      
 432 
     | 
    
         
            +
            \\\\
         
     | 
| 
      
 433 
     | 
    
         
            +
            \\hline
         
     | 
| 
      
 434 
     | 
    
         
            +
            Totals & #{tls.map{|v| v.to_tex}.join(" & ")}
         
     | 
| 
       390 
435 
     | 
    
         
             
            \\end{tabulary}
         
     | 
| 
       391 
436 
     | 
    
         
             
            EOF
         
     | 
| 
       392 
437 
     | 
    
         
             
                end
         
     | 
| 
         @@ -450,7 +495,7 @@ EOF 
     | 
|
| 
       450 
495 
     | 
    
         
             
                      #ep ['kit1122', account, kit]
         
     | 
| 
       451 
496 
     | 
    
         
             
                      fork do
         
     | 
| 
       452 
497 
     | 
    
         
             
                        kit.gnuplot_write("#{account.name_c_file}.eps", size: "4.0in,2.0in")
         
     | 
| 
       453 
     | 
    
         
            -
                        exec " 
     | 
| 
      
 498 
     | 
    
         
            +
                        exec "epstopdf #{account.name_c_file}.eps"
         
     | 
| 
       454 
499 
     | 
    
         
             
                      end
         
     | 
| 
       455 
500 
     | 
    
         
             
                      #%x[ps2eps #{account}.ps]
         
     | 
| 
       456 
501 
     | 
    
         
             
                      #"\\begin{center}\\includegraphics[width=3.0in]{#{account}.eps}\\vspace{1em}\\end{center}"
         
     | 
| 
         @@ -597,9 +642,9 @@ EOF 
     | 
|
| 
       597 
642 
     | 
    
         | 
| 
       598 
643 
     | 
    
         
             
                def header
         
     | 
| 
       599 
644 
     | 
    
         
             
                  <<EOF
         
     | 
| 
       600 
     | 
    
         
            -
            \\documentclass[a5paper]{article}
         
     | 
| 
       601 
     | 
    
         
            -
            %\\usepackage[scale=0. 
     | 
| 
       602 
     | 
    
         
            -
            \\usepackage[left= 
     | 
| 
      
 645 
     | 
    
         
            +
            \\documentclass[a5paper, 10pt]{article}
         
     | 
| 
      
 646 
     | 
    
         
            +
            %\\usepackage[scale=0.92]{geometry}
         
     | 
| 
      
 647 
     | 
    
         
            +
            \\usepackage[left=0.9cm,top=0.9cm,right=0.9cm,bottom=0.5cm,nohead,includefoot]{geometry}
         
     | 
| 
       603 
648 
     | 
    
         
             
            %\\usepackage[cm]{fullpage}
         
     | 
| 
       604 
649 
     | 
    
         
             
            \\usepackage{tabulary}
         
     | 
| 
       605 
650 
     | 
    
         
             
            \\usepackage{graphicx}
         
     | 
| 
         @@ -607,10 +652,22 @@ EOF 
     | 
|
| 
       607 
652 
     | 
    
         
             
            \\usepackage{hyperref}
         
     | 
| 
       608 
653 
     | 
    
         
             
            \\usepackage{libertine}
         
     | 
| 
       609 
654 
     | 
    
         
             
            \\usepackage{xcolor,listings}
         
     | 
| 
      
 655 
     | 
    
         
            +
            \\usepackage{epstopdf}
         
     | 
| 
       610 
656 
     | 
    
         
             
            \\newcommand\\Tstrut{\\rule{0pt}{2.8ex}}
         
     | 
| 
      
 657 
     | 
    
         
            +
            \\newcommand\\myfigurerot[3]{\\vspace*{1em}\\begin{center}
         
     | 
| 
      
 658 
     | 
    
         
            +
             
     | 
| 
      
 659 
     | 
    
         
            +
            \\begin{minipage}{\\textwidth}
         
     | 
| 
      
 660 
     | 
    
         
            +
            \\includegraphics[clip,height=0.90\\textwidth,angle=#3]{#1}
         
     | 
| 
      
 661 
     | 
    
         
            +
             
     | 
| 
      
 662 
     | 
    
         
            +
            \\hfill
         
     | 
| 
      
 663 
     | 
    
         
            +
            \\includegraphics[width=0.5\\textwidth]{#2}
         
     | 
| 
      
 664 
     | 
    
         
            +
            \\end{minipage}
         
     | 
| 
      
 665 
     | 
    
         
            +
            \\end{center}\\vspace*{0em}
         
     | 
| 
      
 666 
     | 
    
         
            +
             
     | 
| 
      
 667 
     | 
    
         
            +
            }
         
     | 
| 
       611 
668 
     | 
    
         
             
            \\newcommand\\myfigure[1]{\\vspace*{1em}\\begin{center}
         
     | 
| 
       612 
669 
     | 
    
         | 
| 
       613 
     | 
    
         
            -
            \\includegraphics[width=0. 
     | 
| 
      
 670 
     | 
    
         
            +
            \\includegraphics[clip,width=0.90\\textwidth]{#1}
         
     | 
| 
       614 
671 
     | 
    
         | 
| 
       615 
672 
     | 
    
         
             
            \\end{center}\\vspace*{0em}
         
     | 
| 
       616 
673 
     | 
    
         | 
| 
         @@ -621,16 +678,16 @@ identifierstyle = \\ttfamily\\color{purple}, 
     | 
|
| 
       621 
678 
     | 
    
         
             
            keywordstyle=\\ttfamily\\color{blue},
         
     | 
| 
       622 
679 
     | 
    
         
             
            stringstyle=\\color{orange}}
         
     | 
| 
       623 
680 
     | 
    
         
             
            \\usepackage[compact]{titlesec}
         
     | 
| 
       624 
     | 
    
         
            -
             
     | 
| 
       625 
     | 
    
         
            -
             
     | 
| 
       626 
     | 
    
         
            -
             
     | 
| 
       627 
     | 
    
         
            -
             
     | 
| 
       628 
     | 
    
         
            -
             
     | 
| 
       629 
     | 
    
         
            -
             
     | 
| 
       630 
     | 
    
         
            -
             
     | 
| 
       631 
     | 
    
         
            -
             
     | 
| 
       632 
     | 
    
         
            -
             
     | 
| 
       633 
     | 
    
         
            -
             
     | 
| 
      
 681 
     | 
    
         
            +
            %\\titlespacing{\\section}{0pt}{*0}{*0}
         
     | 
| 
      
 682 
     | 
    
         
            +
            %\\titlespacing{\\subsection}{0pt}{*0}{*2}
         
     | 
| 
      
 683 
     | 
    
         
            +
            %\\titlespacing{\\subsubsection}{0pt}{*0}{*0}
         
     | 
| 
      
 684 
     | 
    
         
            +
            %\\setlength{\\parskip}{0pt}
         
     | 
| 
      
 685 
     | 
    
         
            +
            %\\setlength{\\parsep}{0pt}
         
     | 
| 
      
 686 
     | 
    
         
            +
            %\\setlength{\\headsep}{0pt}
         
     | 
| 
      
 687 
     | 
    
         
            +
            %\\setlength{\\topskip}{0pt}
         
     | 
| 
      
 688 
     | 
    
         
            +
            %\\setlength{\\topmargin}{0pt}
         
     | 
| 
      
 689 
     | 
    
         
            +
            %\\setlength{\\topsep}{0pt}
         
     | 
| 
      
 690 
     | 
    
         
            +
            %\\setlength{\\partopsep}{0pt}
         
     | 
| 
       634 
691 
     | 
    
         
             
            \\begin{document}
         
     | 
| 
       635 
692 
     | 
    
         
             
            \\title{Budget Report from #{@start_date.strftime("%A #{@start_date.day.ordinalize} of %B %Y")} to #{@today.strftime("%A #{@today.day.ordinalize} of %B %Y")}}
         
     | 
| 
       636 
693 
     | 
    
         
             
            \\author{With projections to #{@end_date.strftime("%A #{@end_date.day.ordinalize} of %B %Y")}}
         
     | 
    
        data/treasurer.gemspec
    CHANGED
    
    | 
         @@ -2,11 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
       3 
3 
     | 
    
         
             
            # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
         
     | 
| 
       4 
4 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       5 
     | 
    
         
            -
            # stub: treasurer 0. 
     | 
| 
      
 5 
     | 
    
         
            +
            # stub: treasurer 0.8.0 ruby lib
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.name = "treasurer".freeze
         
     | 
| 
       9 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 9 
     | 
    
         
            +
              s.version = "0.8.0"
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
         
     | 
| 
       12 
12 
     | 
    
         
             
              s.require_paths = ["lib".freeze]
         
     |