allow to change type between members

This commit is contained in:
2025-05-03 16:46:40 +02:00
parent 8dc55a7aad
commit 46981c3311
3 changed files with 214 additions and 3 deletions

View File

@ -7,9 +7,9 @@ use crate::{
logbook::Logbook,
role::Role,
user::{
member::Member, scheckbuch::ScheckbuchUser, AdminUser, AllowedToEditPaymentStatusUser,
ManageUserUser, User, UserWithDetails, UserWithMembershipPdf,
UserWithRolesAndMembershipPdf, VorstandUser,
clubmember::ClubMemberUser, member::Member, scheckbuch::ScheckbuchUser, AdminUser,
AllowedToEditPaymentStatusUser, ManageUserUser, User, UserWithDetails,
UserWithMembershipPdf, UserWithRolesAndMembershipPdf, VorstandUser,
},
},
tera::Config,
@ -933,6 +933,53 @@ async fn scheckbook_to_regular(
}
}
#[derive(FromForm, Debug)]
pub struct ChangeMembertypeForm {
membertype: String,
}
#[post("/user/<id>/change-membertype", data = "<data>")]
async fn change_membertype(
db: &State<SqlitePool>,
admin: ManageUserUser,
data: Form<ChangeMembertypeForm>,
id: i32,
) -> Flash<Redirect> {
let Some(user) = User::find_by_id(db, id).await else {
return Flash::error(
Redirect::to("/admin/user"),
format!("User with ID {} does not exist!", id),
);
};
let Some(user) = ClubMemberUser::new(&db, &user).await else {
return Flash::error(
Redirect::to("/admin/user"),
format!("User {user} ist kein Vereinsmitglied"),
);
};
let response = match &*data.membertype {
"regular" => user.move_to_regular(db, &admin).await,
"unterstuetzend" => user.move_to_unterstuetzend(db, &admin).await,
"foerdernd" => user.move_to_foerdernd(db, &admin).await,
_ => {
return Flash::error(
Redirect::to("/admin/user"),
format!("Membertype gibt's ned"),
)
}
};
match response {
Ok(_) => Flash::success(
Redirect::to(format!("/admin/user/{}", id)),
"Mitgliedstyp umgewandelt und Infos versendet",
),
Err(e) => Flash::error(Redirect::to(format!("/admin/user/{}", id)), e),
}
}
pub fn routes() -> Vec<Route> {
routes![
index,
@ -962,5 +1009,6 @@ pub fn routes() -> Vec<Route> {
remove_role,
//
scheckbook_to_regular,
change_membertype,
]
}