diff --git a/app/views/admin/newsletters/show.html.erb b/app/views/admin/newsletters/show.html.erb
index 450b12d16..666a27ce3 100644
--- a/app/views/admin/newsletters/show.html.erb
+++ b/app/views/admin/newsletters/show.html.erb
@@ -4,56 +4,55 @@
<% recipients_count = @newsletter.valid_segment_recipient? ? @newsletter.list_of_recipient_emails.count : 0 %>
-
-
- <%= t("admin.newsletters.show.sent_at") %>
- <% if @newsletter.draft? %>
- <%= t("admin.newsletters.index.draft") %>
- <% else %>
- <%= l @newsletter.sent_at.to_date %>
- <% end %>
-
-
- <%= t("admin.newsletters.show.from") %>
- <%= @newsletter.from %>
-
-
- <%= t("admin.newsletters.show.subject") %>
- <%= @newsletter.subject %>
-
-
- <%= t("admin.newsletters.show.segment_recipient") %>
- <%= segment_name(@newsletter.segment_recipient) %>
- <%= t("admin.newsletters.show.affected_users", n: recipients_count) %>
-
-
-
-
- <%= t("admin.newsletters.show.sent_emails", count: @newsletter.activities.count) %>
-
-
+
+
+ <%= t("admin.newsletters.show.sent_at") %>
+ <% if @newsletter.draft? %>
+ <%= t("admin.newsletters.index.draft") %>
+ <% else %>
+ <%= l @newsletter.sent_at.to_date %>
+ <% end %>
+
+
+ <%= t("admin.newsletters.show.from") %>
+ <%= @newsletter.from %>
+
+
+ <%= t("admin.newsletters.show.subject") %>
+ <%= @newsletter.subject %>
+
+
+ <%= t("admin.newsletters.show.segment_recipient") %>
+ <%= segment_name(@newsletter.segment_recipient) %>
+ <%= t("admin.newsletters.show.affected_users", n: recipients_count) %>
-
<%= t("admin.newsletters.show.body") %>
-
- <%= t("admin.newsletters.show.body_help_text") %>
-
+
+ <%= t("admin.newsletters.show.sent_emails", count: @newsletter.activities.count) %>
+
+
-
- <%= render file: "app/views/layouts/_mailer_header.html.erb" %>
+
+
<%= t("admin.newsletters.show.body") %>
+
+ <%= t("admin.newsletters.show.body_help_text") %>
+
+
-
-
-
- <%= render file: "app/views/mailer/newsletter.html.erb" %>
-
-
-
+
+ <%= render file: "app/views/layouts/_mailer_header.html.erb" %>
- <%= render file: "app/views/layouts/_mailer_footer.html.erb" %>
-
+
+
+
+ <%= render file: "app/views/mailer/newsletter.html.erb" %>
+
+
+
+
+ <%= render file: "app/views/layouts/_mailer_footer.html.erb" %>
<% if @newsletter.draft? && @newsletter.valid_segment_recipient? %>
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 1d7c110f3..762a7d5ce 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -753,6 +753,7 @@ en:
segment_recipient:
all_users: All users
administrators: Administrators
+ all_proposal_authors: Proposal authors (including archived and retired)
proposal_authors: Proposal authors
investment_authors: Investment authors in the current budget
feasible_and_undecided_investment_authors: "Authors of some investment in the current budget that does not comply with: [valuation finished unfesasible]"
diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml
index 659e0fcb3..b7d2b99bf 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -752,6 +752,7 @@ es:
segment_recipient:
all_users: Todos los usuarios
administrators: Administradores
+ all_proposal_authors: Usuarios autores de propuestas (incluyendo archivadas y retiradas)
proposal_authors: Usuarios autores de propuestas
investment_authors: Usuarios autores de proyectos de gasto en los actuales presupuestos
feasible_and_undecided_investment_authors: "Usuarios autores de algún proyecto de gasto en los actuales presupuestos que no cumpla: [evaluación finalizada inviable]"
diff --git a/lib/user_segments.rb b/lib/user_segments.rb
index 045f558a0..bc5419c78 100644
--- a/lib/user_segments.rb
+++ b/lib/user_segments.rb
@@ -1,12 +1,13 @@
class UserSegments
- SEGMENTS = %w(all_users
+ SEGMENTS = %w[all_users
administrators
+ all_proposal_authors
proposal_authors
investment_authors
feasible_and_undecided_investment_authors
selected_investment_authors
winner_investment_authors
- not_supported_on_current_budget)
+ not_supported_on_current_budget]
def self.all_users
User.active
@@ -16,6 +17,10 @@ class UserSegments
all_users.administrators
end
+ def self.all_proposal_authors
+ author_ids(Proposal.pluck(:author_id).uniq)
+ end
+
def self.proposal_authors
author_ids(Proposal.not_archived.not_retired.pluck(:author_id).uniq)
end
diff --git a/spec/lib/user_segments_spec.rb b/spec/lib/user_segments_spec.rb
index 4d1057ddd..ed52dcfe7 100644
--- a/spec/lib/user_segments_spec.rb
+++ b/spec/lib/user_segments_spec.rb
@@ -27,6 +27,28 @@ describe UserSegments do
end
end
+ describe "#all_proposal_authors" do
+ it "returns users that have created a proposal even if is archived or retired" do
+ create(:proposal, author: user1)
+ create(:proposal, :archived, author: user2)
+ create(:proposal, retired_at: Time.current, author: user3)
+
+ all_proposal_authors = described_class.all_proposal_authors
+ expect(all_proposal_authors).to include user1
+ expect(all_proposal_authors).to include user2
+ expect(all_proposal_authors).to include user3
+ end
+
+ it "does not return duplicated users" do
+ create(:proposal, author: user1)
+ create(:proposal, :archived, author: user1)
+ create(:proposal, retired_at: Time.current, author: user1)
+
+ all_proposal_authors = described_class.all_proposal_authors
+ expect(all_proposal_authors).to contain_exactly(user1)
+ end
+ end
+
describe "#proposal_authors" do
it "returns users that have created a proposal" do
proposal = create(:proposal, author: user1)