diff --git a/app/controllers/budgets/executions_controller.rb b/app/controllers/budgets/executions_controller.rb index 3d5373391..dc899c3a7 100644 --- a/app/controllers/budgets/executions_controller.rb +++ b/app/controllers/budgets/executions_controller.rb @@ -7,7 +7,16 @@ module Budgets def show authorize! :read_executions, @budget @statuses = ::Budget::Investment::Status.all - @headings = @budget.headings.order(id: :asc) + @headings = @budget.headings + .includes(investments: :milestones) + .joins(investments: :milestones) + .where(budget_investments: {winner: true}) + .distinct + .order(id: :asc) + + if params[:status].present? + @headings = @headings.where(filter_investment_by_latest_milestone, params[:status]) + end end private @@ -16,5 +25,11 @@ module Budgets @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 end end diff --git a/app/helpers/budget_executions_helper.rb b/app/helpers/budget_executions_helper.rb deleted file mode 100644 index 64caa0c18..000000000 --- a/app/helpers/budget_executions_helper.rb +++ /dev/null @@ -1,25 +0,0 @@ -module BudgetExecutionsHelper - - def winner_investments(heading) - if params[:status].present? - heading.investments - .winners - .joins(:milestones) - .distinct - .where(filter_investment_by_latest_milestone, params[:status]) - else - heading.investments - .winners - .joins(:milestones) - .distinct - end - 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 - -end diff --git a/app/views/budgets/executions/_investments.html.erb b/app/views/budgets/executions/_investments.html.erb index b04639a50..0808b354a 100644 --- a/app/views/budgets/executions/_investments.html.erb +++ b/app/views/budgets/executions/_investments.html.erb @@ -1,10 +1,9 @@ <% @headings.each do |heading| %> -

- <%= heading.name %> -

- <% if winner_investments(heading).any? %> +

+ <%= heading.name %> +

- <% winner_investments(heading).each do |investment| %> + <% heading.investments.each do |investment| %>
<%= link_to budget_investment_path(@budget, investment, anchor: "tab-milestones"), data: { 'equalizer-watch': true } do %> @@ -31,9 +30,4 @@
<% end %>
- <% else %> -
- <%= t("budgets.executions.no_winner_investments") %> -
- <% end %> <% end %> diff --git a/app/views/budgets/executions/show.html.erb b/app/views/budgets/executions/show.html.erb index 1d793ea80..dc18d2d08 100644 --- a/app/views/budgets/executions/show.html.erb +++ b/app/views/budgets/executions/show.html.erb @@ -62,6 +62,12 @@
<% end %> - <%= render 'budgets/executions/investments' %> + <% if @headings.any? %> + <%= render 'budgets/executions/investments' %> + <% else %> +
+ <%= t("budgets.executions.no_winner_investments") %> +
+ <% end %> diff --git a/config/locales/en/budgets.yml b/config/locales/en/budgets.yml index b342aaf86..658ac429d 100644 --- a/config/locales/en/budgets.yml +++ b/config/locales/en/budgets.yml @@ -179,7 +179,7 @@ en: page_title: "%{budget} - Milestones" heading: "Participatory budget Milestones" heading_selection_title: "By district" - no_winner_investments: "No winner investments for this heading" + no_winner_investments: "No winner investments in this state" filters: label: "Project's current state" all: "All" diff --git a/config/locales/es/budgets.yml b/config/locales/es/budgets.yml index 7f1e03914..60a02a6eb 100644 --- a/config/locales/es/budgets.yml +++ b/config/locales/es/budgets.yml @@ -179,7 +179,7 @@ es: page_title: "%{budget} - Seguimiento de proyectos" heading: "Seguimiento de proyectos" heading_selection_title: "Ámbito de actuación" - no_winner_investments: "No hay proyectos de gasto ganadores para esta partida" + no_winner_investments: "No hay proyectos de gasto ganadores en este estado" filters: label: "Estado actual del proyecto" all: "Todos" diff --git a/spec/features/budgets/executions_spec.rb b/spec/features/budgets/executions_spec.rb index 0f8a31a8d..78b8ab4d0 100644 --- a/spec/features/budgets/executions_spec.rb +++ b/spec/features/budgets/executions_spec.rb @@ -27,7 +27,9 @@ feature 'Executions' do expect(page).not_to have_content(investment4.title) end - scenario 'render a message for headings without winner investments' do + scenario "Do not display headings with no winning investments for selected status" do + create(:budget_investment_milestone, investment: investment1) + empty_group = create(:budget_group, budget: budget) empty_heading = create(:budget_heading, group: empty_group, price: 1000) @@ -38,11 +40,25 @@ feature 'Executions' do expect(page).to have_content(empty_heading.name) click_link 'Milestones' - click_link "#{empty_heading.name}" - expect(page).to have_content('No winner investments for this heading') + expect(page).to have_content(heading.name) + expect(page).not_to have_content(empty_heading.name) end + scenario "Show message when there are no winning investments with the selected status", :js do + create(:budget_investment_status, name: I18n.t('seeds.budgets.statuses.executed')) + + visit budget_path(budget) + + click_link 'See results' + click_link 'Milestones' + + expect(page).not_to have_content('No winner investments in this state') + + select 'Executed', from: 'status' + + expect(page).to have_content('No winner investments in this state') + end context 'Images' do scenario 'renders milestone image if available' do @@ -157,7 +173,6 @@ feature 'Executions' do select 'Studying the project', from: 'status' expect(page).not_to have_content(investment1.title) - expect(page).to have_content('No winner investments for this heading') select 'Bidding', from: 'status'