ext person can also be shipmaster (and not cox)
Some checks failed
CI/CD Pipeline / test (push) Failing after 1m41s
CI/CD Pipeline / deploy-staging (push) Has been skipped
CI/CD Pipeline / deploy-main (push) Has been skipped

This commit is contained in:
2024-07-28 07:36:57 +02:00
parent 5f7591f52a
commit cd1bf12e68
2 changed files with 19 additions and 10 deletions

View File

@ -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<LogbookUpdateError> 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()))?;