We were getting an exception when quering[1] for milestones which were not present, due to for example having a publication date later than today
Adding a `try` statement and spec to avoid this situation
[1] 82efc3dd66/app/controllers/budgets/executions_controller.rb (L16)
47 lines
1.5 KiB
Ruby
47 lines
1.5 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
|
|
|
|
if params[:status].present?
|
|
@investments_by_heading = @budget.investments.winners
|
|
.joins(:milestones).includes(:milestones)
|
|
.select { |i| i.milestones.published.with_status
|
|
.order_by_publication_date.last
|
|
.try(:status_id) == params[:status].to_i }
|
|
.uniq
|
|
.group_by(&:heading)
|
|
else
|
|
@investments_by_heading = @budget.investments.winners
|
|
.joins(:milestones).includes(:milestones)
|
|
.distinct.group_by(&:heading)
|
|
end
|
|
|
|
@investments_by_heading = reorder_alphabetically_with_city_heading_first.to_h
|
|
end
|
|
|
|
private
|
|
|
|
def load_budget
|
|
@budget = Budget.find_by(slug: params[:id]) || Budget.find_by(id: params[:id])
|
|
end
|
|
|
|
def reorder_alphabetically_with_city_heading_first
|
|
@investments_by_heading.sort do |a, b|
|
|
if a[0].name == 'Toda la ciudad'
|
|
-1
|
|
elsif b[0].name == 'Toda la ciudad'
|
|
1
|
|
else
|
|
a[0].name <=> b[0].name
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|