allow to create users
This commit is contained in:
@ -4,11 +4,13 @@ use crate::{
|
||||
family::Family,
|
||||
log::Log,
|
||||
logbook::Logbook,
|
||||
mail::valid_mails,
|
||||
role::Role,
|
||||
user::{
|
||||
clubmember::ClubMemberUser, member::Member, scheckbuch::ScheckbuchUser,
|
||||
schnupperant::SchnupperantUser, schnupperinterest::SchnupperInterestUser, AdminUser,
|
||||
AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
|
||||
clubmember::ClubMemberUser, foerdernd::FoerderndUser, member::Member,
|
||||
regular::RegularUser, scheckbuch::ScheckbuchUser, schnupperant::SchnupperantUser,
|
||||
schnupperinterest::SchnupperInterestUser, unterstuetzend::UnterstuetzendUser,
|
||||
AdminUser, AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
|
||||
UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
|
||||
},
|
||||
},
|
||||
@ -64,6 +66,7 @@ async fn index(
|
||||
let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some();
|
||||
|
||||
let users: Vec<UserWithRolesAndMembershipPdf> = join_all(user_futures).await;
|
||||
let financial = Role::all_cluster(db, "financial").await;
|
||||
|
||||
let roles = Role::all(db).await;
|
||||
let families = Family::all_with_members(db).await;
|
||||
@ -75,6 +78,7 @@ async fn index(
|
||||
context.insert("allowed_to_edit", &allowed_to_edit);
|
||||
context.insert("users", &users);
|
||||
context.insert("roles", &roles);
|
||||
context.insert("financial", &financial);
|
||||
context.insert("families", &families);
|
||||
context.insert("loggedin_user", &UserWithDetails::from_user(user, db).await);
|
||||
|
||||
@ -95,6 +99,7 @@ async fn index_admin(
|
||||
let users: Vec<UserWithRolesAndMembershipPdf> = join_all(user_futures).await;
|
||||
|
||||
let user: User = user.user;
|
||||
let financial = Role::all_cluster(db, "financial").await;
|
||||
let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some();
|
||||
|
||||
let roles = Role::all(db).await;
|
||||
@ -107,6 +112,7 @@ async fn index_admin(
|
||||
context.insert("allowed_to_edit", &allowed_to_edit);
|
||||
context.insert("users", &users);
|
||||
context.insert("roles", &roles);
|
||||
context.insert("financial", &financial);
|
||||
context.insert("families", &families);
|
||||
context.insert("loggedin_user", &UserWithDetails::from_user(user, db).await);
|
||||
|
||||
@ -463,13 +469,13 @@ async fn change_skill(
|
||||
);
|
||||
};
|
||||
|
||||
let skill = if &data.skill_id == "" {
|
||||
let skill = if data.skill_id.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let Ok(skill_id) = data.skill_id.parse() else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("Skill_id is not a number"),
|
||||
"Skill_id is not a number",
|
||||
);
|
||||
};
|
||||
Role::find_by_id(db, skill_id).await
|
||||
@ -503,13 +509,13 @@ async fn change_financial(
|
||||
);
|
||||
};
|
||||
|
||||
let financial = if &data.financial_id == "" {
|
||||
let financial = if data.financial_id.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let Ok(financial_id) = data.financial_id.parse() else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("Finacial_id is not a number"),
|
||||
"Finacial_id is not a number",
|
||||
);
|
||||
};
|
||||
Role::find_by_id(db, financial_id).await
|
||||
@ -899,7 +905,7 @@ async fn schnupperant_to_regular(
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
"Membertype gibts ned",
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1018,7 +1024,7 @@ async fn scheckbook_to_regular(
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
"Membertype gibts ned",
|
||||
)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1050,7 +1056,7 @@ async fn change_membertype(
|
||||
);
|
||||
};
|
||||
|
||||
let Some(user) = ClubMemberUser::new(&db, &user).await else {
|
||||
let Some(user) = ClubMemberUser::new(db, &user).await else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
format!("User {user} ist kein Vereinsmitglied"),
|
||||
@ -1063,9 +1069,9 @@ async fn change_membertype(
|
||||
"foerdernd" => user.move_to_foerdernd(db, &admin).await,
|
||||
_ => {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{{ id }}")),
|
||||
format!("Membertype gibt's ned"),
|
||||
)
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
"Membertype gibt's ned",
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1092,7 +1098,7 @@ async fn schnupperant_to_scheckbook(
|
||||
);
|
||||
};
|
||||
|
||||
let Some(user) = SchnupperantUser::new(&db, &user).await else {
|
||||
let Some(user) = SchnupperantUser::new(db, &user).await else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("User {user} ist kein Schnupperant"),
|
||||
@ -1122,7 +1128,7 @@ async fn schnupperinterest_to_schnupperant(
|
||||
);
|
||||
};
|
||||
|
||||
let Some(user) = SchnupperInterestUser::new(&db, &user).await else {
|
||||
let Some(user) = SchnupperInterestUser::new(db, &user).await else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("User {user} ist kein Schnupperinteressierter"),
|
||||
@ -1151,7 +1157,7 @@ async fn schnupperant_to_schnupperinterest(
|
||||
);
|
||||
};
|
||||
|
||||
let Some(user) = SchnupperantUser::new(&db, &user).await else {
|
||||
let Some(user) = SchnupperantUser::new(db, &user).await else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("User {user} ist kein Schnupperant"),
|
||||
@ -1180,7 +1186,7 @@ async fn schnupperinterest_to_scheckbuch(
|
||||
);
|
||||
};
|
||||
|
||||
let Some(user) = SchnupperInterestUser::new(&db, &user).await else {
|
||||
let Some(user) = SchnupperInterestUser::new(db, &user).await else {
|
||||
return Flash::error(
|
||||
Redirect::to(format!("/admin/user/{id}")),
|
||||
format!("User {user} ist kein Schnupperinteressierter"),
|
||||
@ -1196,19 +1202,236 @@ async fn schnupperinterest_to_scheckbuch(
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct AddClubMemberForm<'a> {
|
||||
name: String,
|
||||
mail: String,
|
||||
financial_id: String,
|
||||
membertype: String,
|
||||
member_since: String,
|
||||
birthdate: String,
|
||||
phone: String,
|
||||
address: String,
|
||||
membership_pdf: TempFile<'a>,
|
||||
}
|
||||
|
||||
#[post("/user/new/clubmember", data = "<data>")]
|
||||
async fn add_club_member(
|
||||
db: &State<SqlitePool>,
|
||||
data: Form<AddClubMemberForm<'_>>,
|
||||
admin: ManageUserUser,
|
||||
config: &State<Config>,
|
||||
) -> Flash<Redirect> {
|
||||
if !valid_mails(&data.mail) {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
format!(
|
||||
"{} ist kein gültiges Format für eine Mailadresse",
|
||||
&data.mail
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
let financial = if data.financial_id.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let Ok(financial_id) = data.financial_id.parse() else {
|
||||
return Flash::error(Redirect::to("/admin/user"), "Finacial_id is not a number");
|
||||
};
|
||||
Role::find_by_id(db, financial_id).await
|
||||
};
|
||||
|
||||
let Ok(birthdate) = NaiveDate::parse_from_str(&data.birthdate, "%Y-%m-%d") else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user/"),
|
||||
format!(
|
||||
"Geburtsdatum {} ist nicht im YYYY-MM-DD Format",
|
||||
&data.birthdate
|
||||
),
|
||||
);
|
||||
};
|
||||
let Ok(member_since) = NaiveDate::parse_from_str(&data.member_since, "%Y-%m-%d") else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
format!(
|
||||
"Beitrittsdatum {} ist nicht im YYYY-MM-DD Format",
|
||||
&data.birthdate
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
let Ok(phone) = data.phone.clone().try_into() else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
"Vereinsmitglied braucht eine Telefonnummer",
|
||||
);
|
||||
};
|
||||
let Ok(address) = data.address.clone().try_into() else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
"Vereinsmitglied braucht eine Adresse",
|
||||
);
|
||||
};
|
||||
let Ok(name) = data.name.clone().try_into() else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
"Vereinsmitglied braucht einen Namen",
|
||||
);
|
||||
};
|
||||
let response = match &*data.membertype {
|
||||
"regular" => {
|
||||
RegularUser::create(
|
||||
db,
|
||||
&admin,
|
||||
&config.smtp_pw,
|
||||
name,
|
||||
&data.mail,
|
||||
financial,
|
||||
&birthdate,
|
||||
&member_since,
|
||||
phone,
|
||||
address,
|
||||
&data.membership_pdf,
|
||||
)
|
||||
.await
|
||||
}
|
||||
"unterstuetzend" => {
|
||||
UnterstuetzendUser::create(
|
||||
db,
|
||||
&admin,
|
||||
&config.smtp_pw,
|
||||
name,
|
||||
&data.mail,
|
||||
financial,
|
||||
&birthdate,
|
||||
&member_since,
|
||||
phone,
|
||||
address,
|
||||
&data.membership_pdf,
|
||||
)
|
||||
.await
|
||||
}
|
||||
"foerdernd" => {
|
||||
FoerderndUser::create(
|
||||
db,
|
||||
&admin,
|
||||
&config.smtp_pw,
|
||||
name,
|
||||
&data.mail,
|
||||
financial,
|
||||
&birthdate,
|
||||
&member_since,
|
||||
phone,
|
||||
address,
|
||||
&data.membership_pdf,
|
||||
)
|
||||
.await
|
||||
}
|
||||
_ => return Flash::error(Redirect::to("/admin/user"), "Membertype gibts ned"),
|
||||
};
|
||||
|
||||
match response {
|
||||
Ok(_) => Flash::success(Redirect::to("/admin/user"), "Mitglied erfolgreich erstellt"),
|
||||
Err(e) => Flash::error(Redirect::to("/admin/user"), e),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct AddScheckbuchForm {
|
||||
name: String,
|
||||
mail: String,
|
||||
}
|
||||
|
||||
#[post("/user/new/scheckbuch", data = "<data>")]
|
||||
async fn add_scheckbuch(
|
||||
db: &State<SqlitePool>,
|
||||
data: Form<AddScheckbuchForm>,
|
||||
admin: ManageUserUser,
|
||||
config: &State<Config>,
|
||||
) -> Flash<Redirect> {
|
||||
if !valid_mails(&data.mail) {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
format!(
|
||||
"{} ist kein gültiges Format für eine Mailadresse",
|
||||
&data.mail
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
let Ok(name) = data.name.clone().try_into() else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
"Scheckbuch braucht einen Namen",
|
||||
);
|
||||
};
|
||||
match ScheckbuchUser::create(db, &admin, &config.smtp_pw, name, &data.mail).await {
|
||||
Ok(_) => Flash::success(
|
||||
Redirect::to("/admin/user"),
|
||||
"Scheckbuch erfolgreich erstellt",
|
||||
),
|
||||
Err(e) => Flash::error(Redirect::to("/admin/user"), e),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct AddSchnupperForm {
|
||||
name: String,
|
||||
mail: String,
|
||||
schnupper_type: String,
|
||||
}
|
||||
|
||||
#[post("/user/new/schnupper", data = "<data>")]
|
||||
async fn add_schnupper(
|
||||
db: &State<SqlitePool>,
|
||||
data: Form<AddSchnupperForm>,
|
||||
admin: ManageUserUser,
|
||||
config: &State<Config>,
|
||||
) -> Flash<Redirect> {
|
||||
if !valid_mails(&data.mail) {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
format!(
|
||||
"{} ist kein gültiges Format für eine Mailadresse",
|
||||
&data.mail
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
let Ok(name) = data.name.clone().try_into() else {
|
||||
return Flash::error(
|
||||
Redirect::to("/admin/user"),
|
||||
"Schnupperer braucht einen Namen",
|
||||
);
|
||||
};
|
||||
let response = match &*data.schnupper_type {
|
||||
"schnupperInterested" => SchnupperInterestUser::create(db, &admin, name, &data.mail).await,
|
||||
"schnupperant" => {
|
||||
SchnupperantUser::create(db, &admin, &config.smtp_pw, name, &data.mail).await
|
||||
}
|
||||
_ => return Flash::error(Redirect::to("/admin/user"), "Schnuppertyp gibts ned"),
|
||||
};
|
||||
match response {
|
||||
Ok(_) => Flash::success(
|
||||
Redirect::to("/admin/user"),
|
||||
"Schnupperer erfolgreich erstellt",
|
||||
),
|
||||
Err(e) => Flash::error(Redirect::to("/admin/user"), e),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn routes() -> Vec<Route> {
|
||||
routes![
|
||||
index,
|
||||
index_admin,
|
||||
view,
|
||||
resetpw,
|
||||
//create_scheckbuch,
|
||||
delete,
|
||||
fees,
|
||||
fees_paid,
|
||||
scheckbuch,
|
||||
download_membership_pdf,
|
||||
//
|
||||
// Updates
|
||||
update_mail,
|
||||
update_phone,
|
||||
update_nickname,
|
||||
@ -1222,7 +1445,7 @@ pub fn routes() -> Vec<Route> {
|
||||
add_role,
|
||||
add_note,
|
||||
remove_role,
|
||||
//
|
||||
// Moves
|
||||
scheckbook_to_regular,
|
||||
schnupperant_to_regular,
|
||||
schnupperant_to_scheckbook,
|
||||
@ -1230,5 +1453,9 @@ pub fn routes() -> Vec<Route> {
|
||||
schnupperant_to_schnupperinterest,
|
||||
schnupperinterest_to_scheckbuch,
|
||||
change_membertype,
|
||||
// Add
|
||||
add_club_member,
|
||||
add_scheckbuch,
|
||||
add_schnupper,
|
||||
]
|
||||
}
|
||||
|
Reference in New Issue
Block a user