Skip to content

Commit c01276b

Browse files
committed
Add various abo fees as mounted attrs (#1590)
1 parent 87dc1ac commit c01276b

File tree

11 files changed

+57
-28
lines changed

11 files changed

+57
-28
lines changed

app/domain/invoices/sac_memberships/member.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module SacMemberships
1414
class Member
1515
attr_reader :person, :context, :sac_membership
1616

17-
delegate :id, :to_s, :language, :sac_family_main_person?, to: :person
17+
delegate :id, :to_s, :language, :sac_family_main_person?, :living_abroad?, to: :person
1818
delegate :date, :sac_magazine_mailing_list, to: :context
1919
delegate :zusatzsektion_roles,
2020
:neuanmeldung_nv_stammsektion_roles, :neuanmeldung_nv_zusatzsektion_roles,
@@ -68,10 +68,6 @@ def sac_ehrenmitglied?
6868
@sac_ehrenmitglied = sac_membership.sac_ehrenmitglied?
6969
end
7070

71-
def living_abroad?
72-
!(person.swiss? || person.country.downcase == "li")
73-
end
74-
7571
def sac_magazine?
7672
return @sac_magazine if defined?(@sac_magazine)
7773

app/domain/sac_cas.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,6 @@ module SacCas
112112
.select { |c| c.to_s =~ /MAILING_LIST_.*INTERNAL_KEY/ }
113113
.map { |c| const_get(c) }
114114

115-
AboCost = Data.define(:amount, :country)
116-
ABO_COSTS = {
117-
magazin: [
118-
AboCost.new(amount: 60, country: :switzerland),
119-
AboCost.new(amount: 76, country: :international)
120-
],
121-
tourenportal: [
122-
AboCost.new(amount: 45, country: nil)
123-
]
124-
}
125-
126115
MEMBERSHIP_OPERATIONS_GROUP_TYPES = [::Group::Sektion.sti_name, ::Group::Ortsgruppe.sti_name].freeze
127116
MEMBERSHIP_OPERATIONS_EXCLUDED_IDS = [
128117
2900, 3700, 2249, 2330, 2601, 3030, 3251,

app/mailers/signup/abo_magazin_mailer.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,9 @@ def confirmation(person, group, newsletter_subscribed)
2424
private
2525

2626
def placeholder_costs
27-
cost = if @person.country == "CH"
28-
SacCas::ABO_COSTS[:magazin].find { |cost| cost.country == :switzerland }
29-
else
30-
SacCas::ABO_COSTS[:magazin].find { |cost| cost.country == :international }
31-
end
32-
formatted_value = number_with_precision(cost.amount,
27+
cost = Group.root.abo_alpen_fee
28+
cost += Group.root.abo_alpen_postage_abroad if @person.living_abroad?
29+
formatted_value = number_with_precision(cost,
3330
precision: I18n.t("number.currency.format.precision"),
3431
delimiter: I18n.t("number.currency.format.delimiter"))
3532

app/models/group/sac_cas.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ class Group::SacCas < Group
2626
mounted_attr :sac_newsletter_mailing_list_id, :integer
2727
mounted_attr :sac_magazine_mailing_list_id, :integer
2828
mounted_attr :sac_fundraising_mailing_list_id, :integer
29+
mounted_attr :abo_alpen_fee, :decimal, precision: 10, scale: 2
30+
mounted_attr :abo_alpen_postage_abroad, :decimal, precision: 10, scale: 2
31+
mounted_attr :abo_touren_portal_fee, :decimal, precision: 10, scale: 2
32+
mounted_attr :abo_alpen_fee_article_number, :string
33+
mounted_attr :abo_alpen_postage_abroad_article_number, :string
2934

3035
validate :assert_valid_course_admin_email
3136
validate :assert_mounted_mailing_list_attrs

app/models/sac_cas/person.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ def youth?(reference_date: Time.zone.today.end_of_year)
107107
SacCas::Beitragskategorie::Calculator.new(self, reference_date: reference_date).youth?
108108
end
109109

110+
# Liechtenstein is counted as not abroad, extra fees should not apply
111+
def living_abroad?
112+
!(swiss? || country.downcase == "li")
113+
end
114+
110115
def picture_profile_default
111116
"profile.svg" # default image for profile variant
112117
end

app/models/wizards/signup/abo_magazin_wizard.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ def member_or_applied?
2929

3030
def redirection_message = I18n.t("groups.self_registration.create.already_subscribed_to_abo")
3131

32-
def costs = SacCas::ABO_COSTS[:magazin]
32+
def costs = Group.root.abo_alpen_fee
3333

3434
def requires_policy_acceptance? = false
3535

3636
def calculated_costs
3737
case step("person_fields").country
38-
when "CH"
39-
costs.find { |cost| cost.country == :switzerland }.amount
38+
when "CH" || "LI"
39+
Group.root.abo_alpen_fee
4040
else
41-
costs.find { |cost| cost.country == :international }.amount
41+
Group.root.abo_alpen_fee + Group.root.abo_alpen_postage_abroad
4242
end
4343
end
4444

app/models/wizards/signup/abo_touren_portal_wizard.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ def member_or_applied?
2525

2626
def redirection_message = I18n.t("groups.self_registration.create.already_member_of_tourenportal")
2727

28-
def costs = SacCas::ABO_COSTS[:tourenportal]
28+
def costs = Group.root.abo_touren_portal_fee
2929
end
3030
end

config/locales/wagon.de.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,11 @@ de:
417417
sac_magazine_mailing_list_id: Die Alpen Abo ID
418418
sac_fundraising_mailing_list_id: Spendenaufruf Abo ID
419419
course_admin_email: E-Mail Kursadministration
420+
abo_alpen_fee: Betrag Abonnent Die Alpen
421+
abo_alpen_postage_abroad: Betrag Auslandporto Die Alpen
422+
abo_touren_portal_fee: Betrag Abonnent Tourenportal
423+
abo_alpen_fee_article_number: Artikelnummer Abonnent Die Alpen
424+
abo_alpen_postage_abroad_article_number: Artiklenummer Auslandporto Die Alpen
420425
group/sektion:
421426
foundation_year: Gründungsjahr
422427
section_canton: Kanton

spec/mailers/signup/abo_magazin_mailer_spec.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
let(:mail) { described_class.confirmation(person, group, false) }
1616
let(:custom_content) { CustomContent.get(Signup::AboMagazinMailer::CONFIRMATION) }
1717

18-
before { person.update(address_care_of: "1A", postbox: "123") }
18+
before do
19+
person.update(address_care_of: "1A", postbox: "123")
20+
Group.root.update!(abo_alpen_fee: 60, abo_alpen_postage_abroad: 16)
21+
end
1922

2023
it "sends confirmation email" do
2124
expect(mail.to).to eq(["e.hillary@hitobito.example.com"])

spec/models/wizards/signup/abo_magazin_wizard_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ def build(params = required_attrs)
145145
end
146146

147147
describe "#calculate_costs" do
148+
before do
149+
Group.root.update!(abo_alpen_fee: 60, abo_alpen_postage_abroad: 16)
150+
end
151+
148152
it "calculates costs for swiss people" do
149153
expect(wizard.calculated_costs).to eq(60)
150154
end

spec/support/graphiti/schema.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,6 +1728,31 @@
17281728
"readable": true,
17291729
"description": null
17301730
},
1731+
"abo_alpen_fee": {
1732+
"type": "string",
1733+
"readable": true,
1734+
"description": null
1735+
},
1736+
"abo_alpen_postage_abroad": {
1737+
"type": "string",
1738+
"readable": true,
1739+
"description": null
1740+
},
1741+
"abo_touren_portal_fee": {
1742+
"type": "string",
1743+
"readable": true,
1744+
"description": null
1745+
},
1746+
"abo_alpen_fee_article_number": {
1747+
"type": "string",
1748+
"readable": true,
1749+
"description": null
1750+
},
1751+
"abo_alpen_postage_abroad_article_number": {
1752+
"type": "string",
1753+
"readable": true,
1754+
"description": null
1755+
},
17311756
"foundation_year": {
17321757
"type": "string",
17331758
"readable": true,

0 commit comments

Comments
 (0)