allow moving scheckbuch -> unterstützend + fördernd
This commit is contained in:
parent
f374016207
commit
2bb42c3f6a
73
src/model/user/foerdernd.rs
Normal file
73
src/model/user/foerdernd.rs
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
use super::User;
|
||||||
|
use crate::{
|
||||||
|
model::{mail::Mail, notification::Notification},
|
||||||
|
special_user,
|
||||||
|
};
|
||||||
|
use rocket::async_trait;
|
||||||
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
|
special_user!(RegularUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied");
|
||||||
|
|
||||||
|
impl RegularUser {
|
||||||
|
pub(crate) async fn notify(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> {
|
||||||
|
self.notify_coxes_about_new_regular(db).await;
|
||||||
|
self.send_welcome_mail_to_user(db, smtp_pw).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn notify_coxes_about_new_regular(&self, db: &SqlitePool) {
|
||||||
|
Notification::create_for_steering_people(
|
||||||
|
db,
|
||||||
|
&format!(
|
||||||
|
"Liebe Steuerberechtigte, seit {} gibt es ein neues Mitglied: {}",
|
||||||
|
self.member_since_date.clone().unwrap(),
|
||||||
|
self.name
|
||||||
|
),
|
||||||
|
"Neues Vereinsmitglied",
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
}
|
@ -6,17 +6,10 @@ use crate::{
|
|||||||
use rocket::async_trait;
|
use rocket::async_trait;
|
||||||
use sqlx::SqlitePool;
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
special_user!(RegularUser, +"Donau Linz", -"Unterstützend", -"Förderndes Mitglied");
|
special_user!(RegularUser, +"Donau Linz");
|
||||||
|
|
||||||
impl RegularUser {
|
impl RegularUser {
|
||||||
pub(crate) async fn notify(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> {
|
pub(crate) async fn send_welcome_mail_to_user(
|
||||||
self.notify_coxes_about_new_regular(db).await;
|
|
||||||
self.send_welcome_mail_to_user(db, smtp_pw).await?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn send_welcome_mail_to_user(
|
|
||||||
&self,
|
&self,
|
||||||
db: &SqlitePool,
|
db: &SqlitePool,
|
||||||
smtp_pw: &str,
|
smtp_pw: &str,
|
||||||
@ -56,18 +49,5 @@ ASKÖ Ruderverein Donau Linz", self.name),
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn notify_coxes_about_new_regular(&self, db: &SqlitePool) {
|
async fn notify_coxes_about_new_regular(&self, db: &SqlitePool) {}
|
||||||
Notification::create_for_steering_people(
|
|
||||||
db,
|
|
||||||
&format!(
|
|
||||||
"Liebe Steuerberechtigte, seit {} gibt es ein neues Mitglied: {}",
|
|
||||||
self.member_since_date.clone().unwrap(),
|
|
||||||
self.name
|
|
||||||
),
|
|
||||||
"Neues Vereinsmitglied",
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,9 @@ use sqlx::SqlitePool;
|
|||||||
special_user!(ScheckbuchUser, +"scheckbuch");
|
special_user!(ScheckbuchUser, +"scheckbuch");
|
||||||
|
|
||||||
impl ScheckbuchUser {
|
impl ScheckbuchUser {
|
||||||
pub(crate) async fn convert_to_regular_user(
|
async fn set_data_for_clubmember(
|
||||||
self,
|
&self,
|
||||||
db: &SqlitePool,
|
db: &SqlitePool,
|
||||||
smtp_pw: &str,
|
|
||||||
changed_by: &ManageUserUser,
|
changed_by: &ManageUserUser,
|
||||||
member_since: &NaiveDate,
|
member_since: &NaiveDate,
|
||||||
birthdate: &NaiveDate,
|
birthdate: &NaiveDate,
|
||||||
@ -25,7 +24,6 @@ impl ScheckbuchUser {
|
|||||||
address: NonEmptyString,
|
address: NonEmptyString,
|
||||||
membership_pdf: &TempFile<'_>,
|
membership_pdf: &TempFile<'_>,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
// Set data
|
|
||||||
self.user.update_birthdate(db, changed_by, birthdate).await;
|
self.user.update_birthdate(db, changed_by, birthdate).await;
|
||||||
self.user
|
self.user
|
||||||
.update_member_since(db, changed_by, member_since)
|
.update_member_since(db, changed_by, member_since)
|
||||||
@ -37,6 +35,30 @@ impl ScheckbuchUser {
|
|||||||
.add_membership_pdf(db, changed_by, membership_pdf)
|
.add_membership_pdf(db, changed_by, membership_pdf)
|
||||||
.await?;
|
.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
|
// Change roles
|
||||||
let regular = Role::find_by_name(db, "Donau Linz").await.unwrap();
|
let regular = Role::find_by_name(db, "Donau Linz").await.unwrap();
|
||||||
let scheckbook = Role::find_by_name(db, "scheckbuch").await.unwrap();
|
let scheckbook = Role::find_by_name(db, "scheckbuch").await.unwrap();
|
||||||
@ -45,7 +67,113 @@ impl ScheckbuchUser {
|
|||||||
|
|
||||||
// Notify
|
// Notify
|
||||||
let regular = RegularUser::new(db, &self.user).await.unwrap();
|
let regular = RegularUser::new(db, &self.user).await.unwrap();
|
||||||
regular.notify(db, smtp_pw).await?;
|
regular.send_welcome_mail_to_user(db, smtp_pw).await?;
|
||||||
|
Notification::create_for_steering_people(
|
||||||
|
db,
|
||||||
|
&format!(
|
||||||
|
"Liebe Steuerberechtigte, {} hatte ein Scheckbuch und ist nun seit {} es ein neues reguläres Mitglied. 🎉",
|
||||||
|
self.name,
|
||||||
|
self.member_since_date.clone().unwrap()
|
||||||
|
),
|
||||||
|
"Neues Vereinsmitglied",
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) async fn convert_to_unterstuetzend_user(
|
||||||
|
self,
|
||||||
|
db: &SqlitePool,
|
||||||
|
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, "scheckbuch").await.unwrap();
|
||||||
|
self.user.remove_role(db, changed_by, &scheckbook).await?;
|
||||||
|
self.user.add_role(db, changed_by, &unterstuetzend).await?;
|
||||||
|
|
||||||
|
if let Some(vorstand) = Role::find_by_name(db, "vorstand").await {
|
||||||
|
Notification::create_for_role(
|
||||||
|
db,
|
||||||
|
&vorstand,
|
||||||
|
&format!(
|
||||||
|
"Lieber Vorstand, {} hatte ein Scheckbuch 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,
|
||||||
|
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, "scheckbuch").await.unwrap();
|
||||||
|
self.user.remove_role(db, changed_by, &scheckbook).await?;
|
||||||
|
self.user.add_role(db, changed_by, &unterstuetzend).await?;
|
||||||
|
|
||||||
|
if let Some(vorstand) = Role::find_by_name(db, "vorstand").await {
|
||||||
|
Notification::create_for_role(
|
||||||
|
db,
|
||||||
|
&vorstand,
|
||||||
|
&format!(
|
||||||
|
"Lieber Vorstand, {} hatte ein Scheckbuch 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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
31
src/model/user/unterstuetzend.rs
Normal file
31
src/model/user/unterstuetzend.rs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
use super::User;
|
||||||
|
use crate::{
|
||||||
|
model::{mail::Mail, notification::Notification},
|
||||||
|
special_user,
|
||||||
|
};
|
||||||
|
use rocket::async_trait;
|
||||||
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
|
special_user!(UnterstuetzendUser, +"Unterstützend");
|
||||||
|
|
||||||
|
impl UnterstuetzendUser {
|
||||||
|
pub(crate) async fn notify(&self, db: &SqlitePool, smtp_pw: &str) -> Result<(), String> {
|
||||||
|
self.notify_coxes_about_new_unterstuetzend(db).await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn notify_vorstand_about_new_unterstuetzend(&self, db: &SqlitePool) {
|
||||||
|
Notification::create_for_steering_people(
|
||||||
|
db,
|
||||||
|
&format!(
|
||||||
|
"Lieber Vorstand, es gibt ein neues unterstützendes Mitglied: {}",
|
||||||
|
self.name
|
||||||
|
),
|
||||||
|
"Neues unterstützendes Vereinsmitglied",
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
}
|
@ -816,6 +816,7 @@ struct UserAddScheckbuchForm<'r> {
|
|||||||
|
|
||||||
#[derive(FromForm, Debug)]
|
#[derive(FromForm, Debug)]
|
||||||
pub struct ScheckToRegularForm<'a> {
|
pub struct ScheckToRegularForm<'a> {
|
||||||
|
membertype: String,
|
||||||
member_since: String,
|
member_since: String,
|
||||||
birthdate: String,
|
birthdate: String,
|
||||||
phone: String,
|
phone: String,
|
||||||
@ -875,20 +876,53 @@ async fn scheckbook_to_regular(
|
|||||||
"Vereinsmitglied braucht eine Adresse",
|
"Vereinsmitglied braucht eine Adresse",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
let response = match &*data.membertype {
|
||||||
|
"regular" => {
|
||||||
|
user.convert_to_regular_user(
|
||||||
|
db,
|
||||||
|
&config.smtp_pw,
|
||||||
|
&admin,
|
||||||
|
&member_since,
|
||||||
|
&birthdate,
|
||||||
|
phone,
|
||||||
|
address,
|
||||||
|
&data.membership_pdf,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
"unterstuetzend" => {
|
||||||
|
user.convert_to_unterstuetzend_user(
|
||||||
|
db,
|
||||||
|
&admin,
|
||||||
|
&member_since,
|
||||||
|
&birthdate,
|
||||||
|
phone,
|
||||||
|
address,
|
||||||
|
&data.membership_pdf,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
"foerdernd" => {
|
||||||
|
user.convert_to_foerdernd_user(
|
||||||
|
db,
|
||||||
|
&admin,
|
||||||
|
&member_since,
|
||||||
|
&birthdate,
|
||||||
|
phone,
|
||||||
|
address,
|
||||||
|
&data.membership_pdf,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
return Flash::error(
|
||||||
|
Redirect::to(format!("/admin/user/{id}")),
|
||||||
|
"Membertype gibts ned",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
match user
|
match response {
|
||||||
.convert_to_regular_user(
|
|
||||||
db,
|
|
||||||
&config.smtp_pw,
|
|
||||||
&admin,
|
|
||||||
&member_since,
|
|
||||||
&birthdate,
|
|
||||||
phone,
|
|
||||||
address,
|
|
||||||
&data.membership_pdf,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(_) => Flash::success(
|
Ok(_) => Flash::success(
|
||||||
Redirect::to(format!("/admin/user/{}", id)),
|
Redirect::to(format!("/admin/user/{}", id)),
|
||||||
"Mitgliedstyp umgewandelt und Infos versendet",
|
"Mitgliedstyp umgewandelt und Infos versendet",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user