Merge pull request 'also be able to cancel trips (not only events)' (#929) from zero-rower-events into staging
Reviewed-on: #929
This commit was merged in pull request #929.
	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 %} | ||||
| @@ -351,7 +355,7 @@ | ||||
|                                     {# --- START Sidebar Content --- #} | ||||
|                                     <div class="hidden"> | ||||
|                                         <div id="trip{{ trip.trip_details_id }}"> | ||||
|                                             {% if trip.max_people == 0 %} | ||||
|                                             {% if trip.cancelled %} | ||||
|                                                 {# --- border-[#f43f5e] bg-[#f43f5e] --- #} | ||||
|                                                 {{ macros::box(participants=trip.rower,bg='[#f43f5e]',header='Absage', trip_details_id=trip.trip_details_id, allow_removing=loggedin_user.id == trip.cox_id) }} | ||||
|                                             {% else %} | ||||
| @@ -391,7 +395,7 @@ | ||||
|                                                     </a> | ||||
|                                                 </div> | ||||
|                                             {% else %} | ||||
|                                                 {% if trip.max_people == 0 %} | ||||
|                                                 {% if trip.cancelled %} | ||||
|                                                     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"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user