Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'

This commit is contained in:
2025-10-30 18:08:48 +01:00
parent bf38ec22c9
commit 1ca2d4f03b
4 changed files with 153 additions and 33 deletions

View File

@@ -0,0 +1,6 @@
kind: UX
body: Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
time: 2025-10-30T18:09:19.373907522+01:00
custom:
Issue: ""
SchemaChange: No schema change

View File

@@ -127,6 +127,20 @@ duration:
few {# minutes} few {# minutes}
other {# minutes} other {# minutes}
} }
hour: >-
{h, plural,
=0 {Aucune durée}
one {# heure}
few {# heures}
other {# heures}
}
day: >-
{d, plural,
=0 {Aucune durée}
one {# jour}
few {# jours}
other {# jours}
}
filter_order: filter_order:
by_date: by_date:

View File

@@ -67,37 +67,117 @@ const store = useStore();
const $toast = useToast(); const $toast = useToast();
const timeSpentChoices = [ const timeSpentValues = [
{ text: "1 minute", value: 60 }, 60,
{ text: "2 minutes", value: 120 }, 120,
{ text: "3 minutes", value: 180 }, 180,
{ text: "4 minutes", value: 240 }, 240,
{ text: "5 minutes", value: 300 }, 300,
{ text: "10 minutes", value: 600 }, 600,
{ text: "15 minutes", value: 900 }, 900,
{ text: "20 minutes", value: 1200 }, 1200,
{ text: "25 minutes", value: 1500 }, 1500,
{ text: "30 minutes", value: 1800 }, 1800,
{ text: "45 minutes", value: 2700 }, 2700,
{ text: "1 hour", value: 3600 }, 3600,
{ text: "1 hour 15 minutes", value: 4500 }, 4500,
{ text: "1 hour 30 minutes", value: 5400 }, 5400,
{ text: "1 hour 45 minutes", value: 6300 }, 6300,
{ text: "2 hours", value: 7200 }, 7200,
{ text: "2 hours 30 minutes", value: 9000 }, 9000,
{ text: "3 hours", value: 10800 }, 10800,
{ text: "3 hours 30 minutes", value: 12600 }, 12600,
{ text: "4 hours", value: 14400 }, 14400,
{ text: "4 hours 30 minutes", value: 16200 }, 16200,
{ text: "5 hours", value: 18000 }, 18000,
{ text: "5 hours 30 minutes", value: 19800 }, 19800,
{ text: "6 hours", value: 21600 }, 21600,
{ text: "6 hours 30 minutes", value: 23400 }, 23400,
{ text: "7 hours", value: 25200 }, 25200,
{ text: "7 hours 30 minutes", value: 27000 }, 27000,
{ text: "8 hours", value: 28800 }, 28800,
43200,
57600,
72000,
86400,
100800,
115200,
129600,
144000, // goes from 1 minute to 40 hours
]; ];
const formatDuration = (seconds, locale) => {
const currentLocale = locale || navigator.language || "fr";
const totalHours = Math.floor(seconds / 3600);
const remainingMinutes = Math.floor((seconds % 3600) / 60);
if (totalHours >= 8) {
const days = Math.floor(totalHours / 8);
const remainingHours = totalHours % 8;
const parts = [];
if (days > 0) {
parts.push(
new Intl.NumberFormat(currentLocale, {
style: "unit",
unit: "day",
unitDisplay: "long",
}).format(days),
);
}
if (remainingHours > 0) {
parts.push(
new Intl.NumberFormat(currentLocale, {
style: "unit",
unit: "hour",
unitDisplay: "long",
}).format(remainingHours),
);
}
return parts.join(" ");
}
// For less than 8 hours, use hour and minute format
const parts = [];
if (totalHours > 0) {
parts.push(
new Intl.NumberFormat(currentLocale, {
style: "unit",
unit: "hour",
unitDisplay: "long",
}).format(totalHours),
);
}
if (remainingMinutes > 0) {
parts.push(
new Intl.NumberFormat(currentLocale, {
style: "unit",
unit: "minute",
unitDisplay: "long",
}).format(remainingMinutes),
);
}
console.log(parts);
console.log(parts.join(" "));
return parts.join(" ");
};
const timeSpentChoices = computed(() => {
const locale = "fr";
return timeSpentValues.map((value) => ({
text: formatDuration(value, locale),
value: parseInt(value),
}));
});
const startDate = computed({ const startDate = computed({
get() { get() {
return props.evaluation.startDate; return props.evaluation.startDate;
@@ -194,7 +274,7 @@ function updateWarningInterval(value) {
} }
function updateTimeSpent(value) { function updateTimeSpent(value) {
timeSpent.value = value; timeSpent.value = parseInt(value);
} }
function updateComment(value) { function updateComment(value) {

View File

@@ -216,9 +216,29 @@
{% if e.timeSpent is not null and e.timeSpent > 0 %} {% if e.timeSpent is not null and e.timeSpent > 0 %}
<li> <li>
{% set minutes = (e.timeSpent / 60) %} {% set totalHours = (e.timeSpent / 3600)|round(0, 'floor') %}
<span {% set totalMinutes = ((e.timeSpent % 3600) / 60)|round(0, 'floor') %}
class="item-key">{{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }}</span> {{ 'duration.minute'|trans({ '{m}' : minutes }) }}
<span class="item-key">{{ 'accompanying_course_work.timeSpent'|trans ~ ' : ' }}</span>
{% if totalHours >= 8 %}
{% set days = (totalHours / 8)|round(0, 'floor') %}
{% set remainingHours = totalHours % 8 %}
{% if days > 0 %}
{{ 'duration.day'|trans({ '{d}' : days }) }}
{% endif %}
{% if remainingHours > 0 %}
{{ 'duration.hour'|trans({ '{h}' : remainingHours }) }}
{% endif %}
{% else %}
{% if totalHours > 0 %}
{{ 'duration.hour'|trans({ '{h}' : totalHours }) }}
{% endif %}
{% if totalMinutes > 0 %}
{{ 'duration.minute'|trans({ '{m}' : totalMinutes }) }}
{% endif %}
{% endif %}
</li> </li>
{% elseif displayContent is defined and displayContent == 'long' %} {% elseif displayContent is defined and displayContent == 'long' %}
<li> <li>