From 61f61b4ffeae0221eec483e94e1df7ab26afa4ae Mon Sep 17 00:00:00 2001
From: Reinder Kraaij <kraaij@astron.nl>
Date: Wed, 15 Nov 2023 21:44:04 +0100
Subject: [PATCH] Improve filtering and grouping of reservations

---
 .../src/routes/Timeline/WeekView.js           | 21 +++++++++++++------
 .../Timeline/components/toolbar/Filters.js    |  9 +++++++-
 .../helpers/toolbar/filters.helper.js         | 13 +++++++++---
 .../Timeline/helpers/week.view.helper.js      |  2 +-
 4 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
index 2d4836c73b0..a52164c4d95 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/WeekView.js
@@ -167,6 +167,7 @@ export default function WeekView() {
     const [items, setItems] = useState({
         schedulingUnitItems: [],
         schedulingAdditionalGroupingItems: [],
+        reservationAdditionalGroupingItems:[],
         reservationItems: [],
         sunTimingsItems: []
     })
@@ -323,18 +324,26 @@ export default function WeekView() {
 
     //  when the data update, has updatet the items, we have all the groups in expect station grouping
     // this is due to the fact that this is a LARGE amount of data
-    function refreshGrouping(grouper = grouping, schedulingUnitItems = items.schedulingUnitItems) {
-        const groupsplittedItems = expandTimeLineRowsForGrouping(schedulingUnitItems, grouper);
-        let combinedItems = [...schedulingUnitItems, ...groupsplittedItems]
+    function refreshGrouping(grouper = grouping, schedulingUnitItems = items.schedulingUnitItems, reserVationUnitItems = items.reservationItems) { 
+        const groupsplittedItemsScheduling = expandTimeLineRowsForGrouping(schedulingUnitItems, grouper);
+        const groupsplittedItemsReservations = expandTimeLineRowsForGrouping(reserVationUnitItems, grouper);
+        let combinedItems = [...schedulingUnitItems, ...groupsplittedItemsScheduling, ...groupsplittedItemsReservations]
         let groupupdates = getGroups(grouper, startTime, combinedItems);
         setGroups(groupupdates.groups);
 
         refreshSunsettings(groupupdates.groups, groupupdates.itemGroupKey);
 
-        if (groupsplittedItems?.length > 0) {
+        if (groupsplittedItemsScheduling?.length > 0) {
             setItems(prevData => ({
                 ...prevData,
-                schedulingAdditionalGroupingItems: groupsplittedItems
+                schedulingAdditionalGroupingItems: groupsplittedItemsScheduling
+            }));
+        }
+
+        if (groupsplittedItemsReservations?.length > 0) {
+            setItems(prevData => ({
+                ...prevData,
+                reservationAdditionalGroupingItems: groupsplittedItemsReservations
             }));
         }
 
@@ -425,7 +434,7 @@ export default function WeekView() {
                         className={timelineClassName}
                         groups={groups}
                         keys={keys}
-                        items={[...items.sunTimingsItems, ...items.schedulingUnitItems, ...items.schedulingAdditionalGroupingItems, ...items.reservationItems]}
+                        items={[...items.sunTimingsItems, ...items.schedulingUnitItems, ...items.schedulingAdditionalGroupingItems, ...items.reservationItems, ...items.reservationAdditionalGroupingItems]}
                         defaultTimeStart={startTime}
                         defaultTimeEnd={endTime}
                         visibleTimeStart={visibleTime.start.valueOf()}
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js
index 375e57dfd16..6376969ec79 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js
@@ -37,16 +37,23 @@ function Toggle(props) { //TODO: extract to separate class
 }
 
 function filterReservations(reservations, visibleStartTime, reservationFilter, projectFilter,endTime,startTime) {
+    
+  
     let reservationItems = reservations.flatMap(reservation => splitObjectIfSpanIsMultipleDays(reservation, false,startTime,endTime))
         .map((reservation, index) => getReservationItem(reservation, index, moment(visibleStartTime).format(UIConstants.CALENDAR_DEFAULTDATE_FORMAT)))
         .filter(reservationItem => reservationFilter.includes(reservationItem.reason))
+        
 
     if (projectFilter.length) {
         reservationItems = reservationItems.filter(reservationItem => reservationItem.project === null || projectFilter.includes(reservationItem.project))
     } else { //only show items that don't have a project
         reservationItems = reservationItems.filter(reservationItem => reservationItem.project === null)
     }
-    return reservationItems;
+
+    let datefiltered_reservationItems = reservationItems.filter(reservationItem => reservationItem.reservation_start_time>=startTime)
+    datefiltered_reservationItems = datefiltered_reservationItems.filter(reservationItem => reservationItem.reservation_start_time<=endTime)
+    
+    return datefiltered_reservationItems;
 }
 
 
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js
index ca328828242..8b78832f98d 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/filters.helper.js
@@ -143,6 +143,7 @@ export function getTimelineItem(suBlueprint, displayDate, includeStationsInfo, i
         suId: suBlueprint.id,
         project: suBlueprint.project,
         project_group: suBlueprint.project + '#' + currentGrouping,
+        project_task_group : suBlueprint.project + '#' + currentGrouping  + "#tasks",
         name: suBlueprint.name,
         name_group: suBlueprint.name + '#' + currentGrouping,
         antenna_set: suBlueprint.antenna_set,
@@ -222,6 +223,7 @@ export function getReservationItem(reservation, index, displayDate) {
     const stations = getStationsInfo(specificationsDoc?.resources?.stations);
     const currentGroup = moment(reservation.start_time).format(UIConstants.CALENDAR_GROUP_FORMAT)
     const currentGrouping = moment(reservation.start_time).format(UIConstants.CALENDAR_DEFAULTDATE_FORMAT)
+
     let timeLineRow = {
         id: reservation.id + "~" + index,
         reservationId: reservation.id,
@@ -230,7 +232,7 @@ export function getReservationItem(reservation, index, displayDate) {
         group: currentGroup,
         name: reservation.name,
         project: reservation.project_id,
-
+        reservation_start_time : moment(reservation.start_time),
         type: 'RESERVATION',
         activity_type: `${type}${reservation.project_id ? (" - " + reservation.project_id) : ""}`,
         reason: type,
@@ -246,11 +248,16 @@ export function getReservationItem(reservation, index, displayDate) {
         selectedBgColor: blockColor.bgColor,
         color: blockColor.color
     };
-    timeLineRow.specified_stations = reservation.stations;
+ 
+    timeLineRow.specified_stations = specificationsDoc?.resources?.stations;
+    
+    
+
     timeLineRow.name_group = timeLineRow.name + '#' + currentGrouping
     timeLineRow.project_group = timeLineRow.project + '#' + currentGrouping
     timeLineRow.project_task_group = timeLineRow.project + '#' + currentGrouping ; // we do not have tasks, but we need to be visible.
-    
+    timeLineRow.stationsgroups = stations.stationsgroups;
+    timeLineRow.groupingSuffix = '#' + currentGrouping;
 
 
 
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js
index e1073018cfe..fc3a1eb3826 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/week.view.helper.js
@@ -255,7 +255,7 @@ export async function getSunTimingItems(startTime, groups, groupkey) {
 
     const sunTimingItems = []
     for (const group of groups) {
-
+        
 
         const groupDay = moment(group.date);
 
-- 
GitLab