Be able to update financial and skill; Fixes #974
This commit is contained in:
@ -130,6 +130,10 @@ async fn view(
|
||||
let member = Member::from(db, user.clone()).await;
|
||||
let fee = user.fee(db).await;
|
||||
let activities = Activity::for_user(db, &user).await;
|
||||
let financial = Role::all_cluster(db, "financial").await;
|
||||
let user_financial = user.financial(db).await;
|
||||
let skill = Role::all_cluster(db, "skill").await;
|
||||
let user_skill = user.skill(db).await;
|
||||
|
||||
let user = UserWithRolesAndMembershipPdf::from_user(db, user).await;
|
||||
|
||||
@ -148,6 +152,10 @@ async fn view(
|
||||
context.insert("is_clubmember", &member.is_club_member());
|
||||
context.insert("supposed_to_pay", &member.supposed_to_pay());
|
||||
context.insert("fee", &fee);
|
||||
context.insert("skill", &skill);
|
||||
context.insert("user_skill", &user_skill);
|
||||
context.insert("financial", &financial);
|
||||
context.insert("user_financial", &user_financial);
|
||||
context.insert("member", &member);
|
||||
context.insert("activities", &activities);
|
||||
context.insert("roles", &roles);
|
||||
@ -456,6 +464,86 @@ async fn update_family(
|
||||
)
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct ChangeSkillForm {
|
||||
skill_id: String,
|
||||
}
|
||||
|
||||
#[post("/user/<id>/change-skill", data = "<data>")]
|
||||
async fn change_skill(
|
||||
db: &State<SqlitePool>,
|
||||
data: Form<ChangeSkillForm>,
|
||||
admin: ManageUserUser,
|
||||
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 skill = if &data.skill_id == "" {
|
||||
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"),
|
||||
);
|
||||
};
|
||||
Role::find_by_id(db, skill_id).await
|
||||
};
|
||||
|
||||
match user.change_skill(db, &admin, skill).await {
|
||||
Ok(()) => Flash::success(
|
||||
Redirect::to(format!("/admin/user/{}", user.id)),
|
||||
"Skill erfolgreich geändert",
|
||||
),
|
||||
Err(e) => Flash::error(Redirect::to(format!("/admin/user/{}", user.id)), e),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct ChangeFinancialForm {
|
||||
financial_id: String,
|
||||
}
|
||||
|
||||
#[post("/user/<id>/change-financial", data = "<data>")]
|
||||
async fn change_financial(
|
||||
db: &State<SqlitePool>,
|
||||
data: Form<ChangeFinancialForm>,
|
||||
admin: ManageUserUser,
|
||||
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 financial = if &data.financial_id == "" {
|
||||
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"),
|
||||
);
|
||||
};
|
||||
Role::find_by_id(db, financial_id).await
|
||||
};
|
||||
|
||||
match user.change_financial(db, &admin, financial).await {
|
||||
Ok(()) => Flash::success(
|
||||
Redirect::to(format!("/admin/user/{}", user.id)),
|
||||
"Ermäßigung erfolgreich geändert",
|
||||
),
|
||||
Err(e) => Flash::error(Redirect::to(format!("/admin/user/{}", user.id)), e),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromForm, Debug)]
|
||||
pub struct AddMembershipPDFForm<'a> {
|
||||
membership_pdf: TempFile<'a>,
|
||||
@ -1176,6 +1264,8 @@ pub fn routes() -> Vec<Route> {
|
||||
update_birthdate,
|
||||
update_address,
|
||||
update_family,
|
||||
change_skill,
|
||||
change_financial,
|
||||
add_membership_pdf,
|
||||
add_role,
|
||||
add_note,
|
||||
|
Reference in New Issue
Block a user