diff --git a/src/model/user/foerdernd.rs b/src/model/user/foerdernd.rs index de557b8..215fbf6 100644 --- a/src/model/user/foerdernd.rs +++ b/src/model/user/foerdernd.rs @@ -1,22 +1,12 @@ use super::User; -use crate::{ - model::{mail::Mail, notification::Notification}, - special_user, -}; +use crate::{model::mail::Mail, special_user}; use rocket::async_trait; use sqlx::SqlitePool; -special_user!(RegularUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied"); +special_user!(FoerderndUser, +"Förderndes Mitglied"); -impl RegularUser { - pub(crate) async fn notify(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> { - self.notify_coxes_about_new_regular(db).await; - self.send_welcome_mail_to_user(db, smtp_pw).await?; - - Ok(()) - } - - async fn send_welcome_mail_to_user( +impl FoerderndUser { + pub(crate) async fn send_welcome_mail_to_user( &self, db: &SqlitePool, smtp_pw: &str, @@ -38,16 +28,8 @@ herzlich willkommen im ASKÖ Ruderverein Donau Linz! Wir freuen uns sehr, dich a Um dir den Einstieg zu erleichtern, findest du in unserem Handbuch alle wichtigen Informationen über unseren Verein: https://rudernlinz.at/book. Bei weiteren Fragen stehen dir die Adressen info@rudernlinz.at (für allgemeine Fragen) und it@rudernlinz.at (bei technischen Fragen) jederzeit zur Verfügung. -Du kannst auch gerne unserer Signal-Gruppe beitreten, um auf dem Laufenden zu bleiben und dich mit anderen Mitgliedern auszutauschen: https://signal.group/#CjQKICFrq6zSsRHxrucS3jEcQn6lknEXacAykwwLV3vNLKxPEhA17jxz7cpjfu3JZokLq1TH - -Für die Organisation unserer Ausfahrten nutzen wir app.rudernlinz.at. Logge dich einfach mit deinem Namen ('{0}' ohne Anführungszeichen) ein, beim ersten Mal kannst du das Passwortfeld leer lassen. Unter 'Geplante Ausfahrten' kannst du dich jederzeit zu den Ausfahrten anmelden. - -Beim nächsten Treffen im Verein, erinnere jemand vom Vorstand (https://rudernlinz.at/unser-verein/vorstand/) bitte daran, deinen Fingerabdruck zu registrieren, damit du Zugang zum Bootshaus erhältst. - Damit du dich noch mehr verbunden fühlst (:-)), haben wir im Bootshaus ein WLAN für Vereinsmitglieder 'ASKÖ Ruderverein Donau Linz' eingerichtet. Das Passwort dafür lautet 'donau1921' (ohne Anführungszeichen). Bitte gib das Passwort an keine vereinsfremden Personen weiter. -Wir freuen uns darauf, dich bald am Wasser zu sehen und gemeinsam tolle Erfahrungen zu sammeln! - Riemen- & Dollenbruch ASKÖ Ruderverein Donau Linz", self.name), smtp_pw, @@ -55,19 +37,4 @@ ASKÖ Ruderverein Donau Linz", self.name), Ok(()) } - - async fn notify_coxes_about_new_regular(&self, db: &SqlitePool) { - Notification::create_for_steering_people( - db, - &format!( - "Liebe Steuerberechtigte, seit {} gibt es ein neues Mitglied: {}", - self.member_since_date.clone().unwrap(), - self.name - ), - "Neues Vereinsmitglied", - None, - None, - ) - .await; - } } diff --git a/src/model/user/mod.rs b/src/model/user/mod.rs index 156b3fc..46a3443 100644 --- a/src/model/user/mod.rs +++ b/src/model/user/mod.rs @@ -31,9 +31,11 @@ use scheckbuch::ScheckbuchUser; mod basic; mod fee; +pub(crate) mod foerdernd; pub(crate) mod member; pub(crate) mod regular; pub(crate) mod scheckbuch; +pub(crate) mod unterstuetzend; #[derive(FromRow, Serialize, Deserialize, Clone, Debug, Eq, Hash, PartialEq)] pub struct User { diff --git a/src/model/user/regular.rs b/src/model/user/regular.rs index d6b3123..cd7fdce 100644 --- a/src/model/user/regular.rs +++ b/src/model/user/regular.rs @@ -1,8 +1,5 @@ use super::User; -use crate::{ - model::{mail::Mail, notification::Notification}, - special_user, -}; +use crate::{model::mail::Mail, special_user}; use rocket::async_trait; use sqlx::SqlitePool; @@ -48,6 +45,4 @@ ASKÖ Ruderverein Donau Linz", self.name), Ok(()) } - - async fn notify_coxes_about_new_regular(&self, db: &SqlitePool) {} } diff --git a/src/model/user/scheckbuch.rs b/src/model/user/scheckbuch.rs index 364c47f..2f80f53 100644 --- a/src/model/user/scheckbuch.rs +++ b/src/model/user/scheckbuch.rs @@ -1,4 +1,6 @@ +use super::foerdernd::FoerderndUser; use super::regular::RegularUser; +use super::unterstuetzend::UnterstuetzendUser; use super::{ManageUserUser, User}; use crate::model::role::Role; use crate::NonEmptyString; @@ -87,6 +89,7 @@ impl ScheckbuchUser { pub(crate) async fn convert_to_unterstuetzend_user( self, db: &SqlitePool, + smtp_pw: &str, changed_by: &ManageUserUser, member_since: &NaiveDate, birthdate: &NaiveDate, @@ -112,6 +115,10 @@ impl ScheckbuchUser { self.user.remove_role(db, changed_by, &scheckbook).await?; self.user.add_role(db, changed_by, &unterstuetzend).await?; + let unterstuetzend = UnterstuetzendUser::new(db, &self.user).await.unwrap(); + unterstuetzend + .send_welcome_mail_to_user(db, smtp_pw) + .await?; if let Some(vorstand) = Role::find_by_name(db, "vorstand").await { Notification::create_for_role( db, @@ -134,6 +141,7 @@ impl ScheckbuchUser { pub(crate) async fn convert_to_foerdernd_user( self, db: &SqlitePool, + smtp_pw: &str, changed_by: &ManageUserUser, member_since: &NaiveDate, birthdate: &NaiveDate, @@ -159,6 +167,8 @@ impl ScheckbuchUser { self.user.remove_role(db, changed_by, &scheckbook).await?; self.user.add_role(db, changed_by, &unterstuetzend).await?; + let foerdernd = FoerderndUser::new(db, &self.user).await.unwrap(); + foerdernd.send_welcome_mail_to_user(db, smtp_pw).await?; if let Some(vorstand) = Role::find_by_name(db, "vorstand").await { Notification::create_for_role( db, diff --git a/src/model/user/unterstuetzend.rs b/src/model/user/unterstuetzend.rs index b0f0980..b417371 100644 --- a/src/model/user/unterstuetzend.rs +++ b/src/model/user/unterstuetzend.rs @@ -1,31 +1,40 @@ use super::User; -use crate::{ - model::{mail::Mail, notification::Notification}, - special_user, -}; +use crate::{model::mail::Mail, special_user}; use rocket::async_trait; use sqlx::SqlitePool; special_user!(UnterstuetzendUser, +"Unterstützend"); impl UnterstuetzendUser { - pub(crate) async fn notify(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> { - self.notify_coxes_about_new_unterstuetzend(db).await; + pub(crate) async fn send_welcome_mail_to_user( + &self, + db: &SqlitePool, + smtp_pw: &str, + ) -> Result<(), String> { + let Some(mail) = &self.mail else { + return Err(format!( + "Couldn't send welcome mail, as the user {self} has no mail..." + )); + }; + + Mail::send_single( + db, + mail, + "Willkommen im ASKÖ Ruderverein Donau Linz!", + format!( +"Hallo {0}, + +herzlich willkommen im ASKÖ Ruderverein Donau Linz! Wir freuen uns sehr, dich als neues Mitglied in unserem Verein begrüßen zu dürfen. + +Um dir den Einstieg zu erleichtern, findest du in unserem Handbuch alle wichtigen Informationen über unseren Verein: https://rudernlinz.at/book. Bei weiteren Fragen stehen dir die Adressen info@rudernlinz.at (für allgemeine Fragen) und it@rudernlinz.at (bei technischen Fragen) jederzeit zur Verfügung. + +Damit du dich noch mehr verbunden fühlst (:-)), haben wir im Bootshaus ein WLAN für Vereinsmitglieder 'ASKÖ Ruderverein Donau Linz' eingerichtet. Das Passwort dafür lautet 'donau1921' (ohne Anführungszeichen). Bitte gib das Passwort an keine vereinsfremden Personen weiter. + +Riemen- & Dollenbruch +ASKÖ Ruderverein Donau Linz", self.name), + smtp_pw, + ).await?; Ok(()) } - - async fn notify_vorstand_about_new_unterstuetzend(&self, db: &SqlitePool) { - Notification::create_for_steering_people( - db, - &format!( - "Lieber Vorstand, es gibt ein neues unterstützendes Mitglied: {}", - self.name - ), - "Neues unterstützendes Vereinsmitglied", - None, - None, - ) - .await; - } } diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index cd94675..2a8b88b 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -893,6 +893,7 @@ async fn scheckbook_to_regular( "unterstuetzend" => { user.convert_to_unterstuetzend_user( db, + &config.smtp_pw, &admin, &member_since, &birthdate, @@ -905,6 +906,7 @@ async fn scheckbook_to_regular( "foerdernd" => { user.convert_to_foerdernd_user( db, + &config.smtp_pw, &admin, &member_since, &birthdate, diff --git a/templates/admin/user/view.html.tera b/templates/admin/user/view.html.tera index 6465acf..da9b22d 100644 --- a/templates/admin/user/view.html.tera +++ b/templates/admin/user/view.html.tera @@ -5,8 +5,7 @@

{{ user.name }}

-
+

Grunddaten
@@ -32,9 +31,9 @@ Notizen: to be replaced with activity :-) {% if user.pw and allowed_to_edit %} {% endif %}

@@ -111,14 +110,14 @@ {% elif "Scheckbuch" in member %}
- {% for log in logbook %} - {{ log::show_old(log=log, state="completed", only_ones=false, index=loop.index, allowed_to_edit=false) }} - {% endfor %} + {% for log in logbook %} + {{ log::show_old(log=log, state="completed", only_ones=false, index=loop.index, allowed_to_edit=false) }} + {% endfor %}
{% if allowed_to_edit %} - + {% endif %}
Mitgliedstyp + + +
{{ macros::input(label='Mitglied seit', name='member_since', type="date", value=now() | date(), required=true) }} {{ macros::input(label='Geburtsdatum', name='birthdate', type="date", value=user.birthdate, required=true) }} @@ -170,85 +165,85 @@
{% if is_clubmember %} -
+

Rollen

-
    - {% for role in user.proper_roles -%} - {% if not role.cluster and not role.hide_in_lists %} -
  • - - - {% if role.formatted_name %} - {{ role.formatted_name }} - {% else %} - {{ role.name }} - {% endif %} - -
    - {{ role.desc }} -
    - {% if allowed_to_edit %} - 🗑️ - {% endif %} -
  • - {% endif %} - {% endfor %} -
- {% if allowed_to_edit %} -
- -
- -
- -
-
-
- - +
    + {% for role in user.proper_roles -%} + {% if not role.cluster and not role.hide_in_lists %} +
  • + + + {% if role.formatted_name %} + {{ role.formatted_name }} + {% else %} + {{ role.name }} + {% endif %} + +
    + {{ role.desc }} +
    + {% if allowed_to_edit %} + 🗑️ + {% endif %} +
  • + {% endif %} + {% endfor %} +
+ {% if allowed_to_edit %} +
+ +
+ +
+ +
+ +
+ +
- -
-
-
- {% endif %} -
+ +
+
+
+ {% endif %} +
{% endif %} {% if supposed_to_pay %} -
+

💸-Beitrag

@@ -283,8 +278,7 @@
{% endif %} -
+

Aktivitäten

@@ -295,8 +289,7 @@
-
+

TODO

@@ -354,8 +347,7 @@
-
+

Ergo-Challenge