allow external cox; Fix #650 #654
| @@ -127,6 +127,7 @@ pub enum LogbookUpdateError { | |||||||
|     OnlyAllowedToEndTripsEndingToday, |     OnlyAllowedToEndTripsEndingToday, | ||||||
|     TooFast(i64, i64), |     TooFast(i64, i64), | ||||||
|     AlreadyFinalized, |     AlreadyFinalized, | ||||||
|  |     ExternalSteeringPersonMustSteer, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, PartialEq)] | #[derive(Debug, PartialEq)] | ||||||
| @@ -152,6 +153,7 @@ pub enum LogbookCreateError { | |||||||
|     CantChangeHandoperatableStatusForThisBoat, |     CantChangeHandoperatableStatusForThisBoat, | ||||||
|     TooFast(i64, i64), |     TooFast(i64, i64), | ||||||
|     AlreadyFinalized, |     AlreadyFinalized, | ||||||
|  |     ExternalSteeringPersonMustSteer, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl From<LogbookUpdateError> for LogbookCreateError { | impl From<LogbookUpdateError> for LogbookCreateError { | ||||||
| @@ -177,6 +179,9 @@ impl From<LogbookUpdateError> for LogbookCreateError { | |||||||
|             } |             } | ||||||
|             LogbookUpdateError::TooFast(km, min) => LogbookCreateError::TooFast(km, min), |             LogbookUpdateError::TooFast(km, min) => LogbookCreateError::TooFast(km, min), | ||||||
|             LogbookUpdateError::AlreadyFinalized => LogbookCreateError::AlreadyFinalized, |             LogbookUpdateError::AlreadyFinalized => LogbookCreateError::AlreadyFinalized, | ||||||
|  |             LogbookUpdateError::ExternalSteeringPersonMustSteer => { | ||||||
|  |                 LogbookCreateError::ExternalSteeringPersonMustSteer | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -414,6 +419,14 @@ ORDER BY departure DESC | |||||||
|             if user.on_water(db).await { |             if user.on_water(db).await { | ||||||
|                 return Err(LogbookCreateError::RowerAlreadyOnWater(Box::new(user))); |                 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 { |         if !boat.shipmaster_allowed(db, created_by_user).await { | ||||||
| @@ -609,6 +622,13 @@ ORDER BY departure DESC | |||||||
|  |  | ||||||
|         self.remove_rowers(db).await; |         self.remove_rowers(db).await; | ||||||
|         for rower in &log.rowers { |         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) |             Rower::create(db, self.id, *rower) | ||||||
|                 .await |                 .await | ||||||
|                 .map_err(|e| LogbookUpdateError::RowerCreateError(*rower, e.to_string()))?; |                 .map_err(|e| LogbookUpdateError::RowerCreateError(*rower, e.to_string()))?; | ||||||
|   | |||||||
| @@ -68,7 +68,9 @@ async fn index( | |||||||
|     ) |     ) | ||||||
|     .await; |     .await; | ||||||
|     users.retain(|u| { |     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; |     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::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::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::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::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::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::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( |         Err(e) => Flash::error( | ||||||
|             Redirect::to("/log"), |             Redirect::to("/log"), | ||||||
|             format!("Eintrag {logbook_id} konnte nicht abgesendet werden (Fehler: {e:?})!"), |             format!("Eintrag {logbook_id} konnte nicht abgesendet werden (Fehler: {e:?})!"), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user