start copy dates

This commit is contained in:
Julie Lenaerts 2022-05-11 21:27:47 +02:00
parent f8a9cafacb
commit 5ceddc747d
5 changed files with 158 additions and 190 deletions

View File

@ -374,7 +374,7 @@ class CalendarController extends AbstractController
'professionalsId' => $professionalsId, 'professionalsId' => $professionalsId,
'date' => $entity->getStartDate()->format('Y-m-d'), 'date' => $entity->getStartDate()->format('Y-m-d'),
'durationTime' => $durationTimeInMinutes, 'durationTime' => $durationTimeInMinutes,
'location' => $entity->getLocation()->getId(), 'location' => $entity->getLocation() ? $entity->getLocation()->getId() : null,
'comment' => $entity->getComment()->getComment(), 'comment' => $entity->getComment()->getComment(),
]; ];

View File

@ -48,11 +48,19 @@ class CalendarRangeAPIController extends ApiController
->setParameter('endDate', $endDate) ->setParameter('endDate', $endDate)
->setParameter('user', $user); ->setParameter('user', $user);
} }
if($request->query->has('start') && !$request->query->has('end')) {
$startDate = $request->query->get('start');
$sql = $sql . ' AND c.startDate > :startDate + INTERVAL "1 DAY"';
dump($sql);
$query = $em ->createQuery($sql)
->setParameter('startDate', $startDate)
->setParameter('user', $user);
}
} else { } else {
$query = $em->createQuery($sql); $query = $em->createQuery($sql);
} }
$results = $query->getResult(); $results = $query->getResult();
dump($results);
return $this->json(['count' => count($results), 'results' => $results], Response::HTTP_OK, [], ['groups' => ['read']]); return $this->json(['count' => count($results), 'results' => $results], Response::HTTP_OK, [], ['groups' => ['read']]);
//TODO use also the paginator, eg return $this->serializeCollection('get', $request, $_format, $paginator, $results); //TODO use also the paginator, eg return $this->serializeCollection('get', $request, $_format, $paginator, $results);

View File

@ -24,71 +24,24 @@
</span> </span>
</template> </template>
</FullCalendar> </FullCalendar>
<div id="copy-widget"> <div id="copy-widget">
<h4 class="chill-red" style="margin-top: 2rem;">{{ $t('copy_range_from_to') }}</h4> <h4 class="chill-red" style="margin-top: 2rem;">{{ $t('copy_range_from_to') }}</h4>
<div style="display: flex; justify-content: space-between; margin-top: 1rem;"> <div style="display: flex; justify-content: space-between; margin-top: 1rem;">
<label class="col-form-label">{{ $t('dateFrom') }}</label> <label class="col-form-label">{{ $t('dateFrom') }}</label>
<div class="col-sm-3"> <div class="col-sm-3">
<input class="form-control" type="date" /> <input class="form-control" type="date" v-model="copyFrom" />
</div> </div>
<label class="col-form-label">{{ $t('dateTo') }}</label> <label class="col-form-label">{{ $t('dateTo') }}</label>
<div class="col-sm-3"> <div class="col-sm-3">
<input class="form-control" type="date" /> <input class="form-control" type="date" v-model="copyTo" />
</div> </div>
<button class="btn btn-action"> <button class="btn btn-action" @click="copyDay">
{{ $t('copy_range')}} {{ $t('copy_range')}}
</button> </button>
</div> </div>
</div> </div>
<!-- <div>
<ul class="record_actions">
<li>
<button class="btn btn-save" :disabled="!dirty"
@click.prevent="onClickSave">
{{ $t('action.save')}}
</button>
<span v-if="flag.loading" class="loading">
<i class="fa fa-circle-o-notch fa-spin fa-fw"></i>
<span class="sr-only">{{ $t('loading') }}</span>
</span>
</li>
<li>
<button v-if="disableCopyDayButton" class="btn btn-action" disabled>
{{ $t('copy_range_to_next_day')}}
</button>
<button v-else class="btn btn-action"
@click.prevent="copyDay">
{{ $t('copy_range_from_day')}} {{this.lastNewDate.toLocaleDateString()}} {{ $t('to_the_next_day')}}
</button>
</li>
</ul>
</div> -->
<!-- <div>
<div v-if="newCalendarRanges.length > 0">
<h4>{{ $t('new_range_to_save') }}</h4>
<ul>
<li v-for="i in newCalendarRanges" :key="i.start">
{{ i.start.toLocaleString() }} - {{ i.end.toLocaleString() }}
</li>
</ul>
</div>
<div v-if="updateCalendarRanges.length > 0">
<h4>{{ $t('update_range_to_save') }}</h4>
<ul>
<li v-for="i in updateCalendarRanges" :key="i.start">
{{ i.start.toLocaleString() }} - {{ i.end.toLocaleString() }}
</li>
</ul>
</div>
<div v-if="deleteCalendarRanges.length > 0">
<h4>{{ $t('delete_range_to_save') }}</h4>
<ul>
<li v-for="i in deleteCalendarRanges" :key="i.start">
{{ i.start.toLocaleString() }} - {{ i.end.toLocaleString() }}
</li>
</ul>
</div>
</div> -->
</div> </div>
<teleport to="body"> <teleport to="body">
@ -154,6 +107,8 @@ export default {
data() { data() {
return { return {
errorMsg: [], errorMsg: [],
copyFrom: null,
copyTo: null,
modal: { modal: {
showModal: false, showModal: false,
modalDialogClass: "modal-dialog-scrollable modal-m" modalDialogClass: "modal-dialog-scrollable modal-m"
@ -295,10 +250,7 @@ export default {
const startDate = this.$refs.fullCalendar.getApi().view.currentStart.toISOString() const startDate = this.$refs.fullCalendar.getApi().view.currentStart.toISOString()
const endDate = this.$refs.fullCalendar.getApi().view.currentEnd.toISOString() const endDate = this.$refs.fullCalendar.getApi().view.currentEnd.toISOString()
console.log('startDate', startDate, 'endDate', endDate)
fetchCalendarRangesByUser(this.userId, startDate, endDate).then(calendarRanges => new Promise((resolve, reject) => { fetchCalendarRangesByUser(this.userId, startDate, endDate).then(calendarRanges => new Promise((resolve, reject) => {
console.log('calendarRanges', calendarRanges.results);
let events = calendarRanges.results.map(i => let events = calendarRanges.results.map(i =>
({ ({
start: i.startDate.datetime, start: i.startDate.datetime,
@ -404,7 +356,6 @@ export default {
}).then((_r) => this.resetCalendar()); }).then((_r) => this.resetCalendar());
}, },
onEventClick(payload) { onEventClick(payload) {
// console.log(payload);
if (payload.event.extendedProps.myCalendar) { if (payload.event.extendedProps.myCalendar) {
this.myCalendarClickedEvent = { this.myCalendarClickedEvent = {
id: payload.event.extendedProps.calendarId, id: payload.event.extendedProps.calendarId,
@ -448,52 +399,60 @@ export default {
isFriday(date) { isFriday(date) {
return date.getDay() === 5 return date.getDay() === 5
}, },
copyDay(_payload) { copyDay() {
// console.log(this.calendarEvents.new); const fromDate = new Date(this.copyFrom).toISOString();
if (this.calendarEvents.new.events.length > 0) { const toDate = new Date(this.copyTo).toISOString();
// Create the copied events
let increment = !this.calendarOptions.weekends && this.isFriday(this.lastNewDate) ? 24*60*60*1000*3 : 24*60*60*1000;
let events = this.calendarEvents.new.events.filter(
i => this.isSameDay(new Date(i.start), this.lastNewDate)).map(
i => {
let startDate = new Date(new Date(i.start).getTime() + increment);
let endDate = new Date(new Date(i.end).getTime() + increment);
return ({
start: startDate.toISOString(),
end: endDate.toISOString()
})
}
);
let copiedEvents = {
events: events,
color: "#3788d8"
};
// console.log(copiedEvents);
// Add to the calendar fetchCalendarRangesByUser(this.userId, fromDate)
let newEvents = this.calendarEvents.new.events; .then((ranges) => {
newEvents.push(...copiedEvents.events); console.log(ranges.results);
this.calendarEvents.new = { // ranges.results.foreach()
events: newEvents, })
color: "#3788d8"
};
this.updateEventsSource();
// Set the last new date // if (this.calendarEvents.new.events.length > 0) {
this.lastNewDate = new Date(copiedEvents.events[copiedEvents.events.length - 1].start); // // Create the copied events
// let increment = !this.calendarOptions.weekends && this.isFriday(this.lastNewDate) ? 24*60*60*1000*3 : 24*60*60*1000;
// let events = this.calendarEvents.new.events.filter(
// i => this.isSameDay(new Date(i.start), this.lastNewDate)).map(
// i => {
// let startDate = new Date(new Date(i.start).getTime() + increment);
// let endDate = new Date(new Date(i.end).getTime() + increment);
// return ({
// start: startDate.toISOString(),
// end: endDate.toISOString()
// })
// }
// );
// let copiedEvents = {
// events: events,
// color: "#3788d8"
// };
// // console.log(copiedEvents);
// Dispatch in store for saving // // Add to the calendar
for (let i = 0; i < copiedEvents.events.length; i++) { // let newEvents = this.calendarEvents.new.events;
let eventObj = { // newEvents.push(...copiedEvents.events);
start: new Date(copiedEvents.events[i].start), // this.calendarEvents.new = {
end: new Date(copiedEvents.events[i].end) // events: newEvents,
} // color: "#3788d8"
this.$store.dispatch('createRange', eventObj); // };
} // this.updateEventsSource();
} else { // // Set the last new date
console.log('no new events to copy-paste!') // this.lastNewDate = new Date(copiedEvents.events[copiedEvents.events.length - 1].start);
}
// // Dispatch in store for saving
// for (let i = 0; i < copiedEvents.events.length; i++) {
// let eventObj = {
// start: new Date(copiedEvents.events[i].start),
// end: new Date(copiedEvents.events[i].end)
// }
// this.$store.dispatch('createRange', eventObj);
// }
// } else {
// console.log('no new events to copy-paste!')
// }
}, },
renderEventDate() { renderEventDate() {
let start = this.myCalendarClickedEvent.start; let start = this.myCalendarClickedEvent.start;

View File

@ -20,6 +20,7 @@ const appMessages = {
day: "Jour", day: "Jour",
week: "Semaine", week: "Semaine",
month: "Mois", month: "Mois",
today: "Aujourd'hui",
} }
} }

View File

@ -7,103 +7,103 @@ const debug = process.env.NODE_ENV !== 'production';
const store = createStore({ const store = createStore({
strict: debug, strict: debug,
state: { state: {
newCalendarRanges: [], // newCalendarRanges: [],
updateCalendarRanges: [], // updateCalendarRanges: [],
deleteCalendarRanges: [], // deleteCalendarRanges: [],
currentCalendarRanges: [], // currentCalendarRanges: [],
}, },
mutations: { mutations: {
setCurrentCalendarRanges(state, payload) { // setCurrentCalendarRanges(state, payload) {
state.currentCalendarRanges = payload // state.currentCalendarRanges = payload
}, // },
updateRange(state, payload) { // updateRange(state, payload) {
state.updateCalendarRanges.push({ // state.updateCalendarRanges.push({
id: payload.event.extendedProps.calendarRangeId, // id: payload.event.extendedProps.calendarRangeId,
start: payload.event.start, // start: payload.event.start,
end: payload.event.end // end: payload.event.end
}); // });
}, // },
addRange(state, payload) { // addRange(state, payload) {
state.newCalendarRanges.push({ // state.newCalendarRanges.push({
start: payload.start, // start: payload.start,
end: payload.end // end: payload.end
}); // });
}, // },
deleteRange(state, payload) { // deleteRange(state, payload) {
state.deleteCalendarRanges.push({ // state.deleteCalendarRanges.push({
id: payload.extendedProps.calendarRangeId, // id: payload.extendedProps.calendarRangeId,
start: payload.start, // start: payload.start,
end: payload.end // end: payload.end
}); // });
}, // },
clearNewCalendarRanges(state) { // clearNewCalendarRanges(state) {
state.newCalendarRanges = []; // state.newCalendarRanges = [];
}, // },
clearUpdateCalendarRanges(state) { // clearUpdateCalendarRanges(state) {
state.updateCalendarRanges = []; // state.updateCalendarRanges = [];
}, // },
clearDeleteCalendarRanges(state) { // clearDeleteCalendarRanges(state) {
state.deleteCalendarRanges = []; // state.deleteCalendarRanges = [];
}, // },
removeNewCalendarRanges(state, payload) { // removeNewCalendarRanges(state, payload) {
let filteredCollection = state.newCalendarRanges.filter( // let filteredCollection = state.newCalendarRanges.filter(
(e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString() // (e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString()
) // )
state.newCalendarRanges = filteredCollection; // state.newCalendarRanges = filteredCollection;
}, // },
removeFromDeleteRange(state, payload) { // removeFromDeleteRange(state, payload) {
let filteredCollection = state.deleteCalendarRanges.filter( // let filteredCollection = state.deleteCalendarRanges.filter(
(e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString() // (e) => e.start.toString() !== payload.start.toString() && e.end.toString() !== payload.end.toString()
) // )
state.deleteCalendarRanges = filteredCollection; // state.deleteCalendarRanges = filteredCollection;
}, // },
addCalendarRange(state, payload) { // addCalendarRange(state, payload) {
state.currentCalendarRanges.push(payload); // state.currentCalendarRanges.push(payload);
} // }
}, },
actions: { actions: {
setCurrentCalendarRanges({ commit }) { // setCurrentCalendarRanges({ commit }) {
// console.log('userId', window.userId); // // console.log('userId', window.userId);
fetchCalendarRangesByUser(window.userId) // fetchCalendarRangesByUser(window.userId)
.then((ranges) => { // .then((ranges) => {
// console.log('ranges', ranges.results); // // console.log('ranges', ranges.results);
commit('setCurrentCalendarRanges', ranges.results); // commit('setCurrentCalendarRanges', ranges.results);
}) // })
}, // },
addCalendarRange({ commit }, payload) { // addCalendarRange({ commit }, payload) {
commit('addCalendarRange', payload) // commit('addCalendarRange', payload)
}, // },
createRange({ commit }, payload) { // createRange({ commit }, payload) {
// console.log('### action createRange', payload); // // console.log('### action createRange', payload);
commit('addRange', payload); // commit('addRange', payload);
}, // },
updateRange({ commit }, payload) { // updateRange({ commit }, payload) {
// console.log('### action updateRange', payload); // // console.log('### action updateRange', payload);
commit('updateRange', payload); // commit('updateRange', payload);
}, // },
deleteRange({ commit }, payload) { // deleteRange({ commit }, payload) {
// console.log('### action deleteRange', payload); // // console.log('### action deleteRange', payload);
commit('deleteRange', payload); // commit('deleteRange', payload);
}, // },
clearNewCalendarRanges({ commit }, payload) { // clearNewCalendarRanges({ commit }, payload) {
commit('clearNewCalendarRanges', payload); // commit('clearNewCalendarRanges', payload);
}, // },
clearUpdateCalendarRanges({ commit }, payload) { // clearUpdateCalendarRanges({ commit }, payload) {
commit('clearUpdateCalendarRanges', payload); // commit('clearUpdateCalendarRanges', payload);
}, // },
clearDeleteCalendarRanges({ commit }, payload) { // clearDeleteCalendarRanges({ commit }, payload) {
commit('clearDeleteCalendarRanges', payload); // commit('clearDeleteCalendarRanges', payload);
}, // },
removeNewCalendarRanges({ commit }, payload) { // removeNewCalendarRanges({ commit }, payload) {
commit('removeNewCalendarRanges', payload); // commit('removeNewCalendarRanges', payload);
}, // },
removeFromDeleteRange({ commit }, payload) { // removeFromDeleteRange({ commit }, payload) {
commit('removeFromDeleteRange', payload); // commit('removeFromDeleteRange', payload);
}, // },
} }
}); });
store.dispatch('setCurrentCalendarRanges'); // store.dispatch('setCurrentCalendarRanges');
export default store; export default store;