refactor: rename availability
This commit is contained in:
parent
864141121a
commit
09821c4b8d
@ -2,7 +2,7 @@ use rinja::Template;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
filters,
|
filters,
|
||||||
models::{Availabillity, AvailabillityAssignmentState, Event, Function},
|
models::{Availability, AvailabillityAssignmentState, Event, Function},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub mod delete;
|
pub mod delete;
|
||||||
@ -12,7 +12,7 @@ pub mod post_new;
|
|||||||
#[template(path = "events/plan_personal_table.html")]
|
#[template(path = "events/plan_personal_table.html")]
|
||||||
pub struct PlanEventPersonalTablePartialTemplate {
|
pub struct PlanEventPersonalTablePartialTemplate {
|
||||||
event: Event,
|
event: Event,
|
||||||
availabillities: Vec<(Availabillity, AvailabillityAssignmentState)>,
|
availabillities: Vec<(Availability, AvailabillityAssignmentState)>,
|
||||||
further_posten_required: bool,
|
further_posten_required: bool,
|
||||||
further_fuehrungsassistent_required: bool,
|
further_fuehrungsassistent_required: bool,
|
||||||
further_wachhabender_required: bool,
|
further_wachhabender_required: bool,
|
||||||
|
@ -7,7 +7,7 @@ use sqlx::PgPool;
|
|||||||
use crate::{
|
use crate::{
|
||||||
endpoints::assignment::PlanEventPersonalTablePartialTemplate,
|
endpoints::assignment::PlanEventPersonalTablePartialTemplate,
|
||||||
models::{
|
models::{
|
||||||
Assignment, AssignmentChangeset, AssignmentContext, Availabillity, Event, Function, Role,
|
Assignment, AssignmentChangeset, AssignmentContext, Availability, Event, Function, Role,
|
||||||
User,
|
User,
|
||||||
},
|
},
|
||||||
utils::{
|
utils::{
|
||||||
@ -45,7 +45,7 @@ pub async fn post(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(availabillity) =
|
let Some(availabillity) =
|
||||||
Availabillity::read_by_id_including_user(pool.get_ref(), query.availabillity).await?
|
Availability::read_by_id_including_user(pool.get_ref(), query.availabillity).await?
|
||||||
else {
|
else {
|
||||||
return Ok(HttpResponse::NotFound().finish());
|
return Ok(HttpResponse::NotFound().finish());
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@ use sqlx::PgPool;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
endpoints::IdPath,
|
endpoints::IdPath,
|
||||||
models::{Availabillity, User}, utils::ApplicationError,
|
models::{Availability, User}, utils::ApplicationError,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[actix_web::delete("/availabillity/delete/{id}")]
|
#[actix_web::delete("/availabillity/delete/{id}")]
|
||||||
@ -12,7 +12,7 @@ pub async fn delete(
|
|||||||
pool: web::Data<PgPool>,
|
pool: web::Data<PgPool>,
|
||||||
path: web::Path<IdPath>,
|
path: web::Path<IdPath>,
|
||||||
) -> Result<impl Responder, ApplicationError> {
|
) -> Result<impl Responder, ApplicationError> {
|
||||||
let Some(availabillity) = Availabillity::read_by_id(pool.get_ref(), path.id).await? else {
|
let Some(availabillity) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||||
return Ok(HttpResponse::NotFound().finish());
|
return Ok(HttpResponse::NotFound().finish());
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ pub async fn delete(
|
|||||||
return Err(ApplicationError::Unauthorized);
|
return Err(ApplicationError::Unauthorized);
|
||||||
}
|
}
|
||||||
|
|
||||||
Availabillity::delete(pool.get_ref(), availabillity.id).await?;
|
Availability::delete(pool.get_ref(), availabillity.id).await?;
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().finish())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use serde::Deserialize;
|
|||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
||||||
use crate::endpoints::availability::{calc_free_slots_cor, NewOrEditAvailabilityTemplate};
|
use crate::endpoints::availability::{calc_free_slots_cor, NewOrEditAvailabilityTemplate};
|
||||||
use crate::models::{Availabillity, User};
|
use crate::models::{Availability, User};
|
||||||
use crate::utils::ApplicationError;
|
use crate::utils::ApplicationError;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@ -21,14 +21,14 @@ pub async fn get(
|
|||||||
pool: web::Data<PgPool>,
|
pool: web::Data<PgPool>,
|
||||||
query: web::Query<AvailabilityNewQuery>,
|
query: web::Query<AvailabilityNewQuery>,
|
||||||
) -> Result<impl Responder, ApplicationError> {
|
) -> Result<impl Responder, ApplicationError> {
|
||||||
let availabillities = Availabillity::read_by_date_and_area_including_user(
|
let availabillities = Availability::read_by_date_and_area_including_user(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
query.date,
|
query.date,
|
||||||
user.area_id,
|
user.area_id,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let availabilities_from_user: Vec<&Availabillity> = availabillities
|
let availabilities_from_user: Vec<&Availability> = availabillities
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|a| a.user_id == user.id)
|
.filter(|a| a.user_id == user.id)
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -7,7 +7,7 @@ use rinja::Template;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
||||||
use crate::models::{Area, Availabillity, Event, Role, User};
|
use crate::models::{Area, Availability, Event, Role, User};
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct CalendarQuery {
|
pub struct CalendarQuery {
|
||||||
@ -30,7 +30,7 @@ struct CalendarTemplate {
|
|||||||
Option<String>,
|
Option<String>,
|
||||||
Vec<Vehicle>,
|
Vec<Vehicle>,
|
||||||
)>,
|
)>,
|
||||||
availabillities: Vec<Availabillity>,
|
availabillities: Vec<Availability>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[actix_web::get("/")]
|
#[actix_web::get("/")]
|
||||||
@ -57,14 +57,14 @@ async fn get(
|
|||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let availabillities = Availabillity::read_by_date_and_area_including_user(
|
let availabillities = Availability::read_by_date_and_area_including_user(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
date,
|
date,
|
||||||
query.area.unwrap_or(user.area_id),
|
query.area.unwrap_or(user.area_id),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let availabilities_from_user: Vec<&Availabillity> = availabillities
|
let availabilities_from_user: Vec<&Availability> = availabillities
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|a| a.user_id == user.id)
|
.filter(|a| a.user_id == user.id)
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -8,7 +8,7 @@ use crate::{
|
|||||||
availability::{calc_free_slots_cor, NewOrEditAvailabilityTemplate},
|
availability::{calc_free_slots_cor, NewOrEditAvailabilityTemplate},
|
||||||
IdPath,
|
IdPath,
|
||||||
},
|
},
|
||||||
models::{Availabillity, User},
|
models::{Availability, User},
|
||||||
utils::ApplicationError,
|
utils::ApplicationError,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ pub async fn get(
|
|||||||
path: web::Path<IdPath>,
|
path: web::Path<IdPath>,
|
||||||
query: web::Query<EditAvailabilityQuery>,
|
query: web::Query<EditAvailabilityQuery>,
|
||||||
) -> Result<impl Responder, ApplicationError> {
|
) -> Result<impl Responder, ApplicationError> {
|
||||||
let Some(availabillity) = Availabillity::read_by_id(pool.get_ref(), path.id).await? else {
|
let Some(availabillity) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||||
return Ok(HttpResponse::NotFound().finish());
|
return Ok(HttpResponse::NotFound().finish());
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -44,14 +44,14 @@ pub async fn get(
|
|||||||
let has_time = availabillity.start_time.is_some() && availabillity.end_time.is_some();
|
let has_time = availabillity.start_time.is_some() && availabillity.end_time.is_some();
|
||||||
|
|
||||||
let suggestions = if has_time {
|
let suggestions = if has_time {
|
||||||
let availabillities = Availabillity::read_by_date_and_area_including_user(
|
let availabillities = Availability::read_by_date_and_area_including_user(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
availabillity.date,
|
availabillity.date,
|
||||||
user.area_id,
|
user.area_id,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let availabilities_from_user: Vec<&Availabillity> = availabillities
|
let availabilities_from_user: Vec<&Availability> = availabillities
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|a| a.user_id == user.id)
|
.filter(|a| a.user_id == user.id)
|
||||||
.collect();
|
.collect();
|
||||||
|
@ -2,7 +2,7 @@ use chrono::{NaiveDate, NaiveTime};
|
|||||||
use rinja::Template;
|
use rinja::Template;
|
||||||
|
|
||||||
use crate::filters;
|
use crate::filters;
|
||||||
use crate::models::{Availabillity, Role, User};
|
use crate::models::{Availability, Role, User};
|
||||||
|
|
||||||
pub mod delete;
|
pub mod delete;
|
||||||
pub mod get_new;
|
pub mod get_new;
|
||||||
@ -24,7 +24,7 @@ struct NewOrEditAvailabilityTemplate<'a> {
|
|||||||
slot_suggestions: Vec<(NaiveTime, NaiveTime)>,
|
slot_suggestions: Vec<(NaiveTime, NaiveTime)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_free_slots_cor(availabilities: &Vec<&Availabillity>) -> Vec<(NaiveTime, NaiveTime)> {
|
fn calc_free_slots_cor(availabilities: &Vec<&Availability>) -> Vec<(NaiveTime, NaiveTime)> {
|
||||||
let mut times = Vec::new();
|
let mut times = Vec::new();
|
||||||
|
|
||||||
for a in availabilities {
|
for a in availabilities {
|
||||||
|
@ -4,7 +4,7 @@ use serde::Deserialize;
|
|||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
models::{Availabillity, User},
|
models::{Availability, User},
|
||||||
utils::{self, ApplicationError},
|
utils::{self, ApplicationError},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ pub async fn post(
|
|||||||
pool: web::Data<PgPool>,
|
pool: web::Data<PgPool>,
|
||||||
form: web::Form<AvailabillityForm>,
|
form: web::Form<AvailabillityForm>,
|
||||||
) -> Result<impl Responder, ApplicationError> {
|
) -> Result<impl Responder, ApplicationError> {
|
||||||
Availabillity::create(
|
Availability::create(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
user.id,
|
user.id,
|
||||||
form.date,
|
form.date,
|
||||||
|
@ -3,7 +3,7 @@ use sqlx::PgPool;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
endpoints::{availability::post_new::AvailabillityForm, IdPath},
|
endpoints::{availability::post_new::AvailabillityForm, IdPath},
|
||||||
models::{Availabillity, User},
|
models::{Availability, User},
|
||||||
utils::{self, ApplicationError},
|
utils::{self, ApplicationError},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ pub async fn post(
|
|||||||
path: web::Path<IdPath>,
|
path: web::Path<IdPath>,
|
||||||
form: web::Form<AvailabillityForm>,
|
form: web::Form<AvailabillityForm>,
|
||||||
) -> Result<impl Responder, ApplicationError> {
|
) -> Result<impl Responder, ApplicationError> {
|
||||||
let Some(availabillity) = Availabillity::read_by_id(pool.get_ref(), path.id).await? else {
|
let Some(availabillity) = Availability::read_by_id(pool.get_ref(), path.id).await? else {
|
||||||
return Ok(HttpResponse::NotFound().finish());
|
return Ok(HttpResponse::NotFound().finish());
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ pub async fn post(
|
|||||||
|| availabillity.end_time != form.till
|
|| availabillity.end_time != form.till
|
||||||
|| availabillity.comment != form.comment
|
|| availabillity.comment != form.comment
|
||||||
{
|
{
|
||||||
Availabillity::update(
|
Availability::update(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
availabillity.id,
|
availabillity.id,
|
||||||
form.from,
|
form.from,
|
||||||
|
@ -5,7 +5,7 @@ use sqlx::PgPool;
|
|||||||
use crate::{
|
use crate::{
|
||||||
endpoints::IdPath,
|
endpoints::IdPath,
|
||||||
filters,
|
filters,
|
||||||
models::{Availabillity, AvailabillityAssignmentState, Event, Function, Role, User, Vehicle},
|
models::{Availability, AvailabillityAssignmentState, Event, Function, Role, User, Vehicle},
|
||||||
utils::{
|
utils::{
|
||||||
event_planning_template::{
|
event_planning_template::{
|
||||||
generate_availabillity_assignment_list, generate_status_whether_staff_is_required,
|
generate_availabillity_assignment_list, generate_status_whether_staff_is_required,
|
||||||
@ -20,7 +20,7 @@ use crate::{
|
|||||||
pub struct PlanEventTemplate {
|
pub struct PlanEventTemplate {
|
||||||
user: User,
|
user: User,
|
||||||
event: Event,
|
event: Event,
|
||||||
availabillities: Vec<(Availabillity, AvailabillityAssignmentState)>,
|
availabillities: Vec<(Availability, AvailabillityAssignmentState)>,
|
||||||
further_posten_required: bool,
|
further_posten_required: bool,
|
||||||
further_fuehrungsassistent_required: bool,
|
further_fuehrungsassistent_required: bool,
|
||||||
further_wachhabender_required: bool,
|
further_wachhabender_required: bool,
|
||||||
|
@ -7,7 +7,7 @@ use sqlx::PgPool;
|
|||||||
use crate::{
|
use crate::{
|
||||||
endpoints::IdPath,
|
endpoints::IdPath,
|
||||||
models::{
|
models::{
|
||||||
Assignment, AssignmentChangeset, Availabillity, Event, EventChangeset, EventContext,
|
Assignment, AssignmentChangeset, Availability, Event, EventChangeset, EventContext,
|
||||||
Function, Location, Role, User,
|
Function, Location, Role, User,
|
||||||
},
|
},
|
||||||
utils::{self, ApplicationError},
|
utils::{self, ApplicationError},
|
||||||
@ -79,7 +79,7 @@ pub async fn post(
|
|||||||
NaiveTime::parse_from_str("23:59", "%R").unwrap(),
|
NaiveTime::parse_from_str("23:59", "%R").unwrap(),
|
||||||
);
|
);
|
||||||
for assignment in &assignments_for_event {
|
for assignment in &assignments_for_event {
|
||||||
let availability = Availabillity::read_by_id(pool.get_ref(), assignment.availabillity_id)
|
let availability = Availability::read_by_id(pool.get_ref(), assignment.availabillity_id)
|
||||||
.await?
|
.await?
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let all_assignments =
|
let all_assignments =
|
||||||
|
@ -4,7 +4,7 @@ use chrono::{Months, NaiveDate, NaiveTime, Utc};
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
||||||
use crate::models::{Availabillity, Function, Role, User};
|
use crate::models::{Availability, Function, Role, User};
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct ExportQuery {
|
struct ExportQuery {
|
||||||
@ -64,7 +64,7 @@ pub async fn get(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let availabillities =
|
let availabillities =
|
||||||
Availabillity::read_for_export(pool.get_ref(), (start_date, end_date), area_id)
|
Availability::read_for_export(pool.get_ref(), (start_date, end_date), area_id)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use chrono::NaiveTime;
|
use chrono::NaiveTime;
|
||||||
use garde::Validate;
|
use garde::Validate;
|
||||||
|
|
||||||
use super::{start_time_lies_before_end_time, Assignment, Availabillity, Event, Function};
|
use super::{start_time_lies_before_end_time, Assignment, Availability, Event, Function};
|
||||||
|
|
||||||
#[derive(Validate)]
|
#[derive(Validate)]
|
||||||
#[garde(allow_unvalidated)]
|
#[garde(allow_unvalidated)]
|
||||||
@ -23,7 +23,7 @@ pub struct AssignmentChangeset {
|
|||||||
|
|
||||||
pub struct AssignmentContext {
|
pub struct AssignmentContext {
|
||||||
pub event: Event,
|
pub event: Event,
|
||||||
pub availabillity: Availabillity,
|
pub availabillity: Availability,
|
||||||
pub user_function: Function,
|
pub user_function: Function,
|
||||||
pub assignments_for_event: Vec<Assignment>,
|
pub assignments_for_event: Vec<Assignment>,
|
||||||
pub assignments_for_availabillity: Vec<Assignment>,
|
pub assignments_for_availabillity: Vec<Assignment>,
|
||||||
|
3
web/src/models/availability_changeset.rs
Normal file
3
web/src/models/availability_changeset.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub struct AvailabilityChangeset {
|
||||||
|
|
||||||
|
}
|
@ -4,7 +4,7 @@ use sqlx::{query, PgPool};
|
|||||||
use super::{Area, Function, Result, Role, User};
|
use super::{Area, Function, Result, Role, User};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Availabillity {
|
pub struct Availability {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
pub user_id: i32,
|
pub user_id: i32,
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
@ -14,21 +14,7 @@ pub struct Availabillity {
|
|||||||
pub comment: Option<String>,
|
pub comment: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Debug)]
|
impl Availability {
|
||||||
pub enum AvailabillityAssignmentState {
|
|
||||||
// availabillity is not assigned at all or at least not timely conflicting
|
|
||||||
Unassigned,
|
|
||||||
// availabillity is assigned for another event that is timely conflicting
|
|
||||||
Conflicting,
|
|
||||||
// availabillity is assigned to this event as Posten
|
|
||||||
AssignedPosten(i32),
|
|
||||||
// availabillity is assigned to this event as Führungsassistent
|
|
||||||
AssignedFührungsassistent(i32),
|
|
||||||
// availabillity is assigned to this event as Wachhabender
|
|
||||||
AssignedWachhabender(i32),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Availabillity {
|
|
||||||
pub async fn create(
|
pub async fn create(
|
||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
user_id: i32,
|
user_id: i32,
|
||||||
@ -58,7 +44,7 @@ impl Availabillity {
|
|||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
date: NaiveDate,
|
date: NaiveDate,
|
||||||
area_id: i32,
|
area_id: i32,
|
||||||
) -> Result<Vec<Availabillity>> {
|
) -> Result<Vec<Availability>> {
|
||||||
let records = query!(
|
let records = query!(
|
||||||
r##"
|
r##"
|
||||||
SELECT
|
SELECT
|
||||||
@ -91,7 +77,7 @@ impl Availabillity {
|
|||||||
|
|
||||||
let availabillities = records
|
let availabillities = records
|
||||||
.iter()
|
.iter()
|
||||||
.map(|r| Availabillity {
|
.map(|r| Availability {
|
||||||
id: r.id,
|
id: r.id,
|
||||||
user_id: r.userid,
|
user_id: r.userid,
|
||||||
user: Some(User {
|
user: Some(User {
|
||||||
@ -121,7 +107,7 @@ impl Availabillity {
|
|||||||
pub async fn read_by_id_including_user(
|
pub async fn read_by_id_including_user(
|
||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
id: i32,
|
id: i32,
|
||||||
) -> Result<Option<Availabillity>> {
|
) -> Result<Option<Availability>> {
|
||||||
let record = query!(
|
let record = query!(
|
||||||
r##"
|
r##"
|
||||||
SELECT
|
SELECT
|
||||||
@ -152,7 +138,7 @@ impl Availabillity {
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let availabillity = record.and_then(|r| {
|
let availabillity = record.and_then(|r| {
|
||||||
Some(Availabillity {
|
Some(Availability {
|
||||||
id: r.id,
|
id: r.id,
|
||||||
user_id: r.userid,
|
user_id: r.userid,
|
||||||
user: Some(User {
|
user: Some(User {
|
||||||
@ -179,13 +165,13 @@ impl Availabillity {
|
|||||||
Ok(availabillity)
|
Ok(availabillity)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn read_by_id(pool: &PgPool, id: i32) -> Result<Option<Availabillity>> {
|
pub async fn read_by_id(pool: &PgPool, id: i32) -> Result<Option<Availability>> {
|
||||||
let record = query!("SELECT * FROM availabillity WHERE id = $1", id)
|
let record = query!("SELECT * FROM availabillity WHERE id = $1", id)
|
||||||
.fetch_optional(pool)
|
.fetch_optional(pool)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let availabillity = record.and_then(|record| {
|
let availabillity = record.and_then(|record| {
|
||||||
Some(Availabillity {
|
Some(Availability {
|
||||||
id: record.id,
|
id: record.id,
|
||||||
user_id: record.userid,
|
user_id: record.userid,
|
||||||
user: None,
|
user: None,
|
||||||
@ -203,7 +189,7 @@ impl Availabillity {
|
|||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
date_range: (NaiveDate, NaiveDate),
|
date_range: (NaiveDate, NaiveDate),
|
||||||
area_id: i32,
|
area_id: i32,
|
||||||
) -> Result<Vec<Availabillity>> {
|
) -> Result<Vec<Availability>> {
|
||||||
let records = query!(
|
let records = query!(
|
||||||
r##"
|
r##"
|
||||||
SELECT
|
SELECT
|
||||||
@ -240,7 +226,7 @@ impl Availabillity {
|
|||||||
|
|
||||||
let availabillities = records
|
let availabillities = records
|
||||||
.iter()
|
.iter()
|
||||||
.map(|r| Availabillity {
|
.map(|r| Availability {
|
||||||
id: r.id,
|
id: r.id,
|
||||||
user_id: r.userid,
|
user_id: r.userid,
|
||||||
user: Some(User {
|
user: Some(User {
|
||||||
|
14
web/src/models/availabillity_assignment_state.rs
Normal file
14
web/src/models/availabillity_assignment_state.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#[derive(PartialEq, Eq, Debug)]
|
||||||
|
pub enum AvailabillityAssignmentState {
|
||||||
|
// availabillity is not assigned at all or at least not timely conflicting
|
||||||
|
Unassigned,
|
||||||
|
// availabillity is assigned for another event that is timely conflicting
|
||||||
|
Conflicting,
|
||||||
|
// availabillity is assigned to this event as Posten
|
||||||
|
AssignedPosten(i32),
|
||||||
|
// availabillity is assigned to this event as Führungsassistent
|
||||||
|
AssignedFührungsassistent(i32),
|
||||||
|
// availabillity is assigned to this event as Wachhabender
|
||||||
|
AssignedWachhabender(i32),
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ mod area;
|
|||||||
mod assignement;
|
mod assignement;
|
||||||
mod assignment_changeset;
|
mod assignment_changeset;
|
||||||
mod availabillity;
|
mod availabillity;
|
||||||
|
mod availabillity_assignment_state;
|
||||||
mod event;
|
mod event;
|
||||||
mod event_changeset;
|
mod event_changeset;
|
||||||
mod function;
|
mod function;
|
||||||
@ -12,11 +13,13 @@ mod role;
|
|||||||
mod user;
|
mod user;
|
||||||
mod vehicle;
|
mod vehicle;
|
||||||
mod vehicle_assignement;
|
mod vehicle_assignement;
|
||||||
|
mod availability_changeset;
|
||||||
|
|
||||||
pub use area::Area;
|
pub use area::Area;
|
||||||
pub use assignement::Assignment;
|
pub use assignement::Assignment;
|
||||||
pub use assignment_changeset::{AssignmentChangeset, AssignmentContext};
|
pub use assignment_changeset::{AssignmentChangeset, AssignmentContext};
|
||||||
pub use availabillity::{Availabillity, AvailabillityAssignmentState};
|
pub use availabillity::Availability;
|
||||||
|
pub use availabillity_assignment_state::AvailabillityAssignmentState;
|
||||||
use chrono::NaiveTime;
|
use chrono::NaiveTime;
|
||||||
pub use event::Event;
|
pub use event::Event;
|
||||||
pub use event_changeset::{EventChangeset, EventContext};
|
pub use event_changeset::{EventChangeset, EventContext};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
||||||
use crate::models::{
|
use crate::models::{
|
||||||
Assignment, Availabillity, AvailabillityAssignmentState, Event, Function, Vehicle, VehicleAssignement,
|
Assignment, Availability, AvailabillityAssignmentState, Event, Function, Vehicle, VehicleAssignement,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::ApplicationError;
|
use super::ApplicationError;
|
||||||
@ -9,8 +9,8 @@ use super::ApplicationError;
|
|||||||
pub async fn generate_availabillity_assignment_list(
|
pub async fn generate_availabillity_assignment_list(
|
||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
event: &Event,
|
event: &Event,
|
||||||
) -> Result<Vec<(Availabillity, AvailabillityAssignmentState)>, ApplicationError> {
|
) -> Result<Vec<(Availability, AvailabillityAssignmentState)>, ApplicationError> {
|
||||||
let availabillities_in_db = Availabillity::read_by_date_and_area_including_user(
|
let availabillities_in_db = Availability::read_by_date_and_area_including_user(
|
||||||
pool,
|
pool,
|
||||||
event.date,
|
event.date,
|
||||||
event.location.as_ref().unwrap().area_id,
|
event.location.as_ref().unwrap().area_id,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user