Moneyvate/invoices-site

View on GitHub
lib/priority_calculator.rb

Summary

Maintainability
A
1 hr
Test Coverage
class PriorityCalculator
  attr_accessor :task
  attr_reader :due_date, :status, :complexity

  def initialize(task)
    @task = task
    @due_date = task.due_date
    @status = task.status
    @complexity = task.complexity
  end

  def calculate
    if @task.status == 0
      0
    else
      @complexity + @status + due_date_to_points
    end
  end

  private
  def due_date_to_points
    return 0 if due_date.nil?
    return 50 if due_date.past?

    if (due_date <= 1.week.from_now) && (due_date >= Date.today)
      25
    elsif (due_date <= 1.month.from_now) && (due_date > 1.week.from_now)
      12
    elsif (due_date <= 3.months.from_now) && (due_date > 1.month.from_now)
      9
    elsif (due_date <= 6.months.from_now) && (due_date > 3.months.from_now)
      6
    elsif (due_date <= 9.months.from_now) && (due_date > 6.months.from_now)
      3
    elsif (due_date <= 10.months.from_now) && (due_date > 9.months.from_now)
      2
    elsif (due_date <= 1.year.from_now) && (due_date > 10.months.from_now)
      1
    elsif (due_date > 1.year.from_now)
      0
    end
  end

end