mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 13:54:23 +00:00
Merge branch 'issue714_eval_time_spent' into 'master'
Feature: Evaluation add a time spent field See merge request Chill-Projet/chill-bundles!490
This commit is contained in:
commit
e159bde6b1
@ -45,3 +45,12 @@ workflow:
|
|||||||
few {# workflows}
|
few {# workflows}
|
||||||
other {# workflows}
|
other {# workflows}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
duration:
|
||||||
|
minute: >-
|
||||||
|
{m, plural,
|
||||||
|
=0 {Aucune durée}
|
||||||
|
one {# minute}
|
||||||
|
few {# minutes}
|
||||||
|
other {# minutes}
|
||||||
|
}
|
||||||
|
@ -160,6 +160,14 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU
|
|||||||
*/
|
*/
|
||||||
private ?DateInterval $warningInterval = null;
|
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()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->documents = new ArrayCollection();
|
$this->documents = new ArrayCollection();
|
||||||
@ -265,6 +273,11 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU
|
|||||||
return $this->warningInterval;
|
return $this->warningInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTimeSpent(): ?int
|
||||||
|
{
|
||||||
|
return $this->timeSpent;
|
||||||
|
}
|
||||||
|
|
||||||
public function removeDocument(AccompanyingPeriodWorkEvaluationDocument $document): self
|
public function removeDocument(AccompanyingPeriodWorkEvaluationDocument $document): self
|
||||||
{
|
{
|
||||||
$this->documents->removeElement($document);
|
$this->documents->removeElement($document);
|
||||||
@ -322,6 +335,13 @@ class AccompanyingPeriodWorkEvaluation implements TrackCreationInterface, TrackU
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setTimeSpent(?int $timeSpent): self
|
||||||
|
{
|
||||||
|
$this->timeSpent = $timeSpent;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function setEvaluation(?Evaluation $evaluation): AccompanyingPeriodWorkEvaluation
|
public function setEvaluation(?Evaluation $evaluation): AccompanyingPeriodWorkEvaluation
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
|
@ -47,6 +47,7 @@ class ListEvaluation implements ListInterface, GroupedExportInterface
|
|||||||
'endDate',
|
'endDate',
|
||||||
'maxDate',
|
'maxDate',
|
||||||
'warningInterval',
|
'warningInterval',
|
||||||
|
'timeSpent',
|
||||||
'acpw_id',
|
'acpw_id',
|
||||||
'acpw_startDate',
|
'acpw_startDate',
|
||||||
'acpw_endDate',
|
'acpw_endDate',
|
||||||
@ -295,6 +296,9 @@ class ListEvaluation implements ListInterface, GroupedExportInterface
|
|||||||
$qb->addSelect(sprintf('workeval.%s AS %s', $field, $field));
|
$qb->addSelect(sprintf('workeval.%s AS %s', $field, $field));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add the time spent field
|
||||||
|
$qb->addSelect('(workeval.timeSpent / 60) AS timeSpent');
|
||||||
|
|
||||||
// those with identity
|
// those with identity
|
||||||
foreach (['createdBy', 'updatedBy'] as $field) {
|
foreach (['createdBy', 'updatedBy'] as $field) {
|
||||||
$qb->addSelect(sprintf('IDENTITY(workeval.%s) AS %s', $field, $field));
|
$qb->addSelect(sprintf('IDENTITY(workeval.%s) AS %s', $field, $field));
|
||||||
|
@ -49,6 +49,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-4 col-sm-2 col-md-4 col-lg-2 col-form-label">
|
||||||
|
{{ $t('evaluation_time_spent') }}
|
||||||
|
</label>
|
||||||
|
<div class="col-8 col-sm-4 col-md-8 col-lg-4">
|
||||||
|
<select class="form-control form-control-sm" type="time" v-model="timeSpent">
|
||||||
|
<option disabled value="">{{ $t('select_time_spent') }}</option>
|
||||||
|
<option v-for="time in timeSpentChoices" :value="time.value">
|
||||||
|
{{ time.text }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label class="col-sm-4 col-form-label visually-hidden">{{ $t('evaluation_public_comment') }}</label>
|
<label class="col-sm-4 col-form-label visually-hidden">{{ $t('evaluation_public_comment') }}</label>
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
@ -191,6 +205,8 @@ const i18n = {
|
|||||||
evaluation_choose_a_template: "Choisir un modèle",
|
evaluation_choose_a_template: "Choisir un modèle",
|
||||||
evaluation_add_a_document: "Ajouter un document",
|
evaluation_add_a_document: "Ajouter un document",
|
||||||
evaluation_add: "Ajouter une évaluation",
|
evaluation_add: "Ajouter une évaluation",
|
||||||
|
evaluation_time_spent: "Temps de rédaction",
|
||||||
|
select_time_spent: "Indiquez le temps de rédaction",
|
||||||
Documents: "Documents",
|
Documents: "Documents",
|
||||||
document_add: "Générer ou téléverser un document",
|
document_add: "Générer ou téléverser un document",
|
||||||
document_upload: "Téléverser un document",
|
document_upload: "Téléverser un document",
|
||||||
@ -224,6 +240,22 @@ export default {
|
|||||||
maxPostSize: 15000000,
|
maxPostSize: 15000000,
|
||||||
required: false,
|
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: {
|
computed: {
|
||||||
@ -265,6 +297,10 @@ export default {
|
|||||||
get() { return this.evaluation.warningInterval; },
|
get() { return this.evaluation.warningInterval; },
|
||||||
set(v) { this.$store.commit('setEvaluationWarningInterval', { key: this.evaluation.key, days: v }); }
|
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: {
|
comment: {
|
||||||
get() { return this.evaluation.comment; },
|
get() { return this.evaluation.comment; },
|
||||||
set(v) { this.$store.commit('setEvaluationComment', { key: this.evaluation.key, comment: v }); }
|
set(v) { this.$store.commit('setEvaluationComment', { key: this.evaluation.key, comment: v }); }
|
||||||
|
@ -116,6 +116,7 @@ const store = createStore({
|
|||||||
endDate: e.endDate === null || e.endDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.endDate)) },
|
endDate: e.endDate === null || e.endDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.endDate)) },
|
||||||
maxDate: e.maxDate === null || e.maxDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.maxDate)) },
|
maxDate: e.maxDate === null || e.maxDate === '' ? null : { datetime: datetimeToISO(ISOToDate(e.maxDate)) },
|
||||||
warningInterval: intervalDaysToISO(e.warningInterval),
|
warningInterval: intervalDaysToISO(e.warningInterval),
|
||||||
|
timeSpent: e.timeSpent,
|
||||||
comment: e.comment,
|
comment: e.comment,
|
||||||
documents: e.documents
|
documents: e.documents
|
||||||
};
|
};
|
||||||
@ -138,6 +139,7 @@ const store = createStore({
|
|||||||
endDate: e.endDate !== null ? dateToISO(new Date(e.endDate.datetime)) : null,
|
endDate: e.endDate !== null ? dateToISO(new Date(e.endDate.datetime)) : null,
|
||||||
maxDate: e.maxDate !== null ? dateToISO(new Date(e.maxDate.datetime)) : null,
|
maxDate: e.maxDate !== null ? dateToISO(new Date(e.maxDate.datetime)) : null,
|
||||||
warningInterval: e.warningInterval !== null ? intervalISOToDays(e.warningInterval) : null,
|
warningInterval: e.warningInterval !== null ? intervalISOToDays(e.warningInterval) : null,
|
||||||
|
timeSpent: e.timeSpent !== null ? e.timeSpent : null,
|
||||||
documents: e.documents.map((d, docIndex) => {
|
documents: e.documents.map((d, docIndex) => {
|
||||||
return Object.assign(d, {
|
return Object.assign(d, {
|
||||||
key: docIndex
|
key: docIndex
|
||||||
@ -258,6 +260,7 @@ const store = createStore({
|
|||||||
endDate: null,
|
endDate: null,
|
||||||
maxDate: null,
|
maxDate: null,
|
||||||
warningInterval: null,
|
warningInterval: null,
|
||||||
|
timeSpent: null,
|
||||||
comment: "",
|
comment: "",
|
||||||
editEvaluation: true,
|
editEvaluation: true,
|
||||||
workflows_availables: state.work.workflows_availables_evaluation,
|
workflows_availables: state.work.workflows_availables_evaluation,
|
||||||
@ -286,6 +289,10 @@ const store = createStore({
|
|||||||
state.evaluationsPicked.find(e => e.key === key)
|
state.evaluationsPicked.find(e => e.key === key)
|
||||||
.warningInterval = days;
|
.warningInterval = days;
|
||||||
},
|
},
|
||||||
|
setEvaluationTimeSpent(state, {key, time}) {
|
||||||
|
state.evaluationsPicked.find(e => e.key === key)
|
||||||
|
.timeSpent = time;
|
||||||
|
},
|
||||||
setEvaluationComment(state, {key, comment}) {
|
setEvaluationComment(state, {key, comment}) {
|
||||||
state.evaluationsPicked.find(e => e.key === key)
|
state.evaluationsPicked.find(e => e.key === key)
|
||||||
.comment = comment;
|
.comment = comment;
|
||||||
@ -482,7 +489,7 @@ const store = createStore({
|
|||||||
;
|
;
|
||||||
commit('setIsPosting', true);
|
commit('setIsPosting', true);
|
||||||
|
|
||||||
console.log('payload', payload);
|
console.log('the social action', payload);
|
||||||
|
|
||||||
return makeFetch('PUT', url, payload)
|
return makeFetch('PUT', url, payload)
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
@ -118,6 +118,18 @@
|
|||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if e.timeSpent is not null and e.timeSpent > 0 %}
|
||||||
|
<li>
|
||||||
|
{% set minutes = (e.timeSpent / 60) %}
|
||||||
|
<span class="item-key">{{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }}</span> {{ 'duration.minute'|trans({ '{m}' : minutes }) }}
|
||||||
|
</li>
|
||||||
|
{% elseif displayContent is defined and displayContent == 'long' %}
|
||||||
|
<li>
|
||||||
|
<span class="item-key">{{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }}</span>
|
||||||
|
<span class="chill-no-data-statement">{{ 'Not given'|trans }}</span>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Chill\Migrations\Person;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20230210104424 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add a duration field to accompanyingPeriodWorkEvaluation';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->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');
|
||||||
|
}
|
||||||
|
}
|
@ -908,6 +908,7 @@ accompanying_course_work:
|
|||||||
remove: Supprimer une action d'accompagnement
|
remove: Supprimer une action d'accompagnement
|
||||||
social_evaluation: Évaluation
|
social_evaluation: Évaluation
|
||||||
private_comment: Commentaire privé
|
private_comment: Commentaire privé
|
||||||
|
timeSpent: Temps de rédaction
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1139,6 +1140,7 @@ export:
|
|||||||
updatedAt: Date de modification
|
updatedAt: Date de modification
|
||||||
createdBy: Créé par
|
createdBy: Créé par
|
||||||
updatedBy: Modifié par
|
updatedBy: Modifié par
|
||||||
|
timeSpent: Temps de rédaction (minutes)
|
||||||
acpw:
|
acpw:
|
||||||
List of accompanying period works: Liste des actions
|
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.
|
List description: Génère une liste des actions d'accompagnement, filtrée sur différents paramètres.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user