From bab06796f106246445ca12e43a4f9411b08eb66b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 19 Aug 2021 10:14:10 +0200 Subject: [PATCH] improve editing of evaluation - an evaluation type can be repeated multiple times on the same action; - in vue, evaluation are listed by key, not id, - adding an evaluation make appears directly in "edit" mode; - ... --- .../src/Entity/AsideActivity.php | 2 +- .../Resources/public/chill/js/date.js | 143 ++++++++++++------ .../vuejs/AccompanyingCourseWorkEdit/App.vue | 8 +- .../components/AddEvaluation.vue | 23 +-- .../components/FormEvaluation.vue | 10 +- .../vuejs/AccompanyingCourseWorkEdit/store.js | 31 ++-- 6 files changed, 134 insertions(+), 83 deletions(-) diff --git a/src/Bundle/ChillAsideActivityBundle/src/Entity/AsideActivity.php b/src/Bundle/ChillAsideActivityBundle/src/Entity/AsideActivity.php index 40d8aa6cd..92478d787 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Entity/AsideActivity.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Entity/AsideActivity.php @@ -13,7 +13,7 @@ use Symfony\Component\Validator\Constraints as Assert; * @ORM\Entity * @ORM\Table(schema="chill_asideactivity") */ -final class AsideActivity implements TrackUpdateInterface, TrackCreationInterface +class AsideActivity implements TrackUpdateInterface, TrackCreationInterface { /** * @ORM\Id diff --git a/src/Bundle/ChillMainBundle/Resources/public/chill/js/date.js b/src/Bundle/ChillMainBundle/Resources/public/chill/js/date.js index ec66da770..e31132b67 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/chill/js/date.js +++ b/src/Bundle/ChillMainBundle/Resources/public/chill/js/date.js @@ -13,15 +13,15 @@ * */ const dateToISO = (date) => { - if (null === date) { - return null; - } + if (null === date) { + return null; + } - return [ - date.getFullYear(), - (date.getMonth() + 1).toString().padStart(2, '0'), - date.getDate().toString().padStart(2, '0') - ].join('-'); + return [ + date.getFullYear(), + (date.getMonth() + 1).toString().padStart(2, '0'), + date.getDate().toString().padStart(2, '0') + ].join('-'); }; /** @@ -30,10 +30,10 @@ const dateToISO = (date) => { * **Experimental** */ const ISOToDate = (str) => { - let - [year, month, day] = str.split('-'); - - return new Date(year, month-1, day); + let + [year, month, day] = str.split('-'); + + return new Date(year, month-1, day); } /** @@ -41,53 +41,100 @@ const ISOToDate = (str) => { * */ const ISOToDatetime = (str) => { - if (null === str) { - return null; - } + if (null === str) { + return null; + } - let - [cal, times] = str.split('T'), - [year, month, date] = cal.split('-'), - [time, timezone] = times.split(times.charAt(8)), - [hours, minutes, seconds] = time.split(':') - ; + let + [cal, times] = str.split('T'), + [year, month, date] = cal.split('-'), + [time, timezone] = times.split(times.charAt(8)), + [hours, minutes, seconds] = time.split(':') + ; - return new Date(year, month-1, date, hours, minutes, seconds); + return new Date(year, month-1, date, hours, minutes, seconds); } /** * Convert a date to ISO8601, valid for usage in api - * + * */ const datetimeToISO = (date) => { - let cal, time, offset; - cal = [ - date.getFullYear(), - (date.getMonth() + 1).toString().padStart(2, '0'), - date.getDate().toString().padStart(2, '0') - ].join('-'); - - time = [ - date.getHours().toString().padStart(2, '0'), - date.getMinutes().toString().padStart(2, '0'), - date.getSeconds().toString().padStart(2, '0') - ].join(':'); + let cal, time, offset; + cal = [ + date.getFullYear(), + (date.getMonth() + 1).toString().padStart(2, '0'), + date.getDate().toString().padStart(2, '0') + ].join('-'); - offset = [ - date.getTimezoneOffset() <= 0 ? '+' : '-', - Math.abs(Math.floor(date.getTimezoneOffset() / 60)).toString().padStart(2, '0'), - ':', - Math.abs(date.getTimezoneOffset() % 60).toString().padStart(2, '0'), - ].join(''); - - let x = cal + 'T' + time + offset; + time = [ + date.getHours().toString().padStart(2, '0'), + date.getMinutes().toString().padStart(2, '0'), + date.getSeconds().toString().padStart(2, '0') + ].join(':'); - return x; + offset = [ + date.getTimezoneOffset() <= 0 ? '+' : '-', + Math.abs(Math.floor(date.getTimezoneOffset() / 60)).toString().padStart(2, '0'), + ':', + Math.abs(date.getTimezoneOffset() % 60).toString().padStart(2, '0'), + ].join(''); + + let x = cal + 'T' + time + offset; + + return x; }; +const intervalDaysToISO = (days) => { + if (null === days) { + return null; + } + + return `PD${days}`; +} + +const intervalISOToDays = (str) => { + if (null === str) { + return null + } + + let days = 0; + let isDate = true; + for (let i = 0; i < str.length; i = i + 1) { + // we do not take time into account + if (!isDate) { + continue; + } + switch (str.charAt(i)) { + case 'P': + isDate = true; + break; + case 'Y': + i = i+1; + days = days + Number.parseInt(str.charAt(i)) * 365; + break; + case 'M': + i = i+1; + days = days + Number.parseInt(str.charAt(i)) * 30; + break; + case 'D': + i = i+1; + days = days + Number.parseInt(str.charAt(i)); + break; + case 'T': + isDate = false; + break; + } + } + + return days; +} + export { - dateToISO, - ISOToDate, - ISOToDatetime, - datetimeToISO + dateToISO, + ISOToDate, + ISOToDatetime, + datetimeToISO, + intervalISOToDays, + intervalDaysToISO, }; diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue index 500e84e76..651943724 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/App.vue @@ -96,7 +96,7 @@

{{ $t('available_evaluations_text') }}