forked from Ruderverein-Donau-Linz/rowt
163 lines
5.2 KiB
Rust
163 lines
5.2 KiB
Rust
use super::scheckbuch::ScheckbuchUser;
|
|
use super::schnupperant::SchnupperantUser;
|
|
use super::{ManageUserUser, User};
|
|
use crate::NonEmptyString;
|
|
use crate::model::activity::ActivityBuilder;
|
|
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.notify(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;
|
|
|
|
ActivityBuilder::new(&format!(
|
|
"Der Schnupperinteressierte {self} hat sich (ohne Schnupperkurs) doch gleich direkt für ein Scheckbuch entschieden. {changed_by} hat dieses eingerichtet."
|
|
))
|
|
.relevant_for_user(&self)
|
|
.save(db)
|
|
.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;
|
|
}
|
|
ActivityBuilder::new(&format!(
|
|
"Der Schnupperinteressierte {self} hat sich zum Schnupperkurs angemeldet."
|
|
))
|
|
.relevant_for_user(&self)
|
|
.save(db)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub(crate) async fn notify(&self, db: &SqlitePool) -> Result<(), String> {
|
|
self.notify_schnupperbetreuer_about_new_interest(db).await;
|
|
|
|
ActivityBuilder::new(&format!(
|
|
"Der Schnupperbetreuer hat eine Info via Notification bekommen, dass {self} Interesse an einen Schnupperkurs hat."
|
|
))
|
|
.relevant_for_user(self)
|
|
.save(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;
|
|
}
|
|
}
|
|
|
|
pub(crate) async fn create(
|
|
db: &SqlitePool,
|
|
created_by: &ManageUserUser,
|
|
name: NonEmptyString,
|
|
mail: &str,
|
|
) -> Result<(), String> {
|
|
let role = Role::find_by_name(db, "schnupper-interessierte")
|
|
.await
|
|
.unwrap();
|
|
|
|
let name = name.as_str();
|
|
sqlx::query!(
|
|
"INSERT INTO user(name, mail)
|
|
VALUES (?,?)",
|
|
name,
|
|
mail
|
|
)
|
|
.execute(db)
|
|
.await
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
let user = User::find_by_name(db, name).await.unwrap();
|
|
user.add_role(db, created_by, &role).await?;
|
|
|
|
let user = Self::new(db, &user).await.unwrap();
|
|
user.notify(db).await?;
|
|
|
|
ActivityBuilder::new(&format!(
|
|
"{created_by} hat Schnupper-Interessierten {user} angelegt."
|
|
))
|
|
.relevant_for_user(&user)
|
|
.save(db)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
}
|