diff --git a/app/components/management/budgets/print_investments/table_component.html.erb b/app/components/management/budgets/print_investments/table_component.html.erb new file mode 100644 index 000000000..424ae41b2 --- /dev/null +++ b/app/components/management/budgets/print_investments/table_component.html.erb @@ -0,0 +1,23 @@ + + + + + + + + + + <% budgets.each do |budget| %> + + + + + + <% end %> + +
<%= t("management.budgets.table_name") %><%= t("management.budgets.table_phase") %><%= t("management.budgets.table_actions") %>
<%= budget.name %><%= budget.current_phase.name %> + <%= link_to t("management.budgets.print_investments"), + print_management_budget_investments_path(budget) %> +
+ +<%= paginate budgets %> diff --git a/app/components/management/budgets/print_investments/table_component.rb b/app/components/management/budgets/print_investments/table_component.rb new file mode 100644 index 000000000..95f896297 --- /dev/null +++ b/app/components/management/budgets/print_investments/table_component.rb @@ -0,0 +1,8 @@ +class Management::Budgets::PrintInvestments::TableComponent < ApplicationComponent + attr_reader :budgets + delegate :paginate, to: :helpers + + def initialize(budgets) + @budgets = budgets + end +end diff --git a/app/controllers/management/base_controller.rb b/app/controllers/management/base_controller.rb index f426cbd3c..b408d01fa 100644 --- a/app/controllers/management/base_controller.rb +++ b/app/controllers/management/base_controller.rb @@ -49,10 +49,6 @@ class Management::BaseController < ActionController::Base I18n.with_locale(session[:locale], &action) end - def current_budget - Budget.current - end - def clear_password session[:new_password] = nil end diff --git a/app/controllers/management/budgets_controller.rb b/app/controllers/management/budgets_controller.rb index 36f0a8f1d..2c2e3607e 100644 --- a/app/controllers/management/budgets_controller.rb +++ b/app/controllers/management/budgets_controller.rb @@ -19,7 +19,7 @@ class Management::BudgetsController < Management::BaseController end def print_investments - @budget = current_budget + @budgets = Budget.published.order(created_at: :desc).page(params[:page]) end private diff --git a/app/views/management/budgets/print_investments.html.erb b/app/views/management/budgets/print_investments.html.erb index 9bb4d7ea3..3af320a92 100644 --- a/app/views/management/budgets/print_investments.html.erb +++ b/app/views/management/budgets/print_investments.html.erb @@ -1,21 +1,9 @@

<%= t("management.budgets.print_investments") %>

- - - - - - - - - - - - - - - -
<%= t("management.budgets.table_name") %><%= t("management.budgets.table_phase") %><%= t("management.budgets.table_actions") %>
<%= @budget.name %><%= @budget.current_phase.name %> - <%= link_to t("management.budgets.print_investments"), - print_management_budget_investments_path(@budget) %> -
+<% if @budgets.any? %> + <%= render Management::Budgets::PrintInvestments::TableComponent.new(@budgets) %> +<% else %> +
+ <%= t("management.budgets.no_budgets") %> +
+<% end %> diff --git a/spec/system/management/budget_investments_spec.rb b/spec/system/management/budget_investments_spec.rb index b9dd0c326..e5a682eb6 100644 --- a/spec/system/management/budget_investments_spec.rb +++ b/spec/system/management/budget_investments_spec.rb @@ -407,6 +407,51 @@ describe "Budget Investments" do end context "Printing" do + scenario "Shows all published budgets, last created first" do + finished_budget = create(:budget, :finished) + accepting_budget = create(:budget) + draft_budget = create(:budget, published: false) + login_as_manager(manager) + + click_link "Print budget investments" + + within "#budget_#{accepting_budget.id}" do + expect(page).to have_link("Print budget investments") + end + within "#budget_#{finished_budget.id}" do + expect(page).to have_link("Print budget investments") + end + expect(page).not_to have_content draft_budget.name + expect(accepting_budget.name).to appear_before(finished_budget.name) + end + + scenario "Shows a message when there are no budgets to show" do + login_as_manager(manager) + + click_link "Print budget investments" + + expect(page).to have_content("There are no active participatory budgets.") + end + + scenario "Show pagination when needed" do + allow(Budget).to receive(:default_per_page).and_return(1) + create(:budget, name: "Children") + create(:budget, name: "Sports") + login_as_manager(manager) + click_link "Print budget investments" + + expect(page).to have_content("Sports") + + within("ul.pagination") do + expect(page).to have_content("1") + expect(page).to have_link("2", href: print_investments_management_budgets_path(page: "2")) + expect(page).not_to have_content("3") + click_link "Next", exact: false + end + + expect(page).to have_content("Children") + end + scenario "Printing budget investments" do 16.times { create(:budget_investment, heading: heading) }