Module: BudgetHelper

Defined in:
app/helpers/budget_helper.rb

Constant Summary collapse

ZERO_DISPLAY =

Em dash for zero values - cleaner for management reports

''.freeze

Instance Method Summary collapse

Instance Method Details

#budget_cell(amount, fact, accumulated, additional_class = nil) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/helpers/budget_helper.rb', line 67

def budget_cell(amount, fact, accumulated, additional_class = nil)
  css_classes = [additional_class]
  css_classes << 'danger' if amount < 0
  css_classes << 'zero-value' if amount.zero?

  cell_content = if amount.zero?
                   ZERO_DISPLAY
                 else
                   link_to(number_with_delimiter_acc(amount), show_budgets_for_fact_budgets_path(fact_id: fact.id, accumulated: accumulated))
                 end
  ('td', cell_content, class: css_classes.compact.join(' '))
end

#fact_cells(fact, _dimension) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/helpers/budget_helper.rb', line 5

def fact_cells(fact, _dimension)
  cells = ''
  if fact.nil?
    8.times do
      cells << ('td', '--', class: 'budget-current zero-value')
    end
    8.times do
      cells << ('td', '--', class: 'previous-year zero-value')
    end
  else
    cells << budget_cell(fact.budget_month, fact, false, 'budget-current')
    cells << linked_cell(fact.actual_month, fact, 'current-month', 'budget-current')
    cells << standard_cell(fact.budget_month_diff, 'budget-current')
    cells << percentage_cell(fact.budget_month_percent, fact.is_revenue?, 'budget-current')

    cells << budget_cell(fact.budget_accumulated, fact, true, 'budget-current')
    cells << linked_cell(fact.actual_accumulated, fact, 'current-accumulated', 'budget-current')
    cells << standard_cell(fact.budget_accumulated_diff, 'budget-current')
    cells << percentage_cell(fact.budget_accumulated_percent, fact.is_revenue?, 'budget-current')

    cells << linked_cell(fact.actual_month_previous, fact, 'previous-month', 'previous-year')
    cells << linked_cell(fact.actual_month, fact, 'current-month', 'previous-year')
    cells << standard_cell(fact.actual_month_previous_diff, 'previous-year')
    cells << percentage_cell(fact.actual_month_previous_percent, fact.is_revenue?, 'previous-year')

    cells << linked_cell(fact.actual_accumulated_previous, fact, 'previous-accumulated', 'previous-year')
    cells << linked_cell(fact.actual_accumulated, fact, 'current-accumulated', 'previous-year')
    cells << standard_cell(fact.actual_accumulated_previous_diff, 'previous-year')
    cells << percentage_cell(fact.actual_accumulated_previous_percent, fact.is_revenue?, 'previous-year')
  end
  cells.html_safe
end

#format_amount(amount) ⇒ Object

Format number for display, showing em dash for zeros



43
44
45
# File 'app/helpers/budget_helper.rb', line 43

def format_amount(amount)
  amount.zero? ? ZERO_DISPLAY : number_with_delimiter_acc(amount)
end

#linked_cell(amount, fact, period, additional_class = nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/helpers/budget_helper.rb', line 54

def linked_cell(amount, fact, period, additional_class = nil)
  css_classes = [additional_class]
  css_classes << 'danger' if amount < 0
  css_classes << 'zero-value' if amount.zero?

  cell_content = if amount.zero?
                   ZERO_DISPLAY
                 else
                   link_to(number_with_delimiter_acc(amount), show_ledger_entries_for_fact_budgets_path(fact_id: fact.id, period: period))
                 end
  ('td', cell_content, class: css_classes.compact.join(' '))
end

#number_with_delimiter_acc(number) ⇒ Object



38
39
40
# File 'app/helpers/budget_helper.rb', line 38

def number_with_delimiter_acc(number)
  number < 0 ? "(#{number_with_delimiter(-number)})" : number_with_delimiter(number)
end

#percentage_cell(percentage, is_revenue, additional_class = nil) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/helpers/budget_helper.rb', line 80

def percentage_cell(percentage, is_revenue, additional_class = nil)
  css_classes = [additional_class]

  if percentage.zero?
    css_classes << 'zero-value'
    return ('td', ZERO_DISPLAY, class: css_classes.compact.join(' '))
  end

  if (is_revenue == true and percentage < 0) or (is_revenue == false and percentage > 0)
    fa_icon = ('i', '', class: 'fa fa-arrow-down')
    css_classes << 'danger'
  elsif (is_revenue == true and percentage > 0) or (is_revenue == false and percentage < 0)
    fa_icon = ('i', '', class: 'fa fa-arrow-up')
    css_classes << 'ok'
  else
    fa_icon = ''
  end
  ('td', number_to_percentage(percentage, precision: 1) + fa_icon, class: css_classes.compact.join(' '))
end

#standard_cell(amount, additional_class = nil) ⇒ Object



47
48
49
50
51
52
# File 'app/helpers/budget_helper.rb', line 47

def standard_cell(amount, additional_class = nil)
  css_classes = [additional_class]
  css_classes << 'danger' if amount < 0
  css_classes << 'zero-value' if amount.zero?
  ('td', format_amount(amount), class: css_classes.compact.join(' '))
end