use super::scheckbuch::ScheckbuchUser; use super::schnupperant::SchnupperantUser; use super::{ManageUserUser, User}; use crate::model::role::Role; use crate::{model::notification::Notification, special_user}; use rocket::async_trait; use sqlx::SqlitePool; special_user!(SchnupperInterestUser, +"schnupper-interessierte"); impl SchnupperInterestUser { pub(crate) async fn move_to_scheckbook( self, db: &SqlitePool, changed_by: &ManageUserUser, smtp_pw: &str, ) -> Result<(), String> { let schnupperinterest = Role::find_by_name(db, "schnupper-interessierte") .await .unwrap(); let scheckbook = Role::find_by_name(db, "scheckbuch").await.unwrap(); self.user .remove_role(db, changed_by, &schnupperinterest) .await?; self.user.add_role(db, changed_by, &scheckbook).await?; let scheckbook = ScheckbuchUser::new(db, &self.user).await.unwrap(); scheckbook.send_welcome_mail_to_user(db, smtp_pw).await?; Notification::create_for_steering_people( db, &format!( "Liebe Steuerberechtigte, {} wollte unseren Schnupperkurs absolviert und 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, None ) .await; Ok(()) } pub(crate) async fn move_to_schnupperant( self, db: &SqlitePool, changed_by: &ManageUserUser, smtp_pw: &str, ) -> Result<(), String> { let schnupperinterest = Role::find_by_name(db, "schnupper-interessierte") .await .unwrap(); let schnupperant = Role::find_by_name(db, "schnupperant").await.unwrap(); self.user .remove_role(db, changed_by, &schnupperinterest) .await?; self.user.add_role(db, changed_by, &schnupperant).await?; let schnupperant = SchnupperantUser::new(db, &self.user).await.unwrap(); schnupperant.notify(db, smtp_pw).await?; if let Some(role) = Role::find_by_name(db, "schnupper-betreuer").await { Notification::create_for_role( db, &role, &format!( "Lieber Schnupperbetreuer, {} hat sich zum Schnupperkurs angemeldet.", self.name ), "Neuer Schnupper-Interessierte:r", None, None, ) .await; } Ok(()) } pub(crate) async fn notify(&self, db: &SqlitePool) -> Result<(), String> { self.notify_schnupperbetreuer_about_new_interest(db).await; Ok(()) } async fn notify_schnupperbetreuer_about_new_interest(&self, db: &SqlitePool) { if let Some(role) = Role::find_by_name(db, "schnupper-betreuer").await { Notification::create_for_role( db, &role, &format!( "Lieber Schnupperbetreuer, {} hat Interesse zum Schnupperkurs bekundet.", self.name ), "Neuer Schnupper-Interessierte:r", None, None, ) .await; } } }