send scheckbuch people mail after using all trips
This commit is contained in:
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user