From bada4deeddc3040f858b271befd4310db63c832a Mon Sep 17 00:00:00 2001 From: philipp Date: Thu, 4 Jan 2024 20:43:38 +0100 Subject: [PATCH] allow to add logbook entries up to a week late; show all boats in boatshouse; don't show guests for external boats --- src/model/boat.rs | 10 ++++++++++ src/model/logbook.rs | 7 ++++++- src/tera/log.rs | 4 ++-- templates/includes/forms/log.html.tera | 4 ++-- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/model/boat.rs b/src/model/boat.rs index 20077b1..5be09a0 100644 --- a/src/model/boat.rs +++ b/src/model/boat.rs @@ -4,6 +4,7 @@ use rocket::serde::{Deserialize, Serialize}; use rocket::FromForm; use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; +use super::location::Location; use super::user::User; #[derive(FromRow, Debug, Serialize, Deserialize)] @@ -94,6 +95,15 @@ impl Boat { return owner_id == user.id; } + if user.has_role(db, "Rennrudern").await { + let ottensheim = Location::find_by_name(db, "Ottensheim".into()) + .await + .unwrap(); + if self.location_id == ottensheim.id { + return true; + } + } + if self.amount_seats == 1 { return true; } diff --git a/src/model/logbook.rs b/src/model/logbook.rs index f0909fa..98d6c87 100644 --- a/src/model/logbook.rs +++ b/src/model/logbook.rs @@ -471,7 +471,12 @@ ORDER BY departure DESC return Err(LogbookUpdateError::ArrivalNotAfterDeparture); } let today = Utc::now().date_naive(); - if arr.date() != today && !user.has_role_tx(db, "admin").await { + let day_diff = today - arr.date(); + let day_diff = day_diff.num_days(); + if day_diff >= 7 && !user.has_role_tx(db, "admin").await { + return Err(LogbookUpdateError::OnlyAllowedToEndTripsEndingToday); + } + if day_diff < 0 && !user.has_role_tx(db, "admin").await { return Err(LogbookUpdateError::OnlyAllowedToEndTripsEndingToday); } diff --git a/src/tera/log.rs b/src/tera/log.rs index 3309688..bc11589 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -127,7 +127,7 @@ async fn kiosk( flash: Option>, kiosk: KioskCookie, ) -> Template { - let boats = Boat::all_at_location(db, kiosk.0).await; + let boats = Boat::all(db).await; let coxes: Vec = futures::future::join_all( User::cox(db) .await @@ -188,7 +188,7 @@ async fn create_logbook( Err(LogbookCreateError::ShipmasterNotInRowers) => Flash::error(Redirect::to("/log"), "Schiffsführer nicht in Liste der Ruderer!"), Err(LogbookCreateError::NotYourEntry) => Flash::error(Redirect::to("/log"), "Nicht deine Ausfahrt!"), Err(LogbookCreateError::ArrivalSetButNotRemainingTwo) => Flash::error(Redirect::to("/log"), "Ankunftszeit gesetzt aber nicht Distanz + Strecke"), - Err(LogbookCreateError::OnlyAllowedToEndTripsEndingToday) => Flash::error(Redirect::to("/log"), "Nur Ausfahrten, die heute enden dürfen eingetragen werden. Für einen Nachtrag schreibe alle Daten Philipp (Tel. nr. siehe Signal oder it@rudernlinz.at)."), + Err(LogbookCreateError::OnlyAllowedToEndTripsEndingToday) => Flash::error(Redirect::to("/log"), "Nur Ausfahrten, die in den letzten Woche enden dürfen eingetragen werden. Für einen Nachtrag schreibe alle Daten Philipp (Tel. nr. siehe Signal oder it@rudernlinz.at)."), } } diff --git a/templates/includes/forms/log.html.tera b/templates/includes/forms/log.html.tera index efeeee7..6707910 100644 --- a/templates/includes/forms/log.html.tera +++ b/templates/includes/forms/log.html.tera @@ -199,9 +199,9 @@
Ruderer: {% for rower in log.rowers %} - {{ rower.name }}{% if not loop.last or amount_guests > 0 %}, {% endif %} + {{ rower.name }}{% if not loop.last or amount_guests > 0 and log.boat.name != 'Externes Boot' %}, {% endif %} {% endfor %} - {% if amount_guests > 0 %} + {% if amount_guests > 0 and log.boat.name != 'Externes Boot' %} Gäste (ohne Account): {{ amount_guests }} {% endif %}