Skip to content

Commit 1df3928

Browse files
committed
Add option to manually select sending email to participant (#1572)
1 parent caaed30 commit 1df3928

File tree

9 files changed

+64
-49
lines changed

9 files changed

+64
-49
lines changed

app/controllers/sac_cas/event/participations_controller.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def cancel
2727
entry.cancel_statement = params.dig(:event_participation, :cancel_statement)
2828
entry.canceled_at = params.dig(:event_participation, :canceled_at) || Time.zone.today
2929
entry.canceled_at = Time.zone.today if participant_cancels?
30+
send_application_canceled_email if params[:send_email].to_i.positive?
3031
change_state("canceled", "cancel")
3132
end
3233

@@ -45,6 +46,10 @@ def enqueue_confirmation_job
4546
Event::ParticipationConfirmationJob.new(entry).enqueue!
4647
end
4748

49+
def send_application_canceled_email
50+
Event::ParticipationCanceledMailer.confirmation(entry).deliver_later
51+
end
52+
4853
def permitted_attrs
4954
permitted = self.class.permitted_attrs.dup
5055
permitted << :actual_days if can?(:edit_actual_days, entry)

app/helpers/sac_cas/application_market_helper.rb

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/models/sac_cas/event/participation.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ module SacCas::Event::Participation
3434
validates :adult_consent, :terms_and_conditions, acceptance: {if: :check_root_conditions}
3535
validates :actual_days, numericality: {greater_than_or_equal_to: 0, allow_blank: true}
3636
validate :assert_actual_days_size
37-
38-
after_update :send_application_canceled_email, if: :state_changed_to_canceled?
3937
end
4038

4139
def subsidizable?
@@ -77,8 +75,4 @@ def state_changed_to_canceled?
7775
def clear_price_without_category
7876
self.price = nil if price_category.blank?
7977
end
80-
81-
def send_application_canceled_email
82-
Event::ParticipationCanceledMailer.confirmation(self).deliver_later
83-
end
8478
end

app/views/event/participations/_popover_cancel_sac_cas.html.haml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,11 @@
44
- # https://github.com/hitobito/hitobito_sac_cas.
55

66
= f.labeled_input_field(:cancel_statement, label_class: 'col-md-3 col-xl-3 pb-1 required', required: true)
7+
8+
- if entry.id != current_user.id
9+
.row.mb-2
10+
= label_tag("send_email", class: "col-md-3 col-xl-3 pb-1 col-form-label text-md-end") do
11+
= t(".send_email")
12+
.labeled.col-md-9.col-lg-8.col-xl-8.mw-63ch
13+
.form-check.ps-0
14+
= check_box_tag("send_email", 1, class: "form-check-input")

config/locales/wagon.de.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,8 @@ de:
11721172
contact_text: |
11731173
Du erreichst uns zu unseren Geschäftszeiten
11741174
Mo bis Fr 09:00 - 12:00 & 14:00 - 17:00 Uhr.
1175+
popover_cancel_sac_cas:
1176+
send_email: E-Mail an Teilnehmer/in senden
11751177
states:
11761178
absent: Keine Teilnahme an diesem Kurs.
11771179
annulled: Dieser Kurs wurde abgesagt.

lib/hitobito_sac_cas/wagon.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ class Wagon < Rails::Engine
138138
Person::NameResource.course_leader_roles = [Event::Course::Role::Leader]
139139

140140
## Helpers
141-
ApplicationMarketHelper.prepend SacCas::ApplicationMarketHelper
142141
Changelogs::FooterLinkBuilder.prepend SacCas::Changelogs::FooterLinkBuilder
143142
EventKindsHelper.prepend SacCas::EventKindsHelper
144143
EventsHelper.prepend SacCas::EventsHelper

spec/controllers/event/participations_controller_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,16 @@
481481
expect(invoice.state).to eq("draft")
482482
expect(invoice.year).to eq(event.dates.first.start_at.year)
483483
end
484+
485+
it "PUT#cancel sends application canceled email when send_email is true" do
486+
expect { put :cancel, params: params.merge({event_participation: {canceled_at: 1.day.ago}, send_email: 1}) }
487+
.to have_enqueued_mail(Event::ParticipationCanceledMailer, :confirmation).once
488+
end
489+
490+
it "PUT#cancel does not send application canceled email when send_email is false" do
491+
expect { put :cancel, params: params.merge({event_participation: {canceled_at: 1.day.ago}, send_email: 0}) }
492+
.not_to have_enqueued_mail(Event::ParticipationCanceledMailer, :confirmation)
493+
end
484494
end
485495

486496
describe "PUT#update" do

spec/features/event/participation_spec.rb

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
require "spec_helper"
99

1010
describe Event::Participation, :js do
11+
include ActiveJob::TestHelper
12+
1113
let(:admin) { people(:admin) }
1214
let(:participant) { people(:mitglied) }
1315
let(:event) { Fabricate(:sac_open_course) }
@@ -20,6 +22,16 @@
2022
visit group_event_participation_path(group_id: event.group_ids.first, event_id: event.id, id: participation.id)
2123
expect(page).not_to have_button("Rechnung erstellen")
2224
end
25+
26+
it "does not display checkbox option to not send email" do
27+
event.update_columns(applications_cancelable: true, state: "application_open")
28+
event.dates.first.update_column(:start_at, 10.days.from_now)
29+
visit group_event_participation_path(group_id: event.group_ids.first, event_id: event.id, id: participation.id)
30+
within(".btn-toolbar") do
31+
click_on "Abmelden"
32+
end
33+
expect(page).not_to have_text "E-Mail an Teilnehmer/in senden"
34+
end
2335
end
2436

2537
context "as admin" do
@@ -37,16 +49,35 @@
3749
expect(page).not_to have_css(".alert")
3850
end
3951

40-
it "can cancel participation and supply a reason in popover" do
41-
visit group_event_participation_path(group_id: event.group_ids.first, event_id: event.id, id: participation.id)
42-
within(".btn-toolbar") do
43-
click_on "Abmelden"
52+
context "cancel" do
53+
before do
54+
visit group_event_participation_path(group_id: event.group_ids.first, event_id: event.id, id: participation.id)
55+
within(".btn-toolbar") do
56+
click_on "Abmelden"
57+
end
58+
within(".popover") do
59+
fill_in "Begründung", with: "Some Reason"
60+
end
4461
end
45-
within(".popover") do
46-
fill_in "Begründung", with: "Some Reason"
47-
click_on "Abmelden"
62+
63+
it "can cancel participation and supply a reason in popover" do
64+
expect do
65+
within(".popover") do
66+
click_on "Abmelden"
67+
end
68+
expect(page).to have_content "Edmund Hillary wurde abgemeldet."
69+
end.to have_enqueued_mail(Event::ParticipationCanceledMailer, :confirmation).once
70+
end
71+
72+
it "can cancel participation without sending email" do
73+
expect do
74+
within(".popover") do
75+
uncheck "E-Mail an Teilnehmer/in senden"
76+
click_on "Abmelden"
77+
end
78+
expect(page).to have_content "Edmund Hillary wurde abgemeldet."
79+
end.not_to have_enqueued_mail(Event::ParticipationCanceledMailer, :confirmation)
4880
end
49-
expect(page).to have_content "Edmund Hillary wurde abgemeldet."
5081
end
5182
end
5283
end

spec/models/event/participation_spec.rb

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,4 @@
114114
end
115115
end
116116
end
117-
118-
describe "canceled" do
119-
let(:event) { Fabricate(:sac_open_course) }
120-
let(:participation) { event.participations.create!(person: people(:mitglied)) }
121-
122-
it "sends a confirmation email" do
123-
expect { participation.update(state: :canceled, canceled_at: Time.zone.today) }
124-
.to have_enqueued_mail(Event::ParticipationCanceledMailer, :confirmation).once
125-
end
126-
end
127117
end

0 commit comments

Comments
 (0)