add membership pdf
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-main (push) Has been cancelled

This commit is contained in:
2024-03-20 20:59:41 +01:00
parent fda2673f5a
commit 9fdc1f82bd
6 changed files with 75 additions and 23 deletions

View File

@ -10,11 +10,12 @@ use crate::model::{
use futures::future::join_all;
use rocket::{
form::Form,
fs::TempFile,
get,
http::Status,
http::{ContentType, Status},
post,
request::{FlashMessage, FromRequest, Outcome},
response::{Flash, Redirect},
response::{content, Flash, Redirect},
routes, FromForm, Request, Route, State,
};
use rocket_dyn_templates::{tera::Context, Template};
@ -231,7 +232,7 @@ async fn delete(db: &State<SqlitePool>, admin: AdminUser, user: i32) -> Flash<Re
}
#[derive(FromForm, Debug)]
pub struct UserEditForm {
pub struct UserEditForm<'a> {
pub(crate) id: i32,
pub(crate) dob: Option<String>,
pub(crate) weight: Option<String>,
@ -245,12 +246,13 @@ pub struct UserEditForm {
pub(crate) phone: Option<String>,
pub(crate) address: Option<String>,
pub(crate) family_id: Option<i64>,
pub(crate) membership_pdf: Option<TempFile<'a>>,
}
#[post("/user", data = "<data>")]
#[post("/user", data = "<data>", format = "multipart/form-data")]
async fn update(
db: &State<SqlitePool>,
data: Form<UserEditForm>,
data: Form<UserEditForm<'_>>,
admin: AdminUser,
) -> Flash<Redirect> {
let user = User::find_by_id(db, data.id).await;
@ -271,6 +273,25 @@ async fn update(
Flash::success(Redirect::to("/admin/user"), "Successfully updated user")
}
#[get("/user/<user>/membership")]
async fn download_membership_pdf(
db: &State<SqlitePool>,
admin: AdminUser,
user: i32,
) -> (ContentType, Vec<u8>) {
let user = User::find_by_id(db, user).await.unwrap();
Log::create(
db,
format!(
"{} downloaded membership application for user: {user:?}",
admin.user.name
),
)
.await;
(ContentType::PDF, user.membership_pdf.unwrap())
}
#[derive(FromForm, Debug)]
struct UserAddForm<'r> {
name: &'r str,
@ -307,6 +328,7 @@ pub fn routes() -> Vec<Route> {
delete,
fees,
fees_paid,
scheckbuch
scheckbuch,
download_membership_pdf
]
}