From 837d0febdfb8aafeeaf6aea0278182ea9a88a2c1 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Sun, 13 Jul 2025 19:49:46 +0200 Subject: [PATCH] =?UTF-8?q?merge=20functionality=20of=20kiosk=20+=20logged?= =?UTF-8?q?=20in=20->=20allow=20kiosk=20to=20have=20f=C3=B6rdernde=20peopl?= =?UTF-8?q?e=20as=20rower=20in=20logbook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/user/basic.rs | 7 +++ src/model/user/mod.rs | 7 +++ src/tera/board/boathouse.rs | 2 +- src/tera/log.rs | 118 ++++++++++++------------------------ 4 files changed, 53 insertions(+), 81 deletions(-) diff --git a/src/model/user/basic.rs b/src/model/user/basic.rs index 502924b..bceee2d 100644 --- a/src/model/user/basic.rs +++ b/src/model/user/basic.rs @@ -529,6 +529,13 @@ impl User { } pub(crate) async fn remove_membership_pdf(&self, db: &SqlitePool, updated_by: &ManageUserUser) { + ActivityBuilder::new(&format!( + "{updated_by} hat die Beitrittserklärung vom Beutzer gelöscht." + )) + .user(self) + .save(db) + .await; + sqlx::query!( "UPDATE user SET membership_pdf = null where id = ?", self.id diff --git a/src/model/user/mod.rs b/src/model/user/mod.rs index 5fe241e..21a702b 100644 --- a/src/model/user/mod.rs +++ b/src/model/user/mod.rs @@ -102,6 +102,13 @@ impl UserWithDetails { user, } } + + pub fn allowed_to_row(&self) -> bool { + self.roles.contains(&"Donau Linz".into()) + || self.roles.contains(&"Förderndes Mitglied".into()) + || self.roles.contains(&"scheckbuch".into()) + || self.user.name == "Externe Steuerperson" + } } #[derive(Debug)] diff --git a/src/tera/board/boathouse.rs b/src/tera/board/boathouse.rs index ac8ba6f..21d23df 100644 --- a/src/tera/board/boathouse.rs +++ b/src/tera/board/boathouse.rs @@ -40,7 +40,7 @@ async fn index( let allowed_to_edit = AllowedToUpdateBoathouse::new(db, &admin.user) .await .is_some(); - context.insert("allowed_to_edit", &boathouse); + context.insert("allowed_to_edit", &allowed_to_edit); context.insert( "loggedin_user", diff --git a/src/tera/log.rs b/src/tera/log.rs index 33fc88e..9a1542b 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -47,12 +47,44 @@ impl<'r> FromRequest<'r> for KioskCookie { } #[get("/", rank = 2)] -async fn index( +async fn index_loggedin( db: &State, flash: Option>, user: DonauLinzUser, ) -> Template { + let mut context = Context::new(); + let boats = Boat::for_user(db, &user).await; + context.insert("boats", &boats); + + context.insert( + "loggedin_user", + &UserWithDetails::from_user(user.into_inner(), db).await, + ); + + index(db, flash, context).await +} + +#[get("/")] +async fn index_kiosk( + db: &State, + flash: Option>, + _kiosk: KioskCookie, +) -> Template { + let mut context = Context::new(); + + let boats = Boat::all(db).await; + context.insert("boats", &boats); + + context.insert("show_kiosk_header", &true); + + index(db, flash, context).await +} + +async fn index(db: &SqlitePool, flash: Option>, mut context: Context) -> Template { + if let Some(msg) = flash { + context.insert("flash", &msg.into_inner()); + } let mut coxes: Vec = futures::future::join_all( User::cox(db) @@ -61,9 +93,7 @@ async fn index( .map(|user| UserWithDetails::from_user(user, db)), ) .await; - coxes.retain(|u| { - u.roles.contains(&"Donau Linz".into()) || u.roles.contains(&"scheckbuch".into()) - }); + coxes.retain(|u| u.roles.contains(&"Donau Linz".into())); let mut users: Vec = futures::future::join_all( User::all(db) @@ -72,24 +102,13 @@ async fn index( .map(|user| UserWithDetails::from_user(user, db)), ) .await; - users.retain(|u| { - u.roles.contains(&"Donau Linz".into()) - || u.roles.contains(&"Förderndes Mitglied".into()) - || u.roles.contains(&"scheckbuch".into()) - || u.user.name == "Externe Steuerperson" - }); + users.retain(|u| u.allowed_to_row()); let logtypes = LogType::all(db).await; let distances = Distance::all(db).await; let on_water = Logbook::on_water(db).await; - let mut context = Context::new(); - if let Some(msg) = flash { - context.insert("flash", &msg.into_inner()); - } - - context.insert("boats", &boats); context.insert("planned_trips", &Trip::get_for_today(db).await); context.insert( "reservations", @@ -98,14 +117,10 @@ async fn index( context.insert("coxes", &coxes); context.insert("users", &users); context.insert("logtypes", &logtypes); - context.insert( - "loggedin_user", - &UserWithDetails::from_user(user.into_inner(), db).await, - ); context.insert("on_water", &on_water); context.insert("distances", &distances); - Template::render("log", context.into_json()) + Template::render("kiosk", context.into_json()) } #[get("/show", rank = 3)] @@ -180,63 +195,6 @@ async fn new_kiosk( Redirect::to("/log") } -#[get("/")] -async fn kiosk( - db: &State, - flash: Option>, - _kiosk: KioskCookie, -) -> Template { - let boats = Boat::all(db).await; - let mut coxes: Vec = futures::future::join_all( - User::cox(db) - .await - .into_iter() - .map(|user| UserWithDetails::from_user(user, db)), - ) - .await; - - coxes.retain(|u| { - u.roles.contains(&"Donau Linz".into()) || u.roles.contains(&"scheckbuch".into()) - }); - - let mut users: Vec = futures::future::join_all( - User::all(db) - .await - .into_iter() - .map(|user| UserWithDetails::from_user(user, db)), - ) - .await; - - users.retain(|u| { - u.roles.contains(&"Donau Linz".into()) || u.roles.contains(&"scheckbuch".into()) - }); - - let logtypes = LogType::all(db).await; - let distances = Distance::all(db).await; - - let on_water = Logbook::on_water(db).await; - - let mut context = Context::new(); - if let Some(msg) = flash { - context.insert("flash", &msg.into_inner()); - } - - context.insert("planned_trips", &Trip::get_for_today(db).await); - context.insert("boats", &boats); - context.insert( - "reservations", - &BoatReservation::all_future_with_groups(db).await, - ); - context.insert("coxes", &coxes); - context.insert("users", &users); - context.insert("logtypes", &logtypes); - context.insert("on_water", &on_water); - context.insert("distances", &distances); - context.insert("show_kiosk_header", &true); - - Template::render("kiosk", context.into_json()) -} - async fn create_logbook( db: &SqlitePool, data: Form, @@ -569,11 +527,11 @@ async fn delete_kiosk( pub fn routes() -> Vec { routes![ - index, + index_loggedin, + index_kiosk, create, create_kiosk, home, - kiosk, home_kiosk, new_kiosk, show, -- 2.49.0