From b4b922222ca43875fd109a33c1abe1da38ecd260 Mon Sep 17 00:00:00 2001 From: philipp Date: Fri, 26 Jul 2024 10:34:14 +0200 Subject: [PATCH] don't allow to finalize a logbook entry more than once --- src/model/logbook.rs | 7 +++++++ src/tera/log.rs | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/model/logbook.rs b/src/model/logbook.rs index bef803f..7757449 100644 --- a/src/model/logbook.rs +++ b/src/model/logbook.rs @@ -126,6 +126,7 @@ pub enum LogbookUpdateError { UserNotAllowedToUseBoat, OnlyAllowedToEndTripsEndingToday, TooFast(i64, i64), + AlreadyFinalized, } #[derive(Debug, PartialEq)] @@ -150,6 +151,7 @@ pub enum LogbookCreateError { OnlyAllowedToEndTripsEndingToday, CantChangeHandoperatableStatusForThisBoat, TooFast(i64, i64), + AlreadyFinalized, } impl From for LogbookCreateError { @@ -174,6 +176,7 @@ impl From for LogbookCreateError { LogbookCreateError::OnlyAllowedToEndTripsEndingToday } LogbookUpdateError::TooFast(km, min) => LogbookCreateError::TooFast(km, min), + LogbookUpdateError::AlreadyFinalized => LogbookCreateError::AlreadyFinalized, } } } @@ -546,6 +549,10 @@ ORDER BY departure DESC return Err(LogbookUpdateError::NotYourEntry); } + if self.arrival.is_some() { + return Err(LogbookUpdateError::AlreadyFinalized); + } + let boat = Boat::find_by_id_tx(db, self.boat_id as i32).await.unwrap(); //ok if boat.amount_seats == 1 { diff --git a/src/tera/log.rs b/src/tera/log.rs index 3727c81..70c10ca 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -228,6 +228,7 @@ async fn create_logbook( Err(LogbookCreateError::OnlyAllowedToEndTripsEndingToday) => Flash::error(Redirect::to("/log"), "Nur Ausfahrten, die in der letzten Woche enden dürfen eingetragen werden. Für einen Nachtrag schreibe alle Daten Philipp (Tel. nr. siehe Signal oder it@rudernlinz.at)."), 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."), } } @@ -336,6 +337,7 @@ async fn home_logbook( Err(LogbookUpdateError::TooManyRowers(expected, actual)) => Flash::error(Redirect::to("/log"), format!("Zu viele Ruderer (Boot fasst maximal {expected}, es wurden jedoch {actual} Ruderer ausgewählt)")), 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(e) => Flash::error( Redirect::to("/log"), format!("Eintrag {logbook_id} konnte nicht abgesendet werden (Fehler: {e:?})!"), -- 2.45.2