diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb index 8cff4b72b..b4a207ed6 100644 --- a/app/helpers/budgets_helper.rb +++ b/app/helpers/budgets_helper.rb @@ -68,4 +68,16 @@ module BudgetsHelper return unless current_budget.present? MapLocation.where(investment_id: current_budget.investments).map { |l| l.json_data } end + + def display_calculate_winners_button?(budget) + budget.balloting_or_later? + end + + def calculate_winner_button_text(budget) + if budget.investments.winners.empty? + t("admin.budgets.winners.calculate") + else + t("admin.budgets.winners.recalculate") + end + end end diff --git a/app/views/admin/budget_investments/_investments.html.erb b/app/views/admin/budget_investments/_investments.html.erb index da7a49749..cf1713381 100644 --- a/app/views/admin/budget_investments/_investments.html.erb +++ b/app/views/admin/budget_investments/_investments.html.erb @@ -9,7 +9,23 @@ <%= link_to t("admin.budget_investments.index.download_current_selection"), admin_budget_budget_investments_path(csv_params), - class: "float-right small" %> + class: "float-right small clear" %> + +<% if params[:filter] == 'winners' %> + <% if display_calculate_winners_button?(@budget) %> + <%= link_to calculate_winner_button_text(@budget), + calculate_winners_admin_budget_path(@budget), + method: :put, + class: "button hollow float-right clear" %> + <% else %> + + <%= t("admin.budgets.winners.calculate")%> + +
+ <%= t("admin.budget_investments.index.cannot_calculate_winners") %> +
+ <% end %> +<% end %> <% if @investments.any? %>

<%= page_entries_info @investments %>


@@ -134,7 +150,7 @@ <%= paginate @investments %> <% else %> -
+
<%= t("admin.budget_investments.index.no_budget_investments") %>
<% end %> diff --git a/app/views/admin/budgets/_form.html.erb b/app/views/admin/budgets/_form.html.erb index f5ce6b027..52a96c077 100644 --- a/app/views/admin/budgets/_form.html.erb +++ b/app/views/admin/budgets/_form.html.erb @@ -68,7 +68,6 @@ budget_results_path(@budget), class: "button hollow margin-left" %> <% end %> - <% if @budget.persisted? %> <%= link_to t("admin.budgets.edit.delete"), admin_budget_path(@budget), diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 0292df944..bf4202a60 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -124,6 +124,7 @@ en: winners: calculate: Calculate Winner Investments calculated: Winners being calculated, it may take a minute. + recalculate: Recalculate Winner Investments budget_phases: edit: start_date: Start date @@ -190,6 +191,7 @@ en: table_selection: "Selected" table_evaluation: "Show to valuators" table_incompatible: "Incompatible" + cannot_calculate_winners: The budget has to stay on phase "Balloting projects", "Reviewing Ballots" or "Finished budget" in order to calculate winners projects show: assigned_admin: Assigned administrator assigned_valuators: Assigned valuators diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 5d44c9a17..002fb21ed 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -124,6 +124,7 @@ es: winners: calculate: Calcular propuestas ganadoras calculated: Calculando ganadoras, puede tardar un minuto. + recalculate: Recalcular propuestas ganadoras budget_phases: edit: start_date: Fecha de Inicio @@ -190,6 +191,7 @@ es: table_selection: "Seleccionado" table_evaluation: "Mostrar a evaluadores" table_incompatible: "Incompatible" + cannot_calculate_winners: El presupuesto debe estar en las fases "Votación final", "Votación finalizada" o "Resultados" para poder calcular las propuestas ganadoras show: assigned_admin: Administrador asignado assigned_valuators: Evaluadores asignados diff --git a/spec/features/admin/budget_investments_spec.rb b/spec/features/admin/budget_investments_spec.rb index fe386bbaa..4a1beaacd 100644 --- a/spec/features/admin/budget_investments_spec.rb +++ b/spec/features/admin/budget_investments_spec.rb @@ -366,6 +366,23 @@ feature 'Admin budget investments' do expect(page).not_to have_select("tag_name", options: ["All tags", "Accessibility"]) end + scenario "Disable 'Calculate winner' button if incorrect phase" do + budget.update(phase: 'reviewing_ballots') + + visit admin_budget_budget_investments_path(budget) + click_link 'Winners' + + expect(page).to have_link "Calculate Winner Investments" + + budget.update(phase: 'accepting') + + visit admin_budget_budget_investments_path(budget) + click_link 'Winners' + + expect(page).not_to have_link "Calculate Winner Investments" + expect(page).to have_content 'The budget has to stay on phase "Balloting projects", "Reviewing Ballots" or "Finished budget" in order to calculate winners projects' + end + scenario "Limiting by max number of investments per heading", :js do group_1 = create(:budget_group, budget: budget) group_2 = create(:budget_group, budget: budget) diff --git a/spec/features/admin/budgets_spec.rb b/spec/features/admin/budgets_spec.rb index 6288a2c8e..9872a9d27 100644 --- a/spec/features/admin/budgets_spec.rb +++ b/spec/features/admin/budgets_spec.rb @@ -186,7 +186,8 @@ feature 'Admin budgets' do end context "Calculate Budget's Winner Investments" do - scenario 'For a Budget in reviewing balloting' do + + scenario 'For a Budget in reviewing balloting', :js do budget = create(:budget, phase: 'reviewing_ballots') group = create(:budget_group, budget: budget) heading = create(:budget_heading, group: group, price: 4)