157 lines
5.6 KiB
Rust
157 lines
5.6 KiB
Rust
use super::{ManageUserUser, User};
|
|
use crate::{
|
|
NonEmptyString,
|
|
model::{activity::ActivityBuilder, mail::Mail, notification::Notification, role::Role},
|
|
special_user,
|
|
};
|
|
use chrono::NaiveDate;
|
|
use rocket::{async_trait, fs::TempFile, tokio::io::AsyncReadExt};
|
|
use sqlx::SqlitePool;
|
|
|
|
special_user!(RegularUser, +"Donau Linz");
|
|
|
|
pub trait ClubMember {
|
|
async fn create_member(
|
|
db: &SqlitePool,
|
|
created_by: &ManageUserUser,
|
|
role: &Role,
|
|
name: NonEmptyString,
|
|
mail: &str,
|
|
financial: Option<Role>,
|
|
birthdate: &NaiveDate,
|
|
member_since: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<User, String> {
|
|
if membership_pdf.len() == 0 {
|
|
return Err("Keine Beitrittserklärung mitgeschickt.".to_string());
|
|
}
|
|
|
|
let mut stream = membership_pdf.open().await.unwrap();
|
|
let mut buffer = Vec::new();
|
|
stream.read_to_end(&mut buffer).await.unwrap();
|
|
|
|
let name = name.as_str();
|
|
let phone = phone.as_str();
|
|
let address = address.as_str();
|
|
|
|
sqlx::query!(
|
|
"INSERT INTO user(name, member_since_date, birthdate, mail, phone, address, membership_pdf)
|
|
VALUES (?,?,?,?,?,?,?)",
|
|
name, member_since, birthdate, mail, phone, address,buffer
|
|
)
|
|
.execute(db)
|
|
.await
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
let user = User::find_by_name(db, name).await.unwrap();
|
|
user.change_financial(db, created_by, financial).await?;
|
|
user.add_role(db, created_by, role).await?;
|
|
|
|
ActivityBuilder::new(&format!(
|
|
"{created_by} hat Mitglied {user} mit der Rolle {role} angelegt."
|
|
))
|
|
.relevant_for_user(&user)
|
|
.save(db)
|
|
.await;
|
|
|
|
Ok(user)
|
|
}
|
|
}
|
|
|
|
impl ClubMember for RegularUser {}
|
|
|
|
impl RegularUser {
|
|
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.
|
|
|
|
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.
|
|
|
|
Falls du deinen Mitgliedsbeitrag noch nicht bezahlt hast, erledige dies bitte demnächst. Den genauen Betrag und einen QR Code, den du mit deiner Bankapp scannen kannst findest du unter https://app.rudernlinz.at/planned
|
|
|
|
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,
|
|
).await?;
|
|
|
|
ActivityBuilder::new(&format!("Willkommensmail für {self} wurde an {mail} verschickt (Handbuch, Signal-Gruppe, App-Info, Fingerprint, WLAN)."))
|
|
.relevant_for_user(self)
|
|
.save(db)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub(crate) async fn create(
|
|
db: &SqlitePool,
|
|
created_by: &ManageUserUser,
|
|
smtp_pw: &str,
|
|
name: NonEmptyString,
|
|
mail: &str,
|
|
financial: Option<Role>,
|
|
birthdate: &NaiveDate,
|
|
member_since: &NaiveDate,
|
|
phone: NonEmptyString,
|
|
address: NonEmptyString,
|
|
membership_pdf: &TempFile<'_>,
|
|
) -> Result<(), String> {
|
|
let role = Role::find_by_name(db, "Donau Linz").await.unwrap();
|
|
let user = Self::create_member(
|
|
db,
|
|
created_by,
|
|
&role,
|
|
name,
|
|
mail,
|
|
financial,
|
|
birthdate,
|
|
member_since,
|
|
phone,
|
|
address,
|
|
membership_pdf,
|
|
)
|
|
.await?;
|
|
|
|
let user = Self::new(db, &user).await.unwrap();
|
|
user.send_welcome_mail_to_user(db, smtp_pw).await?;
|
|
|
|
Notification::create_for_steering_people(
|
|
db,
|
|
&format!("Liebe Steuerberechtigte, es gibt ein neues Mitglied: {user} 🎉"),
|
|
"Neues Vereinsmitglied",
|
|
None,
|
|
None,
|
|
)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
}
|