module VersionReportsHelper def display_issue(issue, *options) text = issue.subject text = text.sub(/\!\!\w*/,'') if options.include? :tracker text = "#{issue.tracker} ##{issue.id} " + text end link_to text, issue_path(issue) end def issue_time(issue) if @show_time && issue.total_spent_hours > 0 l_hours(issue.total_spent_hours) end end def issue_money(issue, *options) if @show_money amount = custom_price(issue) || hours_to_money(issue.total_spent_hours) amount = amount.round if options.include?(:format) number_to_currency amount, :precision => 0 else amount end end end def hourly_rate @rate ||= to_float( custom_field_value(@version, :rate) || DEFAULT_REPORT_RATE ) end def hours_to_money(hours) (hours||0) * hourly_rate end # # name is a key for REPORT_CUSTOM_FIELDS hash # def custom_field(object, name) object.custom_field_values.detect {|value| value.custom_field.name == REPORT_CUSTOM_FIELDS[name] } end def custom_field_value(object, name) v = custom_field(object, name) if v v.value end end def hour_budget_error(issue) return unless @show_time || @show_money time_budget = (custom_field_value(issue, :hours) || 0).to_i money_budget = (custom_field_value(issue, :money) || 0).to_i if time_budget != 0 if issue.total_spent_hours.round != time_budget if issue.total_spent_hours < time_budget content_tag :div, :class => 'flash error' do "%s under budget!" % l_hours(time_budget - issue.total_spent_hours) end elsif issue.total_spent_hours > time_budget content_tag :div, :class => 'flash warning' do "%s over budget!" % l_hours(issue.total_spent_hours - time_budget) end end end elsif money_budget != 0 actual_money = issue_money(issue).round if actual_money != money_budget if actual_money < money_budget content_tag :div, :class => 'flash error' do "%s under budget!" % l_hours((money_budget - actual_money) / hourly_rate) end elsif actual_money > money_budget content_tag :div, :class => 'flash warning' do "%s over budget!" % l_hours((actual_money - money_budget) / hourly_rate) end end end end end def custom_price(issue) value = custom_field_value(issue, :price) if value.present? && value != "0" to_float(value) end end def report_header(version) url = custom_field_value(version, :header) if !url.present? url = DEFAULT_REPORT_HEADER end %().html_safe end # show_value requires CustomFieldsHelper def report_summary(version) show_value(custom_field(version, :summary)) end def total_time(version, issues) l_hours(issues.sum(&:total_spent_hours)) if @show_time end def total_money(version, issues) if @show_money total = issues.sum {|issue| issue_money(issue)} number_to_currency total, :precision => 0 end end # drops currency in a string. def to_float(string) string.gsub(/[^0-9\.]/, '').to_f end end