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 @@
+
+
+
+ | <%= t("management.budgets.table_name") %> |
+ <%= t("management.budgets.table_phase") %> |
+ <%= t("management.budgets.table_actions") %> |
+
+
+
+ <% budgets.each do |budget| %>
+
+ | <%= budget.name %> |
+ <%= budget.current_phase.name %> |
+
+ <%= link_to t("management.budgets.print_investments"),
+ print_management_budget_investments_path(budget) %>
+ |
+
+ <% end %>
+
+
+
+<%= 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) }