diff --git a/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml b/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml index 4756ff4f7..263a57049 100644 --- a/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml +++ b/src/Bundle/ChillMainBundle/translations/messages+intl-icu.fr.yaml @@ -45,3 +45,12 @@ workflow: few {# workflows} other {# workflows} } + +duration: + minute: >- + {m, plural, + =0 {Aucune durée} + one {# minute} + few {# minutes} + other {# minutes} + } diff --git a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php index 078ef0c3c..8780f7d17 100644 --- a/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php +++ b/src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php @@ -160,6 +160,14 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU */ private ?DateInterval $warningInterval = null; + /** + * @ORM\Column(type="integer", nullable=true) + * @Serializer\Groups({"read", "docgen:read"}) + * @Serializer\Groups({"write"}) + * @Serializer\Groups({"accompanying_period_work_evaluation:create"}) + */ + private ?int $timeSpent = null; + public function __construct() { $this->documents = new ArrayCollection(); @@ -265,6 +273,11 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU return $this->warningInterval; } + public function getTimeSpent(): ?int + { + return $this->timeSpent; + } + public function removeDocument(AccompanyingPeriodWorkEvaluationDocument $document): self { $this->documents->removeElement($document); @@ -322,6 +335,13 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU return $this; } + public function setTimeSpent(?int $timeSpent): self + { + $this->timeSpent = $timeSpent; + + return $this; + } + public function setEvaluation(?Evaluation $evaluation): AccompanyingPeriodWorkEvaluation { if ( diff --git a/src/Bundle/ChillPersonBundle/Export/Export/ListEvaluation.php b/src/Bundle/ChillPersonBundle/Export/Export/ListEvaluation.php index e7d1e5dfd..010618733 100644 --- a/src/Bundle/ChillPersonBundle/Export/Export/ListEvaluation.php +++ b/src/Bundle/ChillPersonBundle/Export/Export/ListEvaluation.php @@ -47,6 +47,7 @@ class ListEvaluation implements ListInterface, GroupedExportInterface 'endDate', 'maxDate', 'warningInterval', + 'timeSpent', 'acpw_id', 'acpw_startDate', 'acpw_endDate', @@ -295,6 +296,9 @@ class ListEvaluation implements ListInterface, GroupedExportInterface $qb->addSelect(sprintf('workeval.%s AS %s', $field, $field)); } + // add the time spent field + $qb->addSelect('(workeval.timeSpent / 60) AS timeSpent'); + // those with identity foreach (['createdBy', 'updatedBy'] as $field) { $qb->addSelect(sprintf('IDENTITY(workeval.%s) AS %s', $field, $field)); diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue index d6e42f743..7dcb595a3 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue @@ -49,6 +49,20 @@ +
+ +
+ +
+
+
@@ -191,6 +205,8 @@ const i18n = { evaluation_choose_a_template: "Choisir un modèle", evaluation_add_a_document: "Ajouter un document", evaluation_add: "Ajouter une évaluation", + evaluation_time_spent: "Temps de rédaction", + select_time_spent: "Indiquez le temps de rédaction", Documents: "Documents", document_add: "Générer ou téléverser un document", document_upload: "Téléverser un document", @@ -224,6 +240,22 @@ export default { maxPostSize: 15000000, required: false, }, + timeSpentChoices: [ + { text: '1 minute', value: 60 }, { text: '2 minutes', value: 120 }, + { text: '3 minutes', value: 180 }, { text: '4 minutes', value: 240 }, + { text: '5 minutes', value: 300 }, { text: '10 minutes', value: 600 }, + { text: '15 minutes', value: 900 },{ text: '20 minutes', value: 1200 }, + { text: '25 minutes', value: 1500 }, { text: '30 minutes', value: 1800 }, + { text: '45 minutes', value: 2700 },{ text: '1 hour', value: 3600 }, + { text: '1 hour 15 minutes', value: 4500 }, { text: '1 hour 30 minutes', value: 5400 }, + { text: '1 hour 45 minutes', value: 6300 }, { text: '2 hours', value: 7200 }, + { text: '2 hours 30 minutes', value: 9000 }, { text: '3 hours', value: 10800 }, + { text: '3 hours 30 minutes', value: 12600 },{ text: '4 hours', value: 14400 }, + { text: '4 hours 30 minutes', value: 16200 },{ text: '5 hours', value: 18000 }, + { text: '5 hours 30 minutes', value: 19800 },{ text: '6 hours', value: 21600 }, + { text: '6 hours 30 minutes', value: 23400 },{ text: '7 hours', value: 25200 }, + { text: '7 hours 30 minutes', value: 27000 },{ text: '8 hours', value: 28800 }, + ] } }, computed: { @@ -265,6 +297,10 @@ export default { get() { return this.evaluation.warningInterval; }, set(v) { this.$store.commit('setEvaluationWarningInterval', { key: this.evaluation.key, days: v }); } }, + timeSpent: { + get() { return this.evaluation.timeSpent }, + set(v) { this.$store.commit('setEvaluationTimeSpent', { key: this.evaluation.key, time: v}) } + }, comment: { get() { return this.evaluation.comment; }, set(v) { this.$store.commit('setEvaluationComment', { key: this.evaluation.key, comment: v }); } diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js index d9f317b4c..e075e65bc 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js @@ -116,6 +116,7 @@ const store = createStore({ endDate: e.endDate === null || e.endDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.endDate)) }, maxDate: e.maxDate === null || e.maxDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.maxDate)) }, warningInterval: intervalDaysToISO(e.warningInterval), + timeSpent: e.timeSpent, comment: e.comment, documents: e.documents }; @@ -138,6 +139,7 @@ const store = createStore({ endDate: e.endDate !== null ? dateToISO(new Date(e.endDate.datetime)) : null, maxDate: e.maxDate !== null ? dateToISO(new Date(e.maxDate.datetime)) : null, warningInterval: e.warningInterval !== null ? intervalISOToDays(e.warningInterval) : null, + timeSpent: e.timeSpent !== null ? e.timeSpent : null, documents: e.documents.map((d, docIndex) => { return Object.assign(d, { key: docIndex @@ -258,6 +260,7 @@ const store = createStore({ endDate: null, maxDate: null, warningInterval: null, + timeSpent: null, comment: "", editEvaluation: true, workflows_availables: state.work.workflows_availables_evaluation, @@ -286,6 +289,10 @@ const store = createStore({ state.evaluationsPicked.find(e => e.key === key) .warningInterval = days; }, + setEvaluationTimeSpent(state, {key, time}) { + state.evaluationsPicked.find(e => e.key === key) + .timeSpent = time; + }, setEvaluationComment(state, {key, comment}) { state.evaluationsPicked.find(e => e.key === key) .comment = comment; @@ -482,7 +489,7 @@ const store = createStore({ ; commit('setIsPosting', true); - console.log('payload', payload); + console.log('the social action', payload); return makeFetch('PUT', url, payload) .then(data => { diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/_objectifs_results_evaluations.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/_objectifs_results_evaluations.html.twig index 0dd0cc84a..f4198a5c7 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/_objectifs_results_evaluations.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingCourseWork/_objectifs_results_evaluations.html.twig @@ -118,6 +118,18 @@ {% endif %} {% endif %} + + {% if e.timeSpent is not null and e.timeSpent > 0 %} +
  • + {% set minutes = (e.timeSpent / 60) %} + {{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }} {{ 'duration.minute'|trans({ '{m}' : minutes }) }} +
  • + {% elseif displayContent is defined and displayContent == 'long' %} +
  • + {{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }} + {{ 'Not given'|trans }} +
  • + {% endif %} @@ -143,7 +155,7 @@ {% else %} {{ 'No document found'|trans }} {% endif %} - + {% endif %} diff --git a/src/Bundle/ChillPersonBundle/migrations/Version20230210104424.php b/src/Bundle/ChillPersonBundle/migrations/Version20230210104424.php new file mode 100644 index 000000000..ec802a993 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/migrations/Version20230210104424.php @@ -0,0 +1,26 @@ +addSql('ALTER TABLE chill_person_accompanying_period_work_evaluation ADD timeSpent INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE chill_person_accompanying_period_work_evaluation DROP timeSpent'); + } +} diff --git a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml index 808ce5257..090f35c1c 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.fr.yml @@ -908,6 +908,7 @@ accompanying_course_work: remove: Supprimer une action d'accompagnement social_evaluation: Évaluation private_comment: Commentaire privé + timeSpent: Temps de rédaction # @@ -1139,6 +1140,7 @@ export: updatedAt: Date de modification createdBy: Créé par updatedBy: Modifié par + timeSpent: Temps de rédaction (minutes) acpw: List of accompanying period works: Liste des actions List description: Génère une liste des actions d'accompagnement, filtrée sur différents paramètres.