diff --git a/.changes/unreleased/Feature-20240701-153223.yaml b/.changes/unreleased/Feature-20240701-153223.yaml new file mode 100644 index 000000000..aaf7fa9c3 --- /dev/null +++ b/.changes/unreleased/Feature-20240701-153223.yaml @@ -0,0 +1,5 @@ +kind: Feature +body: Add a button to duplicate calendar ranges from a week to another one +time: 2024-07-01T15:32:23.602091234+02:00 +custom: + Issue: "123" diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue index 1d353baed..873e780e4 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue @@ -1,7 +1,7 @@ diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/i18n.ts b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/i18n.ts index 2950c16da..4c910aa87 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/i18n.ts +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/i18n.ts @@ -5,11 +5,9 @@ const appMessages = { show_my_calendar: "Afficher mon calendrier", show_weekends: "Afficher les week-ends", copy_range: "Copier", - copy_range_from_to: "Copier les plages d'un jour à l'autre", - copy_range_to_next_day: "Copier les plages du jour au jour suivant", - copy_range_from_day: "Copier les plages du ", - to_the_next_day: " au jour suivant", - copy_range_to_next_week: "Copier les plages de la semaine à la semaine suivante", + copy_range_from_to: "Copier les plages", + from_day_to_day: "d'un jour à l'autre", + from_week_to_week: "d'une semaine à l'autre", copy_range_how_to: "Créez les plages de disponibilités durant une journée et copiez-les facilement au jour suivant avec ce bouton. Si les week-ends sont cachés, le jour suivant un vendredi sera le lundi.", new_range_to_save: "Nouvelles plages à enregistrer", update_range_to_save: "Plages à modifier", diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store/modules/calendarRanges.ts b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store/modules/calendarRanges.ts index aaa530909..02f14e247 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store/modules/calendarRanges.ts +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/store/modules/calendarRanges.ts @@ -52,6 +52,23 @@ export default >{ } } + return founds; + }, + getRangesOnWeek: (state: CalendarRangesState) => (mondayDate: Date): EventInputCalendarRange[] => { + const founds = []; + for (let d of Array.from(Array(7).keys())) { + const dateOfWeek = new Date(mondayDate); + dateOfWeek.setDate(mondayDate.getDate() + d); + const dateStr = dateToISO(dateOfWeek); + for (let range of state.ranges) { + if (isEventInputCalendarRange(range) + && range.start.startsWith(dateStr) + ) { + founds.push(range); + } + } + } + return founds; }, }, @@ -238,7 +255,7 @@ export default >{ for (let r of rangesToCopy) { let start = new Date(ISOToDatetime(r.start)); - start.setFullYear(to.getFullYear(), to.getMonth(), to.getDate()) + start.setFullYear(to.getFullYear(), to.getMonth(), to.getDate()); let end = new Date(ISOToDatetime(r.end)); end.setFullYear(to.getFullYear(), to.getMonth(), to.getDate()); let location = ctx.rootGetters['locations/getLocationById'](r.locationId); @@ -246,6 +263,23 @@ export default >{ promises.push(ctx.dispatch('createRange', {start, end, location})); } + return Promise.all(promises).then(_ => Promise.resolve(null)); + }, + copyFromWeekToAnotherWeek(ctx, {fromMonday, toMonday}: {fromMonday: Date, toMonday: Date}): Promise { + + const rangesToCopy: EventInputCalendarRange[] = ctx.getters['getRangesOnWeek'](fromMonday); + const promises = []; + const diffTime = toMonday.getTime() - fromMonday.getTime(); + for (let r of rangesToCopy) { + let start = new Date(ISOToDatetime(r.start)); + let end = new Date(ISOToDatetime(r.end)); + start.setTime(start.getTime() + diffTime); + end.setTime(end.getTime() + diffTime); + let location = ctx.rootGetters['locations/getLocationById'](r.locationId); + + promises.push(ctx.dispatch('createRange', {start, end, location})); + } + return Promise.all(promises).then(_ => Promise.resolve(null)); } }