add notification on canceled trips; add explicit 'cancel trip' button

This commit is contained in:
2024-04-15 17:17:54 +02:00
parent 4a3803df51
commit 1869b36e09
2 changed files with 57 additions and 10 deletions

View File

@ -34,6 +34,20 @@ pub struct TripWithUserAndType {
trip_type: Option<TripType>,
}
impl TripWithUserAndType {
async fn from(db: &SqlitePool, trip: Trip) -> Self {
let mut trip_type = None;
if let Some(trip_type_id) = trip.trip_type_id {
trip_type = TripType::find_by_id(db, trip_type_id).await;
}
Self {
rower: Registration::all_rower(db, trip.trip_details_id.unwrap()).await,
trip,
trip_type,
}
}
}
impl Trip {
/// Cox decides to create own trip.
pub async fn new_own(db: &SqlitePool, cox: &CoxUser, trip_details: TripDetails) {
@ -154,15 +168,7 @@ WHERE day=?
let mut ret = Vec::new();
for trip in trips {
let mut trip_type = None;
if let Some(trip_type_id) = trip.trip_type_id {
trip_type = TripType::find_by_id(db, trip_type_id).await;
}
ret.push(TripWithUserAndType {
rower: Registration::all_rower(db, trip.trip_details_id.unwrap()).await,
trip,
trip_type,
});
ret.push(TripWithUserAndType::from(db, trip).await);
}
ret
}
@ -199,6 +205,31 @@ WHERE day=?
.await
.unwrap(); //Okay, as trip_details can only be created with proper DB backing
if max_people == 0 {
let rowers = TripWithUserAndType::from(db, trip.clone()).await.rower;
for user in rowers {
if let Some(user) = User::find_by_name(db, &user.name).await {
let notes = if let Some(notes) = notes {
format!(": {notes}")
} else {
String::from(".")
};
Notification::create(
db,
&user,
&format!(
"Die Ausfahrt von {} am {} um {} wurde abgesagt{}",
cox.user.name, trip.day, trip.planned_starting_time, notes
),
"Absage Ausfahrt",
None,
)
.await;
}
}
}
Ok(())
}