feat: show event for areamanager of cross areal planned user
This commit is contained in:
parent
4d1ffa206c
commit
465d6b0f0a
@ -19,6 +19,8 @@ FROM
|
|||||||
assignment
|
assignment
|
||||||
JOIN availability ON
|
JOIN availability ON
|
||||||
assignment.availabilityid = availability.id
|
assignment.availabilityid = availability.id
|
||||||
|
JOIN user_ ON
|
||||||
|
availability.userId = user_.id
|
||||||
JOIN event ON
|
JOIN event ON
|
||||||
assignment.eventid = "event".id
|
assignment.eventid = "event".id
|
||||||
JOIN location ON
|
JOIN location ON
|
||||||
@ -26,9 +28,9 @@ JOIN location ON
|
|||||||
JOIN clothing ON
|
JOIN clothing ON
|
||||||
event.clothing = clothing.id
|
event.clothing = clothing.id
|
||||||
WHERE
|
WHERE
|
||||||
userid = $1
|
(userid = $1 OR user_.areaId = $2)
|
||||||
AND event.starttimestamp::date >= $2
|
AND event.starttimestamp::date >= $3
|
||||||
AND event.starttimestamp::date <= $3
|
AND event.starttimestamp::date <= $4
|
||||||
AND location.areaId != $4
|
AND location.areaId != $5
|
||||||
ORDER BY
|
ORDER BY
|
||||||
event.starttimestamp;
|
event.starttimestamp;
|
||||||
|
@ -49,9 +49,12 @@ LEFT JOIN ASSIGNMENT ON
|
|||||||
event.id = assignment.eventid
|
event.id = assignment.eventid
|
||||||
LEFT JOIN availability ON
|
LEFT JOIN availability ON
|
||||||
assignment.availabilityid = availability.id
|
assignment.availabilityid = availability.id
|
||||||
|
LEFT JOIN user_ ON
|
||||||
|
availability.userId = user_.id
|
||||||
WHERE
|
WHERE
|
||||||
event.starttimestamp::date = $1
|
event.starttimestamp::date = $1
|
||||||
AND (
|
AND (
|
||||||
location.areaId = $2
|
location.areaId = $2
|
||||||
OR availability.userId = $3
|
OR availability.userId = $3
|
||||||
|
OR user_.areaId = $4
|
||||||
)
|
)
|
||||||
|
@ -168,10 +168,12 @@ impl Event {
|
|||||||
date_range: (&NaiveDate, &NaiveDate),
|
date_range: (&NaiveDate, &NaiveDate),
|
||||||
user_id: i32,
|
user_id: i32,
|
||||||
area_to_ignore: i32,
|
area_to_ignore: i32,
|
||||||
|
area_for_which_user_is_manager: Option<i32>,
|
||||||
) -> Result<Vec<Event>> {
|
) -> Result<Vec<Event>> {
|
||||||
let records = query_file!(
|
let records = query_file!(
|
||||||
"sql/event/read_all_by_date_range_and_assigned_user_in_other_area.sql",
|
"sql/event/read_all_by_date_range_and_assigned_user_in_other_area.sql",
|
||||||
user_id,
|
user_id,
|
||||||
|
area_for_which_user_is_manager,
|
||||||
date_range.0,
|
date_range.0,
|
||||||
date_range.1,
|
date_range.1,
|
||||||
area_to_ignore
|
area_to_ignore
|
||||||
|
@ -15,12 +15,14 @@ impl EventForCalendar {
|
|||||||
date: &NaiveDate,
|
date: &NaiveDate,
|
||||||
area: i32,
|
area: i32,
|
||||||
user: i32,
|
user: i32,
|
||||||
|
area_for_which_user_is_manager: Option<i32>,
|
||||||
) -> Result<Vec<EventForCalendar>> {
|
) -> Result<Vec<EventForCalendar>> {
|
||||||
let records = query_file!(
|
let records = query_file!(
|
||||||
"sql/event_for_calendar/read_all_by_date_and_area_and_user.sql",
|
"sql/event_for_calendar/read_all_by_date_and_area_and_user.sql",
|
||||||
date,
|
date,
|
||||||
area,
|
area,
|
||||||
user
|
user,
|
||||||
|
area_for_which_user_is_manager
|
||||||
)
|
)
|
||||||
.fetch_all(pool)
|
.fetch_all(pool)
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -67,20 +67,22 @@ async fn get(
|
|||||||
|
|
||||||
let availabilities_from_user =
|
let availabilities_from_user =
|
||||||
Availability::read_all_by_user_and_date(pool.get_ref(), user.id, &date).await?;
|
Availability::read_all_by_user_and_date(pool.get_ref(), user.id, &date).await?;
|
||||||
//println!("{availabilities_from_user:#?}");
|
|
||||||
|
|
||||||
let user_can_create_availability = availabilities_from_user.is_empty()
|
let user_can_create_availability = availabilities_from_user.is_empty()
|
||||||
|| !find_free_date_time_slots(&availabilities_from_user).is_empty();
|
|| !find_free_date_time_slots(&availabilities_from_user).is_empty();
|
||||||
|
|
||||||
//println!("{} || {} || {} = {user_can_create_availability}", availabilities_from_user.is_empty(),
|
let area_for_which_user_is_manager = if user.role == Role::Admin || user.role == Role::AreaManager {
|
||||||
// !only_one_availability_exists_and_is_whole_day(&availabilities_from_user),
|
Some(user.area_id)
|
||||||
// !find_free_time_slots(&availabilities_from_user).is_empty());
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let events = EventForCalendar::read_all_by_date_and_area_and_user(
|
let events = EventForCalendar::read_all_by_date_and_area_and_user(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
&date,
|
&date,
|
||||||
query.area.unwrap_or(user.area_id),
|
query.area.unwrap_or(user.area_id),
|
||||||
user.id,
|
user.id,
|
||||||
|
area_for_which_user_is_manager
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
@ -43,11 +43,18 @@ async fn get(
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
let area_for_which_user_is_manager = if user.role == Role::Admin || user.role == Role::AreaManager {
|
||||||
|
Some(user.area_id)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let mut foreign_events = Event::read_all_by_date_range_and_assigned_user_in_other_area(
|
let mut foreign_events = Event::read_all_by_date_range_and_assigned_user_in_other_area(
|
||||||
pool.get_ref(),
|
pool.get_ref(),
|
||||||
date_range,
|
date_range,
|
||||||
user.id,
|
user.id,
|
||||||
user.area_id,
|
user.area_id,
|
||||||
|
area_for_which_user_is_manager
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user