forked from Ruderverein-Donau-Linz/rowt
		
	also be able to cancel trips (not only events)
This commit is contained in:
		@@ -7,7 +7,7 @@ use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
 | 
			
		||||
 | 
			
		||||
use self::{
 | 
			
		||||
    event::{Event, EventWithDetails},
 | 
			
		||||
    trip::{Trip, TripWithUserAndType},
 | 
			
		||||
    trip::{Trip, TripWithDetails},
 | 
			
		||||
    waterlevel::Waterlevel,
 | 
			
		||||
    weather::Weather,
 | 
			
		||||
};
 | 
			
		||||
@@ -45,7 +45,7 @@ pub mod weather;
 | 
			
		||||
pub struct Day {
 | 
			
		||||
    day: NaiveDate,
 | 
			
		||||
    events: Vec<EventWithDetails>,
 | 
			
		||||
    trips: Vec<TripWithUserAndType>,
 | 
			
		||||
    trips: Vec<TripWithDetails>,
 | 
			
		||||
    is_pinned: bool,
 | 
			
		||||
    regular_sees_this_day: bool,
 | 
			
		||||
    max_waterlevel: Option<WaterlevelDay>,
 | 
			
		||||
 
 | 
			
		||||
@@ -30,11 +30,12 @@ pub struct Trip {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Debug)]
 | 
			
		||||
pub struct TripWithUserAndType {
 | 
			
		||||
pub struct TripWithDetails {
 | 
			
		||||
    #[serde(flatten)]
 | 
			
		||||
    pub trip: Trip,
 | 
			
		||||
    pub rower: Vec<Registration>,
 | 
			
		||||
    trip_type: Option<TripType>,
 | 
			
		||||
    cancelled: bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub struct TripUpdate<'a> {
 | 
			
		||||
@@ -52,7 +53,7 @@ impl<'a> TripUpdate<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TripWithUserAndType {
 | 
			
		||||
impl TripWithDetails {
 | 
			
		||||
    pub async fn from(db: &SqlitePool, trip: Trip) -> Self {
 | 
			
		||||
        let mut trip_type = None;
 | 
			
		||||
        if let Some(trip_type_id) = trip.trip_type_id {
 | 
			
		||||
@@ -60,8 +61,9 @@ impl TripWithUserAndType {
 | 
			
		||||
        }
 | 
			
		||||
        Self {
 | 
			
		||||
            rower: Registration::all_rower(db, trip.trip_details_id.unwrap()).await,
 | 
			
		||||
            trip,
 | 
			
		||||
            trip_type,
 | 
			
		||||
            cancelled: trip.is_cancelled(),
 | 
			
		||||
            trip,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -268,12 +270,12 @@ WHERE trip.id=?
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn get_for_today(db: &SqlitePool) -> Vec<TripWithUserAndType> {
 | 
			
		||||
    pub async fn get_for_today(db: &SqlitePool) -> Vec<TripWithDetails> {
 | 
			
		||||
        let today = Local::now().date_naive();
 | 
			
		||||
        Self::get_for_day(db, today).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn get_for_day(db: &SqlitePool, day: NaiveDate) -> Vec<TripWithUserAndType> {
 | 
			
		||||
    pub async fn get_for_day(db: &SqlitePool, day: NaiveDate) -> Vec<TripWithDetails> {
 | 
			
		||||
        let day = format!("{day}");
 | 
			
		||||
        let trips = sqlx::query_as!(
 | 
			
		||||
            Trip,
 | 
			
		||||
@@ -292,7 +294,7 @@ WHERE day=?
 | 
			
		||||
 | 
			
		||||
        let mut ret = Vec::new();
 | 
			
		||||
        for trip in trips {
 | 
			
		||||
            ret.push(TripWithUserAndType::from(db, trip).await);
 | 
			
		||||
            ret.push(TripWithDetails::from(db, trip).await);
 | 
			
		||||
        }
 | 
			
		||||
        ret
 | 
			
		||||
    }
 | 
			
		||||
@@ -336,9 +338,7 @@ WHERE day=?
 | 
			
		||||
        .unwrap(); //Okay, as trip_details can only be created with proper DB backing
 | 
			
		||||
 | 
			
		||||
        if update.cancelled() && !was_already_cancelled {
 | 
			
		||||
            let rowers = TripWithUserAndType::from(db, update.trip.clone())
 | 
			
		||||
                .await
 | 
			
		||||
                .rower;
 | 
			
		||||
            let rowers = TripWithDetails::from(db, update.trip.clone()).await.rower;
 | 
			
		||||
            for user in rowers {
 | 
			
		||||
                if let Some(user) = User::find_by_name(db, &user.name).await {
 | 
			
		||||
                    let notes = match update.notes {
 | 
			
		||||
@@ -462,7 +462,7 @@ WHERE day=?
 | 
			
		||||
    pub(crate) async fn get_pinned_for_day(
 | 
			
		||||
        db: &sqlx::Pool<sqlx::Sqlite>,
 | 
			
		||||
        day: NaiveDate,
 | 
			
		||||
    ) -> Vec<TripWithUserAndType> {
 | 
			
		||||
    ) -> Vec<TripWithDetails> {
 | 
			
		||||
        let mut trips = Self::get_for_day(db, day).await;
 | 
			
		||||
        trips.retain(|e| e.trip.always_show);
 | 
			
		||||
        trips
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ use sqlx::{FromRow, SqlitePool};
 | 
			
		||||
 | 
			
		||||
use super::{
 | 
			
		||||
    notification::Notification,
 | 
			
		||||
    trip::{Trip, TripWithUserAndType},
 | 
			
		||||
    trip::{Trip, TripWithDetails},
 | 
			
		||||
    triptype::TripType,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -138,7 +138,7 @@ WHERE day = ? AND planned_starting_time = ?
 | 
			
		||||
                // This trip_details belongs to a planned_event, no need to do anything
 | 
			
		||||
                continue;
 | 
			
		||||
            };
 | 
			
		||||
            let pot_coxes = TripWithUserAndType::from(db, trip.clone()).await;
 | 
			
		||||
            let pot_coxes = TripWithDetails::from(db, trip.clone()).await;
 | 
			
		||||
            let pot_coxes = pot_coxes.rower;
 | 
			
		||||
            for user in pot_coxes {
 | 
			
		||||
                let cox = User::find_by_id(db, trip.cox_id as i32).await.unwrap();
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ use sqlx::{FromRow, SqlitePool};
 | 
			
		||||
 | 
			
		||||
use super::{
 | 
			
		||||
    notification::Notification,
 | 
			
		||||
    trip::{Trip, TripWithUserAndType},
 | 
			
		||||
    trip::{Trip, TripWithDetails},
 | 
			
		||||
    tripdetails::TripDetails,
 | 
			
		||||
    user::{SteeringUser, User},
 | 
			
		||||
};
 | 
			
		||||
@@ -158,7 +158,7 @@ impl UserTrip {
 | 
			
		||||
                .unwrap()
 | 
			
		||||
                .cancelled()
 | 
			
		||||
            {
 | 
			
		||||
                let trip = TripWithUserAndType::from(db, trip.clone()).await;
 | 
			
		||||
                let trip = TripWithDetails::from(db, trip.clone()).await;
 | 
			
		||||
                if trip.rower.len() == 1 {
 | 
			
		||||
                    trip_to_delete = Some(trip.trip);
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -240,7 +240,11 @@
 | 
			
		||||
                                                        <input type="hidden" name="_method" value="put" />
 | 
			
		||||
                                                        <input type="hidden" name="id" value="{{ event.id }}" />
 | 
			
		||||
                                                        {{ macros::input(label='Titel', name='name', type='input', value=event.name) }}
 | 
			
		||||
                                                        {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=event.max_people, min='0') }}
 | 
			
		||||
                                                        {% if event.cancelled %}
 | 
			
		||||
                                                          <input type="hidden" name="max_people" value="-1" />
 | 
			
		||||
                                                        {% else %}
 | 
			
		||||
                                                          {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=event.max_people, min='0') }}
 | 
			
		||||
                                                        {% endif %}
 | 
			
		||||
                                                        {{ macros::input(label='Anzahl Steuerleute', name='planned_amount_cox', type='number', value=event.planned_amount_cox, required=true, min='0') }}
 | 
			
		||||
                                                        {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=event.id,checked=event.always_show) }}
 | 
			
		||||
                                                        {{ macros::checkbox(label='Gesperrt', name='is_locked', id=event.id,checked=event.is_locked) }}
 | 
			
		||||
@@ -300,7 +304,7 @@
 | 
			
		||||
                                            {% if trip.always_show and not day.regular_sees_this_day %}
 | 
			
		||||
                                                <span title="Du siehst diese Ausfahrt schon, obwohl sie mehr als {{ amount_days_to_show_trips_ahead }} Tage in der Zukunft liegt. Du Magier!">🔮</span>
 | 
			
		||||
                                            {% endif -%}
 | 
			
		||||
                                            {% if trip.max_people == 0 %}
 | 
			
		||||
                                            {% if trip.cancelled %}
 | 
			
		||||
                                                <strong class="text-[#f43f5e]">⚠
 | 
			
		||||
                                                    {{ trip.planned_starting_time }}
 | 
			
		||||
                                                Uhr</strong>
 | 
			
		||||
@@ -322,7 +326,7 @@
 | 
			
		||||
                                            {% endif %}
 | 
			
		||||
                                            <br />
 | 
			
		||||
                                            <a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong>
 | 
			
		||||
                                                {% if trip.max_people == 0 %}⚠{% endif %}
 | 
			
		||||
                                                {% if trip.cancelled %}⚠{% endif %}
 | 
			
		||||
                                                {{ trip.planned_starting_time }} Uhr</strong> ({{ trip.cox_name }})
 | 
			
		||||
                                                {% if trip.trip_type %}<small class='block'>{{ trip.trip_type.desc }}</small>{% endif %}
 | 
			
		||||
                                                {% if trip.notes %}<small class='block'>{{ trip.notes }}</small>{% endif %}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user