bikeindex/bike_index

View on GitHub
app/controllers/admin/invoices_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
F
25%
class Admin::InvoicesController < Admin::BaseController
  include SortableTable
  before_action :set_period, only: [:index]

  def index
    page = params[:page] || 1
    @per_page = params[:per_page] || 50
    @invoices =
      matching_invoices
        .includes(:organization, :payments, :organization_features, :first_invoice)
        .reorder(sort_column + " " + sort_direction)
        .page(page)
        .per(@per_page)
  end

  helper_method :matching_invoices

  protected

  def sortable_columns
    %w[id organization_id amount_cents amount_due_cents amount_paid_cents subscription_start_at subscription_end_at]
  end

  def earliest_period_date
    Time.at(1528767966) # First invoice
  end

  def latest_period_date
    Invoice.maximum(:subscription_end_at) || Time.current
  end

  def matching_invoices
    @query = params[:query]
    invoices = if @query == "active"
      Invoice.active
    elsif @query == "inactive"
      Invoice.inactive
    elsif @query == "first_invoice"
      Invoice.first_invoice
    elsif @query == "renewal_invoice"
      Invoice.renewal_invoice
    else
      @query = nil
      Invoice
    end

    if %w[only_paid only_free].include?(params[:search_paid])
      @search_paid = params[:search_paid]
      invoices = @search_paid == "only_paid" ? invoices.paid : invoices.free
    end

    if %w[subscription_start_at subscription_end_at].include?(params[:time_range_column])
      @time_range_column = params[:time_range_column]
      @search_endless = "not_endless" if @time_range_column == "subscription_end_at"
    else
      @time_range_column = "created_at"
    end

    if %w[endless_only not_endless].include?(params[:search_endless])
      @search_endless ||= params[:search_endless]
      invoices = @search_endless == "endless_only" ? invoices.endless : invoices.not_endless
    end

    if current_organization.present?
      invoices = invoices.where(organization_id: current_organization.id)
    end

    invoices.where(@time_range_column => @time_range)
  end
end