send scheckbuch people mail after using all trips
All checks were successful
CI/CD Pipeline / test (push) Successful in 12m7s
CI/CD Pipeline / deploy-staging (push) Has been skipped
CI/CD Pipeline / deploy-main (push) Has been skipped

This commit is contained in:
2024-09-11 23:52:16 +02:00
parent 8408148ead
commit 1225aeac94
5 changed files with 165 additions and 29 deletions

View File

@ -118,11 +118,20 @@ pub struct LogbookWithBoatAndRowers {
impl LogbookWithBoatAndRowers {
pub(crate) async fn from(db: &SqlitePool, log: Logbook) -> Self {
let mut tx = db.begin().await.unwrap();
let ret = Self::from_tx(&mut tx, log).await;
tx.commit().await.unwrap();
ret
}
pub(crate) async fn from_tx(db: &mut Transaction<'_, Sqlite>, log: Logbook) -> Self {
Self {
rowers: Rower::for_log(db, &log).await,
boat: Boat::find_by_id(db, log.boat_id as i32).await.unwrap(),
shipmaster_user: User::find_by_id(db, log.shipmaster as i32).await.unwrap(),
steering_user: User::find_by_id(db, log.steering_person as i32)
rowers: Rower::for_log_tx(db, &log).await,
boat: Boat::find_by_id_tx(db, log.boat_id as i32).await.unwrap(),
shipmaster_user: User::find_by_id_tx(db, log.shipmaster as i32)
.await
.unwrap(),
steering_user: User::find_by_id_tx(db, log.steering_person as i32)
.await
.unwrap(),
logbook: log,
@ -278,6 +287,16 @@ ORDER BY departure DESC
pub async fn completed_with_user(
db: &SqlitePool,
user: &User,
) -> Vec<LogbookWithBoatAndRowers> {
let mut tx = db.begin().await.unwrap();
let ret = Self::completed_with_user_tx(&mut tx, user).await;
tx.commit().await.unwrap();
ret
}
pub async fn completed_with_user_tx(
db: &mut Transaction<'_, Sqlite>,
user: &User,
) -> Vec<LogbookWithBoatAndRowers> {
let logs = sqlx::query_as(
&format!("
@ -288,13 +307,13 @@ ORDER BY departure DESC
ORDER BY arrival DESC
", user.id)
)
.fetch_all(db)
.fetch_all(db.deref_mut())
.await
.unwrap(); //TODO: fixme
let mut ret = Vec::new();
for log in logs {
ret.push(LogbookWithBoatAndRowers::from(db, log).await);
ret.push(LogbookWithBoatAndRowers::from_tx(db, log).await);
}
ret
}
@ -415,6 +434,7 @@ ORDER BY departure DESC
db: &SqlitePool,
mut log: LogToAdd,
created_by_user: &User,
smtp_pw: &str,
) -> Result<String, LogbookCreateError> {
let Some(boat) = Boat::find_by_id(db, log.boat_id).await else {
return Err(LogbookCreateError::BoatNotFound);
@ -462,7 +482,7 @@ ORDER BY departure DESC
.unwrap(); //ok
return match logbook
.home_with_transaction(&mut tx, created_by_user, log_to_finalize)
.home_with_transaction(&mut tx, created_by_user, log_to_finalize, smtp_pw)
.await
{
Ok(_) => {
@ -613,9 +633,11 @@ ORDER BY departure DESC
db: &SqlitePool,
user: &User,
log: LogToFinalize,
smtp_pw: &str,
) -> Result<(), LogbookUpdateError> {
let mut tx = db.begin().await.unwrap();
self.home_with_transaction(&mut tx, user, log).await?;
self.home_with_transaction(&mut tx, user, log, smtp_pw)
.await?;
tx.commit().await.unwrap();
Ok(())
}
@ -625,6 +647,7 @@ ORDER BY departure DESC
db: &mut Transaction<'_, Sqlite>,
user: &User,
mut log: LogToFinalize,
smtp_pw: &str,
) -> Result<(), LogbookUpdateError> {
//TODO: extract common tests with `create()`
if !user.has_role_tx(db, "Vorstand").await && user.id != self.shipmaster {
@ -778,6 +801,11 @@ ORDER BY departure DESC
).await;
}
for rower in &log.rowers {
let user = User::find_by_id_tx(db, *rower as i32).await.unwrap();
user.received_new_logentry(db, smtp_pw).await;
}
Ok(())
}
@ -914,6 +942,7 @@ mod test {
rowers: vec![4],
},
&User::find_by_id(&pool, 4).await.unwrap(),
"",
)
.await
.unwrap();
@ -945,6 +974,7 @@ mod test {
departure: format!("{}T10:00", start_date),
arrival: format!("{}T12:00", current_date),
},
"",
)
.await
.unwrap();
@ -965,6 +995,7 @@ mod test {
rowers: vec![2],
},
&User::find_by_id(&pool, 1).await.unwrap(),
"",
)
.await
.unwrap();
@ -994,6 +1025,7 @@ mod test {
rowers: vec![5],
},
&User::find_by_id(&pool, 4).await.unwrap(),
"",
)
.await;
@ -1020,6 +1052,7 @@ mod test {
rowers: vec![5],
},
&User::find_by_id(&pool, 4).await.unwrap(),
"",
)
.await;
@ -1046,6 +1079,7 @@ mod test {
rowers: vec![5],
},
&User::find_by_id(&pool, 5).await.unwrap(),
"",
)
.await;
@ -1072,6 +1106,7 @@ mod test {
rowers: vec![5],
},
&User::find_by_id(&pool, 5).await.unwrap(),
"",
)
.await;
@ -1098,6 +1133,7 @@ mod test {
rowers: Vec::new(),
},
&User::find_by_id(&pool, 2).await.unwrap(),
"",
)
.await;
@ -1124,6 +1160,7 @@ mod test {
rowers: vec![5],
},
&User::find_by_id(&pool, 5).await.unwrap(),
"",
)
.await;
@ -1150,6 +1187,7 @@ mod test {
rowers: vec![1, 5],
},
&User::find_by_id(&pool, 5).await.unwrap(),
"",
)
.await;
@ -1181,6 +1219,7 @@ mod test {
departure: format!("{}T10:00", current_date),
arrival: format!("{}T12:00", current_date),
},
"",
)
.await
.unwrap();
@ -1209,6 +1248,7 @@ mod test {
departure: "1990-01-01T10:00".into(),
arrival: "1990-01-01T12:00".into(),
},
"",
)
.await;
@ -1238,6 +1278,7 @@ mod test {
departure: "1990-01-01T10:00".into(),
arrival: "1990-01-01T12:00".into(),
},
"",
)
.await;