diff --git a/app/assets/images/logo_gegenrecht.svg b/app/assets/images/logo_gegenrecht.svg new file mode 100644 index 000000000..6776a7660 --- /dev/null +++ b/app/assets/images/logo_gegenrecht.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + RECIPROCITÀ . RECIPROCIDADGEGENRECHT . RÉCIPROCITÉ + + + + + diff --git a/app/assets/images/membership_verify_partner_ad.jpg b/app/assets/images/membership_verify_partner_ad.jpg new file mode 100644 index 000000000..4c2b17a60 Binary files /dev/null and b/app/assets/images/membership_verify_partner_ad.jpg differ diff --git a/app/assets/images/sac_logo_de.svg b/app/assets/images/sac_logo_de.svg new file mode 100644 index 000000000..0546feb23 --- /dev/null +++ b/app/assets/images/sac_logo_de.svg @@ -0,0 +1 @@ +sac_logo_cmyk_d \ No newline at end of file diff --git a/app/assets/images/sac_logo_fr.svg b/app/assets/images/sac_logo_fr.svg new file mode 100644 index 000000000..57056e62d --- /dev/null +++ b/app/assets/images/sac_logo_fr.svg @@ -0,0 +1 @@ +sac_logo_cmyk_f_pos \ No newline at end of file diff --git a/app/assets/images/sac_logo_it.svg b/app/assets/images/sac_logo_it.svg new file mode 100644 index 000000000..df0f0a2a2 --- /dev/null +++ b/app/assets/images/sac_logo_it.svg @@ -0,0 +1 @@ +sac_logo_cmyk_i_pos \ No newline at end of file diff --git a/app/assets/stylesheets/hitobito/customizable/_wagon.scss b/app/assets/stylesheets/hitobito/customizable/_wagon.scss index 5e573b6b7..92ce587dc 100644 --- a/app/assets/stylesheets/hitobito/customizable/_wagon.scss +++ b/app/assets/stylesheets/hitobito/customizable/_wagon.scss @@ -14,14 +14,51 @@ #membership-verify { header { + justify-content: end; #logo { img { width: 100%; } } } + + #details { + #member-info { + dl { + display: flex; + flex-direction: column; + + div { + display: flex; + justify-content: center; + } + } + } + + .alert-success { + background-color: rgb(128, 255, 0); // cmyk(50, 0, 100, 0) + color: black; + } + + .alert-danger { + background-color: rgb(255, 179, 128); // cmyk(50, 0, 100, 0) + color: black; + } + + #logo-reciprocate { + height: 4em; + display: flex; + justify-content: center; + } + } + #footer { + margin: 0; + img { + width: 100%; + } + } } .turbo-progress-bar { background-color: $link-color !important; -} \ No newline at end of file +} diff --git a/app/helpers/membership_verify_helper.rb b/app/helpers/membership_verify_helper.rb new file mode 100644 index 000000000..086fd1def --- /dev/null +++ b/app/helpers/membership_verify_helper.rb @@ -0,0 +1,16 @@ + +module MembershipVerifyHelper + + def localized_logo_path + "sac_logo_#{I18n.locale.downcase}.svg" + end + + def localized_sac_sponsors_url + { + de: 'https://www.sac-cas.ch/de/der-sac/unsere-partner/', + fr: 'https://www.sac-cas.ch/fr/le-cas/nos-partenaires/', + it: 'https://www.sac-cas.ch/it/il-cas/i-nostri-partner/' + }[I18n.locale] + end + +end diff --git a/app/models/sac_cas/person.rb b/app/models/sac_cas/person.rb index b0ba00c13..e4e2818c4 100644 --- a/app/models/sac_cas/person.rb +++ b/app/models/sac_cas/person.rb @@ -18,6 +18,8 @@ module SacCas::Person Person.used_attributes.delete(:nickname) + reflect_on_attachment(:picture).variant(:profile, resize_to_fill: [200, 200]) + has_many :external_trainings has_many :roles_with_deleted, -> { with_deleted }, class_name: 'Role', foreign_key: 'person_id' diff --git a/app/views/people/membership/verify/show.html.haml b/app/views/people/membership/verify/show.html.haml new file mode 100644 index 000000000..4ecd595ab --- /dev/null +++ b/app/views/people/membership/verify/show.html.haml @@ -0,0 +1,64 @@ +- title = t('verify_membership.title') + +%html{lang: I18n.locale} + %head + %meta{charset: 'utf-8'} + %title= "#{Settings.application.name} - #{title}" + %meta{name: 'viewport', content: 'width=device-width, initial-scale=1.0'} + = stylesheet_pack_tag 'application' + = javascript_pack_tag 'membership_verify' + %body + #membership-verify + %header + %div#logo + - logo = Settings.application.membership_verify_logo + - if logo + = wagon_image_pack_tag(logo.image, alt: Settings.application.name) + - else + = image_pack_tag(localized_logo_path, alt: 'define logo in wagon settings (membership_verify_logo)') + #details + - if person + #member-img + = image_tag(upload_url(person, :picture)) + #member-name + = person.full_name + #member-info + %dl.dl-horizontal + %div + %strong=t('.membership_number', membership_number: person.membership_number) + %div + - membership_years = Person.where(id: person.id).with_membership_years.first.membership_years + %strong=t('.membership_years', membership_years: membership_years) + - if member? + %div.alert.alert-success + %span.fas.fa-check + = t('verify_membership.status_valid') + - else + %div.alert.alert-danger + %span.fas.fa-times-circle + = t('verify_membership.status_invalid') + + #sections.mb-5 + - main_section_role = person.roles.find_by(type: Group::SektionsMitglieder::Mitglied.sti_name) + - if main_section_role.present? + %div + %div + %strong= main_section_role.to_s + %div + %strong= main_section_role.group.layer_group.to_s + - person.roles.where(type: Group::SektionsMitglieder::MitgliedZusatzsektion.sti_name).each do |secondary_role| + %div + %div= secondary_role.to_s + %div= secondary_role.group.layer_group.to_s + + #logo-reciprocate + = image_pack_tag('logo_gegenrecht.svg', alt: 'define logo in wagon settings (membership_verify_logo)') + + - else + %div.alert.alert-danger + %span.fas.fa-times-circle + = t('verify_membership.not_found') + #footer + %a{href: localized_sac_sponsors_url, target: '_blank'} + = image_pack_tag('membership_verify_partner_ad.jpg', alt: 'define logo in wagon settings (membership_verify_logo)') + diff --git a/config/locales/wagon.de.yml b/config/locales/wagon.de.yml index 377b91703..4a7a867fa 100644 --- a/config/locales/wagon.de.yml +++ b/config/locales/wagon.de.yml @@ -630,6 +630,11 @@ de: https://www.sac-cas.ch/de/der-sac/sektionen' people: + membership: + verify: + show: + membership_number: 'Mitglied: %{membership_number}' + membership_years: 'Anzahl Mitgliedsjahre: %{membership_years}' neuanmeldungen: multiselect_actions: accept: Übernehmen @@ -798,7 +803,7 @@ de: title: Verifizierung SAC CAS Mitgliedschaft not_found: Ungültiger Verifikationscode status_valid: Mitgliedschaft gültig - status_invalid: Keine gültige Mitgliedschaft + status_invalid: Mitgliedschaft ungültig passes: membership: diff --git a/lib/hitobito_sac_cas/wagon.rb b/lib/hitobito_sac_cas/wagon.rb index 5c4cdb011..430a737f6 100644 --- a/lib/hitobito_sac_cas/wagon.rb +++ b/lib/hitobito_sac_cas/wagon.rb @@ -131,6 +131,8 @@ class Wagon < Rails::Engine SubscriptionsController.prepend SacCas::SubscriptionsController + People::Membership::VerifyController.include Localizable + ## Jobs Export::PeopleExportJob.prepend SacCas::Export::PeopleExportJob Export::SubscriptionsJob.prepend SacCas::Export::SubscriptionsJob diff --git a/spec/features/membership_verification_spec.rb b/spec/features/membership_verification_spec.rb index f0f5b321e..d648bcb2a 100644 --- a/spec/features/membership_verification_spec.rb +++ b/spec/features/membership_verification_spec.rb @@ -22,7 +22,7 @@ person.roles.destroy_all visit "/verify_membership/#{token}" - expect(page).to have_css('.alert-danger', text: 'Keine gültige Mitgliedschaft') + expect(page).to have_css('.alert-danger', text: 'Mitgliedschaft ungültig') end it 'shows valid membership information' do