From b6a3a3a55bf266d8d95318038addf09d07c25621 Mon Sep 17 00:00:00 2001 From: Narindra ezway Date: Thu, 27 Mar 2025 14:47:29 +0300 Subject: [PATCH] =?UTF-8?q?cong=C3=A9+repos+arrat-maladie=20:=20OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Properties/PropertySelectAbsenceType.vue | 40 ++++++-------- .../Properties/PropertyTitleTimePicker.vue | 4 +- calendar/src/mixins/EditorMixin.js | 16 +++--- calendar/src/models/event.js | 7 +++ calendar/src/models/rfcProps.js | 4 ++ calendar/src/store/calendarObjectInstance.js | 53 ++++++++++++++++--- calendar/src/store/calendarObjects.js | 17 +++++- calendar/src/views/EditSidebar.vue | 27 ++++++++-- calendar/src/views/EditSimple.vue | 31 +++++++---- gestion/lib/Helpers/VCalendarHelpers.php | 2 +- gestion/lib/Service/GestionService.php | 7 ++- 11 files changed, 146 insertions(+), 62 deletions(-) diff --git a/calendar/src/components/Editor/Properties/PropertySelectAbsenceType.vue b/calendar/src/components/Editor/Properties/PropertySelectAbsenceType.vue index b7b54a1..352c745 100644 --- a/calendar/src/components/Editor/Properties/PropertySelectAbsenceType.vue +++ b/calendar/src/components/Editor/Properties/PropertySelectAbsenceType.vue @@ -1,14 +1,16 @@ -
+
diff --git a/calendar/src/mixins/EditorMixin.js b/calendar/src/mixins/EditorMixin.js index 002815d..d174245 100644 --- a/calendar/src/mixins/EditorMixin.js +++ b/calendar/src/mixins/EditorMixin.js @@ -360,7 +360,7 @@ export default { * Returns an object with properties from RFCs including * their displayName, a description, options, etc. * - * @return {{comment, geo, color, timeTransparency, description, resources, location, client, categories, accessClass, priority, status, locations, articles, clients,embalmer,embalmers}} + * @return {{absenceType, comment, geo, color, timeTransparency, description, resources, location, client, categories, accessClass, priority, status, locations, articles, clients,embalmer,embalmers}} */ rfcProps() { return getRFCProperties() @@ -419,7 +419,7 @@ export default { * @return {string|null} */ absenceType() { - return this.calendarObjectInstance?.absenceType ?? 'conge' + return this.calendarObjectInstance?.absenceType ?? '' }, }, methods: { @@ -786,14 +786,10 @@ export default { * @param {string} absenceType New absence type */ updateAbsenceType(absenceType) { - if (!absenceType) { - return; - } - - this.$store.dispatch('changeAbsenceType', { - calendarObjectInstance: this.calendarObjectInstance, - absenceType, - }); + this.$store.commit('changeAbsenceType', { + calendarObjectInstance: this.calendarObjectInstance, + absenceType, + }) } }, diff --git a/calendar/src/models/event.js b/calendar/src/models/event.js index 65cdd95..b711fd1 100644 --- a/calendar/src/models/event.js +++ b/calendar/src/models/event.js @@ -60,6 +60,8 @@ const getDefaultEventObject = (props = {}) => Object.assign({}, { client : null, //embalmer(Thanato) of the event embalmer : null, + //absenceType + absenceType : null, //Private isPrivate: false, //comment of the event @@ -114,6 +116,7 @@ const mapEventComponentToEventObject = (eventComponent) => { client : "CLIENT", embalmer : "TEST", comment : "", + absenceType : "", description: eventComponent.description, accessClass: eventComponent.accessClass, status: eventComponent.status, @@ -215,6 +218,10 @@ const mapEventComponentToEventObject = (eventComponent) => { eventObject.comment = eventComponent.getFirstPropertyFirstValue('COMMENT'); } + if(eventComponent.hasProperty('ABSENCETYPE')){ + eventObject.absenceType = eventComponent.getFirstPropertyFirstValue('ABSENCETYPE'); + } + return eventObject; } diff --git a/calendar/src/models/rfcProps.js b/calendar/src/models/rfcProps.js index 1253cf0..8249a6b 100644 --- a/calendar/src/models/rfcProps.js +++ b/calendar/src/models/rfcProps.js @@ -141,6 +141,10 @@ const getRFCProperties = () => { placeholder: t('calendar', 'Choisir un client'), icon: 'Human', }, + absenceType: { + readableName: t('calendar', 'Type d\'absence'), + placeholder: t('calendar', 'Type d\'absence'), + }, embalmers: { readableName: t('calendar', 'Embalmers'), diff --git a/calendar/src/store/calendarObjectInstance.js b/calendar/src/store/calendarObjectInstance.js index 88f1b9c..c4fb05c 100644 --- a/calendar/src/store/calendarObjectInstance.js +++ b/calendar/src/store/calendarObjectInstance.js @@ -377,6 +377,44 @@ const mutations = { calendarObjectInstance.embalmer = embalmer }, + /** + * Change the absence type of an event + * + * @param {object} state The Vuex state + * @param {object} data The destructuring object + * @param {object} data.calendarObjectInstance The calendarObjectInstance object + * @param {string} data.embalmer New embalmer to set + */ + + changeAbsenceType(state, { calendarObjectInstance, absenceType }) { + calendarObjectInstance.eventComponent.absenceType = absenceType ?? null + calendarObjectInstance.absenceType = absenceType ?? null + if(absenceType){ + const types = [ + { value: 'LEAVE', label: 'Congé' }, + { value: 'REST', label: 'Repos' }, + { value: 'DISEASE', label: 'Arret maladie' }, + ]; + + types.forEach((element) => { + if(element.value == absenceType){ + calendarObjectInstance.title = element.label + calendarObjectInstance.eventComponent.title = element.label + + if(absenceType == 'LEAVE'){ + const startDate = calendarObjectInstance.eventComponent.startDate + const endDate = calendarObjectInstance.eventComponent.endDate + + startDate.hour = 8 ; endDate.hour = 17 + + calendarObjectInstance.startDate = getDateFromDateTimeValue(startDate) + calendarObjectInstance.endDate = getDateFromDateTimeValue(endDate) + } + } + }) + } + }, + /** * Change the description of an event * @@ -1723,6 +1761,7 @@ const actions = { let additionalFieldWasUpdated = eventComponent.client != null || eventComponent.isPrivate != null || + eventComponent.absenceType || eventComponent.comment != null ; if (eventComponent.isDirty() || additionalFieldWasUpdated) { const isForkedItem = eventComponent.primaryItem !== null @@ -2143,13 +2182,13 @@ const actions = { commit('changeTimeToDefaultForTimedEvents', { calendarObjectInstance }) } }, - async changeAbsenceType({ commit }, { calendarObjectInstance, absenceType }) { - try { - commit('setAbsenceType', { calendarObjectInstance, absenceType }); - } catch (error) { - console.error('Erreur lors de la mise à jour du type d\'absence:', error); - } - }, + // async changeAbsenceType({ commit }, { calendarObjectInstance, absenceType }) { + // try { + // commit('setAbsenceType', { calendarObjectInstance, absenceType }); + // } catch (error) { + // console.error('Erreur lors de la mise à jour du type d\'absence:', error); + // } + // }, } diff --git a/calendar/src/store/calendarObjects.js b/calendar/src/store/calendarObjects.js index 4073771..7733518 100644 --- a/calendar/src/store/calendarObjects.js +++ b/calendar/src/store/calendarObjects.js @@ -273,6 +273,20 @@ const actions = { icsValue = setCustomKeyValuesArrayToIcsAndReturnIcs(icsValue,customKeyValue); } } + if(eventComponent.absenceType != null && eventComponent.absenceType != ''){ + let absenceTypeValue = eventComponent.absenceType; + let key = "ABSENCETYPE:"+absenceTypeValue; + let regex = /^ABSENCETYPE:.*$/m; + if(regex.test(icsValue)){ + icsValue = icsValue.replace(regex, key); + } + else{ + const customKeyValue = { + "ABSENCETYPE": absenceTypeValue + }; + icsValue = setCustomKeyValuesArrayToIcsAndReturnIcs(icsValue,customKeyValue); + } + } } calendarObject.dav.data = icsValue; @@ -293,7 +307,8 @@ const actions = { "CLIENT": eventComponent.client, "EMBALMER": eventComponent.embalmer , "ISPRIVATE": eventComponent.isPrivate ? "1" : "0", - "COMMENT": eventComponent.comment + "COMMENT": eventComponent.comment, + "ABSENCETYPE": eventComponent.absenceType ?? '' }; icsValue = setCustomKeyValuesArrayToIcsAndReturnIcs(icsValue,customKeyValue); } diff --git a/calendar/src/views/EditSidebar.vue b/calendar/src/views/EditSidebar.vue index 770a99b..f34e917 100644 --- a/calendar/src/views/EditSidebar.vue +++ b/calendar/src/views/EditSidebar.vue @@ -103,11 +103,26 @@ @update-end-timezone="updateEndTimezone" @toggle-all-day="toggleAllDay" /> - + + +
+
+ +
+
+ +
+ +
- - - + +
+
+ +
+
+ +
+ +
+ + + GetIsPivateFromVCalendarString($vCalendarString); - if($isPrivate){ + $absenceType = VCalendarHelpers::GetValueFromKeyInVCalendarString('ABSENCETYPE',$vCalendarString); + if($isPrivate || $absenceType){ //Nothing to do manage fo a private calendar return; } @@ -412,10 +413,12 @@ class GestionService { public function HandleUpdatedCalendarObject(string $vCalendarString , $cookie){ try{ $isPrivate = $this->GetIsPivateFromVCalendarString($vCalendarString); - if($isPrivate){ + $absenceType = VCalendarHelpers::GetValueFromKeyInVCalendarString('ABSENCETYPE',$vCalendarString); + if($isPrivate || $absenceType){ //Nothing to do manage fo a private calendar return; } + $calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); $devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid); if($devis != null){