use chrono::{NaiveDate, NaiveTime}; use rinja::Template; use crate::filters; use crate::models::{Availability, AvailabilityChangeset, AvailabilityTime, Role, User}; 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, id: Option, time_selection: AvailabilityTime, comment: Option<&'a str>, slot_suggestions: Vec<(NaiveTime, NaiveTime)>, } fn find_adjacend_availability<'a>( changeset: &AvailabilityChangeset, availability_id_to_be_updated: Option, existing_availabilities: &'a [Availability], ) -> Option<&'a Availability> { let AvailabilityTime::Temporarily(changeset_start, changeset_end) = changeset.time else { return None; }; for a in existing_availabilities .iter() .filter(|a| availability_id_to_be_updated.is_none_or(|id| a.id != id)) { if let AvailabilityTime::Temporarily(start, end) = a.time { if start == changeset_end || end == changeset_start { return Some(a); } } } None }