also be able to cancel trips (not only events)
This commit is contained in:
parent
10740f988d
commit
5cd75ed8c8
@ -7,7 +7,7 @@ use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
|
|||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
event::{Event, EventWithDetails},
|
event::{Event, EventWithDetails},
|
||||||
trip::{Trip, TripWithUserAndType},
|
trip::{Trip, TripWithDetails},
|
||||||
waterlevel::Waterlevel,
|
waterlevel::Waterlevel,
|
||||||
weather::Weather,
|
weather::Weather,
|
||||||
};
|
};
|
||||||
@ -45,7 +45,7 @@ pub mod weather;
|
|||||||
pub struct Day {
|
pub struct Day {
|
||||||
day: NaiveDate,
|
day: NaiveDate,
|
||||||
events: Vec<EventWithDetails>,
|
events: Vec<EventWithDetails>,
|
||||||
trips: Vec<TripWithUserAndType>,
|
trips: Vec<TripWithDetails>,
|
||||||
is_pinned: bool,
|
is_pinned: bool,
|
||||||
regular_sees_this_day: bool,
|
regular_sees_this_day: bool,
|
||||||
max_waterlevel: Option<WaterlevelDay>,
|
max_waterlevel: Option<WaterlevelDay>,
|
||||||
|
@ -30,11 +30,12 @@ pub struct Trip {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
#[derive(Serialize, Debug)]
|
||||||
pub struct TripWithUserAndType {
|
pub struct TripWithDetails {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub trip: Trip,
|
pub trip: Trip,
|
||||||
pub rower: Vec<Registration>,
|
pub rower: Vec<Registration>,
|
||||||
trip_type: Option<TripType>,
|
trip_type: Option<TripType>,
|
||||||
|
cancelled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct TripUpdate<'a> {
|
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 {
|
pub async fn from(db: &SqlitePool, trip: Trip) -> Self {
|
||||||
let mut trip_type = None;
|
let mut trip_type = None;
|
||||||
if let Some(trip_type_id) = trip.trip_type_id {
|
if let Some(trip_type_id) = trip.trip_type_id {
|
||||||
@ -60,8 +61,9 @@ impl TripWithUserAndType {
|
|||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
rower: Registration::all_rower(db, trip.trip_details_id.unwrap()).await,
|
rower: Registration::all_rower(db, trip.trip_details_id.unwrap()).await,
|
||||||
trip,
|
|
||||||
trip_type,
|
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();
|
let today = Local::now().date_naive();
|
||||||
Self::get_for_day(db, today).await
|
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 day = format!("{day}");
|
||||||
let trips = sqlx::query_as!(
|
let trips = sqlx::query_as!(
|
||||||
Trip,
|
Trip,
|
||||||
@ -292,7 +294,7 @@ WHERE day=?
|
|||||||
|
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
for trip in trips {
|
for trip in trips {
|
||||||
ret.push(TripWithUserAndType::from(db, trip).await);
|
ret.push(TripWithDetails::from(db, trip).await);
|
||||||
}
|
}
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
@ -336,9 +338,7 @@ WHERE day=?
|
|||||||
.unwrap(); //Okay, as trip_details can only be created with proper DB backing
|
.unwrap(); //Okay, as trip_details can only be created with proper DB backing
|
||||||
|
|
||||||
if update.cancelled() && !was_already_cancelled {
|
if update.cancelled() && !was_already_cancelled {
|
||||||
let rowers = TripWithUserAndType::from(db, update.trip.clone())
|
let rowers = TripWithDetails::from(db, update.trip.clone()).await.rower;
|
||||||
.await
|
|
||||||
.rower;
|
|
||||||
for user in rowers {
|
for user in rowers {
|
||||||
if let Some(user) = User::find_by_name(db, &user.name).await {
|
if let Some(user) = User::find_by_name(db, &user.name).await {
|
||||||
let notes = match update.notes {
|
let notes = match update.notes {
|
||||||
@ -462,7 +462,7 @@ WHERE day=?
|
|||||||
pub(crate) async fn get_pinned_for_day(
|
pub(crate) async fn get_pinned_for_day(
|
||||||
db: &sqlx::Pool<sqlx::Sqlite>,
|
db: &sqlx::Pool<sqlx::Sqlite>,
|
||||||
day: NaiveDate,
|
day: NaiveDate,
|
||||||
) -> Vec<TripWithUserAndType> {
|
) -> Vec<TripWithDetails> {
|
||||||
let mut trips = Self::get_for_day(db, day).await;
|
let mut trips = Self::get_for_day(db, day).await;
|
||||||
trips.retain(|e| e.trip.always_show);
|
trips.retain(|e| e.trip.always_show);
|
||||||
trips
|
trips
|
||||||
|
@ -6,7 +6,7 @@ use sqlx::{FromRow, SqlitePool};
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
notification::Notification,
|
notification::Notification,
|
||||||
trip::{Trip, TripWithUserAndType},
|
trip::{Trip, TripWithDetails},
|
||||||
triptype::TripType,
|
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
|
// This trip_details belongs to a planned_event, no need to do anything
|
||||||
continue;
|
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;
|
let pot_coxes = pot_coxes.rower;
|
||||||
for user in pot_coxes {
|
for user in pot_coxes {
|
||||||
let cox = User::find_by_id(db, trip.cox_id as i32).await.unwrap();
|
let cox = User::find_by_id(db, trip.cox_id as i32).await.unwrap();
|
||||||
|
@ -3,7 +3,7 @@ use sqlx::{FromRow, SqlitePool};
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
notification::Notification,
|
notification::Notification,
|
||||||
trip::{Trip, TripWithUserAndType},
|
trip::{Trip, TripWithDetails},
|
||||||
tripdetails::TripDetails,
|
tripdetails::TripDetails,
|
||||||
user::{SteeringUser, User},
|
user::{SteeringUser, User},
|
||||||
};
|
};
|
||||||
@ -158,7 +158,7 @@ impl UserTrip {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.cancelled()
|
.cancelled()
|
||||||
{
|
{
|
||||||
let trip = TripWithUserAndType::from(db, trip.clone()).await;
|
let trip = TripWithDetails::from(db, trip.clone()).await;
|
||||||
if trip.rower.len() == 1 {
|
if trip.rower.len() == 1 {
|
||||||
trip_to_delete = Some(trip.trip);
|
trip_to_delete = Some(trip.trip);
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,11 @@
|
|||||||
<input type="hidden" name="_method" value="put" />
|
<input type="hidden" name="_method" value="put" />
|
||||||
<input type="hidden" name="id" value="{{ event.id }}" />
|
<input type="hidden" name="id" value="{{ event.id }}" />
|
||||||
{{ macros::input(label='Titel', name='name', type='input', value=event.name) }}
|
{{ 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::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='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) }}
|
{{ 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 %}
|
{% 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>
|
<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 -%}
|
{% endif -%}
|
||||||
{% if trip.max_people == 0 %}
|
{% if trip.cancelled %}
|
||||||
<strong class="text-[#f43f5e]">⚠
|
<strong class="text-[#f43f5e]">⚠
|
||||||
{{ trip.planned_starting_time }}
|
{{ trip.planned_starting_time }}
|
||||||
Uhr</strong>
|
Uhr</strong>
|
||||||
@ -322,7 +326,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<br />
|
<br />
|
||||||
<a href="#" data-sidebar="true" data-trigger="sidebar" data-header="<strong>
|
<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 }})
|
{{ trip.planned_starting_time }} Uhr</strong> ({{ trip.cox_name }})
|
||||||
{% if trip.trip_type %}<small class='block'>{{ trip.trip_type.desc }}</small>{% endif %}
|
{% if trip.trip_type %}<small class='block'>{{ trip.trip_type.desc }}</small>{% endif %}
|
||||||
{% if trip.notes %}<small class='block'>{{ trip.notes }}</small>{% endif %}
|
{% if trip.notes %}<small class='block'>{{ trip.notes }}</small>{% endif %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user