Merge branch 'features/feature-thanato-statistique-update' into staging
This commit is contained in:
commit
7e452b0e27
@ -1322,7 +1322,7 @@ function b(n) {
|
||||
/******/ // This function allow to reference async chunks
|
||||
/******/ __webpack_require__.u = (chunkId) => {
|
||||
/******/ // return url for filenames based on template
|
||||
/******/ return "calendar-" + chunkId + ".js?v=" + {"vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981":"31a7d4ece3cdde2d67f1","vendors-node_modules_vue_dist_vue_runtime_esm_js":"7e3171593bdc0f62040b","vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b":"c3b3db23da041c717fc1","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead":"702892edfb255629754c","vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d":"bab844a8fb43e3701945","src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790":"7cf71b4f92d5bbc180b4","src_store_index_js":"e380346f21f6daf64ba8","src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258":"740a2859d1f364b508c1","dashboard-lazy":"a51e4becd0c10f90296c","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"1ec24b5ef07652c6dd39","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"7ec0cf6b65f5c745fa03","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","vendors-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mom-582c96":"ce1bed825f57dd1d117a","node_modules_moment_locale_sync_recursive_":"4bc2c39c5e0ff182c2e3"}[chunkId] + "";
|
||||
/******/ return "calendar-" + chunkId + ".js?v=" + {"vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981":"31a7d4ece3cdde2d67f1","vendors-node_modules_vue_dist_vue_runtime_esm_js":"7e3171593bdc0f62040b","vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b":"c3b3db23da041c717fc1","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead":"702892edfb255629754c","vendors-node_modules_nextcloud_vue-dashboard_dist_vue-dashboard_js-node_modules_css-loader_di-9e6f3d":"bab844a8fb43e3701945","src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790":"7cf71b4f92d5bbc180b4","src_store_index_js":"b849999ea9c39f367cf5","src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258":"740a2859d1f364b508c1","dashboard-lazy":"a51e4becd0c10f90296c","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"1ec24b5ef07652c6dd39","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"7ec0cf6b65f5c745fa03","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","vendors-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mom-582c96":"ce1bed825f57dd1d117a","node_modules_moment_locale_sync_recursive_":"4bc2c39c5e0ff182c2e3"}[chunkId] + "";
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
@ -1580,4 +1580,4 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
//# sourceMappingURL=calendar-dashboard.js.map?v=0eeccaf4496c7c132733
|
||||
//# sourceMappingURL=calendar-dashboard.js.map?v=1d2cc32d4fb5ec9efe2c
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -8865,7 +8865,7 @@ window._registerCustomPickerElement = _;
|
||||
/******/ // This function allow to reference async chunks
|
||||
/******/ __webpack_require__.u = (chunkId) => {
|
||||
/******/ // return url for filenames based on template
|
||||
/******/ return "calendar-" + chunkId + ".js?v=" + {"vendors-node_modules_vue_dist_vue_runtime_esm_js":"7e3171593bdc0f62040b","vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981":"31a7d4ece3cdde2d67f1","vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b":"c3b3db23da041c717fc1","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"1ec24b5ef07652c6dd39","vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead":"702892edfb255629754c","vendors-node_modules_autosize_dist_autosize_esm_js-node_modules_html-entities_lib_index_js-no-4072c5":"7212b31e059bc10c256e","src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790":"7cf71b4f92d5bbc180b4","src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258":"740a2859d1f364b508c1","src_views_Calendar_vue-data_image_svg_xml_3csvg_20xmlns_27http_www_w3_org_2000_svg_27_20heigh-4a4254":"ab7be1676f2641f652aa","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","src_store_index_js":"e380346f21f6daf64ba8","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"7ec0cf6b65f5c745fa03","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","public-calendar-subscription-picker":"2315e24e67ebf6e4b6db","vendors-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mom-582c96":"ce1bed825f57dd1d117a","node_modules_moment_locale_sync_recursive_":"4bc2c39c5e0ff182c2e3"}[chunkId] + "";
|
||||
/******/ return "calendar-" + chunkId + ".js?v=" + {"vendors-node_modules_vue_dist_vue_runtime_esm_js":"7e3171593bdc0f62040b","vendors-node_modules_nextcloud_capabilities_dist_index_js-node_modules_nextcloud_vue-select_d-877981":"31a7d4ece3cdde2d67f1","vendors-node_modules_nextcloud_cdav-library_dist_dist_js-node_modules_nextcloud_logger_dist_i-36c16b":"c3b3db23da041c717fc1","vendors-node_modules_vue-material-design-icons_CalendarBlank_vue-node_modules_vue-material-de-e2c1f8":"1ec24b5ef07652c6dd39","vendors-node_modules_vue-material-design-icons_CalendarBlankOutline_vue-node_modules_nextclou-4adead":"702892edfb255629754c","vendors-node_modules_autosize_dist_autosize_esm_js-node_modules_html-entities_lib_index_js-no-4072c5":"7212b31e059bc10c256e","src_models_rfcProps_js-src_services_caldavService_js-src_services_talkService_js-src_services-8a2790":"7cf71b4f92d5bbc180b4","src_fullcalendar_eventSources_eventSourceFunction_js-src_utils_moment_js-data_image_svg_xml_3-b73258":"740a2859d1f364b508c1","src_views_Calendar_vue-data_image_svg_xml_3csvg_20xmlns_27http_www_w3_org_2000_svg_27_20heigh-4a4254":"1cab553461635c83e77d","vendors-node_modules_webdav_dist_web_index_js":"454da8f908d41b47c607","src_store_index_js":"b849999ea9c39f367cf5","vendors-node_modules_path-browserify_index_js-node_modules_nextcloud_dialogs_dist_chunks_Dial-e0595f":"7ec0cf6b65f5c745fa03","node_modules_nextcloud_dialogs_dist_legacy_mjs":"8be838e4c6e9aae56c87","vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-8ibBgPg__mjs":"ea54a36450de178d1141","public-calendar-subscription-picker":"2315e24e67ebf6e4b6db","vendors-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mom-582c96":"ce1bed825f57dd1d117a","node_modules_moment_locale_sync_recursive_":"4bc2c39c5e0ff182c2e3"}[chunkId] + "";
|
||||
/******/ };
|
||||
/******/ })();
|
||||
/******/
|
||||
@ -9115,4 +9115,4 @@ __webpack_require__.p = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.linkTo
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
//# sourceMappingURL=calendar-reference.js.map?v=d5f4bdadf4e197003d50
|
||||
//# sourceMappingURL=calendar-reference.js.map?v=7e08db02f5011dc82999
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -5925,6 +5925,46 @@ __webpack_require__.r(__webpack_exports__);
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js":
|
||||
/*!******************************************************************************************************************************************************************************************!*\
|
||||
!*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js ***!
|
||||
\******************************************************************************************************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.mjs");
|
||||
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
||||
name: "CheckboxComponent",
|
||||
components: {
|
||||
NcCheckboxRadioSwitch: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_0__.NcCheckboxRadioSwitch
|
||||
},
|
||||
props: {
|
||||
isLeave: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
getIsLeaveLabel() {
|
||||
console.log(this.isReadOnly);
|
||||
return this.isLeave ? this.$t('calendar', 'Congé') : this.$t('calendar', 'Pas de congé');
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleIsLeave() {
|
||||
const newLeaveState = !this.isLeave;
|
||||
this.$emit('toggle-is-leave', newLeaveState);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js":
|
||||
/*!*****************************************************************************************************************************************************************************************!*\
|
||||
!*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js ***!
|
||||
@ -8016,7 +8056,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var vue_material_design_icons_Download_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vue-material-design-icons/Download.vue */ "./node_modules/vue-material-design-icons/Download.vue");
|
||||
/* harmony import */ var vue_material_design_icons_ContentDuplicate_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! vue-material-design-icons/ContentDuplicate.vue */ "./node_modules/vue-material-design-icons/ContentDuplicate.vue");
|
||||
/* harmony import */ var vue_material_design_icons_Pencil_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vue-material-design-icons/Pencil.vue */ "./node_modules/vue-material-design-icons/Pencil.vue");
|
||||
/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
|
||||
/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
|
||||
/* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs");
|
||||
/* harmony import */ var _components_Editor_Properties_PropertySelect_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelect.vue */ "./src/components/Editor/Properties/PropertySelect.vue");
|
||||
/* harmony import */ var _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectAjax.vue */ "./src/components/Editor/Properties/PropertySelectAjax.vue");
|
||||
@ -8024,6 +8064,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectLieu.vue */ "./src/components/Editor/Properties/PropertySelectLieu.vue");
|
||||
/* harmony import */ var _components_Editor_Properties_PropertySelectClient_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectClient.vue */ "./src/components/Editor/Properties/PropertySelectClient.vue");
|
||||
/* harmony import */ var _components_Editor_Properties_PropertySelectArticle_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../components/Editor/Properties/PropertySelectArticle.vue */ "./src/components/Editor/Properties/PropertySelectArticle.vue");
|
||||
/* harmony import */ var _components_Editor_Properties_PropertyIsLeave_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../components/Editor/Properties/PropertyIsLeave.vue */ "./src/components/Editor/Properties/PropertyIsLeave.vue");
|
||||
|
||||
|
||||
|
||||
|
||||
@ -8052,6 +8094,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
||||
name: 'EditSimple',
|
||||
components: {
|
||||
PropertyIsLeave: _components_Editor_Properties_PropertyIsLeave_vue__WEBPACK_IMPORTED_MODULE_24__["default"],
|
||||
PropertySelectAjaxMultiple: _components_Editor_Properties_PropertySelectAjaxMultiple_vue__WEBPACK_IMPORTED_MODULE_20__["default"],
|
||||
PropertySelectAjax: _components_Editor_Properties_PropertySelectAjax_vue__WEBPACK_IMPORTED_MODULE_19__["default"],
|
||||
PropertySelectLieu: _components_Editor_Properties_PropertySelectLieu_vue__WEBPACK_IMPORTED_MODULE_21__["default"],
|
||||
@ -8091,7 +8134,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...(0,vuex__WEBPACK_IMPORTED_MODULE_24__.mapState)({
|
||||
...(0,vuex__WEBPACK_IMPORTED_MODULE_25__.mapState)({
|
||||
hideEventExport: state => state.settings.hideEventExport,
|
||||
widgetEventDetailsOpen: state => state.calendars.widgetEventDetailsOpen,
|
||||
widgetEventDetails: state => state.calendars.widgetEventDetails,
|
||||
@ -12745,6 +12788,40 @@ var staticRenderFns = [];
|
||||
render._withStripped = true;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true":
|
||||
/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||||
!*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true ***!
|
||||
\*****************************************************************************************************************************************************************************************************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ render: () => (/* binding */ render),
|
||||
/* harmony export */ staticRenderFns: () => (/* binding */ staticRenderFns)
|
||||
/* harmony export */ });
|
||||
var render = function render() {
|
||||
var _vm = this,
|
||||
_c = _vm._self._c;
|
||||
return !_vm.isReadOnly ? _c("div", {
|
||||
staticClass: "property-title-time-picker"
|
||||
}, [_c("div", {
|
||||
staticClass: "property-title-time-picker__all-day"
|
||||
}, [_c("NcCheckboxRadioSwitch", {
|
||||
attrs: {
|
||||
checked: _vm.isLeave
|
||||
},
|
||||
on: {
|
||||
"update:checked": _vm.toggleIsLeave
|
||||
}
|
||||
}, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "Congé")) + "\n\t\t")])], 1)]) : _c("div", [_vm._v("\n\t" + _vm._s(_vm.getIsLeaveLabel) + "\n")]);
|
||||
};
|
||||
var staticRenderFns = [];
|
||||
render._withStripped = true;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertySelect.vue?vue&type=template&id=04aa9fca&scoped=true":
|
||||
@ -13555,17 +13632,7 @@ var render = function render() {
|
||||
title: _vm.endTimezone,
|
||||
size: 20
|
||||
}
|
||||
}) : _vm._e()], 1)] : _vm._e()], 2) : _vm._e(), _vm._v(" "), !_vm.isReadOnly ? _c("div", {
|
||||
staticClass: "property-title-time-picker__all-day"
|
||||
}, [_c("NcCheckboxRadioSwitch", {
|
||||
attrs: {
|
||||
checked: _vm.isAllDay,
|
||||
disabled: !_vm.canModifyAllDay
|
||||
},
|
||||
on: {
|
||||
"update:checked": _vm.toggleAllDay
|
||||
}
|
||||
}, [_vm._v("\n\t\t\t" + _vm._s(_vm.$t("calendar", "All day")) + "\n\t\t")])], 1) : _vm._e()], 1);
|
||||
}) : _vm._e()], 1)] : _vm._e()], 2) : _vm._e()], 1);
|
||||
};
|
||||
var staticRenderFns = [];
|
||||
render._withStripped = true;
|
||||
@ -14323,6 +14390,14 @@ var render = function render() {
|
||||
"update-end-timezone": _vm.updateEndTimezone,
|
||||
"toggle-all-day": _vm.toggleAllDay
|
||||
}
|
||||
}), _vm._v(" "), _c("PropertyIsLeave", {
|
||||
attrs: {
|
||||
"is-read-only": _vm.isReadOnlyOrViewing,
|
||||
"is-leave": _vm.isLeave
|
||||
},
|
||||
on: {
|
||||
"toggle-is-leave": _vm.toggleIsLeave
|
||||
}
|
||||
}), _vm._v(" "), _c("PropertySelectClient", {
|
||||
staticClass: "property-location",
|
||||
attrs: {
|
||||
@ -16891,14 +16966,23 @@ __webpack_require__.r(__webpack_exports__);
|
||||
var _this$calendarObjectI8, _this$calendarObjectI9;
|
||||
return (_this$calendarObjectI8 = (_this$calendarObjectI9 = this.calendarObjectInstance) === null || _this$calendarObjectI9 === void 0 ? void 0 : _this$calendarObjectI9.embalmer) !== null && _this$calendarObjectI8 !== void 0 ? _this$calendarObjectI8 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the embalmer(Thanato) or null if the event is still loading
|
||||
*
|
||||
* @return {string|null}
|
||||
*/
|
||||
isLeave() {
|
||||
var _this$calendarObjectI10, _this$calendarObjectI11;
|
||||
return (_this$calendarObjectI10 = (_this$calendarObjectI11 = this.calendarObjectInstance) === null || _this$calendarObjectI11 === void 0 ? void 0 : _this$calendarObjectI11.isLeave) !== null && _this$calendarObjectI10 !== void 0 ? _this$calendarObjectI10 : false;
|
||||
},
|
||||
/**
|
||||
* Returns the comment or null if the event is still loading
|
||||
*
|
||||
* @return {string|null}
|
||||
*/
|
||||
comment() {
|
||||
var _this$calendarObjectI10, _this$calendarObjectI11;
|
||||
return (_this$calendarObjectI10 = (_this$calendarObjectI11 = this.calendarObjectInstance) === null || _this$calendarObjectI11 === void 0 ? void 0 : _this$calendarObjectI11.comment) !== null && _this$calendarObjectI10 !== void 0 ? _this$calendarObjectI10 : null;
|
||||
var _this$calendarObjectI12, _this$calendarObjectI13;
|
||||
return (_this$calendarObjectI12 = (_this$calendarObjectI13 = this.calendarObjectInstance) === null || _this$calendarObjectI13 === void 0 ? void 0 : _this$calendarObjectI13.comment) !== null && _this$calendarObjectI12 !== void 0 ? _this$calendarObjectI12 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the description or null if the event is still loading
|
||||
@ -16906,8 +16990,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {string|null}
|
||||
*/
|
||||
description() {
|
||||
var _this$calendarObjectI12, _this$calendarObjectI13;
|
||||
return (_this$calendarObjectI12 = (_this$calendarObjectI13 = this.calendarObjectInstance) === null || _this$calendarObjectI13 === void 0 ? void 0 : _this$calendarObjectI13.description) !== null && _this$calendarObjectI12 !== void 0 ? _this$calendarObjectI12 : null;
|
||||
var _this$calendarObjectI14, _this$calendarObjectI15;
|
||||
return (_this$calendarObjectI14 = (_this$calendarObjectI15 = this.calendarObjectInstance) === null || _this$calendarObjectI15 === void 0 ? void 0 : _this$calendarObjectI15.description) !== null && _this$calendarObjectI14 !== void 0 ? _this$calendarObjectI14 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the start-date (without timezone) or null if the event is still loading
|
||||
@ -16915,8 +16999,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {Date|null}
|
||||
*/
|
||||
startDate() {
|
||||
var _this$calendarObjectI14, _this$calendarObjectI15;
|
||||
return (_this$calendarObjectI14 = (_this$calendarObjectI15 = this.calendarObjectInstance) === null || _this$calendarObjectI15 === void 0 ? void 0 : _this$calendarObjectI15.startDate) !== null && _this$calendarObjectI14 !== void 0 ? _this$calendarObjectI14 : null;
|
||||
var _this$calendarObjectI16, _this$calendarObjectI17;
|
||||
return (_this$calendarObjectI16 = (_this$calendarObjectI17 = this.calendarObjectInstance) === null || _this$calendarObjectI17 === void 0 ? void 0 : _this$calendarObjectI17.startDate) !== null && _this$calendarObjectI16 !== void 0 ? _this$calendarObjectI16 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the timezone of the event's start-date or null if the event is still loading
|
||||
@ -16924,8 +17008,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {string|null}
|
||||
*/
|
||||
startTimezone() {
|
||||
var _this$calendarObjectI16, _this$calendarObjectI17;
|
||||
return (_this$calendarObjectI16 = (_this$calendarObjectI17 = this.calendarObjectInstance) === null || _this$calendarObjectI17 === void 0 ? void 0 : _this$calendarObjectI17.startTimezoneId) !== null && _this$calendarObjectI16 !== void 0 ? _this$calendarObjectI16 : null;
|
||||
var _this$calendarObjectI18, _this$calendarObjectI19;
|
||||
return (_this$calendarObjectI18 = (_this$calendarObjectI19 = this.calendarObjectInstance) === null || _this$calendarObjectI19 === void 0 ? void 0 : _this$calendarObjectI19.startTimezoneId) !== null && _this$calendarObjectI18 !== void 0 ? _this$calendarObjectI18 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the end-date (without timezone) or null if the event is still loading
|
||||
@ -16933,8 +17017,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {Date|null}
|
||||
*/
|
||||
endDate() {
|
||||
var _this$calendarObjectI18, _this$calendarObjectI19;
|
||||
return (_this$calendarObjectI18 = (_this$calendarObjectI19 = this.calendarObjectInstance) === null || _this$calendarObjectI19 === void 0 ? void 0 : _this$calendarObjectI19.endDate) !== null && _this$calendarObjectI18 !== void 0 ? _this$calendarObjectI18 : null;
|
||||
var _this$calendarObjectI20, _this$calendarObjectI21;
|
||||
return (_this$calendarObjectI20 = (_this$calendarObjectI21 = this.calendarObjectInstance) === null || _this$calendarObjectI21 === void 0 ? void 0 : _this$calendarObjectI21.endDate) !== null && _this$calendarObjectI20 !== void 0 ? _this$calendarObjectI20 : null;
|
||||
},
|
||||
/**
|
||||
* Returns the timezone of the event's end-date or null if the event is still loading
|
||||
@ -16942,8 +17026,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {string|null}
|
||||
*/
|
||||
endTimezone() {
|
||||
var _this$calendarObjectI20, _this$calendarObjectI21;
|
||||
return (_this$calendarObjectI20 = (_this$calendarObjectI21 = this.calendarObjectInstance) === null || _this$calendarObjectI21 === void 0 ? void 0 : _this$calendarObjectI21.endTimezoneId) !== null && _this$calendarObjectI20 !== void 0 ? _this$calendarObjectI20 : null;
|
||||
var _this$calendarObjectI22, _this$calendarObjectI23;
|
||||
return (_this$calendarObjectI22 = (_this$calendarObjectI23 = this.calendarObjectInstance) === null || _this$calendarObjectI23 === void 0 ? void 0 : _this$calendarObjectI23.endTimezoneId) !== null && _this$calendarObjectI22 !== void 0 ? _this$calendarObjectI22 : null;
|
||||
},
|
||||
/**
|
||||
* Returns whether or not the event is all-day or null if the event is still loading
|
||||
@ -16951,8 +17035,17 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {boolean}
|
||||
*/
|
||||
isAllDay() {
|
||||
var _this$calendarObjectI22, _this$calendarObjectI23;
|
||||
return (_this$calendarObjectI22 = (_this$calendarObjectI23 = this.calendarObjectInstance) === null || _this$calendarObjectI23 === void 0 ? void 0 : _this$calendarObjectI23.isAllDay) !== null && _this$calendarObjectI22 !== void 0 ? _this$calendarObjectI22 : false;
|
||||
var _this$calendarObjectI24, _this$calendarObjectI25;
|
||||
return (_this$calendarObjectI24 = (_this$calendarObjectI25 = this.calendarObjectInstance) === null || _this$calendarObjectI25 === void 0 ? void 0 : _this$calendarObjectI25.isAllDay) !== null && _this$calendarObjectI24 !== void 0 ? _this$calendarObjectI24 : false;
|
||||
},
|
||||
/**
|
||||
* Returns whether or not the event is a leave
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
isLeave() {
|
||||
var _this$calendarObjectI26, _this$calendarObjectI27;
|
||||
return (_this$calendarObjectI26 = (_this$calendarObjectI27 = this.calendarObjectInstance) === null || _this$calendarObjectI27 === void 0 ? void 0 : _this$calendarObjectI27.isLeave) !== null && _this$calendarObjectI26 !== void 0 ? _this$calendarObjectI26 : false;
|
||||
},
|
||||
/**
|
||||
* Returns whether or not the user is allowed to modify the all-day setting
|
||||
@ -16960,8 +17053,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {boolean}
|
||||
*/
|
||||
canModifyAllDay() {
|
||||
var _this$calendarObjectI24, _this$calendarObjectI25;
|
||||
return (_this$calendarObjectI24 = (_this$calendarObjectI25 = this.calendarObjectInstance) === null || _this$calendarObjectI25 === void 0 ? void 0 : _this$calendarObjectI25.canModifyAllDay) !== null && _this$calendarObjectI24 !== void 0 ? _this$calendarObjectI24 : false;
|
||||
var _this$calendarObjectI28, _this$calendarObjectI29;
|
||||
return (_this$calendarObjectI28 = (_this$calendarObjectI29 = this.calendarObjectInstance) === null || _this$calendarObjectI29 === void 0 ? void 0 : _this$calendarObjectI29.canModifyAllDay) !== null && _this$calendarObjectI28 !== void 0 ? _this$calendarObjectI28 : false;
|
||||
},
|
||||
/**
|
||||
* Returns the color the illustration should be colored in
|
||||
@ -16993,8 +17086,8 @@ __webpack_require__.r(__webpack_exports__);
|
||||
* @return {null | string}
|
||||
*/
|
||||
color() {
|
||||
var _this$calendarObjectI26, _this$calendarObjectI27;
|
||||
return (_this$calendarObjectI26 = (_this$calendarObjectI27 = this.calendarObjectInstance) === null || _this$calendarObjectI27 === void 0 ? void 0 : _this$calendarObjectI27.customColor) !== null && _this$calendarObjectI26 !== void 0 ? _this$calendarObjectI26 : null;
|
||||
var _this$calendarObjectI30, _this$calendarObjectI31;
|
||||
return (_this$calendarObjectI30 = (_this$calendarObjectI31 = this.calendarObjectInstance) === null || _this$calendarObjectI31 === void 0 ? void 0 : _this$calendarObjectI31.customColor) !== null && _this$calendarObjectI30 !== void 0 ? _this$calendarObjectI30 : null;
|
||||
},
|
||||
/**
|
||||
* Returns whether or not to display save buttons
|
||||
@ -17470,6 +17563,15 @@ __webpack_require__.r(__webpack_exports__);
|
||||
calendarObjectInstance: this.calendarObjectInstance
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Toggles the event between all-day and timed
|
||||
*/
|
||||
toggleIsLeave(isLeave) {
|
||||
this.$store.commit('toggleIsLeave', {
|
||||
calendarObjectInstance: this.calendarObjectInstance,
|
||||
isLeave
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Resets the internal state after changing the viewed calendar-object
|
||||
*/
|
||||
@ -20769,6 +20871,39 @@ ___CSS_LOADER_EXPORT___.push([module.id, `
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css":
|
||||
/*!********************************************************************************************************************************************************************************************************************************************************************************!*\
|
||||
!*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css ***!
|
||||
\********************************************************************************************************************************************************************************************************************************************************************************/
|
||||
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
||||
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
||||
// Imports
|
||||
|
||||
|
||||
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
||||
// Module
|
||||
___CSS_LOADER_EXPORT___.push([module.id, `
|
||||
.checkbox-container[data-v-56b63a1e] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
`, ""]);
|
||||
// Exports
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=style&index=0&id=673844b5&scoped=true&lang=css":
|
||||
@ -20824,6 +20959,61 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppNavigationHeaderNewEvent_vue_vue_type_style_index_0_id_673844b5_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppNavigationHeaderNewEvent_vue_vue_type_style_index_0_id_673844b5_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppNavigationHeaderNewEvent_vue_vue_type_style_index_0_id_673844b5_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css":
|
||||
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||||
!*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css ***!
|
||||
\************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
||||
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
||||
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var options = {};
|
||||
|
||||
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
||||
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
||||
|
||||
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
||||
|
||||
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
||||
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
||||
|
||||
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
||||
|
||||
|
||||
|
||||
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/AppNavigation/AppNavigationHeader.vue":
|
||||
@ -22871,6 +23061,47 @@ component.options.__file = "src/components/Editor/OrganizerNoEmailError.vue"
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertyIsLeave.vue":
|
||||
/*!**************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertyIsLeave.vue ***!
|
||||
\**************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true */ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true");
|
||||
/* harmony import */ var _PropertyIsLeave_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PropertyIsLeave.vue?vue&type=script&lang=js */ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js");
|
||||
/* harmony import */ var _PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css */ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css");
|
||||
/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
|
||||
|
||||
|
||||
|
||||
;
|
||||
|
||||
|
||||
/* normalize component */
|
||||
|
||||
var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
|
||||
_PropertyIsLeave_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
|
||||
_PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
|
||||
_PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
|
||||
false,
|
||||
null,
|
||||
"56b63a1e",
|
||||
null
|
||||
|
||||
)
|
||||
|
||||
/* hot reload */
|
||||
if (false) { var api; }
|
||||
component.options.__file = "src/components/Editor/Properties/PropertyIsLeave.vue"
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertySelect.vue":
|
||||
/*!*************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertySelect.vue ***!
|
||||
@ -24485,6 +24716,22 @@ __webpack_require__.r(__webpack_exports__);
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js":
|
||||
/*!**************************************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js ***!
|
||||
\**************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PropertyIsLeave.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=script&lang=js");
|
||||
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js":
|
||||
/*!*************************************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertySelect.vue?vue&type=script&lang=js ***!
|
||||
@ -25670,6 +25917,23 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_OrganizerNoEmailError_vue_vue_type_template_id_af50adac__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrganizerNoEmailError.vue?vue&type=template&id=af50adac */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/OrganizerNoEmailError.vue?vue&type=template&id=af50adac");
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true":
|
||||
/*!********************************************************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true ***!
|
||||
\********************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
|
||||
/* harmony export */ staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_template_id_56b63a1e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=template&id=56b63a1e&scoped=true");
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertySelect.vue?vue&type=template&id=04aa9fca&scoped=true":
|
||||
@ -26023,6 +26287,19 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppNavigationHeaderNewEvent_vue_vue_type_style_index_0_id_673844b5_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppNavigationHeaderNewEvent.vue?vue&type=style&index=0&id=673844b5&scoped=true&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderNewEvent.vue?vue&type=style&index=0&id=673844b5&scoped=true&lang=css");
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css":
|
||||
/*!**********************************************************************************************************************!*\
|
||||
!*** ./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css ***!
|
||||
\**********************************************************************************************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PropertyIsLeave_vue_vue_type_style_index_0_id_56b63a1e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Editor/Properties/PropertyIsLeave.vue?vue&type=style&index=0&id=56b63a1e&scoped=true&lang=css");
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/components/AppNavigation/AppNavigationHeader/AppNavigationHeaderDatePicker.vue?vue&type=style&index=0&id=e8250812&lang=scss":
|
||||
@ -27416,4 +27693,4 @@ module.exports = "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/sv
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
//# sourceMappingURL=calendar-src_views_Calendar_vue-data_image_svg_xml_3csvg_20xmlns_27http_www_w3_org_2000_svg_27_20heigh-4a4254.js.map?v=ab7be1676f2641f652aa
|
||||
//# sourceMappingURL=calendar-src_views_Calendar_vue-data_image_svg_xml_3csvg_20xmlns_27http_www_w3_org_2000_svg_27_20heigh-4a4254.js.map?v=1cab553461635c83e77d
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,50 @@
|
||||
<template>
|
||||
<div v-if="!isReadOnly" class="property-title-time-picker">
|
||||
<div class="property-title-time-picker__all-day">
|
||||
<NcCheckboxRadioSwitch :checked="isLeave"
|
||||
@update:checked="toggleIsLeave">
|
||||
{{ $t('calendar', 'Congé') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ getIsLeaveLabel }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { NcCheckboxRadioSwitch } from '@nextcloud/vue'
|
||||
export default {
|
||||
name: "CheckboxComponent",
|
||||
components: {
|
||||
NcCheckboxRadioSwitch,
|
||||
},
|
||||
props: {
|
||||
isLeave: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
getIsLeaveLabel() {
|
||||
console.log(this.isReadOnly);
|
||||
return this.isLeave ? this.$t('calendar', 'Congé') : this.$t('calendar', 'Pas de congé');
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleIsLeave() {
|
||||
const newLeaveState = !this.isLeave;
|
||||
this.$emit('toggle-is-leave',newLeaveState)
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.checkbox-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -75,13 +75,13 @@
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<div v-if="!isReadOnly" class="property-title-time-picker__all-day">
|
||||
<!-- <div v-if="!isReadOnly" class="property-title-time-picker__all-day">
|
||||
<NcCheckboxRadioSwitch :checked="isAllDay"
|
||||
:disabled="!canModifyAllDay"
|
||||
@update:checked="toggleAllDay">
|
||||
{{ $t('calendar', 'All day') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -144,6 +144,7 @@ export default {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
|
||||
/**
|
||||
* Whether or not the user can toggle the all-day property
|
||||
* This is set to false, whenever this event is part of a recurrence-set
|
||||
|
||||
@ -118,6 +118,15 @@ export default {
|
||||
return this.calendarObjectInstance?.embalmer ?? null
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the embalmer(Thanato) or null if the event is still loading
|
||||
*
|
||||
* @return {string|null}
|
||||
*/
|
||||
isLeave() {
|
||||
return this.calendarObjectInstance?.isLeave ?? false
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the comment or null if the event is still loading
|
||||
*
|
||||
@ -176,6 +185,15 @@ export default {
|
||||
isAllDay() {
|
||||
return this.calendarObjectInstance?.isAllDay ?? false
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns whether or not the event is a leave
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
isLeave() {
|
||||
return this.calendarObjectInstance?.isLeave ?? false
|
||||
},
|
||||
/**
|
||||
* Returns whether or not the user is allowed to modify the all-day setting
|
||||
*
|
||||
@ -658,6 +676,7 @@ export default {
|
||||
embalmer,
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Updates the start date of this event
|
||||
@ -719,6 +738,18 @@ export default {
|
||||
calendarObjectInstance: this.calendarObjectInstance,
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggles the event between all-day and timed
|
||||
*/
|
||||
toggleIsLeave(isLeave) {
|
||||
this.$store.commit('toggleIsLeave', {
|
||||
calendarObjectInstance: this.calendarObjectInstance,
|
||||
isLeave
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Resets the internal state after changing the viewed calendar-object
|
||||
*/
|
||||
|
||||
@ -52,6 +52,8 @@ const getDefaultEventObject = (props = {}) => Object.assign({}, {
|
||||
endTimezoneId: null,
|
||||
// Indicator whether or not event is all-day
|
||||
isAllDay: false,
|
||||
//leave
|
||||
isLeave: false,
|
||||
// Whether or not the user is allowed to toggle the all-day checkbox
|
||||
canModifyAllDay: true,
|
||||
// Location that the event takes places in
|
||||
@ -106,6 +108,7 @@ const mapEventComponentToEventObject = (eventComponent) => {
|
||||
eventComponent,
|
||||
title: eventComponent.title,
|
||||
isAllDay: eventComponent.isAllDay(),
|
||||
isLeave: false,
|
||||
canModifyAllDay: eventComponent.canModifyAllDay(),
|
||||
location: eventComponent.location,
|
||||
client : "CLIENT",
|
||||
@ -208,6 +211,10 @@ const mapEventComponentToEventObject = (eventComponent) => {
|
||||
eventObject.comment = eventComponent.getFirstPropertyFirstValue('COMMENT');
|
||||
}
|
||||
|
||||
if(eventComponent.hasProperty('ISLEAVE')){
|
||||
eventObject.isLeave = eventComponent.getFirstPropertyFirstValue('ISLEAVE') === '1' ? true : false;
|
||||
}
|
||||
|
||||
return eventObject;
|
||||
}
|
||||
|
||||
@ -222,6 +229,7 @@ const copyCalendarObjectInstanceIntoEventComponent = (eventObject, eventComponen
|
||||
eventComponent.location = eventObject.location
|
||||
eventComponent.client = eventObject.client
|
||||
eventComponent.embalmer = eventObject.embalmer
|
||||
eventComponent.isLeave = eventObject.isLeave
|
||||
eventComponent.comment = eventObject.comment
|
||||
eventComponent.description = eventObject.description
|
||||
eventComponent.accessClass = eventObject.accessClass
|
||||
|
||||
@ -286,6 +286,18 @@ const mutations = {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Is leave
|
||||
*
|
||||
* @param {object} state The Vuex state
|
||||
* @param {object} data The destructuring object
|
||||
* @param {object} data.calendarObjectInstance The calendarObjectInstance object
|
||||
*/
|
||||
toggleIsLeave(state, { calendarObjectInstance, isLeave }) {
|
||||
calendarObjectInstance.eventComponent.isLeave = isLeave
|
||||
calendarObjectInstance.isLeave = isLeave
|
||||
},
|
||||
|
||||
/**
|
||||
* Changes the time of a timed event to the default values
|
||||
*
|
||||
@ -1695,15 +1707,18 @@ const actions = {
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async saveCalendarObjectInstance({ state, dispatch, commit }, { thisAndAllFuture, calendarId }) {
|
||||
debugger;
|
||||
const eventComponent = state.calendarObjectInstance.eventComponent
|
||||
const calendarObject = state.calendarObject
|
||||
|
||||
updateAlarms(eventComponent)
|
||||
updateTalkParticipants(eventComponent)
|
||||
let client = eventComponent.client;
|
||||
|
||||
let additionalFieldWasUpdated =
|
||||
eventComponent.client != null ||
|
||||
eventComponent.comment != null;
|
||||
eventComponent.comment != null ||
|
||||
eventComponent.isLeave != null;
|
||||
if (eventComponent.isDirty() || additionalFieldWasUpdated) {
|
||||
const isForkedItem = eventComponent.primaryItem !== null
|
||||
let original = null
|
||||
|
||||
@ -236,6 +236,11 @@ const actions = {
|
||||
let newCommentKeyValue = "COMMENT:"+eventComponent.comment;
|
||||
icsValue = icsValue.replace(/COMMENT:[^\s]+/, newCommentKeyValue);
|
||||
}
|
||||
if(eventComponent.isLeave != null){
|
||||
let isLeaveValue = eventComponent.isLeave ? "1" : "0";
|
||||
let newIsLeaveKeyValue = "ISLEAVE:"+isLeaveValue;
|
||||
icsValue = icsValue.replace(/ISLEAVE:\d+/, newIsLeaveKeyValue);
|
||||
}
|
||||
}
|
||||
calendarObject.dav.data = icsValue;
|
||||
await calendarObject.dav.update()
|
||||
@ -254,7 +259,8 @@ const actions = {
|
||||
const customKeyValue = {
|
||||
"CLIENT": eventComponent.client,
|
||||
"EMBALMER": eventComponent.embalmer,
|
||||
"COMMENT": eventComponent.comment
|
||||
"COMMENT": eventComponent.comment,
|
||||
"ISLEAVE": eventComponent.isLeave ? "1" : "0",
|
||||
};
|
||||
icsValue = setCustomKeyValuesArrayToIcsAndReturnIcs(icsValue,customKeyValue);
|
||||
}
|
||||
|
||||
@ -101,7 +101,12 @@
|
||||
@update-start-timezone="updateStartTimezone"
|
||||
@update-end-date="updateEndDate"
|
||||
@update-end-timezone="updateEndTimezone"
|
||||
@toggle-all-day="toggleAllDay" />
|
||||
@toggle-all-day="toggleAllDay"/>
|
||||
|
||||
<PropertyIsLeave
|
||||
:is-read-only="isReadOnly"
|
||||
:is-leave="isLeave"
|
||||
@toggle-is-leave="toggleIsLeave" />
|
||||
|
||||
<PropertySelectClient class="property-location"
|
||||
url="/apps/gestion/ajaxGetClientsName"
|
||||
@ -355,6 +360,7 @@ import PropertySelectAjaxMultiple from "../components/Editor/Properties/Property
|
||||
import PropertySelectLieu from "../components/Editor/Properties/PropertySelectLieu.vue";
|
||||
import PropertySelectClient from "../components/Editor/Properties/PropertySelectClient.vue";
|
||||
import PropertySelectArticle from "../components/Editor/Properties/PropertySelectArticle.vue";
|
||||
import PropertyIsLeave from '../components/Editor/Properties/PropertyIsLeave.vue'
|
||||
|
||||
export default {
|
||||
name: 'EditSidebar',
|
||||
@ -364,6 +370,7 @@ export default {
|
||||
PropertySelectLieu,
|
||||
PropertySelectClient,
|
||||
PropertySelectArticle,
|
||||
PropertyIsLeave,
|
||||
ResourceList,
|
||||
PropertyColor,
|
||||
PropertySelectMultiple,
|
||||
|
||||
@ -119,7 +119,12 @@
|
||||
@update-start-timezone="updateStartTimezone"
|
||||
@update-end-date="updateEndDate"
|
||||
@update-end-timezone="updateEndTimezone"
|
||||
@toggle-all-day="toggleAllDay" />
|
||||
@toggle-all-day="toggleAllDay"/>
|
||||
|
||||
<PropertyIsLeave
|
||||
:is-read-only="isReadOnlyOrViewing"
|
||||
:is-leave="isLeave"
|
||||
@toggle-is-leave="toggleIsLeave" />
|
||||
|
||||
<PropertySelectClient class="property-location"
|
||||
url="/apps/gestion/ajaxGetClientsName"
|
||||
@ -233,10 +238,12 @@ import PropertySelectAjaxMultiple from "../components/Editor/Properties/Property
|
||||
import PropertySelectLieu from "../components/Editor/Properties/PropertySelectLieu.vue";
|
||||
import PropertySelectClient from "../components/Editor/Properties/PropertySelectClient.vue";
|
||||
import PropertySelectArticle from "../components/Editor/Properties/PropertySelectArticle.vue";
|
||||
import PropertyIsLeave from '../components/Editor/Properties/PropertyIsLeave.vue'
|
||||
|
||||
export default {
|
||||
name: 'EditSimple',
|
||||
components: {
|
||||
PropertyIsLeave,
|
||||
PropertySelectAjaxMultiple,
|
||||
PropertySelectAjax,
|
||||
PropertySelectLieu,
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -9,4 +9,6 @@ abstract class BddConstant
|
||||
const DEFAULT_CLIENT_GROUP_NAME = "Nom du groupe";
|
||||
const DEFAULT_ADMIN_ID_NEXTCLOUD = 'admin';
|
||||
const DEFAULT_ADMIN_APP_ID_NEXTCLOUD = "Johann";
|
||||
|
||||
const ISLEAVEPROPERTYONVCALENDAR = "ISLEAVE";
|
||||
}
|
||||
@ -2333,32 +2333,20 @@ class PageController extends Controller {
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
* @param array $thanatoIdsToExport
|
||||
* @param string $month
|
||||
* @param string $year
|
||||
*
|
||||
*/
|
||||
|
||||
public function exportThanatoStatistic($thanatoIdsToExport){
|
||||
public function exportThanatoStatistic($thanatoIdsToExport,$month,$year){
|
||||
if(empty($thanatoIdsToExport)){
|
||||
return "";
|
||||
}
|
||||
$exportData = $this->myDb->getExportThanatoStatisticData($thanatoIdsToExport);
|
||||
$month = $month ?? date('m');
|
||||
$year = $year ?? date('Y');
|
||||
try{
|
||||
$current_config = json_decode($this->myDb->getConfiguration($this->idNextcloud));
|
||||
$clean_folder = html_entity_decode($current_config[0]->path).'/';
|
||||
$_clean_folder = $clean_folder.'STATISTIQUES/THANATOS/';
|
||||
try {
|
||||
$this->storage->newFolder($_clean_folder);
|
||||
}
|
||||
catch(\OCP\Files\NotPermittedException $e) {
|
||||
|
||||
}
|
||||
$fileHeader = $this->exportThanatoStatisticService->getExportThanatoFileHeader();
|
||||
$fileContent = $this->exportThanatoStatisticService->populateExportDataIntoFileContent($exportData,$fileHeader);
|
||||
$filename = $this->exportThanatoStatisticService->getFilename($thanatoIdsToExport);
|
||||
$fileNamePath = $_clean_folder."STAT-THANATOS-" . $filename . '.csv';
|
||||
$this->storage->newFile($fileNamePath);
|
||||
$file = $this->storage->get($fileNamePath);
|
||||
$file->putContent($fileContent);
|
||||
return $fileNamePath;
|
||||
$filenames = $this->exportThanatoStatisticService->exportThanatosListStatistic($thanatoIdsToExport,$month,$year,$this->idNextcloud);
|
||||
return $filenames;
|
||||
}
|
||||
catch(\OCP\Files\NotFoundException $e) { }
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ class Bdd {
|
||||
private String $charset = 'utf8mb4';
|
||||
|
||||
public const DEFAULT_CALENDAR_UUID_FOR_DEVIS = "not-related";
|
||||
public const CALENDAR_TABLE_PREFIX = "*PREFIX*";
|
||||
public const DEFAULT_TABLE_PREFIX = "*PREFIX*";
|
||||
public const DEFAULT_CLIENT_GROUP_NAME = "Nom du groupe";
|
||||
public const DEFAULT_CLIENT_GROUP_FACTURATION_NAME = "Nom du groupe";
|
||||
private IDbConnection $pdo;
|
||||
@ -2148,10 +2148,157 @@ class Bdd {
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getExportThanatoStatisticData(array $thanatoIds){
|
||||
$devisList = $this->getDevisListByThanatoIds($thanatoIds);
|
||||
$devisListGroupedByDateAndThenByThanato = $this->getDevisListGroupedByDateAndThenByThanato($devisList);
|
||||
return $devisListGroupedByDateAndThenByThanato;
|
||||
private function getThanatoDevisListByDate($thanatoId,$date){
|
||||
$dateFormatted = $date->format('Y-m-d');
|
||||
$sql = "SELECT
|
||||
devis.id,
|
||||
devis.date,
|
||||
devis.mentions,
|
||||
devis.num as calendar_uuid,
|
||||
devis.id_defunt as id_defunt,
|
||||
devis.id_lieu as id_lieu,
|
||||
devis.id_client as id_client,
|
||||
devis.id_thanato as id_thanato,
|
||||
thanato.nom as nom_thanato,
|
||||
thanato.prenom as prenom_thanato,
|
||||
defunt.nom as nom_defunt,
|
||||
lieu.nom as nom_lieu,
|
||||
lieu.latitude as lieu_latitude,
|
||||
lieu.longitude as lieu_longitude,
|
||||
client.nom as nom_client,
|
||||
client.entreprise as client_entreprise,
|
||||
client.adresse as client_adresse,
|
||||
facture.num as facture_num
|
||||
FROM ".$this->tableprefix."devis as devis
|
||||
LEFT JOIN ".$this->tableprefix."thanato as thanato on devis.id_thanato = thanato.id
|
||||
LEFT JOIN ".$this->tableprefix."lieu as lieu on devis.id_lieu = lieu.id
|
||||
LEFT JOIN ".$this->tableprefix."defunt as defunt on devis.id_defunt = defunt.id
|
||||
LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id
|
||||
LEFT JOIN ".$this->tableprefix."facture as facture on devis.id = facture.id_devis
|
||||
WHERE devis.date = ? AND
|
||||
devis.id_thanato = ? AND
|
||||
(devis.mentions = ? OR devis.mentions = ?)
|
||||
ORDER BY devis.date ASC;";
|
||||
$devisList = $this->execSQLNoJsonReturn(
|
||||
$sql,
|
||||
[$dateFormatted,$thanatoId,DevisMentionConstant::FACTURED,DevisMentionConstant::FACTURED_FORMATTED]);
|
||||
return $devisList;
|
||||
}
|
||||
|
||||
public function getThanatoById($thanatoId){
|
||||
$sql = "SELECT id, nom, prenom FROM ".$this->tableprefix."thanato WHERE id = ? LIMIT 1;";
|
||||
$thanato = $this->execSQLNoJsonReturn($sql,[$thanatoId]);
|
||||
if(!empty($thanato)){
|
||||
return $thanato[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getCalendarByThanatoIdNextcloud($idNextCloud){
|
||||
$searchString = "%principals/users/$idNextCloud%";
|
||||
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendars as calendar WHERE calendar.principaluri LIKE ? LIMIT 1;";
|
||||
$calendar = $this->execSQLNoJsonReturn($sql,[$searchString]);
|
||||
if(!empty($calendar)){
|
||||
return $calendar[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getThanatoLeaveByCalendarAndDate($calendarId,$date){
|
||||
$datetimeFormatted = $date->format('Ymd');
|
||||
$dateCondition = "%DTSTART%".$datetimeFormatted."%";
|
||||
$isLeaveConditionAsString = "%".BddConstant::ISLEAVEPROPERTYONVCALENDAR.":1%";
|
||||
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects as calendarobject WHERE
|
||||
calendarobject.calendarid = ? AND
|
||||
calendarobject.calendardata LIKE ? AND
|
||||
calendarobject.calendardata LIKE ? AND
|
||||
calendarobject.deleted_at IS NULL;";
|
||||
$leaves = $this->execSQLNoJsonReturn($sql,[$calendarId,$isLeaveConditionAsString,$dateCondition]);
|
||||
return $leaves;
|
||||
}
|
||||
public function getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year){
|
||||
$dateOfMonths = DateHelpers::getDatesOfMonth($year,$month);
|
||||
$devisListPerThanatoPerDate = [];
|
||||
$thanato = $this->getThanatoById($thanatoId);
|
||||
$thanatoName = $thanato["nom"];
|
||||
$thanatoCalendar = $this->getCalendarByThanatoIdNextcloud($thanato["nom"]);
|
||||
$thanatoCalendarId = $thanatoCalendar["id"];
|
||||
foreach($dateOfMonths as $currentDate){
|
||||
$currentDateFormatted = $currentDate->format('Y-m-d');
|
||||
$isPublicHoliday = DateHelpers::isPublicHoliday($currentDateFormatted);
|
||||
$devisList = $this->getThanatoDevisListByDate($thanatoId,$currentDate);
|
||||
$thereIsNoDevisForCurrentDate = empty($devisList);
|
||||
if($thereIsNoDevisForCurrentDate){
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["hasDevis"] = false;
|
||||
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
|
||||
if(empty($thanatoLeavesThisDay)){
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
||||
"onLeave" => false,
|
||||
"startTime" => null,
|
||||
"endTime" => null,
|
||||
"thanatoName"=>$thanatoName,
|
||||
"date" => $currentDateFormatted,
|
||||
"totalHours" => 0,
|
||||
"totalWorkedHours" => 8,
|
||||
"isPublicHoliday" => $isPublicHoliday
|
||||
];
|
||||
}
|
||||
else{
|
||||
foreach($thanatoLeavesThisDay as $currentLeave){
|
||||
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
||||
"onLeave" => true,
|
||||
"startTime" => $leaveTime["startTime"],
|
||||
"endTime" => $leaveTime["endTime"],
|
||||
"thanatoName"=>$thanatoName,
|
||||
"date" => $currentDateFormatted,
|
||||
"totalHours" => $leaveTime["totalHours"],
|
||||
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
|
||||
"isPublicHoliday" => $isPublicHoliday
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
foreach($devisList as $devis){
|
||||
$devis = $this->setDevisStartAndEndTime($devis);
|
||||
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
|
||||
$devis = $this->setDevisProduitsList($devis);
|
||||
if (!isset($devisListPerThanatoPerDate[$currentDateFormatted])) {
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted] = [
|
||||
'total_distance' => 0,
|
||||
"devis" => [],
|
||||
"devisId" => [],
|
||||
"hasDevis" => true,
|
||||
"leaves" => []
|
||||
];
|
||||
}
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["devis"][] = $devis;
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["devisId"][] = $devis['id'];
|
||||
}
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"] = [];
|
||||
$thanatoLeavesThisDay = $this->getThanatoLeaveByCalendarAndDate($thanatoCalendarId,$currentDate);
|
||||
foreach($thanatoLeavesThisDay as $currentLeave){
|
||||
$leaveTime = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($currentLeave['calendardata']);
|
||||
$devisListPerThanatoPerDate[$currentDateFormatted]["leaves"][] = [
|
||||
"onLeave" => true,
|
||||
"startTime" => $leaveTime["startTime"],
|
||||
"endTime" => $leaveTime["endTime"],
|
||||
"thanatoName"=>$thanatoName,
|
||||
"date" => $currentDateFormatted,
|
||||
"totalHours" => $leaveTime["totalHours"],
|
||||
"totalWorkedHours" => $leaveTime["totalWorkedHours"],
|
||||
"isPublicHoliday" => $isPublicHoliday
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $devisListPerThanatoPerDate;
|
||||
}
|
||||
|
||||
public function getExportThanatoStatisticData($thanatoId,$month,$year){
|
||||
$devisList = $this->getThanatoDevisPerDateInAMonthYear($thanatoId,$month,$year);
|
||||
return $devisList;
|
||||
}
|
||||
|
||||
public function getProduitsDevisByDevisId($devisId){
|
||||
@ -2169,29 +2316,31 @@ class Bdd {
|
||||
return $produitsList;
|
||||
}
|
||||
|
||||
private function getDevisListGroupedByDateAndThenByThanato(array $devisList){
|
||||
$devisListGroupedByDateAndThenByThanato = [];
|
||||
foreach($devisList as $devis){
|
||||
$devisDate = $devis["date"];
|
||||
$devisThanatoId = $devis["id_thanato"];
|
||||
$devis = $this->setDevisStartAndEndTime($devis);
|
||||
$devis = $this->setDevisIsWeekendOrNotText($devis);
|
||||
$devis = $this->setDevisProduitsList($devis);
|
||||
//set devis articles list into devis data
|
||||
if (!isset($devisListGroupedByDateAndThenByThanato[$devisThanatoId])) {
|
||||
$devisListGroupedByDateAndThenByThanato[$devisThanatoId] = [];
|
||||
private function getDevisListGroupedByDateAndThenByThanato(array $devisListPerDate){
|
||||
$devisListGroupedByThanatoAndThenByDate = [];
|
||||
foreach($devisListPerDate as $date => $devisList){
|
||||
foreach($devisList as $devis){
|
||||
$devisDate = $devis["date"];
|
||||
$devisThanatoId = $devis["id_thanato"];
|
||||
$devis = $this->setDevisStartAndEndTime($devis);
|
||||
$devis = $this->setDevisIsPublicHolidayOrNotText($devis);
|
||||
$devis = $this->setDevisProduitsList($devis);
|
||||
//set devis articles list into devis data
|
||||
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId])) {
|
||||
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId] = [];
|
||||
}
|
||||
if (!isset($devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$devisDate])) {
|
||||
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$devisDate] = [
|
||||
'total_distance' => 0,
|
||||
"devis" => [],
|
||||
"devisId" => []
|
||||
];
|
||||
}
|
||||
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$date]["devis"][] = $devis;
|
||||
$devisListGroupedByThanatoAndThenByDate[$devisThanatoId][$date]["devisId"][] = $devis['id'];
|
||||
}
|
||||
if (!isset($devisListGroupedByDateAndThenByThanato[$devisThanatoId][$devisDate])) {
|
||||
$devisListGroupedByDateAndThenByThanato[$devisThanatoId][$devisDate] = [
|
||||
'total_distance' => 0,
|
||||
"devis" => [],
|
||||
"devisId" => []
|
||||
];
|
||||
}
|
||||
$devisListGroupedByDateAndThenByThanato[$devisThanatoId][$devisDate]["devis"][] = $devis;
|
||||
$devisListGroupedByDateAndThenByThanato[$devisThanatoId][$devisDate]["devisId"][] = $devis['id'];
|
||||
}
|
||||
return $devisListGroupedByDateAndThenByThanato;
|
||||
return $devisListGroupedByThanatoAndThenByDate;
|
||||
}
|
||||
|
||||
private function setDevisProduitsList($devis){
|
||||
@ -2205,10 +2354,9 @@ class Bdd {
|
||||
return $devis;
|
||||
}
|
||||
|
||||
private function setDevisIsWeekendOrNotText($devis){
|
||||
$isWeekend = DateHelpers::isWeekend($devis['date']);
|
||||
$value = $isWeekend ? "Ferie" : "J";
|
||||
$devis["dayType"] = $value;
|
||||
private function setDevisIsPublicHolidayOrNotText($devis){
|
||||
$isPublicHoliday = DateHelpers::isPublicHoliday($devis['date']);
|
||||
$devis["dayType"] = DateHelpers::getPublicHolidayText($isPublicHoliday);
|
||||
return $devis;
|
||||
}
|
||||
|
||||
@ -2217,6 +2365,8 @@ class Bdd {
|
||||
$devisTimeValue = VCalendarHelpers::GetStartAndEndTimeFromVCalendarString($calendarData);
|
||||
$devis["startTime"] = $devisTimeValue["startTime"];
|
||||
$devis["endTime"] = $devisTimeValue["endTime"];
|
||||
$devis["totalHours"] = $devisTimeValue["totalHours"];
|
||||
$devis["totalWorkedHours"] = $devisTimeValue["totalWorkedHours"];
|
||||
return $devis;
|
||||
}
|
||||
|
||||
@ -2306,7 +2456,7 @@ class Bdd {
|
||||
}
|
||||
|
||||
public function getCalendarDataByCalendarObjectUuid(string $calendarObjectUuid){
|
||||
$sql = "SELECT * FROM ".self::CALENDAR_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
||||
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
||||
$calendarObjectList = $this->execSQLNoJsonReturn($sql, [$calendarObjectUuid]);
|
||||
if(!empty($calendarObjectList)){
|
||||
$calendarDataBlob = $calendarObjectList[0]['calendardata'];
|
||||
@ -2331,7 +2481,7 @@ class Bdd {
|
||||
}
|
||||
|
||||
public function getCalendarObjectByUuid(string $calendarObjectUuid){
|
||||
$sql = "SELECT * FROM ".self::CALENDAR_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
||||
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendarobjects WHERE uid = ?;";
|
||||
$calendarObjectList = $this->execSQLNoJsonReturn($sql, [$calendarObjectUuid]);
|
||||
if(!empty($calendarObjectList)){
|
||||
$calendarData = $calendarObjectList[0];
|
||||
@ -2341,7 +2491,7 @@ class Bdd {
|
||||
}
|
||||
|
||||
public function getCalendarById(int $calendarId){
|
||||
$sql = "SELECT * FROM ".self::CALENDAR_TABLE_PREFIX."calendars WHERE id = ?;";
|
||||
$sql = "SELECT * FROM ".self::DEFAULT_TABLE_PREFIX."calendars WHERE id = ?;";
|
||||
$calendarList = $this->execSQLNoJsonReturn($sql, [$calendarId]);
|
||||
if(!empty($calendarList)){
|
||||
$calendarData = $calendarList[0];
|
||||
@ -3550,4 +3700,11 @@ class Bdd {
|
||||
ADD funeral_code VARCHAR(255) DEFAULT NULL;";
|
||||
$this->execSQLNoData($sql,[]);
|
||||
}
|
||||
|
||||
public function updateDevisMention(int $devisId,string $mention){
|
||||
$sql = "UPDATE ".$this->tableprefix."devis as devis
|
||||
SET devis.mentions = ?
|
||||
WHERE devis.id = ?;";
|
||||
$this->execSQLNoData($sql,[$mention,$devisId]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,6 +21,22 @@ class DateHelpers
|
||||
}
|
||||
}
|
||||
|
||||
public static function getPublicHolidayText($isPublicHoliday){
|
||||
return $isPublicHoliday ? "Ferie" : "J";
|
||||
}
|
||||
|
||||
public static function isPublicHoliday(string $dateString): bool
|
||||
{
|
||||
try {
|
||||
$date = new DateTime($dateString);
|
||||
$dayOfWeek = $date->format('N');
|
||||
return $dayOfWeek == 7;
|
||||
} catch (Exception $e) {
|
||||
// Handle invalid date strings
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function GetMonthPlainString($month){
|
||||
$formatter = new IntlDateFormatter(
|
||||
'fr_FR',
|
||||
@ -64,4 +80,56 @@ class DateHelpers
|
||||
return $lastDay;
|
||||
}
|
||||
|
||||
public static function getDatesOfMonth($year, $month) {
|
||||
$dates = [];
|
||||
$daysInMonth = self::getDaysCountInAMonthAndYear($month, $year);
|
||||
|
||||
for ($day = 1; $day <= $daysInMonth; $day++) {
|
||||
$dateString = sprintf("%04d-%02d-%02d", $year, $month, $day);
|
||||
$dates[] = new DateTime($dateString);
|
||||
}
|
||||
|
||||
return $dates;
|
||||
}
|
||||
|
||||
public static function getDaysCountInAMonthAndYear($month,$year){
|
||||
return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
|
||||
}
|
||||
|
||||
public static function getHoursBetweenTwoDatetime($datetimeEnd,$datetimeStart){
|
||||
if($datetimeEnd == null || $datetimeStart == null){
|
||||
return 0;
|
||||
}
|
||||
$interval = $datetimeStart->diff($datetimeEnd);
|
||||
$hours = $interval->h + ($interval->days * 24) + ($interval->i / 60);
|
||||
return $hours;
|
||||
}
|
||||
|
||||
public static function GetWorkingHoursBetweenDatetimeEndAndDatetimeStart(Datetime|null $datetimeEnd,Datetime|null $datetimeStart){
|
||||
if($datetimeEnd == null || $datetimeStart == null){
|
||||
return 0;
|
||||
}
|
||||
$workingStartAM = new DateTime($datetimeStart->format('Y-m-d') . ' 08:30',$datetimeStart->getTimezone());
|
||||
$workingEndAM = new DateTime($datetimeStart->format('Y-m-d') . ' 12:30',$datetimeStart->getTimezone());
|
||||
$workingStartPM = new DateTime($datetimeStart->format('Y-m-d') . ' 13:30',$datetimeStart->getTimezone());
|
||||
$workingEndPM = new DateTime($datetimeStart->format('Y-m-d') . ' 17:30',$datetimeStart->getTimezone());
|
||||
$totalHours = 0;
|
||||
if ($datetimeStart->format('N') < 7) {
|
||||
$dayStartAM = max($datetimeStart, $workingStartAM);
|
||||
$dayEndAM = min($datetimeEnd, $workingEndAM);
|
||||
if ($dayStartAM < $dayEndAM) {
|
||||
$totalHours += ($dayEndAM->getTimestamp() - $dayStartAM->getTimestamp()) / 3600;
|
||||
}
|
||||
$dayStartPM = max($datetimeStart, $workingStartPM);
|
||||
$dayEndPM = min($datetimeEnd, $workingEndPM);
|
||||
if ($dayStartPM < $dayEndPM) {
|
||||
$totalHours += ($dayEndPM->getTimestamp() - $dayStartPM->getTimestamp()) / 3600;
|
||||
}
|
||||
}
|
||||
else{
|
||||
$totalHours = ($datetimeEnd->getTimestamp() - $datetimeStart->getTimestamp()) / 3600;
|
||||
}
|
||||
return $totalHours;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -39,6 +39,8 @@ class VCalendarHelpers
|
||||
public static function GetStartAndEndTimeFromVCalendarString(string $vCalendarString){
|
||||
$startTimeValue = "";
|
||||
$endTimeValue = "";
|
||||
$totalHours = 0;
|
||||
$totalWorkedHours = 0;
|
||||
if($vCalendarString != ""){
|
||||
$dateStart = self::GetDateStartOrDateEndFromVCalendarString("DTSTART", $vCalendarString);
|
||||
if($dateStart != null){
|
||||
@ -48,10 +50,14 @@ class VCalendarHelpers
|
||||
if($dateEnd != null){
|
||||
$endTimeValue = $dateEnd->format("H") . "h";
|
||||
}
|
||||
$totalHours = DateHelpers::getHoursBetweenTwoDatetime($dateEnd,$dateStart);
|
||||
$totalWorkedHours = DateHelpers::GetWorkingHoursBetweenDatetimeEndAndDatetimeStart($dateEnd,$dateStart);
|
||||
}
|
||||
return [
|
||||
"startTime" => $startTimeValue,
|
||||
"endTime" => $endTimeValue
|
||||
"endTime" => $endTimeValue,
|
||||
"totalHours" => $totalHours,
|
||||
"totalWorkedHours" => $totalWorkedHours
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@ -26,9 +26,12 @@ declare(strict_types=1);
|
||||
|
||||
namespace OCA\Gestion\Service;
|
||||
|
||||
use OCA\Gestion\Constants\BddConstant;
|
||||
use OCA\Gestion\Db\Bdd;
|
||||
use OCA\Gestion\Helpers\DateHelpers;
|
||||
use OCA\Gestion\Helpers\FileExportHelpers;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use OCP\Files\IRootFolder;
|
||||
|
||||
class ExportThanatoStatisticService {
|
||||
/** @var Bdd */
|
||||
@ -37,27 +40,57 @@ class ExportThanatoStatisticService {
|
||||
/** @var LoggerInterface */
|
||||
private $logger;
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
public function __construct(
|
||||
Bdd $gestionBdd,
|
||||
LoggerInterface $logger) {
|
||||
LoggerInterface $logger,
|
||||
IRootFolder $rootFolder) {
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->logger = $logger;
|
||||
$this->gestionBdd = $gestionBdd;
|
||||
}
|
||||
|
||||
public function getFilename(array $thanatoIds){
|
||||
$thanatoList = $this->gestionBdd->getThanatoByIds($thanatoIds);
|
||||
$currentYear = date('Y');
|
||||
$currentMonth = date('m');
|
||||
$filename = "$currentYear-$currentMonth-";
|
||||
foreach($thanatoList as $thanato){
|
||||
$filename .= $thanato['thanato_nom'] . '-' . $thanato['thanato_prenom'] . '--';
|
||||
}
|
||||
$filename = rtrim($filename, '-');
|
||||
private function getFilename($thanatoName,$thanatoLastName,$month,$year){
|
||||
$filename = "$year-$month-";
|
||||
$filename .= $thanatoName . '-' . $thanatoLastName;
|
||||
$filename = str_replace(' ','-', $filename);
|
||||
$filename = str_replace(' ','-', $filename);
|
||||
return $filename;
|
||||
}
|
||||
|
||||
private function exportThanatoStatistic($thanatoId,$month,$year,$idNextcloud){
|
||||
$thanato = $this->gestionBdd->getThanatoById($thanatoId);
|
||||
if($thanato == null){
|
||||
return null;
|
||||
}
|
||||
$exportData = $this->gestionBdd->getExportThanatoStatisticData($thanatoId,$month,$year);
|
||||
$defaultConfig = json_decode($this->gestionBdd->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD));
|
||||
$racineFolder = html_entity_decode($defaultConfig[0]->path).'/';
|
||||
$thanatoFolder = $racineFolder.'STATISTIQUES/THANATOS/';
|
||||
$fileHeader = $this->getExportThanatoFileHeader();
|
||||
$fileContent = $this->populateExportDataIntoFileContent($exportData,$fileHeader);
|
||||
$filename = $this->getFilename($thanato["nom"],$thanato["prenom"],$month,$year);
|
||||
$fileNamePath = $thanatoFolder."STAT-THANATO-" . $filename . '.csv';
|
||||
$storage = $this->rootFolder->getUserFolder($idNextcloud);
|
||||
$storage->newFile($fileNamePath);
|
||||
$file = $storage->get($fileNamePath);
|
||||
$file->putContent($fileContent);
|
||||
return $fileNamePath;
|
||||
}
|
||||
|
||||
public function exportThanatosListStatistic(array $thanatoIds,$month,$year,$idNextcloud){
|
||||
$filenames = [];
|
||||
foreach($thanatoIds as $thanatoId){
|
||||
$filename = $this->exportThanatoStatistic($thanatoId,$month,$year,$idNextcloud);
|
||||
if($filename != null){
|
||||
$filenames[] = $filename;
|
||||
}
|
||||
}
|
||||
return $filenames;
|
||||
}
|
||||
|
||||
public function getExportThanatoFileHeader(): string{
|
||||
$fileHeader =
|
||||
'FACTURE'.';'.
|
||||
@ -67,32 +100,97 @@ class ExportThanatoStatisticService {
|
||||
'HEURE DE FIN'.';'.
|
||||
'SOINS'.';'.
|
||||
'JOUR/FERIE'.';'.
|
||||
'CONGE/PAS CONGE'.';'.
|
||||
'NOM ET PRENOM'.';'.
|
||||
'LIEU'.';'.
|
||||
'POMPES FUNEBRES'.';'.
|
||||
'ADRESSE'.';'.
|
||||
'DISTANCE TOTALE KM'.';'.
|
||||
'HEURES TOTAL DE SOIN'.';'.
|
||||
'HEURES TOTAL DE CONGE'.';'.
|
||||
'HEURES TOTAL DE TRAVAIL'.';'.
|
||||
"\n";
|
||||
return $fileHeader;
|
||||
}
|
||||
|
||||
private function populateNoDevisDataInADay(string $fileContent,$leave){
|
||||
$startTimeValue = "";
|
||||
$endTimeValue = "";
|
||||
$leaveValue = "Pas conge";
|
||||
if($leave["onLeave"]){
|
||||
$startTimeValue = $leave["startTime"];
|
||||
$endTimeValue = $leave["endTime"];
|
||||
$leaveValue = "Conge";
|
||||
}
|
||||
$fileContent = $fileContent.
|
||||
''.';'.
|
||||
FileExportHelpers::FormatTextForExport($leave['thanatoName']).';'.
|
||||
$leave['date'].';'.
|
||||
$startTimeValue.';'.
|
||||
$endTimeValue.';'.
|
||||
''.';'.
|
||||
DateHelpers::getPublicHolidayText($leave['isPublicHoliday']).';'.
|
||||
$leaveValue.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'."\n";
|
||||
return $fileContent;
|
||||
}
|
||||
|
||||
public function populateExportDataIntoFileContent(array $exportData,string $fileContent): string{
|
||||
foreach($exportData as $thanatoId => $devisPerThanato){
|
||||
foreach($devisPerThanato as $devisDate => $devisData){
|
||||
foreach($exportData as $devisDate => $devisData){
|
||||
$distanceTotal = 0;
|
||||
$totalDevisHours = 0;
|
||||
$totalWorkedHours = 8;
|
||||
$totalLeaveHours = 0;
|
||||
$hasDevisInTheCurrentDate = $devisData['hasDevis'];
|
||||
if($hasDevisInTheCurrentDate === false){
|
||||
$leaves = $devisData["leaves"];
|
||||
foreach($leaves as $leave){
|
||||
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
|
||||
if($leave["onLeave"]){
|
||||
$totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
|
||||
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
|
||||
}
|
||||
}
|
||||
$totalWorkedHours -= $totalLeaveHours;
|
||||
}
|
||||
else{
|
||||
$distanceTotal = $this->gestionBdd->getDistanceTotalByDevisIdList($devisData["devisId"]);
|
||||
$devisList = $devisData["devis"];
|
||||
$leaves = $devisData["leaves"];
|
||||
if(!empty($devisList)){
|
||||
foreach($devisList as $devis){
|
||||
$fileContent = $this->populateDevisDataIntoThanatoExportFileContent($fileContent,$devis);
|
||||
$totalDevisHours += $devis["totalHours"];
|
||||
}
|
||||
$fileContent = $this->populateDistanceTotalIntoThanatoExportFileContent($fileContent,$distanceTotal);
|
||||
}
|
||||
foreach($leaves as $leave){
|
||||
$fileContent = $this->populateNoDevisDataInADay($fileContent,$leave);
|
||||
if($leave["onLeave"]){
|
||||
$totalLeaveHoursInsideWorkingHours = $leave["totalWorkedHours"];
|
||||
$totalLeaveHours += $totalLeaveHoursInsideWorkingHours;
|
||||
}
|
||||
}
|
||||
$totalWorkedHours -= $totalLeaveHours;
|
||||
}
|
||||
$fileContent = $this->populateLastRecapForTheLine(
|
||||
$fileContent,
|
||||
$distanceTotal,
|
||||
$totalDevisHours,
|
||||
$totalWorkedHours,
|
||||
$totalLeaveHours
|
||||
);
|
||||
}
|
||||
return $fileContent;
|
||||
}
|
||||
|
||||
private function populateDistanceTotalIntoThanatoExportFileContent(string $fileContent,$distance){
|
||||
private function populateLastRecapForTheLine(string $fileContent,$distance,$totalDevisHours,$totalWorkedHours,$totalLeaveHours){
|
||||
$fileContent = $fileContent.
|
||||
''.';'.
|
||||
''.';'.
|
||||
@ -105,7 +203,11 @@ class ExportThanatoStatisticService {
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
utf8_decode(html_entity_decode("$distance"))."\n";
|
||||
''.';'.
|
||||
"$distance".';'.
|
||||
"$totalDevisHours".';'.
|
||||
"$totalLeaveHours".';'.
|
||||
"$totalWorkedHours".';'."\n";
|
||||
return $fileContent;
|
||||
}
|
||||
|
||||
@ -129,10 +231,15 @@ class ExportThanatoStatisticService {
|
||||
FileExportHelpers::FormatTextForExport($devis["endTime"]).';'.
|
||||
FileExportHelpers::FormatTextForExport($produitAsString).';'.
|
||||
FileExportHelpers::FormatTextForExport($devis["dayType"]).';'.
|
||||
FileExportHelpers::FormatTextForExport('Pas conge').';'.
|
||||
FileExportHelpers::FormatTextForExport($devis["nom_defunt"]).';'.
|
||||
FileExportHelpers::FormatTextForExport($devis["nom_lieu"] ?? "").';'.
|
||||
FileExportHelpers::FormatTextForExport($devis["nom_client"] ?? "").';'.
|
||||
FileExportHelpers::FormatTextForExport($devis["client_adresse"] ?? "")."\n";
|
||||
FileExportHelpers::FormatTextForExport($devis["client_adresse"] ?? "").
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'.
|
||||
''.';'."\n";
|
||||
|
||||
return $fileContent;
|
||||
|
||||
|
||||
@ -26,6 +26,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace OCA\Gestion\Service;
|
||||
|
||||
use OCA\Gestion\Constants\DevisMentionConstant;
|
||||
use OCA\Gestion\Db\Bdd;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use OCA\Gestion\Helpers\VCalendarHelpers;
|
||||
@ -49,6 +50,15 @@ class GestionService {
|
||||
$this->talkService = $talkService;
|
||||
}
|
||||
|
||||
private function GetIsLeaveFromVCalendarString(string $vCalendarString): bool{
|
||||
$isLeave = false;
|
||||
$isLeaveValue = VCalendarHelpers::GetValueFromKeyInVCalendarString("ISLEAVE", $vCalendarString);
|
||||
if($isLeaveValue == "1"){
|
||||
$isLeave = true;
|
||||
}
|
||||
return $isLeave;
|
||||
}
|
||||
|
||||
private function GetCalendarSummaryFromVCalendarString(string $vCalendarString): string
|
||||
{
|
||||
$summaryValue = "Nom du défunt";
|
||||
@ -181,9 +191,20 @@ class GestionService {
|
||||
}
|
||||
|
||||
public function HandleUpdatedCalendarObject(string $vCalendarString){
|
||||
$isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString);
|
||||
if($isCalendarForLeave){
|
||||
//from devis calendar to leave calendar
|
||||
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
|
||||
$devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid);
|
||||
if($devis != null){
|
||||
$this->gestionBdd->updateDevisMentionToCanceled($devis['id']);
|
||||
}
|
||||
return;
|
||||
}
|
||||
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
|
||||
$devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid);
|
||||
if($devis != null){
|
||||
$this->gestionBdd->updateDevisMention($devis['id'],DevisMentionConstant::NEW);
|
||||
$isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString);
|
||||
if($isDevisAlreadyUpdated){
|
||||
return true;
|
||||
@ -193,10 +214,18 @@ class GestionService {
|
||||
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName);
|
||||
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName);
|
||||
}
|
||||
else{
|
||||
//update from calendar leave to calendar devis
|
||||
$this->HandleCreatedCalendarObject($vCalendarString);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function HandleCreatedCalendarObject(string $vCalendarString){
|
||||
$isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString);
|
||||
if($isCalendarForLeave){
|
||||
return;
|
||||
}
|
||||
$calendarSummary = $this->GetCalendarSummaryFromVCalendarString($vCalendarString);
|
||||
$clientId = $this->GetClientIdFromVCalendarString($vCalendarString);
|
||||
$locationId = $this->GetLocationIdFromVCalendarString($vCalendarString);
|
||||
|
||||
@ -423,41 +423,6 @@ $('body').on('click', '#about', function () {
|
||||
modal.style.display = "block";
|
||||
});
|
||||
|
||||
$('body').on('click', '#exportThanatoData', function () {
|
||||
var oTable = $('.tabledt').dataTable();
|
||||
var rowcollection = oTable.$(".thanatoToExport:checked", {"page": "all"});
|
||||
let thanatoIdsToExport = [];
|
||||
rowcollection.each(function(index,elem){
|
||||
var checkbox_value = $(elem).val();
|
||||
thanatoIdsToExport.push(checkbox_value);
|
||||
});
|
||||
|
||||
if(thanatoIdsToExport.length == 0){
|
||||
showError(t('gestion', "Veuillez choisir au moins une ligne de client"));
|
||||
return;
|
||||
}
|
||||
|
||||
let exportThanatoPayload = {
|
||||
thanatoIdsToExport: thanatoIdsToExport
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: baseUrl + '/thanatopracteur/exportThanatoStatistic',
|
||||
type: 'POST',
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify(exportThanatoPayload)
|
||||
}).done(function (response) {
|
||||
let datatable = new DataTable('.tabledt');
|
||||
Thanatopracteur.loadThanatoDT(datatable);
|
||||
showSuccess(t('gestion', "Sauvegardé dans : " + response));
|
||||
}).fail(function (response, code) {
|
||||
showError(t('gestion', "Erreur dans l'export de statistique thanato"));
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
$('body').on('click', '#exportClientStat', function () {
|
||||
var oTable = $('.tabledt').dataTable();
|
||||
var rowcollection = oTable.$(".clientToExport:checked", {"page": "all"});
|
||||
@ -509,7 +474,7 @@ $('body').on('click', '#exportFactureToPdf', function () {
|
||||
showSuccess('Sauvegardé dans' + fileName);
|
||||
});
|
||||
}).fail(function (response, code) {
|
||||
showError(t('gestion', "Please create a new hypodermique"));
|
||||
showError(t('gestion', "Erreur dans la facturation des devis"));
|
||||
});
|
||||
|
||||
|
||||
|
||||
74
gestion/src/js/listener/thanatoListener.js
Normal file
74
gestion/src/js/listener/thanatoListener.js
Normal file
@ -0,0 +1,74 @@
|
||||
import {showError, showSuccess } from "@nextcloud/dialogs";
|
||||
import {baseUrl} from "../modules/mainFunction.mjs";
|
||||
import { Devis } from "../objects/devis.mjs";
|
||||
import DataTable from "datatables.net";
|
||||
import { Thanatopracteur } from "../objects/thanatopracteur.mjs";
|
||||
window.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
const today = new Date();
|
||||
const currentMonth = today.getMonth() + 1;
|
||||
const currentYear = today.getFullYear();
|
||||
this.document.getElementById("monthSelect").value = currentMonth;
|
||||
this.document.getElementById("yearSelect").value = currentYear;
|
||||
});
|
||||
|
||||
$('body').on('click', '#showExportThanatoModal', function () {
|
||||
var oTable = $('.tabledt').dataTable();
|
||||
var rowcollection = oTable.$(".thanatoToExport:checked", {"page": "all"});
|
||||
let thanatoIdsToExport = [];
|
||||
rowcollection.each(function(index,elem){
|
||||
var checkbox_value = $(elem).val();
|
||||
thanatoIdsToExport.push(checkbox_value);
|
||||
});
|
||||
|
||||
if(thanatoIdsToExport.length == 0){
|
||||
showError(t('gestion', "Veuillez choisir au moins une ligne de thanato"));
|
||||
return;
|
||||
}
|
||||
$('#exportThanatoModal').show();
|
||||
});
|
||||
|
||||
$('body').on('click', '#closeExportThanatoModal', function () {
|
||||
$('#exportThanatoModal').hide();
|
||||
});
|
||||
|
||||
$('body').on('click', '#exportThanatosStat', function () {
|
||||
var oTable = $('.tabledt').dataTable();
|
||||
var rowcollection = oTable.$(".thanatoToExport:checked", {"page": "all"});
|
||||
let thanatoIdsToExport = [];
|
||||
rowcollection.each(function(index,elem){
|
||||
var checkbox_value = $(elem).val();
|
||||
thanatoIdsToExport.push(checkbox_value);
|
||||
});
|
||||
|
||||
if(thanatoIdsToExport.length == 0){
|
||||
$('#exportThanatoModal').hide();
|
||||
showError(t('gestion', "Veuillez choisir au moins une ligne de thanato"));
|
||||
return;
|
||||
}
|
||||
|
||||
var today = new Date();
|
||||
var monthValue = document.getElementById("monthSelect").value ?? today.getMonth() + 1;
|
||||
var yearValue = document.getElementById("yearSelect").value ?? today.getFullYear();
|
||||
let exportThanatoPayload = {
|
||||
thanatoIdsToExport: thanatoIdsToExport,
|
||||
month: monthValue,
|
||||
year: yearValue
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: baseUrl + '/thanatopracteur/exportThanatoStatistic',
|
||||
type: 'POST',
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify(exportThanatoPayload)
|
||||
}).done(function (response) {
|
||||
$('#exportThanatoModal').hide();
|
||||
let datatable = new DataTable('.tabledt');
|
||||
Thanatopracteur.loadThanatoDT(datatable);
|
||||
response.forEach(fileName => {
|
||||
showSuccess('Sauvegardé dans' + fileName);
|
||||
});
|
||||
}).fail(function (response, code) {
|
||||
showError(t('gestion', "Erreur dans l'export de statistique thanato"));
|
||||
});
|
||||
});
|
||||
@ -6,6 +6,7 @@ import "./listener/main_listener";
|
||||
import DataTable from "datatables.net";
|
||||
import { globalConfiguration, optionDatatable } from "./modules/mainFunction.mjs";
|
||||
import { Thanatopracteur } from "./objects/thanatopracteur.mjs";
|
||||
import "./listener/thanatoListener";
|
||||
|
||||
window.addEventListener("DOMContentLoaded", function () {
|
||||
globalConfiguration();
|
||||
|
||||
@ -14,7 +14,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-secondary" id="exportThanatoData">Export thanato stat</button>
|
||||
<button id="showExportThanatoModal" class="btn btn-secondary" data-toggle="modal" data-target="#exportThanatoModal">
|
||||
Export stat
|
||||
</button>
|
||||
</div>
|
||||
<hr>
|
||||
<table id="client" class="display tabledt" style="font-size:11px;">
|
||||
@ -31,4 +33,44 @@
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="modal" id="exportThanatoModal" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Choisir le mois et l'année pour l'export</h5>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<select class="form-select w-auto" name="month" id="monthSelect">
|
||||
<option value="1">Janvier</option>
|
||||
<option value="2">Février</option>
|
||||
<option value="3">Mars</option>
|
||||
<option value="4">Avril</option>
|
||||
<option value="5">Mai</option>
|
||||
<option value="6">Juin</option>
|
||||
<option value="7">Juillet</option>
|
||||
<option value="8">Août</option>
|
||||
<option value="9">Septembre</option>
|
||||
<option value="10">Octobre</option>
|
||||
<option value="11">Novembre</option>
|
||||
<option value="12">Décembre</option>
|
||||
</select>
|
||||
<select class="form-select w-auto" name="year" id="yearSelect">
|
||||
<?php
|
||||
$currentYear = date('Y');
|
||||
for ($year = $currentYear; $year >= $currentYear - 10; $year--) {
|
||||
echo '<option value="' . $year . '"';
|
||||
echo '>' . $year . '</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button id="closeExportThanatoModal" type="button" class="btn btn-secondary">Annuler</button>
|
||||
<button id="exportThanatosStat" type="button" class="btn btn-primary">Exporter</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Loading…
x
Reference in New Issue
Block a user