diff --git a/src/model/logbook.rs b/src/model/logbook.rs index b28c1cc..24c7a4a 100644 --- a/src/model/logbook.rs +++ b/src/model/logbook.rs @@ -127,7 +127,7 @@ pub enum LogbookUpdateError { OnlyAllowedToEndTripsEndingToday, TooFast(i64, i64), AlreadyFinalized, - ExternalSteeringPersonMustSteer, + ExternalSteeringPersonMustSteerOrShipmaster, } #[derive(Debug, PartialEq)] @@ -153,7 +153,7 @@ pub enum LogbookCreateError { CantChangeHandoperatableStatusForThisBoat, TooFast(i64, i64), AlreadyFinalized, - ExternalSteeringPersonMustSteer, + ExternalSteeringPersonMustSteerOrShipmaster, } impl From for LogbookCreateError { @@ -421,9 +421,13 @@ ORDER BY departure DESC } if user.name == "Externe Steuerperson" { - if let Some(steering_id) = log.steering_person { - if steering_id != user.id { - return Err(LogbookCreateError::ExternalSteeringPersonMustSteer); + if let (Some(steering_id), Some(shipmaster_id)) = + (log.steering_person, log.shipmaster) + { + if steering_id != user.id && shipmaster_id != user.id { + return Err( + LogbookCreateError::ExternalSteeringPersonMustSteerOrShipmaster, + ); } } } @@ -623,12 +627,17 @@ 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); + if let (Some(steering_id), Some(shipmaster_id)) = + (log.steering_person, log.shipmaster) + { + if steering_id != user.id && shipmaster_id != user.id { + return Err( + LogbookUpdateError::ExternalSteeringPersonMustSteerOrShipmaster, + ); } } } + 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 2a716f6..fa02887 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -231,7 +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!"), + Err(LogbookCreateError::ExternalSteeringPersonMustSteerOrShipmaster) => Flash::error(Redirect::to("/log"), "Wenn du eine 'Externe Steuerperson' hinzufügst, muss diese steuern oder Schiffsführer sein!"), } } @@ -341,7 +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(LogbookUpdateError::ExternalSteeringPersonMustSteerOrShipmaster) => Flash::error(Redirect::to("/log"), "Wenn du eine 'Externe Steuerperson' hinzufügst, muss diese steuern oder Schiffsführer sein!"), Err(e) => Flash::error( Redirect::to("/log"), format!("Eintrag {logbook_id} konnte nicht abgesendet werden (Fehler: {e:?})!"),