From 3fbdcdc43115de4cc0fabd9003283498b3bd2225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Mon, 23 May 2022 17:57:12 +0200 Subject: [PATCH] calendar app: change mainUser if mainUser is selected --- .../ChillCalendarBundle/Entity/Calendar.php | 1 + .../ChillCalendarBundle/Entity/Invite.php | 4 +++ .../Resources/public/vuejs/Calendar/App.vue | 20 +++++------- .../Resources/public/vuejs/Calendar/i18n.js | 32 ++++++++++--------- .../public/vuejs/Calendar/store/actions.js | 26 +++++++++++---- .../public/vuejs/Calendar/store/mutations.js | 4 +++ 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php index 7b551013a..388dc12b5 100644 --- a/src/Bundle/ChillCalendarBundle/Entity/Calendar.php +++ b/src/Bundle/ChillCalendarBundle/Entity/Calendar.php @@ -329,6 +329,7 @@ class Calendar implements TrackCreationInterface, TrackUpdateInterface /** * @return Collection|User[] + * @Serializer\Groups({"calendar:read", "read"}) */ public function getUsers(): Collection { diff --git a/src/Bundle/ChillCalendarBundle/Entity/Invite.php b/src/Bundle/ChillCalendarBundle/Entity/Invite.php index b6a25e412..7abd4f2c2 100644 --- a/src/Bundle/ChillCalendarBundle/Entity/Invite.php +++ b/src/Bundle/ChillCalendarBundle/Entity/Invite.php @@ -19,6 +19,7 @@ use Chill\MainBundle\Doctrine\Model\TrackUpdateTrait; use Chill\MainBundle\Entity\User; use Doctrine\ORM\Mapping as ORM; use LogicException; +use Symfony\Component\Serializer\Annotation as Serializer; /** * @ORM\Table(name="chill_calendar.invite") @@ -47,17 +48,20 @@ class Invite implements TrackUpdateInterface, TrackCreationInterface * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") + * @Serializer\Groups(groups={"calendar:read", "read"}) */ private ?int $id = null; /** * @ORM\Column(type="text", nullable=false, options={"default": "pending"}) + * @Serializer\Groups(groups={"calendar:read", "read"}) */ private string $status = self::PENDING; /** * @ORM\ManyToOne(targetEntity="Chill\MainBundle\Entity\User") * @ORM\JoinColumn(nullable=false) + * @Serializer\Groups(groups={"calendar:read", "read"}) */ private ?User $user = null; diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue index 010550b43..58938e728 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/App.vue @@ -162,19 +162,15 @@ export default { return; } + // show an alert if changing mainUser + if (this.$store.state.activity.mainUser !== null + && payload.event.extendedProps.userId !== this.$store.state.activity.mainUser.id) { + if (!window.confirm(this.$t('this_calendar_range_will_change_main_user'))) { + return; + } + } + this.$store.dispatch('associateCalendarToRange', {range: payload.event}); - - - /* - this.previousSelectedEvent = this.selectedEvent; - this.previousSelectedEventColor = payload.event.extendedProps.sourceColor; - this.selectedEvent = payload.event; - this.unSelectPreviousEvent(this.previousSelectedEvent); - payload.event.setProp('backgroundColor', '#3788d8'); - payload.event.setProp('borderColor', '#3788d8'); - payload.event.setProp('title', 'Choisir cette plage'); - payload.event.setProp('textColor', '#ffffff'); - */ }, onEventMouseEnter(payload) { payload.event.setProp('borderColor', '#444444'); diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/i18n.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/i18n.js index 3020502e9..aea8b7a28 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/i18n.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/i18n.js @@ -1,19 +1,21 @@ -import { personMessages } from 'ChillPersonAssets/vuejs/_js/i18n' -import { calendarUserSelectorMessages } from '../_components/CalendarUserSelector/js/i18n'; -import { activityMessages } from 'ChillActivityAssets/vuejs/Activity/i18n'; +import {personMessages} from 'ChillPersonAssets/vuejs/_js/i18n' +import {calendarUserSelectorMessages} from '../_components/CalendarUserSelector/js/i18n'; +import {activityMessages} from 'ChillActivityAssets/vuejs/Activity/i18n'; const appMessages = { - fr: { - choose_your_date: "Sélectionnez votre plage", - activity: { - add_persons: "Ajouter des personnes concernées", - bloc_persons: "Usagers", - bloc_persons_associated: "Usagers du parcours", - bloc_persons_not_associated: "Tiers non-pro.", - bloc_thirdparty: "Tiers professionnels", - bloc_users: "T(M)S", - } - } + fr: { + choose_your_date: "Sélectionnez votre plage", + activity: { + add_persons: "Ajouter des personnes concernées", + bloc_persons: "Usagers", + bloc_persons_associated: "Usagers du parcours", + bloc_persons_not_associated: "Tiers non-pro.", + bloc_thirdparty: "Tiers professionnels", + bloc_users: "T(M)S", + }, + this_calendar_range_will_change_main_user: "Cette plage de disponibilité n'est pas celle de l'utilisateur principal. Si vous continuez, l'utilisateur principal sera adapté. Êtes-vous sur·e ?", + + } } Object.assign(appMessages.fr, personMessages.fr); @@ -21,5 +23,5 @@ Object.assign(appMessages.fr, calendarUserSelectorMessages.fr); Object.assign(appMessages.fr, activityMessages.fr); export { - appMessages + appMessages }; diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js index 31f50407e..1e1faab19 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/actions.js @@ -89,7 +89,7 @@ export default { aThirdParties.value = removeIdFromValue(aThirdParties.value, payload.id); break; case 'user': - let aUsers = document.getElementById("chill_activitybundle_activity_invites"); + let aUsers = document.getElementById("chill_activitybundle_activity_users"); aUsers.value = removeIdFromValue(aUsers.value, payload.id); break; }; @@ -107,7 +107,7 @@ export default { //mainUserInput.value = payload.users.logged.id; commit('setEvents', payload); }, - associateCalendarToRange({ commit, dispatch }, {range}) { + associateCalendarToRange({ state, commit, dispatch }, {range}) { console.log('### action associateCAlendarToRange', range); let startDateInput = document.getElementById("chill_activitybundle_activity_startDate"); startDateInput.value = datetimeToISO(range.start); @@ -116,21 +116,33 @@ export default { let calendarRangeInput = document.getElementById("chill_activitybundle_activity_calendarRange"); calendarRangeInput.value = Number(range.extendedProps.calendarRangeId); - //dispatch('setMainUser', payload.event.source); - //let mainUserInput = document.getElementById("chill_activitybundle_activity_mainUser"); - //mainUserInput.value = Number(payload.event.source.id); + const userId = range.extendedProps.userId; + if (state.activity.mainUser !== null && state.activity.mainUser.id !== userId) { + dispatch('setMainUser', state.usersData.get(userId).user); + + // TODO: remove persons involved with this user + } + commit('associateCalendarToRange', {range}); return Promise.resolve(); }, setMainUser({ commit }, mainUser) { - console.log('rawMainuser', toRaw(mainUser)); - const event = new CustomEvent('pick-entity-type-action', {detail: { + console.log('setMainUser', mainUser); + let mainUserInput = document.getElementById("chill_activitybundle_activity_mainUser"); + mainUserInput.value = Number(mainUser.id); + + commit('setMainUser', mainUser); + + /* + const event = new CustomEvent('pick-entity-type-action', {detail: { name: "chill_activitybundle_activity_mainUser", entity: toRaw(mainUser), action: 'add' }}); document.dispatchEvent(event); commit('setMainUser', mainUser); + + */ }, // Location diff --git a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/mutations.js b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/mutations.js index 5fabaa870..2d78ae5b0 100644 --- a/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/mutations.js +++ b/src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/store/mutations.js @@ -46,6 +46,10 @@ export default { console.log('activity', state.activity); }, + setMainUser(state, user) { + state.activity.mainUser = user; + }, + // ConcernedGroups addPersonsInvolved(state, payload) { //console.log('### mutation addPersonsInvolved', payload.result.type);