Files
grecia/app/controllers/budgets/executions_controller.rb

51 lines
1.4 KiB
Ruby

module Budgets
class ExecutionsController < ApplicationController
before_action :load_budget
load_and_authorize_resource :budget
def show
authorize! :read_executions, @budget
@statuses = ::Budget::Investment::Status.all
@headings = @budget.headings
.includes(investments: :milestones)
.joins(investments: :milestones)
.distinct
.order(id: :asc)
if params[:status].present?
@headings = @headings.where(filter_investment_by_latest_milestone, params[:status])
end
@headings = reorder_with_city_heading_first(@headings)
end
private
def load_budget
@budget = Budget.find_by(slug: params[:id]) || Budget.find_by(id: params[:id])
end
def filter_investment_by_latest_milestone
<<-SQL
(SELECT status_id FROM budget_investment_milestones
WHERE investment_id = budget_investments.id ORDER BY publication_date DESC LIMIT 1) = ?
SQL
end
def reorder_with_city_heading_first(original_headings)
headings = original_headings.to_a.dup
city_heading_index = headings.find_index do |heading|
heading.name == "Toda la ciudad"
end
if city_heading_index
headings.insert(0, headings.delete_at(city_heading_index))
else
headings
end
end
end
end