From 0f6dc3d9975bf15d9acb95db8e69c5da087e6bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 29 Apr 2022 23:59:32 +0200 Subject: [PATCH 001/611] reactive my calendar on new route --- .../Controller/CalendarController.php | 25 +++++++++++++++++++ .../Menu/UserMenuBuilder.php | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php index ff34aaf45..3efae86e9 100644 --- a/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php +++ b/src/Bundle/ChillCalendarBundle/Controller/CalendarController.php @@ -29,6 +29,7 @@ use Symfony\Component\Form\Form; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\SerializerInterface; @@ -182,6 +183,27 @@ class CalendarController extends AbstractController ]); } + /** + * @Route("/{_locale}/calendar/calendar/my", name="chill_calendar_calendar_list_my") + * + * @param Request $request + * @return Response + */ + public function myCalendar(Request $request): Response + { + $this->denyAccessUnlessGranted('ROLE_USER'); + + if (!$this->getUser() instanceof User) { + throw new UnauthorizedHttpException('you are not an user'); + } + + $view = '@ChillCalendar/Calendar/listByUser.html.twig'; + + return $this->render($view, [ + 'user' => $this->getUser(), + ]); + } + /** * Lists all Calendar entities. * @@ -193,6 +215,8 @@ class CalendarController extends AbstractController [$user, $accompanyingPeriod] = $this->getEntity($request); + /* + dead code ? if ($user instanceof User) { $calendarItems = $this->calendarRepository->findByUser($user); @@ -203,6 +227,7 @@ class CalendarController extends AbstractController 'user' => $user, ]); } + */ if ($accompanyingPeriod instanceof AccompanyingPeriod) { $total = $this->calendarRepository->countByAccompanyingPeriod($accompanyingPeriod); diff --git a/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php b/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php index 74512eda5..4049e7c55 100644 --- a/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php +++ b/src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php @@ -58,7 +58,7 @@ class UserMenuBuilder implements LocalMenuBuilderInterface if ($this->authorizationChecker->isGranted('ROLE_USER')) { $menu->addChild('My calendar list', [ - 'route' => 'chill_calendar_calendar_list', + 'route' => 'chill_calendar_calendar_list_my', ]) ->setExtras([ 'order' => 9, From 9c070cd8aeb30a0bddacaed5a066a1e266917896 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Fri, 6 May 2022 15:54:35 +0200 Subject: [PATCH 002/611] change ranges to 15min instead of 30 + save new range immediately --- .../public/vuejs/MyCalendarRange/App.vue | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue index a30dd2000..7893fa890 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue @@ -114,7 +114,7 @@ - + diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js index c4fd7b4c4..046a09ef3 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js @@ -1,109 +1,152 @@ import 'es6-promise/auto'; import { createStore } from 'vuex'; -import { deleteCalendarRange, fetchCalendar, fetchCalendarRangesByUser, patchCalendarRange, postCalendarRange } from '../_api/api'; +import { makeFetch } from 'ChillMainAssets/lib/api/apiMethods'; +// import { deleteCalendarRange, fetchCalendar, fetchCalendarRangesByUser, patchCalendarRange, postCalendarRange } from '../_api/api'; const debug = process.env.NODE_ENV !== 'production'; const store = createStore({ strict: debug, state: { - // newCalendarRanges: [], - // updateCalendarRanges: [], - // deleteCalendarRanges: [], - // currentCalendarRanges: [], + ranges: [], + appointments: [], + rangesToCopy: [] + }, + getters: { + rangeSource (state) { + return { + events: state.ranges, + borderColor: "#3788d8", + backgroundColor: '#ffffff', + textColor: '#444444', + } + }, + appointmentSource (state) { + return { + events: state.appointments, + color: "darkblue", + id: 1000, + editable: false + } + } }, mutations: { - // setCurrentCalendarRanges(state, payload) { - // state.currentCalendarRanges = payload - // }, - // updateRange(state, payload) { - // state.updateCalendarRanges.push({ - // id: payload.event.extendedProps.calendarRangeId, - // start: payload.event.start, - // end: payload.event.end - // }); - // }, - // addRange(state, payload) { - // state.newCalendarRanges.push({ - // start: payload.start, - // end: payload.end - // }); - // }, - // deleteRange(state, payload) { - // state.deleteCalendarRanges.push({ - // id: payload.extendedProps.calendarRangeId, - // start: payload.start, - // end: payload.end - // }); - // }, - // clearNewCalendarRanges(state) { - // state.newCalendarRanges = []; - // }, - // clearUpdateCalendarRanges(state) { - // state.updateCalendarRanges = []; - // }, - // clearDeleteCalendarRanges(state) { - // state.deleteCalendarRanges = []; - // }, - // removeNewCalendarRanges(state, payload) { - // let filteredCollection = state.newCalendarRanges.filter( - // (e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString() - // ) - // state.newCalendarRanges = filteredCollection; - // }, - // removeFromDeleteRange(state, payload) { - // let filteredCollection = state.deleteCalendarRanges.filter( - // (e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString() - // ) - // state.deleteCalendarRanges = filteredCollection; - // }, - // addCalendarRange(state, payload) { - // state.currentCalendarRanges.push(payload); - // } + setRanges(state, payload) { + state.ranges = payload; + }, + setRangesToCopy(state, payload) { + state.rangesToCopy = payload + }, + addRange(state, payload) { + state.ranges = [...state.ranges, payload]; + }, + removeRange(state, payload) { + const filteredCollection = state.ranges.filter( + (r) => r.calendarRangeId !== payload + ) + state.ranges = filteredCollection; + }, + setAppointments(state, payload) { + state.appointments = payload; + } }, actions: { - // setCurrentCalendarRanges({ commit }) { - // // console.log('userId', window.userId); - // fetchCalendarRangesByUser(window.userId) - // .then((ranges) => { - // // console.log('ranges', ranges.results); - // commit('setCurrentCalendarRanges', ranges.results); - // }) - // }, - // addCalendarRange({ commit }, payload) { - // commit('addCalendarRange', payload) - // }, - // createRange({ commit }, payload) { - // // console.log('### action createRange', payload); - // commit('addRange', payload); - // }, - // updateRange({ commit }, payload) { - // // console.log('### action updateRange', payload); - // commit('updateRange', payload); - // }, - // deleteRange({ commit }, payload) { - // // console.log('### action deleteRange', payload); - // commit('deleteRange', payload); - // }, - // clearNewCalendarRanges({ commit }, payload) { - // commit('clearNewCalendarRanges', payload); - // }, - // clearUpdateCalendarRanges({ commit }, payload) { - // commit('clearUpdateCalendarRanges', payload); - // }, - // clearDeleteCalendarRanges({ commit }, payload) { - // commit('clearDeleteCalendarRanges', payload); - // }, - // removeNewCalendarRanges({ commit }, payload) { - // commit('removeNewCalendarRanges', payload); - // }, - // removeFromDeleteRange({ commit }, payload) { - // commit('removeFromDeleteRange', payload); - // }, + fetchRanges({commit}, payload = null) { + const url = payload ? `/api/1.0/calendar/calendar-range-available.json?user=${payload.userId}&start=${payload.dateToCopy}` : + `/api/1.0/calendar/calendar-range-available.json?user=${window.userId}` + return makeFetch('GET', url) + .then((response) => { + if (payload) { + return response.results; + // commit('setRangesToCopy', response.results); + } else { + const ranges = response.results.map(range => ( + { + start: range.startDate.datetime, + end: range.endDate.datetime, + calendarRangeId: range.id, + toDelete: false + } + )); + commit('setRanges', ranges) + } + }) + .catch((error) => { + console.log(error); + }) + }, + postRange({commit}, payload) { + const url = `/api/1.0/calendar/calendar-range.json?`; + makeFetch('POST', url, payload) + .then((response) => { + const newRange = + { + start: response.startDate.datetime, + end: response.endDate.datetime, + calendarRangeId: response.id, + toDelete: false + } + commit('addRange', newRange) + }) + .catch((error) => { + console.log(error); + }) + }, + deleteRange({commit}, payload) { + const url = `/api/1.0/calendar/calendar-range/${payload}.json`; + makeFetch('DELETE', url) + .then((response) => { + if (response == 200) { + commit('removeRange', payload); + } + }) + .catch((error) => { + console.log(error); + }) + }, + patchRange({commit}, payload) { + const url = `/api/1.0/calendar/calendar-range/${payload.extendedProps.calendarRangeId}.json`; + const body = { + startDate: { + datetime: `${payload.start.toISOString().split('.')[0]}+0000`, //should be like "2021-08-20T15:00:00+0200", + }, + endDate: { + datetime: `${payload.end.toISOString().split('.')[0]}+0000`, // TODO check if OK with time zone + }, + } + makeFetch('PATCH', url, body) + .then((response) => { + console.log('response', response); + }) + .catch((error) => { + console.log(error); + }) + }, + fetchAppointments({commit}, payload) { + const url = `/api/1.0/calendar/calendar.json?main_user=${payload}&item_per_page=1000` + makeFetch('GET', url) + .then((response) => { + const appointments = response.results.map(a => ( + { + myCalendar: true, + calendarId: a.id, + start: a.startDate.datetime, + end: a.endDate.datetime, + user: a.user, + mainUser: a.mainUser, + persons: a.persons, + professionals: a.professionals, + comment: a.comment + }) + ); + commit('setAppointments', appointments) + }) + .catch((error) => { + console.log(error); + }) + }, } }); -// store.dispatch('setCurrentCalendarRanges'); - export default store; From c0f9bf35ac6bbbdbc2c9a6b0a09cd1a62e5b03bc Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 17 May 2022 16:05:00 +0200 Subject: [PATCH 046/611] fix toggle to show or hide appointments --- .../public/vuejs/MyCalendarRange/App.vue | 2 +- .../public/vuejs/MyCalendarRange/store.js | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue index 96fb1667c..1ef9dfe0c 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue @@ -94,7 +94,6 @@ import dayGridPlugin from '@fullcalendar/daygrid'; import interactionPlugin from '@fullcalendar/interaction'; import timeGridPlugin from '@fullcalendar/timegrid'; import Modal from 'ChillMainAssets/vuejs/_components/Modal'; -import { fetchCalendarRangesByUser, postCalendarRange } from '../_api/api'; import { mapGetters, mapActions, mapState } from 'vuex'; import { vShow } from 'vue'; @@ -182,6 +181,7 @@ export default { return `/fr/calendar/calendar/${this.myCalendarClickedEvent.id}/delete?user_id=${ this.userId }` }, toggleMyCalendar(value) { + this.$store.commit('setAppointmentShown', value); this.showMyCalendar = value; }, toggleWeekends: function() { diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js index 046a09ef3..9bc62eb98 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store.js @@ -1,7 +1,6 @@ import 'es6-promise/auto'; import { createStore } from 'vuex'; import { makeFetch } from 'ChillMainAssets/lib/api/apiMethods'; -// import { deleteCalendarRange, fetchCalendar, fetchCalendarRangesByUser, patchCalendarRange, postCalendarRange } from '../_api/api'; const debug = process.env.NODE_ENV !== 'production'; @@ -10,7 +9,7 @@ const store = createStore({ state: { ranges: [], appointments: [], - rangesToCopy: [] + appointmentsShown: true }, getters: { rangeSource (state) { @@ -22,11 +21,15 @@ const store = createStore({ } }, appointmentSource (state) { - return { - events: state.appointments, - color: "darkblue", - id: 1000, - editable: false + if (state.appointmentsShown) { + return { + events: state.appointments, + color: "darkblue", + id: 1000, + editable: false + } + } else { + return null } } }, @@ -48,6 +51,9 @@ const store = createStore({ }, setAppointments(state, payload) { state.appointments = payload; + }, + setAppointmentShown(state, payload) { + state.appointmentsShown = payload } }, actions: { @@ -58,7 +64,6 @@ const store = createStore({ .then((response) => { if (payload) { return response.results; - // commit('setRangesToCopy', response.results); } else { const ranges = response.results.map(range => ( { From 682dc2174e8a3a2a0c0723e4e8b26d185af194aa Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 17 May 2022 16:26:21 +0200 Subject: [PATCH 047/611] some style changes --- .../Resources/public/vuejs/MyCalendarRange/App.vue | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue index 1ef9dfe0c..a1ea74560 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App.vue @@ -27,13 +27,12 @@

{{ $t('copy_range_from_to') }}

-
- -
+
+
- -
+ +