forked from Ruderverein-Donau-Linz/rowt
		
	add notification on canceled trips; add explicit 'cancel trip' button
This commit is contained in:
		@@ -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(())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -310,7 +310,7 @@
 | 
			
		||||
                                            <div class="bg-gray-100 dark:bg-primary-900 p-3 mt-4 rounded-md">
 | 
			
		||||
                                                <h3 class="text-primary-950 dark:text-white font-bold uppercase tracking-wide mb-2">Ausfahrt bearbeiten</h3>
 | 
			
		||||
                                                <form action="/cox/trip/{{ trip.id }}" method="post" class="grid gap-3">
 | 
			
		||||
                                                    {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=trip.max_people, min='0') }}
 | 
			
		||||
                                                    {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=trip.max_people, min=trip.rower | length) }}
 | 
			
		||||
                                                    {{ macros::input(label='Anmerkungen', name='notes', type='input', value=trip.notes) }}
 | 
			
		||||
                                                    {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=trip.id,checked=trip.always_show) }}
 | 
			
		||||
                                                    {{ macros::checkbox(label='Gesperrt', name='is_locked', id=trip.id,checked=trip.is_locked) }}
 | 
			
		||||
@@ -326,6 +326,22 @@
 | 
			
		||||
                                                        Termin löschen
 | 
			
		||||
                                                    </a>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                            {% else %}
 | 
			
		||||
                                                {% if trip.max_people == 0 %}
 | 
			
		||||
                                                    Wenn du deine Absage absagen (:^)) willst, einfach entsprechende Anzahl an Ruderer oben eintragen.
 | 
			
		||||
                                                {% else %}
 | 
			
		||||
                                                    <div class="bg-gray-100 dark:bg-primary-900 p-3 mt-4 rounded-md">
 | 
			
		||||
                                                        <h3 class="text-primary-950 dark:text-white font-bold uppercase tracking-wide mb-2">Ausfahrt absagen</h3>
 | 
			
		||||
                                                        <form action="/cox/trip/{{ trip.id }}" method="post" class="grid">
 | 
			
		||||
                                                            {{ macros::input(label='', name='max_people', type='hidden', value=0) }}
 | 
			
		||||
                                                            {{ macros::input(label='', name='notes', type='hidden', value=trip.notes) }}
 | 
			
		||||
                                                            {{ macros::input(label='', name='always_show', type='hidden', value=trip.always_show) }}
 | 
			
		||||
                                                            {{ macros::input(label='', name='is_locked', type='hidden', value=trip.is_locked) }}
 | 
			
		||||
                                                            {{ macros::input(label='', name='trip_type', type='hidden', value=trip.trip_type_id) }}
 | 
			
		||||
                                                            <input value="Ausfahrt absagen" class="btn btn-alert" type="submit" />
 | 
			
		||||
                                                        </form>
 | 
			
		||||
                                                    </div>
 | 
			
		||||
                                                {% endif %}
 | 
			
		||||
                                            {% endif %}
 | 
			
		||||
                                        {% endif %}
 | 
			
		||||
                                        {# --- END Edit Form --- #}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user