Skip to content

Commit 4a41e00

Browse files
authored
Merge pull request consuldemocracy#1990 from AyuntamientoMadrid/proposals-user-segment
Proposals authors user segment
2 parents fc97b68 + 7b2f06b commit 4a41e00

File tree

5 files changed

+71
-43
lines changed

5 files changed

+71
-43
lines changed

app/views/admin/newsletters/show.html.erb

+42-43
Original file line numberDiff line numberDiff line change
@@ -4,56 +4,55 @@
44

55
<% recipients_count = @newsletter.valid_segment_recipient? ? @newsletter.list_of_recipient_emails.count : 0 %>
66

7-
<div class="small-12 column callout highlight">
8-
<div class="small-12 medium-2 column">
9-
<strong><%= t("admin.newsletters.show.sent_at") %></strong><br>
10-
<% if @newsletter.draft? %>
11-
<%= t("admin.newsletters.index.draft") %>
12-
<% else %>
13-
<%= l @newsletter.sent_at.to_date %>
14-
<% end %>
15-
</div>
16-
<div class="small-12 medium-6 column">
17-
<strong><%= t("admin.newsletters.show.from") %></strong><br>
18-
<%= @newsletter.from %>
19-
</div>
20-
<div class="small-12 medium-4 column">
21-
<strong><%= t("admin.newsletters.show.subject") %></strong><br>
22-
<%= @newsletter.subject %>
23-
</div>
24-
<div class="small-12 column">
25-
<strong><%= t("admin.newsletters.show.segment_recipient") %></strong><br>
26-
<%= segment_name(@newsletter.segment_recipient) %>
27-
<%= t("admin.newsletters.show.affected_users", n: recipients_count) %>
28-
</div>
29-
30-
<div class="small-12 column">
31-
<strong>
32-
<%= t("admin.newsletters.show.sent_emails", count: @newsletter.activities.count) %>
33-
</strong>
34-
</div>
7+
<div class="small-12 column callout highlight">
8+
<div class="small-12 medium-2 column">
9+
<strong><%= t("admin.newsletters.show.sent_at") %></strong><br>
10+
<% if @newsletter.draft? %>
11+
<%= t("admin.newsletters.index.draft") %>
12+
<% else %>
13+
<%= l @newsletter.sent_at.to_date %>
14+
<% end %>
15+
</div>
16+
<div class="small-12 medium-6 column">
17+
<strong><%= t("admin.newsletters.show.from") %></strong><br>
18+
<%= @newsletter.from %>
19+
</div>
20+
<div class="small-12 medium-4 column">
21+
<strong><%= t("admin.newsletters.show.subject") %></strong><br>
22+
<%= @newsletter.subject %>
23+
</div>
24+
<div class="small-12 column">
25+
<strong><%= t("admin.newsletters.show.segment_recipient") %></strong><br>
26+
<%= segment_name(@newsletter.segment_recipient) %>
27+
<%= t("admin.newsletters.show.affected_users", n: recipients_count) %>
3528
</div>
3629

3730
<div class="small-12 column">
38-
<strong><%= t("admin.newsletters.show.body") %></strong>
39-
<p class="help-text" id="phase-description-help-text">
40-
<%= t("admin.newsletters.show.body_help_text") %>
41-
</p>
31+
<strong>
32+
<%= t("admin.newsletters.show.sent_emails", count: @newsletter.activities.count) %>
33+
</strong>
4234
</div>
35+
</div>
36+
37+
<div class="small-12 column">
38+
<strong><%= t("admin.newsletters.show.body") %></strong>
39+
<p class="help-text" id="phase-description-help-text">
40+
<%= t("admin.newsletters.show.body_help_text") %>
41+
</p>
42+
</div>
4343

44-
<div class="newsletter-body-content">
45-
<%= render file: "app/views/layouts/_mailer_header.html.erb" %>
44+
<div class="newsletter-body-content">
45+
<%= render file: "app/views/layouts/_mailer_header.html.erb" %>
4646

47-
<table cellpadding="0" cellspacing="0" border="0" style="background: #fff; margin: 0 auto; max-width: 700px; width:100%;">
48-
<tbody>
49-
<tr>
50-
<%= render file: "app/views/mailer/newsletter.html.erb" %>
51-
</tr>
52-
</tbody>
53-
</table>
47+
<table cellpadding="0" cellspacing="0" border="0" style="background: #fff; margin: 0 auto; max-width: 700px; width:100%;">
48+
<tbody>
49+
<tr>
50+
<%= render file: "app/views/mailer/newsletter.html.erb" %>
51+
</tr>
52+
</tbody>
53+
</table>
5454

55-
<%= render file: "app/views/layouts/_mailer_footer.html.erb" %>
56-
</div>
55+
<%= render file: "app/views/layouts/_mailer_footer.html.erb" %>
5756
</div>
5857

5958
<% if @newsletter.draft? && @newsletter.valid_segment_recipient? %>

config/locales/en/admin.yml

+1
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,7 @@ en:
749749
segment_recipient:
750750
all_users: All users
751751
administrators: Administrators
752+
all_proposal_authors: Proposal authors (including archived and retired)
752753
proposal_authors: Proposal authors
753754
investment_authors: Investment authors in the current budget
754755
feasible_and_undecided_investment_authors: "Authors of some investment in the current budget that does not comply with: [valuation finished unfesasible]"

config/locales/es/admin.yml

+1
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ es:
748748
segment_recipient:
749749
all_users: Todos los usuarios
750750
administrators: Administradores
751+
all_proposal_authors: Usuarios autores de propuestas (incluyendo archivadas y retiradas)
751752
proposal_authors: Usuarios autores de propuestas
752753
investment_authors: Usuarios autores de proyectos de gasto en los actuales presupuestos
753754
feasible_and_undecided_investment_authors: "Usuarios autores de algún proyecto de gasto en los actuales presupuestos que no cumpla: [evaluación finalizada inviable]"

lib/user_segments.rb

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ class UserSegments
33
def self.segments
44
%w(all_users
55
administrators
6+
all_proposal_authors
67
proposal_authors
78
investment_authors
89
feasible_and_undecided_investment_authors
@@ -20,6 +21,10 @@ def self.administrators
2021
all_users.administrators
2122
end
2223

24+
def self.all_proposal_authors
25+
author_ids(Proposal.pluck(:author_id).uniq)
26+
end
27+
2328
def self.proposal_authors
2429
author_ids(Proposal.not_archived.not_retired.pluck(:author_id).uniq)
2530
end

spec/lib/user_segments_spec.rb

+22
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,28 @@
2727
end
2828
end
2929

30+
describe "#all_proposal_authors" do
31+
it "returns users that have created a proposal even if is archived or retired" do
32+
create(:proposal, author: user1)
33+
create(:proposal, :archived, author: user2)
34+
create(:proposal, retired_at: Time.current, author: user3)
35+
36+
all_proposal_authors = described_class.all_proposal_authors
37+
expect(all_proposal_authors).to include user1
38+
expect(all_proposal_authors).to include user2
39+
expect(all_proposal_authors).to include user3
40+
end
41+
42+
it "does not return duplicated users" do
43+
create(:proposal, author: user1)
44+
create(:proposal, :archived, author: user1)
45+
create(:proposal, retired_at: Time.current, author: user1)
46+
47+
all_proposal_authors = described_class.all_proposal_authors
48+
expect(all_proposal_authors).to contain_exactly(user1)
49+
end
50+
end
51+
3052
describe "#proposal_authors" do
3153
it "returns users that have created a proposal" do
3254
proposal = create(:proposal, author: user1)

0 commit comments

Comments
 (0)