From bf4ea502d380562c81e39845a5d7f1c3a49ff665 Mon Sep 17 00:00:00 2001 From: philipp Date: Sun, 28 Jul 2024 07:29:44 +0200 Subject: [PATCH] allow external cox; Fix #650 --- src/model/logbook.rs | 20 ++++++++++++++++++++ src/tera/log.rs | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/model/logbook.rs b/src/model/logbook.rs index 752556d..b28c1cc 100644 --- a/src/model/logbook.rs +++ b/src/model/logbook.rs @@ -127,6 +127,7 @@ pub enum LogbookUpdateError { OnlyAllowedToEndTripsEndingToday, TooFast(i64, i64), AlreadyFinalized, + ExternalSteeringPersonMustSteer, } #[derive(Debug, PartialEq)] @@ -152,6 +153,7 @@ pub enum LogbookCreateError { CantChangeHandoperatableStatusForThisBoat, TooFast(i64, i64), AlreadyFinalized, + ExternalSteeringPersonMustSteer, } impl From for LogbookCreateError { @@ -177,6 +179,9 @@ impl From for LogbookCreateError { } LogbookUpdateError::TooFast(km, min) => LogbookCreateError::TooFast(km, min), LogbookUpdateError::AlreadyFinalized => LogbookCreateError::AlreadyFinalized, + LogbookUpdateError::ExternalSteeringPersonMustSteer => { + LogbookCreateError::ExternalSteeringPersonMustSteer + } } } } @@ -414,6 +419,14 @@ ORDER BY departure DESC if user.on_water(db).await { return Err(LogbookCreateError::RowerAlreadyOnWater(Box::new(user))); } + + if user.name == "Externe Steuerperson" { + if let Some(steering_id) = log.steering_person { + if steering_id != user.id { + return Err(LogbookCreateError::ExternalSteeringPersonMustSteer); + } + } + } } if !boat.shipmaster_allowed(db, created_by_user).await { @@ -609,6 +622,13 @@ ORDER BY departure DESC self.remove_rowers(db).await; for rower in &log.rowers { + if user.name == "Externe Steuerperson" { + if let Some(steering_id) = log.steering_person { + if steering_id != user.id { + return Err(LogbookUpdateError::ExternalSteeringPersonMustSteer); + } + } + } Rower::create(db, self.id, *rower) .await .map_err(|e| LogbookUpdateError::RowerCreateError(*rower, e.to_string()))?; diff --git a/src/tera/log.rs b/src/tera/log.rs index 70c10ca..2a716f6 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -68,7 +68,9 @@ async fn index( ) .await; users.retain(|u| { - u.roles.contains(&"Donau Linz".into()) || u.roles.contains(&"scheckbuch".into()) + u.roles.contains(&"Donau Linz".into()) + || u.roles.contains(&"scheckbuch".into()) + || u.user.name == "Externe Steuerperson" }); let logtypes = LogType::all(db).await; @@ -229,6 +231,7 @@ async fn create_logbook( Err(LogbookCreateError::CantChangeHandoperatableStatusForThisBoat) => Flash::error(Redirect::to("/log"), "Handsteuer-Status dieses Boots kann nicht verändert werden."), Err(LogbookCreateError::TooFast(km, min)) => Flash::error(Redirect::to("/log"), format!("KM zu groß für die eingegebene Dauer ({km} km in {min} Minuten). Bitte überprüfe deine Start- und Endzeit und versuche es erneut.")), Err(LogbookCreateError::AlreadyFinalized) => Flash::error(Redirect::to("/log"), "Logbucheintrag wurde bereits abgeschlossen."), + Err(LogbookCreateError::ExternalSteeringPersonMustSteer) => Flash::error(Redirect::to("/log"), "Wenn du eine 'Externe Steuerperson' hinzufügst, muss diese steuern!"), } } @@ -338,6 +341,7 @@ async fn home_logbook( Err(LogbookUpdateError::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(LogbookUpdateError::TooFast(km, min)) => Flash::error(Redirect::to("/log"), format!("KM zu groß für die eingegebene Dauer ({km} km in {min} Minuten). Bitte überprüfe deine Start- und Endzeit und versuche es erneut.")), Err(LogbookUpdateError::AlreadyFinalized) => Flash::error(Redirect::to("/log"), "Logbucheintrag wurde bereits abgeschlossen."), + Err(LogbookUpdateError::ExternalSteeringPersonMustSteer) => Flash::error(Redirect::to("/log"), "Wenn du eine 'Externe Steuerperson' hinzufügst, muss diese steuern!"), Err(e) => Flash::error( Redirect::to("/log"), format!("Eintrag {logbook_id} konnte nicht abgesendet werden (Fehler: {e:?})!"), -- 2.45.2