diff --git a/src/model/boatdamage.rs b/src/model/boatdamage.rs index a14e655..a262410 100644 --- a/src/model/boatdamage.rs +++ b/src/model/boatdamage.rs @@ -119,6 +119,10 @@ ORDER BY created_at DESC pub async fn create(db: &SqlitePool, boatdamage: BoatDamageToAdd<'_>) -> Result<(), String> { Log::create(db, format!("New boat damage: {boatdamage:?}")).await; + let Some(boat) = Boat::find_by_id(db, boatdamage.boat_id as i32).await else { + return Err("Boot gibt's ned".into()); + }; + let was_unusable_before = boat.is_locked(db).await; sqlx::query!( "INSERT INTO boat_damage(boat_id, desc, user_id_created, lock_boat) VALUES (?,?,?, ?)", @@ -131,6 +135,11 @@ ORDER BY created_at DESC .await .map_err(|e| e.to_string())?; + if !was_unusable_before && boat.is_locked(db).await { + let cox = Role::find_by_name(db, "cox").await.unwrap(); + Notification::create_for_role(db, &cox, &format!("Liebe Steuerberechtigte, bitte beachten, dass {} bis auf weiteres aufgrund von Reparaturarbeiten gesperrt ist.", boat.name), "Boot gesperrt", None).await; + } + let technicals = User::all_with_role(db, &Role::find_by_name(db, "tech").await.unwrap()).await; for technical in technicals { @@ -144,10 +153,7 @@ ORDER BY created_at DESC .await .unwrap() .name, - Boat::find_by_id(db, boatdamage.boat_id as i32) - .await - .unwrap() - .name, + boat.name, boatdamage.desc ), "Neuer Bootsschaden angelegt", @@ -267,35 +273,41 @@ ORDER BY created_at DESC pub async fn verified( &self, db: &SqlitePool, - boat: BoatDamageVerified<'_>, + boat_form: BoatDamageVerified<'_>, ) -> Result<(), String> { - if let Some(verifier) = User::find_by_id(db, boat.user_id_verified).await { + if let Some(verifier) = User::find_by_id(db, boat_form.user_id_verified).await { if !verifier.has_role(db, "tech").await { - Log::create(db, format!("User {verifier:?} tried to verify boat {boat:?}. The user is no tech. Manually craftted request?")).await; + Log::create(db, format!("User {verifier:?} tried to verify boat {boat_form:?}. The user is no tech. Manually craftted request?")).await; return Err("You are not allowed to verify the boat!".into()); } } else { - Log::create(db, format!("Someone tried to verify the boat {boat:?} with user_id={} which does not exist. Manually craftted request?", boat.user_id_verified)).await; + Log::create(db, format!("Someone tried to verify the boat {boat_form:?} with user_id={} which does not exist. Manually craftted request?", boat_form.user_id_verified)).await; return Err("Could not find user".into()); } - Log::create(db, format!("Verified boat damage: {boat:?}")).await; + let Some(boat) = Boat::find_by_id(db, self.boat_id as i32).await else { + return Err("Boot gibt's ned".into()); + }; + let was_unusable_before = boat.is_locked(db).await; + + Log::create(db, format!("Verified boat damage: {boat_form:?}")).await; sqlx::query!( "UPDATE boat_damage SET desc=?, user_id_verified=?, verified_at=CURRENT_TIMESTAMP WHERE id=?", - boat.desc, - boat.user_id_verified, + boat_form.desc, + boat_form.user_id_verified, self.id ) .execute(db) .await.map_err(|e| e.to_string())?; - if boat.user_id_verified != self.user_id_created as i32 { - let user_verified = User::find_by_id(db, boat.user_id_verified).await.unwrap(); + if boat_form.user_id_verified != self.user_id_created as i32 { + let user_verified = User::find_by_id(db, boat_form.user_id_verified) + .await + .unwrap(); let user_created = User::find_by_id(db, self.user_id_created as i32) .await .unwrap(); - let boat = Boat::find_by_id(db, self.boat_id as i32).await.unwrap(); if user_verified.id == self.user_id_fixed.unwrap() { Notification::create( @@ -325,6 +337,11 @@ ORDER BY created_at DESC } } + if was_unusable_before && !boat.is_locked(db).await { + let cox = Role::find_by_name(db, "cox").await.unwrap(); + Notification::create_for_role(db, &cox, &format!("Liebe Steuerberechtigte, {} wurde repariert und freut sich ab sofort wieder gerudert zu werden :-)", boat.name), "Boot repariert", None).await; + } + Ok(()) } }