use askama::Template; use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; use serde::Deserialize; use crate::filters; use crate::models::{Availability, AvailabilityChangeset, Role, User}; use crate::utils::DateTimeFormat::{DayMonth, DayMonthYear, DayMonthYearHourMinute, HourMinute}; pub mod delete; pub mod get_new; pub mod get_overview; pub mod get_update; pub mod post_new; pub mod post_update; #[derive(Template)] #[template(path = "availability/new_or_edit.html")] struct NewOrEditAvailabilityTemplate<'a> { user: User, date: NaiveDate, enddate: Option, id: Option, start: Option, end: Option, comment: Option<&'a str>, slot_suggestions: Vec<(NaiveDateTime, NaiveDateTime)>, datetomorrow: NaiveDate, } #[derive(Deserialize)] pub struct AvailabilityForm { pub startdate: NaiveDate, pub enddate: NaiveDate, pub starttime: NaiveTime, pub endtime: NaiveTime, pub comment: Option, } fn find_adjacend_availability<'a>( changeset: &AvailabilityChangeset, availability_id_to_be_updated: Option, existing_availabilities: &'a [Availability], ) -> Option<&'a Availability> { let existing_availability = existing_availabilities .iter() .filter(|a| availability_id_to_be_updated.is_none_or(|id| a.id != id)) .find(|a| a.start == changeset.time.1 || a.end == changeset.time.0); return existing_availability; }