make scheckbuch user behave as previously, but in own file
Some checks failed
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-main (push) Has been cancelled
CI/CD Pipeline / test (push) Has been cancelled

This commit is contained in:
Philipp Hofer 2025-04-29 21:00:50 +02:00
parent 876451fc02
commit 7604678d4a
8 changed files with 42 additions and 32 deletions

View File

@ -552,7 +552,7 @@ mod test {
let trip_details = TripDetails::find_by_id(&pool, 1).await.unwrap();
let admin = EventUser::new(&pool, User::find_by_id(&pool, 1).await.unwrap())
let admin = EventUser::new(&pool, &User::find_by_id(&pool, 1).await.unwrap())
.await
.unwrap();
Event::create(&pool, &admin, "new-event".into(), 2, false, &trip_details).await;

View File

@ -256,7 +256,7 @@ mod test {
let trip_details = TripDetails::find_by_id(&pool, tripdetails_id)
.await
.unwrap();
let user = EventUser::new(&pool, User::find_by_id(&pool, 1).await.unwrap())
let user = EventUser::new(&pool, &User::find_by_id(&pool, 1).await.unwrap())
.await
.unwrap();
Event::create(&pool, &user, "new-event".into(), 2, false, &trip_details).await;
@ -269,7 +269,7 @@ mod test {
UserTrip::create(&pool, &rower, &trip_details, None)
.await
.unwrap();
let cox = SteeringUser::new(&pool, User::find_by_name(&pool, "cox").await.unwrap())
let cox = SteeringUser::new(&pool, &User::find_by_name(&pool, "cox").await.unwrap())
.await
.unwrap();
Trip::new_join(&pool, &cox, &event).await.unwrap();
@ -284,7 +284,7 @@ mod test {
is_locked: event.is_locked,
trip_type_id: None,
};
event.update(&pool, &cancel_update).await;
event.update(&pool, &user, &cancel_update).await;
// Rower received notification
let notifications = Notification::for_user(&pool, &rower).await;
@ -314,12 +314,12 @@ mod test {
is_locked: event.is_locked,
trip_type_id: None,
};
event.update(&pool, &update).await;
event.update(&pool, &user, &update).await;
assert!(Notification::for_user(&pool, &rower).await.is_empty());
assert!(Notification::for_user(&pool, &cox.user).await.is_empty());
// Cancel event again
event.update(&pool, &cancel_update).await;
event.update(&pool, &user, &cancel_update).await;
// Rower is removed if notification is accepted
assert!(event.is_rower_registered(&pool, &rower).await);

View File

@ -532,7 +532,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -549,7 +549,7 @@ mod test {
let pool = testdb!();
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -558,7 +558,7 @@ mod test {
let cox2 = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox2".into()).await.unwrap(),
&User::find_by_name(&pool, "cox2".into()).await.unwrap(),
)
.await
.unwrap();
@ -587,7 +587,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox2".into()).await.unwrap(),
&User::find_by_name(&pool, "cox2".into()).await.unwrap(),
)
.await
.unwrap();
@ -603,7 +603,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox2".into()).await.unwrap(),
&User::find_by_name(&pool, "cox2".into()).await.unwrap(),
)
.await
.unwrap();
@ -620,7 +620,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -648,7 +648,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -676,7 +676,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox2".into()).await.unwrap(),
&User::find_by_name(&pool, "cox2".into()).await.unwrap(),
)
.await
.unwrap();
@ -701,7 +701,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -724,7 +724,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();
@ -742,7 +742,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox2".into()).await.unwrap(),
&User::find_by_name(&pool, "cox2".into()).await.unwrap(),
)
.await
.unwrap();
@ -764,7 +764,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();

View File

@ -27,6 +27,7 @@ use super::{
Day,
};
use crate::{tera::admin::user::UserEditForm, AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD};
use scheckbuch::ScheckbuchUser;
mod fee;
mod scheckbuch;
@ -112,6 +113,8 @@ impl User {
.await?;
} else if self.has_role(db, "schnupperant").await {
self.send_welcome_mail_schnupper(db, mail, smtp_pw).await?;
} else if let Some(scheckbuch) = ScheckbuchUser::new(db, &self).await {
scheckbuch.notify(db, mail, smtp_pw).await?;
} else {
return Err(format!(
"Could not send welcome mail, because user {} is not in Donau Linz or scheckbuch or schnupperant group",
@ -259,7 +262,7 @@ ASKÖ Ruderverein Donau Linz", self.name),
}
pub async fn allowed_to_update_always_show_trip(&self, db: &SqlitePool) -> bool {
AllowedToUpdateTripToAlwaysBeShownUser::new(db, self.clone())
AllowedToUpdateTripToAlwaysBeShownUser::new(db, &self)
.await
.is_some()
}
@ -989,9 +992,9 @@ macro_rules! special_user {
}
impl $name {
pub async fn new(db: &SqlitePool, user: User) -> Option<Self> {
pub async fn new(db: &SqlitePool, user: &User) -> Option<Self> {
if special_user!(@check_roles user, db, $($role)*) {
Some($name { user })
Some($name { user: user.clone() })
} else {
None
}

View File

@ -30,16 +30,23 @@ impl ScheckbuchUser {
user.add_role(db, &scheckbuch).await.unwrap();
// TODO: remove all other `membership_type` roles
let new_user = Self::new(db, &user).await.unwrap();
let new_user = Self::new(db, user).await.unwrap();
new_user.notify(db, mail, smtp_pw).await
}
new_user
.send_welcome_mail_to_user(db, mail, smtp_pw)
.await?;
new_user.notify_coxes_about_new_scheckbuch(db).await;
pub(crate) async fn notify(
&self,
db: &SqlitePool,
mail: &str,
smtp_pw: &str,
) -> Result<(), String> {
self.send_welcome_mail_to_user(db, mail, smtp_pw).await?;
self.notify_coxes_about_new_scheckbuch(db).await;
Ok(())
}
async fn send_welcome_mail_to_user(
&self,
db: &SqlitePool,

View File

@ -197,7 +197,7 @@ impl UserTrip {
let mut add_info = "";
if let Some(trip) = &trip_to_delete {
let cox = User::find_by_id(db, trip.cox_id as i32).await.unwrap();
trip.delete(db, &SteeringUser::new(db, cox).await.unwrap())
trip.delete(db, &SteeringUser::new(db, &cox).await.unwrap())
.await
.unwrap();
add_info = " Das war die letzte angemeldete Person. Nachdem nun alle Bescheid wissen, wird die Ausfahrt ab sofort nicht mehr angezeigt.";
@ -355,7 +355,7 @@ mod test {
let cox = SteeringUser::new(
&pool,
User::find_by_name(&pool, "cox".into()).await.unwrap(),
&User::find_by_name(&pool, "cox".into()).await.unwrap(),
)
.await
.unwrap();

View File

@ -60,7 +60,7 @@ async fn index(
.collect();
let user: User = user.into_inner();
let allowed_to_edit = ManageUserUser::new(db, user.clone()).await.is_some();
let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some();
let users: Vec<UserWithRolesAndMembershipPdf> = join_all(user_futures).await;
@ -94,7 +94,7 @@ async fn index_admin(
let users: Vec<UserWithRolesAndMembershipPdf> = join_all(user_futures).await;
let user: User = user.user;
let allowed_to_edit = ManageUserUser::new(db, user.clone()).await.is_some();
let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some();
let roles = Role::all(db).await;
let families = Family::all_with_members(db).await;

View File

@ -296,7 +296,7 @@ async fn create_kiosk(
create_logbook(
db,
data,
&DonauLinzUser::new(db, creator).await.unwrap(),
&DonauLinzUser::new(db, &creator).await.unwrap(),
&config.smtp_pw,
)
.await
@ -390,7 +390,7 @@ async fn home_kiosk(
logbook_id,
&DonauLinzUser::new(
db,
User::find_by_id(db, logbook.shipmaster as i32)
&User::find_by_id(db, logbook.shipmaster as i32)
.await
.unwrap(),
)