diff --git a/src/model/user.rs b/src/model/user.rs index 4b36757..fff0003 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -28,6 +28,7 @@ const STUDENT_OR_PUPIL: i32 = 8000; const REGULAR: i32 = 22000; const UNTERSTUETZEND: i32 = 2500; const FOERDERND: i32 = 8500; +const SCHECKBUCH: i32 = 3000; #[derive(FromRow, Serialize, Deserialize, Clone, Debug, Eq, Hash, PartialEq)] pub struct User { @@ -141,13 +142,6 @@ impl Fee { impl User { pub async fn send_welcome_email(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> { - if !self.has_role(db, "Donau Linz").await { - return Err(format!( - "Could not send welcome mail, because user {} is not in Donau Linz group", - self.name - )); - } - let Some(mail) = &self.mail else { return Err(format!( "Could not send welcome mail, because user {} has no email address", @@ -155,6 +149,67 @@ impl User { )); }; + if self.has_role(db, "Donau Linz").await { + self.send_welcome_mail_full_member(db, mail, smtp_pw).await; + } else if self.has_role(db, "scheckbuch").await { + self.send_welcome_mail_scheckbuch(db, mail, smtp_pw).await; + } else { + return Err(format!( + "Could not send welcome mail, because user {} is not in Donau Linz or scheckbuch group", + self.name + )); + } + + Log::create( + db, + format!("Willkommensemail wurde an {} versandt", self.name), + ) + .await; + + Ok(()) + } + + async fn send_welcome_mail_scheckbuch(&self, db: &SqlitePool, mail: &str, smtp_pw: &str) { + // 2 things to do: + // 1. Send mail to user + Mail::send_single( + db, + mail, + "ASKÖ Ruderverein Donau Linz | Dein Scheckbuch wartet auf Dich", + format!( +"Hallo {0}, + +herzlich willkommen beim ASKÖ Ruderverein Donau Linz! Wir freuen uns sehr, dass Du Dich entschieden hast, das Rudern bei uns auszuprobieren. Mit Deinem Scheckbuch kannst Du jetzt an fünf Ausfahrten teilnehmen und so diesen Sport in seiner vollen Vielfalt erleben. Falls du die {1} € noch nicht bezahlt hast, nimm diese bitte zur nächsten Ausfahrt mit (oder überweise sie auf unser Bankkonto [dieses findest du auf https://rudernlinz.at]). + +Für die Organisation unserer Ausfahrten nutzen wir app.rudernlinz.at. Logge Dich bitte mit Deinem Namen ('{0}', ohne Anführungszeichen) ein. Beim ersten Mal kannst Du das Passwortfeld leer lassen. Unter 'Geplante Ausfahrten' kannst Du Dich jederzeit für eine Ausfahrt anmelden. Wir bieten mindestens einmal pro Woche Ausfahrten an, sowohl für Anfänger als auch für Fortgeschrittene (A+F Rudern). Zusätzliche Ausfahrten werden von unseren Steuerleuten ausgeschrieben, öfters reinschauen kann sich also lohnen :-) + +Nach deinen 5 Ausfahrten würden wir uns freuen, dich als Mitglied in unserem Verein begrüßen zu dürfen. + +Wir freuen uns darauf, Dich bald am Wasser zu sehen und gemeinsam tolle Erfahrungen zu sammeln! + +Riemen- & Dollenbruch, +ASKÖ Ruderverein Donau Linz", self.name, SCHECKBUCH/100), + smtp_pw, + ).await; + + // 2. Notify all coxes + let coxes = Role::find_by_name(db, "cox").await.unwrap(); + Notification::create_for_role( + db, + &coxes, + &format!( + "Liebe Steuerberechtigte, {} hat nun ein Scheckbuch. Wie immer, freuen wir uns wenn du uns beim A+F Rudern unterstützt oder selber Ausfahrten ausschreibst. Bitte beachte, dass Scheckbuch-Personen nur Ausfahrten sehen, bei denen 'Scheckbuch-Anmeldungen erlauben' ausgewählt wurde.", + self.name + ), + "Neues Scheckbuch", + None, + ) + .await; + } + + async fn send_welcome_mail_full_member(&self, db: &SqlitePool, mail: &str, smtp_pw: &str) { + // 2 things to do: + // 1. Send mail to user Mail::send_single( db, mail, @@ -175,17 +230,11 @@ Beim nächsten Treffen im Verein, erinnere mich (Philipp Hofer) bitte daran, dei Wir freuen uns darauf, dich bald am Wasser zu sehen und gemeinsam tolle Erfahrungen zu sammeln! Riemen- & Dollenbruch -ASKÖ Ruderverein Donau Linz - ", self.name), +ASKÖ Ruderverein Donau Linz", self.name), smtp_pw, ).await; - Log::create( - db, - format!("Willkommensemail wurde an {} versandt", self.name), - ) - .await; - + // 2. Notify all coxes let coxes = Role::find_by_name(db, "cox").await.unwrap(); Notification::create_for_role( db, @@ -199,8 +248,6 @@ ASKÖ Ruderverein Donau Linz None, ) .await; - - Ok(()) } pub async fn fee(&self, db: &SqlitePool) -> Option { diff --git a/templates/admin/user/index.html.tera b/templates/admin/user/index.html.tera index 24c712a..409de92 100644 --- a/templates/admin/user/index.html.tera +++ b/templates/admin/user/index.html.tera @@ -58,7 +58,7 @@ Passwort zurücksetzen {% endif %} - {% if not user.last_access and "Donau Linz" in user.roles and "admin" in loggedin_user.roles %} + {% if not user.last_access and "admin" in loggedin_user.roles %} Willkommensmail verschicken {% endif %}