Skip to content
Snippets Groups Projects
Commit 87ce7e6f authored by Reinder Kraaij's avatar Reinder Kraaij :eye:
Browse files

Merge branch 'TMSS-2707-PartVI' into 'master'

Resolve TMSS-2707 "Partvi"

Closes TMSS-2707

See merge request !1241
parents 53569cf1 14c37c66
No related branches found
No related tags found
1 merge request!1241Resolve TMSS-2707 "Partvi"
...@@ -11,12 +11,15 @@ import ShowErrorDetails from './show.error.details'; ...@@ -11,12 +11,15 @@ import ShowErrorDetails from './show.error.details';
* @returns * @returns
*/ */
const handleResponse= Wrapped => { const handleResponse= Wrapped => {
let lastReponse
function HandleResponse(props) { function HandleResponse(props) {
useEffect(()=>{ useEffect(()=>{
axios.interceptors.response.use(function (response) { axios.interceptors.response.use(function (response) {
return response; return response;
}, function (error) { }, function (error) {
if (error.response.status !== 403) { if (error.response.status !== 403) {
if (lastReponse!==error.response)
showMessage(error.response); showMessage(error.response);
} }
return Promise.reject(error); return Promise.reject(error);
......
...@@ -196,12 +196,37 @@ export class ReservationList extends Component { ...@@ -196,12 +196,37 @@ export class ReservationList extends Component {
this.refreshReservationList = this.refreshReservationList.bind(this); this.refreshReservationList = this.refreshReservationList.bind(this);
this.updateReservation = this.updateReservation.bind(this); this.updateReservation = this.updateReservation.bind(this);
} }
setFromRedirection = async () => {
if (this.props.match.params.fromdate && this.props.match.params.todate) {
try {
const fromDate = new Date(this.props.match.params.fromdate)
const toDate = new Date(this.props.match.params.todate)
this.setState({ fStartTime: fromDate, fEndTime: toDate });
let filters = []
let reservedTimeFilter = [{ 'id': 'Start Time', value: ['',moment(new Date(toDate)).format("YYYY-MM-DDTHH:mm:ss")] }];
reservedTimeFilter.push({ 'id': 'End Time', value: [moment(new Date(fromDate)).format("YYYY-MM-DDTHH:mm:ss",'')] });
filters = [...reservedTimeFilter];
this.setTableProperty(filters, 'Filter');
UtilService.localStore({ type: 'set', key: 'reservation_list', value: filters });
await this.fetchTableData(null);
this.pageUpdated = true;
}
catch (ex) { return false }
}
return true
}
async componentDidMount() { async componentDidMount() {
this.setToggleBySorting(); this.setToggleBySorting();
await this.getFilterColumns(); await this.getFilterColumns();
this.cycleList = await CycleService.getAllCycles();
this.setLocalFilters(); this.prepareLoading()
this.setState({ this.setState({
isLoading: false, isLoading: false,
cycleList: this.cycleList, cycleList: this.cycleList,
...@@ -210,6 +235,22 @@ export class ReservationList extends Component { ...@@ -210,6 +235,22 @@ export class ReservationList extends Component {
} }
prepareLoading= async ()=>{
if (this.setFromRedirection()) {
await this.fetchTableData(null);
this.pageUpdated = true;
return
}
this.setLocalFilters();
this.cycleList = await CycleService.getAllCycles();
}
/** /**
...@@ -275,6 +316,8 @@ export class ReservationList extends Component { ...@@ -275,6 +316,8 @@ export class ReservationList extends Component {
return reservation; return reservation;
} }
/** /**
* Filter reservation based on cycle filter selected * Filter reservation based on cycle filter selected
* Here to search use Cycle.start time as Reservation Start time and Cycle.stop time as Reservation End time * Here to search use Cycle.start time as Reservation Start time and Cycle.stop time as Reservation End time
...@@ -328,7 +371,7 @@ export class ReservationList extends Component { ...@@ -328,7 +371,7 @@ export class ReservationList extends Component {
Reset the Reserved End Datetime filter Reset the Reserved End Datetime filter
*/ */
async resetEndDateTime() { async resetEndDateTime() {
await this.setState({ 'fEndTime': '' }); this.setState({ 'fEndTime': '' });
let filters = UtilService.localStore({ type: 'get', key: "reservation_list" }); let filters = UtilService.localStore({ type: 'get', key: "reservation_list" });
_.remove(filters, function (filter) { _.remove(filters, function (filter) {
let result = filter.id === 'End Time'; let result = filter.id === 'End Time';
...@@ -372,15 +415,15 @@ export class ReservationList extends Component { ...@@ -372,15 +415,15 @@ export class ReservationList extends Component {
* @param {*} type - Date Filter Name * @param {*} type - Date Filter Name
* @param {*} value - Date Value * @param {*} value - Date Value
*/ */
async setDateRange() { async setDateRange(StartTime=this.state.fStartTime, EndTime=this.state.fEndTime) {
let filters = UtilService.localStore({ type: 'get', key: "reservation_list" }); let filters = UtilService.localStore({ type: 'get', key: "reservation_list" });
_.remove(filters, function (filter) { _.remove(filters, function (filter) {
let result = filter.id === 'Start Time' || filter.id === 'End Time'; let result = filter.id === 'Start Time' || filter.id === 'End Time';
return result; return result;
}); });
this.setState({ cycle: '' }); this.setState({ cycle: '' });
let reservedTimeFilter = [{ 'id': 'Start Time', value: [Validator.isEmpty(this.state.fStartTime) ? '' : moment(new Date(this.state.fStartTime)).format("YYYY-MM-DDTHH:mm:SS"), ''] }]; let reservedTimeFilter = [{ 'id': 'Start Time', value: [Validator.isEmpty(StartTime) ? '' : moment(new Date(StartTime)).format("YYYY-MM-DDTHH:mm:ss"), ''] }];
reservedTimeFilter.push({ 'id': 'End Time', value: ['', Validator.isEmpty(this.state.fEndTime) ? '' : moment(new Date(this.state.fEndTime)).format("YYYY-MM-DDTHH:mm:SS")] }); reservedTimeFilter.push({ 'id': 'End Time', value: ['', Validator.isEmpty(EndTime) ? '' : moment(new Date(EndTime)).format("YYYY-MM-DDTHH:mm:ss")] });
filters = [...reservedTimeFilter, ...filters]; filters = [...reservedTimeFilter, ...filters];
this.setTableProperty(filters, 'Filter'); this.setTableProperty(filters, 'Filter');
UtilService.localStore({ type: 'set', key: 'reservation_list', value: filters }); UtilService.localStore({ type: 'set', key: 'reservation_list', value: filters });
...@@ -584,8 +627,7 @@ export class ReservationList extends Component { ...@@ -584,8 +627,7 @@ export class ReservationList extends Component {
* @returns * @returns
*/ */
async fetchTableData(state) { async fetchTableData(state) {
// await this.getFilterColumns();
await this.setLocalFilters();
this.filterQry = ''; this.filterQry = '';
this.orderBy = ''; this.orderBy = '';
this.pageUpdated = true; this.pageUpdated = true;
...@@ -597,18 +639,18 @@ export class ReservationList extends Component { ...@@ -597,18 +639,18 @@ export class ReservationList extends Component {
if (filter.id === 'Start Time') { if (filter.id === 'Start Time') {
const values = filter.value; const values = filter.value;
if (values[0] && values[0] !== '') { if (values[0] && values[0] !== '') {
this.filterQry += 'start_time_min=' + moment(new Date(values[0])).format("YYYY-MM-DD HH:mm:SS&"); this.filterQry += 'start_time_after=' + moment(new Date(values[0])).format("YYYY-MM-DD HH:mm:ss&");
} }
if (values[1] && values[1] !== '') { if (values[1] && values[1] !== '') {
this.filterQry += 'start_time_max=' + moment(new Date(values[1])).format("YYYY-MM-DD HH:mm:ss&"); this.filterQry += 'start_time_before=' + moment(new Date(values[1])).format("YYYY-MM-DD HH:mm:ss&");
} }
} else if (filter.id === 'End Time') { } else if (filter.id === 'End Time') {
const values = filter.value; const values = filter.value;
if (values[0] && values[0] !== '') { if (values[0] && values[0] !== '') {
this.filterQry += 'stop_time_min=' + moment(new Date(values[0])).format("YYYY-MM-DD 00:00:00&"); this.filterQry += 'stop_time_after=' + moment(new Date(values[0])).format("YYYY-MM-DD 00:00:00&");
} }
if (values[1] && values[1] !== '') { if (values[1] && values[1] !== '') {
this.filterQry += 'stop_time_max=' + moment(new Date(values[1])).format("YYYY-MM-DD 23:59:59&"); this.filterQry += 'stop_time_before=' + moment(new Date(values[1])).format("YYYY-MM-DD 23:59:59&");
} }
} else if (filter.id === 'Project') { } else if (filter.id === 'Project') {
this.filterQry += 'project=' + encodeURIComponent(filter.value) + '&'; this.filterQry += 'project=' + encodeURIComponent(filter.value) + '&';
...@@ -834,9 +876,11 @@ export class ReservationList extends Component { ...@@ -834,9 +876,11 @@ export class ReservationList extends Component {
disabled: permissions.create ? !permissions.create : true, disabled: permissions.create ? !permissions.create : true,
type: 'buttonv2', type: 'buttonv2',
actOn: 'click', actOn: 'click',
props: { callback: this.movetoCreate props: {
callback: this.movetoCreate
}}, }
},
{ icon: 'pi-trash', title: 'Delete selected Reservations', disabled: permissions.delete ? !permissions.delete : true, type: 'buttonv2', actOn: 'click', props: { callback: this.confirmDeleteReservations } }, { icon: 'pi-trash', title: 'Delete selected Reservations', disabled: permissions.delete ? !permissions.delete : true, type: 'buttonv2', actOn: 'click', props: { callback: this.confirmDeleteReservations } },
{ icon: 'pi-times', title: 'Click to close Reservation list', type: 'buttonv2', actOn: 'click', props: { callback: this.closeList } } { icon: 'pi-times', title: 'Click to close Reservation list', type: 'buttonv2', actOn: 'click', props: { callback: this.closeList } }
...@@ -892,8 +936,6 @@ export class ReservationList extends Component { ...@@ -892,8 +936,6 @@ export class ReservationList extends Component {
/> />
<Button onClick={this.resetEndDateTime} title="Clear date range"> <i className="pi pi-times" ></i> </Button> <Button onClick={this.resetEndDateTime} title="Clear date range"> <i className="pi pi-times" ></i> </Button>
</div> </div>
</Panel> </Panel>
......
...@@ -4,6 +4,7 @@ import Filters from "./components/toolbar/Filters"; ...@@ -4,6 +4,7 @@ import Filters from "./components/toolbar/Filters";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import 'react-calendar-timeline/lib/Timeline.css'; import 'react-calendar-timeline/lib/Timeline.css';
import "flatpickr/dist/flatpickr.css"; import "flatpickr/dist/flatpickr.css";
import PeriodSelection from "../../shared/periodSelection"
import Timeline, { import Timeline, {
CursorMarker, CursorMarker,
CustomMarker, CustomMarker,
...@@ -23,7 +24,6 @@ import { ...@@ -23,7 +24,6 @@ import {
getHeaderActions, getHeaderActions,
getPageHeaderOptionsMenuItems, getPageHeaderOptionsMenuItems,
getSchedulerActions, getSchedulerActions,
getNavigationActions,
getGroupedByActions, getGroupedByActions,
updateSchedulerStatuses, updateSchedulerStatuses,
} from "./helpers/week.view.helper"; } from "./helpers/week.view.helper";
...@@ -401,9 +401,9 @@ export default function WeekView(props) { ...@@ -401,9 +401,9 @@ export default function WeekView(props) {
</div> </div>
{!permissions ? <ProgressSpinner className="m-4" style={{ color: "var(--primary-300)" }} /> : {!permissions ? <ProgressSpinner className="m-4" style={{ color: "var(--primary-300)" }} /> :
<TieredMenu className="app-header-menu" popup ref={actionsMenuRef} <TieredMenu className="app-header-menu" popup ref={actionsMenuRef}
model={getPageHeaderOptionsMenuItems(permissions)} />} model={getPageHeaderOptionsMenuItems(permissions,startTime,endTime)} />}
<PageHeader location={location} title={'Scheduling Units - ' + weekNumbers + ' View'} <PageHeader location={location} title={'Scheduling Units - ' + weekNumbers + ' View'}
actions={getGroupedByActions(grouping, updateGrouping).concat(getNavigationActions(navigateToWeek)).concat(getSchedulerActions(schedulerSettings, setShowSchedulerSettingsDialog)) actions={getGroupedByActions(grouping, updateGrouping).concat(PeriodSelection.getPeriodNavigationActions(navigateToWeek,)).concat(getSchedulerActions(schedulerSettings, setShowSchedulerSettingsDialog))
.concat(getHeaderActions(isLoading, setRefetchToggle, actionsMenuRef, isExpanded, setIsExpanded, showLegendbar, toggleLegend))} /> .concat(getHeaderActions(isLoading, setRefetchToggle, actionsMenuRef, isExpanded, setIsExpanded, showLegendbar, toggleLegend))} />
<div className="p-grid"> <div className="p-grid">
......
...@@ -17,10 +17,9 @@ export function getTimelineGroups() { ...@@ -17,10 +17,9 @@ export function getTimelineGroups() {
{ label: "Scheduler Type", value: "scheduler_group", id: 11, title: "Scheduler Type" } { label: "Scheduler Type", value: "scheduler_group", id: 11, title: "Scheduler Type" }
] ]
} }
export function getGroups(itemGroupKey, startTime, data, endTime) { export function getGroups(itemGroupKey, startTime, data, endTime) {
let groups let groups
if (itemGroupKey == "group") { // then group is the default, date one if (itemGroupKey == "group") { // then group is the default, date one
let days = moment(endTime).diff(moment(startTime), 'days') + 1; let days = moment(endTime).diff(moment(startTime), 'days') + 1;
groups = createDateGroups('', startTime, days); groups = createDateGroups('', startTime, days);
......
...@@ -80,23 +80,10 @@ export function getGroupedByActions(selected, setGroupedBy) { ...@@ -80,23 +80,10 @@ export function getGroupedByActions(selected, setGroupedBy) {
} }
export function getNavigationActions(AddWeeks) {
return [
PageHeaderActions.actionButtonObject(
"previous 7 days",
"pi pi-angle-double-left",
"",
{ callback: () => AddWeeks(-1) }
),
PageHeaderActions.actionButtonObject(
"next 7 days",
"pi pi-angle-double-right",
"",
{ callback: () => AddWeeks(1) }
),
PageHeaderActions.actionDivider("navigationbreaker")
];
}
export function getSchedulerActions(schedulerSettings, setShowSchedulerSettingsDialog) { export function getSchedulerActions(schedulerSettings, setShowSchedulerSettingsDialog) {
...@@ -124,7 +111,7 @@ export function getSchedulerActions(schedulerSettings, setShowSchedulerSettingsD ...@@ -124,7 +111,7 @@ export function getSchedulerActions(schedulerSettings, setShowSchedulerSettingsD
]; ];
} }
export function getPageHeaderOptionsMenuItems(permissions) { //TODO factory method export function getPageHeaderOptionsMenuItems(permissions,fromdate,todate) { //TODO factory method
return [ return [
{ {
label: 'Add Reservation', label: 'Add Reservation',
...@@ -133,11 +120,10 @@ export function getPageHeaderOptionsMenuItems(permissions) { //TODO factory meth ...@@ -133,11 +120,10 @@ export function getPageHeaderOptionsMenuItems(permissions) { //TODO factory meth
command: () => window.open('/reservation/create', '_blank') command: () => window.open('/reservation/create', '_blank')
}, },
{ {
label: 'Reservation List', label: 'Filtered Reservation List',
icon: "fa fa-bars", icon: "pi pi-book",
disabled: permissions == null || permissions.weekView == null || !permissions.weekView.listreservation, disabled: permissions == null || permissions.weekView == null || !permissions.weekView.listreservation,
command: () => window.open('/reservation/list', '_blank') command: () => window.open("/reservation/list/from/" + fromdate.format("YYYY-MM-DDTHH:mm:ss") + "/to/"+ todate.format("YYYY-MM-DDTHH:mm:ss"), '_blank')
}, },
{ {
separator: true separator: true
......
...@@ -201,6 +201,13 @@ export const routes = [ ...@@ -201,6 +201,13 @@ export const routes = [
title: 'Reservation List', title: 'Reservation List',
permissions: ['reservation', 'list'] permissions: ['reservation', 'list']
}, },
{
path: "/reservation/list/from/:fromdate/to/:todate",
component: ReservationList,
name: 'Reservation List',
title: 'Reservation List',
permissions: ['reservation', 'list']
},
{ {
path: "/reservation/create", path: "/reservation/create",
component: ReservationCreate, component: ReservationCreate,
......
import PageHeaderActions from "../utils/pageheaderactions.util.js";
const periodOptions = [
{ label: "Showing Day At", value: "showing_day_at", id: 0, title: "Showing Day At" },
{ label: "Showing Week From", value: "showing_week_from", id: 1, title: "Showing Week From" },
];
const getPeriodNavigationActions = (AddWeeks, SetPeriod, selected) => {
return [
/*
PageHeaderActions.actionDropDownObject(
"Period",
PeriodSelection.periodOptions,
{ callback: (period) => SetPeriod(period) },
selected,
"timeline-header-dropdown", "value", "label"
),*/
PageHeaderActions.actionButtonObject(
"previous 7 days",
"pi pi-angle-double-left",
"",
{ callback: () => AddWeeks(-1) }
),
PageHeaderActions.actionButtonObject(
"next 7 days",
"pi pi-angle-double-right",
"",
{ callback: () => AddWeeks(1) }
),
PageHeaderActions.actionDivider("navigationbreaker")
];
};
const PeriodSelection = {
periodOptions,
getPeriodNavigationActions,
};
export default PeriodSelection;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment