273 lines
8.5 KiB
Rust
273 lines
8.5 KiB
Rust
use super::foerdernd::FoerderndUser;
|
|
use super::regular::RegularUser;
|
|
use super::scheckbuch::ScheckbuchUser;
|
|
use super::unterstuetzend::UnterstuetzendUser;
|
|
use super::{ManageUserUser, User};
|
|
use crate::model::role::Role;
|
|
use crate::NonEmptyString;
|
|
use crate::{
|
|
model::{mail::Mail, notification::Notification},
|
|
special_user,
|
|
};
|
|
use chrono::NaiveDate;
|
|
use rocket::async_trait;
|
|
use rocket::fs::TempFile;
|
|
use sqlx::SqlitePool;
|
|
|
|
special_user!(SchnupperantUser, +"schnupperant");
|
|
|
|
impl SchnupperantUser {
|
|
async fn set_data_for_clubmember(
|
|
&self,
|
|
db: &SqlitePool,
|
|
changed_by: &ManageUserUser,
|
|
member_since: &NaiveDate,
|
|
birthdate: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<(), String> {
|
|
self.user.update_birthdate(db, changed_by, birthdate).await;
|
|
self.user
|
|
.update_member_since(db, changed_by, member_since)
|
|
.await;
|
|
|
|
self.user.update_phone(db, changed_by, &phone).await;
|
|
self.user.update_address(db, changed_by, &address).await;
|
|
self.user
|
|
.add_membership_pdf(db, changed_by, membership_pdf)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
pub(crate) async fn convert_to_regular_user(
|
|
self,
|
|
db: &SqlitePool,
|
|
smtp_pw: &str,
|
|
changed_by: &ManageUserUser,
|
|
member_since: &NaiveDate,
|
|
birthdate: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<(), String> {
|
|
self.set_data_for_clubmember(
|
|
db,
|
|
changed_by,
|
|
member_since,
|
|
birthdate,
|
|
phone,
|
|
address,
|
|
membership_pdf,
|
|
)
|
|
.await?;
|
|
|
|
// Change roles
|
|
let regular = Role::find_by_name(db, "Donau Linz").await.unwrap();
|
|
let scheckbook = Role::find_by_name(db, "schnupperant").await.unwrap();
|
|
self.user.remove_role(db, changed_by, &scheckbook).await?;
|
|
self.user.add_role(db, changed_by, ®ular).await?;
|
|
|
|
// Notify
|
|
let regular = RegularUser::new(db, &self.user).await.unwrap();
|
|
regular.send_welcome_mail_to_user(db, smtp_pw).await?;
|
|
Notification::create_for_steering_people(
|
|
db,
|
|
&format!(
|
|
"Liebe Steuerberechtigte, {} nahm an unserem Schnupperkurs teil und ist nun seit {} ein neues reguläres Mitglied. 🎉",
|
|
self.name,
|
|
self.member_since_date.clone().unwrap()
|
|
),
|
|
"Neues Vereinsmitglied",
|
|
None,
|
|
None,
|
|
)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub(crate) async fn move_to_scheckbook(
|
|
self,
|
|
db: &SqlitePool,
|
|
changed_by: &ManageUserUser,
|
|
smtp_pw: &str,
|
|
) -> Result<(), String> {
|
|
let schnupperant = Role::find_by_name(db, "schnupperant").await.unwrap();
|
|
let scheckbook = Role::find_by_name(db, "scheckbuch").await.unwrap();
|
|
self.user.remove_role(db, changed_by, &schnupperant).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, {} hat 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 convert_to_unterstuetzend_user(
|
|
self,
|
|
db: &SqlitePool,
|
|
smtp_pw: &str,
|
|
changed_by: &ManageUserUser,
|
|
member_since: &NaiveDate,
|
|
birthdate: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<(), String> {
|
|
// Set data
|
|
self.set_data_for_clubmember(
|
|
db,
|
|
changed_by,
|
|
member_since,
|
|
birthdate,
|
|
phone,
|
|
address,
|
|
membership_pdf,
|
|
)
|
|
.await?;
|
|
|
|
// Change roles
|
|
let unterstuetzend = Role::find_by_name(db, "Unterstützend").await.unwrap();
|
|
let scheckbook = Role::find_by_name(db, "schnupperant").await.unwrap();
|
|
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,
|
|
&vorstand,
|
|
&format!(
|
|
"Lieber Vorstand, {} nahm am Schnupperkurs teil und ist nun seit {} es ein neues unterstützendes Mitglied.",
|
|
self.name,
|
|
self.member_since_date.clone().unwrap()
|
|
),
|
|
"Neues unterstützendes Vereinsmitglied",
|
|
None,
|
|
None,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub(crate) async fn convert_to_foerdernd_user(
|
|
self,
|
|
db: &SqlitePool,
|
|
smtp_pw: &str,
|
|
changed_by: &ManageUserUser,
|
|
member_since: &NaiveDate,
|
|
birthdate: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<(), String> {
|
|
// Set data
|
|
self.set_data_for_clubmember(
|
|
db,
|
|
changed_by,
|
|
member_since,
|
|
birthdate,
|
|
phone,
|
|
address,
|
|
membership_pdf,
|
|
)
|
|
.await?;
|
|
|
|
// Change roles
|
|
let unterstuetzend = Role::find_by_name(db, "Förderndes Mitglied").await.unwrap();
|
|
let scheckbook = Role::find_by_name(db, "schnupperant").await.unwrap();
|
|
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,
|
|
&vorstand,
|
|
&format!(
|
|
"Lieber Vorstand, {} nahm am Schnupperkurs teil und ist nun seit {} es ein neues förderndes Mitglied.",
|
|
self.name,
|
|
self.member_since_date.clone().unwrap()
|
|
),
|
|
"Neues förderndes Vereinsmitglied",
|
|
None,
|
|
None,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
// TODO: make private
|
|
pub(crate) async fn notify(
|
|
&self,
|
|
db: &SqlitePool,
|
|
mail: &str,
|
|
smtp_pw: &str,
|
|
) -> Result<(), String> {
|
|
self.notify_coxes_about_new_scheckbuch(db).await;
|
|
self.send_welcome_mail_to_user(db, mail, smtp_pw).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn send_welcome_mail_to_user(
|
|
&self,
|
|
db: &SqlitePool,
|
|
mail: &str,
|
|
smtp_pw: &str,
|
|
) -> Result<(), String> {
|
|
Mail::send_single(
|
|
db,
|
|
mail,
|
|
"ASKÖ Ruderverein Donau Linz | Dein Scheckbuch wartet auf Dich",
|
|
format!(
|
|
"Hallo {0},
|
|
|
|
es freut uns sehr, dich bei unserem Schnupperkurs willkommen heißen zu dürfen. Detaillierte Informationen folgen noch, ich werde sie dir ein paar Tage vor dem Termin zusenden.
|
|
|
|
Riemen- & Dollenbruch,
|
|
ASKÖ Ruderverein Donau Linz", self.name),
|
|
smtp_pw,
|
|
).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn notify_coxes_about_new_scheckbuch(&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 sich zum Schnupperkurs angemeldet.",
|
|
self.name
|
|
),
|
|
"Neuer Schnupperant",
|
|
None,
|
|
None,
|
|
)
|
|
.await;
|
|
}
|
|
}
|
|
}
|