Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tunnel gaspillage alimentaire : renommer 'gaspillage alimentaire' en 'déchets alimentaires' #4648

Merged
merged 7 commits into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions 2024-frontend/src/components/SourceChart.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup>
import { computed, ref } from "vue"
import { formatNumber, getPercentage } from "@/utils"
import Constants from "@/constants.js"

const props = defineProps(["measurement"])

Expand All @@ -25,7 +26,11 @@ const measurementGraphValues = computed(() => {
props.measurement.unservedTotalMass,
props.measurement.leftoversTotalMass,
]),
x: JSON.stringify(["Excédents de préparation", "Denrées non servies", "Reste-assiette"]),
x: JSON.stringify([
Constants.WasteMeasurement.preparation.title,
Constants.WasteMeasurement.unserved.title,
Constants.WasteMeasurement.leftovers.title,
]),
}
})

Expand Down Expand Up @@ -69,15 +74,15 @@ const displayOption = ref("chart")
<div v-else-if="displayOption === 'text'">
<ul>
<li>
Excédents de préparation : {{ formatNumber(measurement.preparationTotalMass) }} kg, soit
{{ formatNumber(measurementPercentageValues.preparation) }} %
{{ Constants.WasteMeasurement.preparation.title }} : {{ formatNumber(measurement.preparationTotalMass) }} kg,
soit {{ formatNumber(measurementPercentageValues.preparation) }} %
</li>
<li>
Denrées présentées mais non servies : {{ formatNumber(measurement.unservedTotalMass) }} kg, soit
{{ Constants.WasteMeasurement.unserved.title }} : {{ formatNumber(measurement.unservedTotalMass) }} kg, soit
{{ formatNumber(measurementPercentageValues.unserved) }} %
</li>
<li>
Reste-assiette : {{ formatNumber(measurement.leftoversTotalMass) }} kg, soit
{{ Constants.WasteMeasurement.leftovers.title }} : {{ formatNumber(measurement.leftoversTotalMass) }} kg, soit
{{ formatNumber(measurementPercentageValues.leftovers) }} %
</li>
</ul>
Expand Down
37 changes: 19 additions & 18 deletions 2024-frontend/src/components/WasteMeasurementDetail.vue
Original file line number Diff line number Diff line change
@@ -1,73 +1,74 @@
<script setup>
import { formatNumber } from "@/utils"
import Constants from "@/constants.js"

const props = defineProps(["measurement"])

const detailedFields = [
{
key: "totalMass",
label: "Masse totale de gaspillage relevée sur la période de mesure",
label: Constants.WasteMeasurement.totalMass.title,
},
{
key: "daysInPeriod",
label: "Période de mesure de mon gaspillage alimentaire",
label: Constants.WasteMeasurement.daysInPeriod.title,
unit: "jours",
},
{
label: "Nombre de couverts sur la période",
unit: "couverts",
key: "mealCount",
label: Constants.WasteMeasurement.mealCount.title,
unit: "couverts",
},
{
key: "totalYearlyWasteEstimation",
label: "Masse totale de gaspillage sur l'année",
label: "Masse totale de déchets alimentaires sur l'année",
unit: "kg",
tooltip:
"Calculé en prenant le gaspillage par repas pour la période, multiplié par le nombre de couverts par année pour l'établissement",
"Calculé en prenant les déchets alimentaires par repas pour la période, multiplié par le nombre de couverts par année pour l'établissement",
},
{
heading: "Excédents de préparation",
heading: Constants.WasteMeasurement.preparation.title,
},
{
label: "Gaspillage total",
label: "Total",
key: "preparationTotalMass",
},
{
label: "Gaspillage de denrées comestibles",
label: "Denrées comestibles",
key: "preparationEdibleMass",
},
{
label: "Gaspillage de denrées non comestibles",
label: "Denrées non comestibles",
key: "preparationInedibleMass",
},
{
heading: "Denrées présentées aux convives mais non servies",
heading: Constants.WasteMeasurement.unserved.title,
},
{
label: "Gaspillage total",
label: "Total",
key: "unservedTotalMass",
},
{
label: "Gaspillage de denrées comestibles",
label: "Denrées comestibles",
key: "unservedEdibleMass",
},
{
label: "Gaspillage de denrées non comestibles",
label: "Denrées non comestibles",
key: "unservedInedibleMass",
},
{
heading: "Reste assiette",
heading: Constants.WasteMeasurement.leftovers.title,
},
{
label: "Gaspillage total",
label: "Total",
key: "leftoversTotalMass",
},
{
label: "Gaspillage de denrées comestibles",
label: "Denrées comestibles",
key: "leftoversEdibleMass",
},
{
label: "Gaspillage de denrées non comestibles",
label: "Denrées non comestibles",
key: "leftoversInedibleMass",
},
]
Expand Down
2 changes: 1 addition & 1 deletion 2024-frontend/src/components/WasteMeasurementSummary.vue
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const activeAccordion = ref("")
</div>
<div v-else>
<DsfrAlert>
Triez votre gaspillage alimentaire par source pour mieux comprendre comment agir.
Triez vos déchets alimentaires par source pour mieux comprendre comment agir.
</DsfrAlert>
</div>
</div>
Expand Down
20 changes: 20 additions & 0 deletions 2024-frontend/src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,24 @@ export default Object.freeze({
"Vous ne connaissez pas les données par cantine satellite, que par livreur de repas. Vous connaissez les labels et les familles de produits de vos achats",
},
],
WasteMeasurement: {
Copy link
Member Author

@raphodn raphodn Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

j'ai commencé à basculer certains textes réutilisés souvent dans constants.js

daysInPeriod: {
title: "Période de mesure de mes déchets alimentaires",
},
mealCount: {
title: "Nombre de couverts sur la période",
},
totalMass: {
title: "Masse totale des déchets alimentaires relevée sur la période de mesure",
},
preparation: {
title: "Excédents de préparation dont stock",
},
unserved: {
title: "Denrées présentées aux convives mais non servies",
},
leftovers: {
title: "Restes assiettes",
},
},
})
4 changes: 2 additions & 2 deletions 2024-frontend/src/router/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const routes = [
component: WasteMeasurementTunnel,
props: (route) => ({ ...route.query, ...route.params }),
meta: {
title: "Évaluation gaspillage alimentaire",
title: "Évaluation déchets alimentaires",
authenticationRequired: true,
fullscreen: true,
},
Expand All @@ -31,7 +31,7 @@ const routes = [
component: WasteMeasurements,
props: (route) => ({ ...route.params }),
meta: {
title: "Gaspillage alimentaire",
title: "Déchets alimentaires",
authenticationRequired: true,
breadcrumbs: [
{ to: { name: "ManagementPage" }, title: "Mon tableau de bord" },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup>
import { onMounted, reactive, watch, computed, inject, nextTick } from "vue"
import Constants from "@/constants.js"
import { useVuelidate } from "@vuelidate/core"
import { formatError } from "@/utils.js"
import HelpText from "./HelpText.vue"
Expand All @@ -15,8 +16,8 @@ const sources = {
sortedKey: "preparationIsSorted",
edibleKey: "preparationEdibleMass",
inedibleKey: "preparationInedibleMass",
title: "Excédents de préparation",
primaryLabel: "Masse de gaspillage pour les excédents de préparation",
title: Constants.WasteMeasurement.preparation.title,
primaryLabel: "Masse de déchets alimentaires pour les excédents de préparation (en kg)",
description:
"Par exemple, si vous avez jeté des épluchures, des parures ou si vous avez des ingrédients excédentaires que vous ne réutiliserez pas, il s’agit d’excédents de préparation",
edibleHelp:
Expand All @@ -27,8 +28,8 @@ const sources = {
sortedKey: "unservedIsSorted",
edibleKey: "unservedEdibleMass",
inedibleKey: "unservedInedibleMass",
title: "Denrées présentées aux convives mais non servies",
primaryLabel: "Masse de gaspillage pour les denrées présentées aux convives mais non servies",
title: Constants.WasteMeasurement.unserved.title,
primaryLabel: "Masse de déchets alimentaires pour les denrées présentées aux convives mais non servies (en kg)",
description:
"Par exemple, si vous présentez en vitrine un nombre excédentaire de salades, de parts de tarte aux pommes et que ces denrées supplémentaires ne sont ni consommées ni valorisées, il s’agit d’excédents présentés aux convives et non servis",
edibleHelp:
Expand All @@ -39,8 +40,8 @@ const sources = {
sortedKey: "leftoversIsSorted",
edibleKey: "leftoversEdibleMass",
inedibleKey: "leftoversInedibleMass",
title: "Reste assiette",
primaryLabel: "Masse de gaspillage pour le reste assiette",
title: Constants.WasteMeasurement.leftovers.title,
primaryLabel: "Masse de déchets alimentaires pour le reste assiette (en kg)",
description:
"Il s’agit de l’ensemble des restes alimentaires des plateaux repas /assiettes incluant les os, noyaux et épluchures",
edibleHelp:
Expand All @@ -64,7 +65,7 @@ const sumCheck = () => {
return payload.edibleKey + payload.inedibleKey === payload.totalKey
}
const combination = helpers.withMessage(
"La somme de denrées comestibles et non-comestibles devrait être égale au total",
"La somme de denrées comestibles et non comestibles devrait être égale au total",
sumCheck
)

Expand Down Expand Up @@ -120,7 +121,7 @@ onMounted(() => {
v-model.number="payload.totalKey"
type="number"
:label="source.primaryLabel"
hint="En kg (optionnel)"
hint="Optionnel"
label-visible
class="fr-mb-2w"
:error-message="formatError(v$.totalKey)"
Expand All @@ -138,7 +139,7 @@ onMounted(() => {
<div :class="leftHandQuestionsClass">
<DsfrBooleanRadio
v-model="payload.sortedKey"
legend="Avez-vous trié entre comestible et non-comestible&nbsp;?"
legend="Avez-vous trié entre comestible et non comestible&nbsp;?"
hint="Optionnel"
name="sortedKey"
class="fr-mb-2w"
Expand All @@ -165,17 +166,17 @@ onMounted(() => {
<DsfrInputGroup
v-model.number="payload.edibleKey"
type="number"
label="Total du gaspillage de denrées comestibles"
hint="En kg (optionnel)"
label="Masse des déchets alimentaires comestibles (assimilable à du gaspillage alimentaire) (en kg)"
hint="Optionnel"
label-visible
class="fr-mb-2w"
:error-message="formatError(v$.edibleKey)"
/>
<DsfrInputGroup
v-model.number="payload.inedibleKey"
type="number"
label="Total du gaspillage de denrées non comestibles"
hint="En kg (optionnel)"
label="Masse des déchets alimentaires non comestibles (en kg)"
hint="Optionnel"
label-visible
class="fr-mb-2w"
:error-message="formatError(v$.inedibleKey)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { onMounted, reactive, watch, inject, computed } from "vue"
import { useVuelidate } from "@vuelidate/core"
import { formatError } from "@/utils.js"
import HelpText from "./HelpText.vue"
import Constants from "@/constants.js"

import { helpers } from "@vuelidate/validators"
import { useValidators } from "@/validators.js"
Expand Down Expand Up @@ -84,7 +85,7 @@ onMounted(() => {
<div class="fr-grid-row fr-grid-row--middle">
<div class="fr-col-12 fr-col-md-6">
<fieldset class="fr-px-0 fr-pt-0 fr-mx-0">
<legend class="fr-text--lg fr-mb-1w fr-px-0">Période de mesure de mon gaspillage alimentaire</legend>
<legend class="fr-text--lg fr-mb-1w fr-px-0">{{ Constants.WasteMeasurement.daysInPeriod.title }}</legend>
<div class="fr-col-md-7">
<DsfrInputGroup
v-model="payload.periodStartDate"
Expand Down Expand Up @@ -124,7 +125,7 @@ onMounted(() => {
<DsfrInputGroup
v-model.number="payload.mealCount"
type="number"
label="Nombre de couverts sur la période"
:label="Constants.WasteMeasurement.mealCount.title"
:hint="`${daysInPeriod || '?'} jours`"
label-visible
:error-message="formatError(v$.mealCount)"
Expand Down Expand Up @@ -162,7 +163,7 @@ onMounted(() => {
<DsfrInputGroup
v-model.number="payload.mealCount"
type="number"
label="Nombre de couverts sur la période"
:label="Constants.WasteMeasurement.mealCount.title"
:hint="`${daysInPeriod || '?'} jours`"
label-visible
:error-message="formatError(v$.mealCount)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { onMounted, reactive, watch, inject } from "vue"
import { useVuelidate } from "@vuelidate/core"
import { formatError } from "@/utils.js"
import Constants from "@/constants.js"
import HelpText from "./HelpText.vue"
import { useValidators } from "@/validators.js"
const { required, decimal, minValue } = useValidators()
Expand Down Expand Up @@ -39,18 +40,18 @@ onMounted(() => {
<DsfrInputGroup
v-model.number="payload.totalMass"
type="number"
label="Masse totale de gaspillage relevée sur la période de mesure"
:label="Constants.WasteMeasurement.totalMass.title"
hint="en kg"
label-visible
class="fr-mb-2w"
:error-message="formatError(v$.totalMass)"
/>
</div>
<div class="fr-col-sm-6">
<HelpText question="Dois-je compter les os et les épluchures ?">
<HelpText>
<p class="fr-mb-0">
Inutile à ce stade de différencier les denrées comestibles et non comestibles. Si vous l’avez fait, vous
pourrez saisir les données détaillées aux étapes suivantes.
Les déchets alimentaires incluent une fraction comestible (assimilable à du gaspillage alimentaire) et une
fraction non comestible (os, épluchures, arêtes).
</p>
</HelpText>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ onMounted(() => {
<div class="fr-col-12 fr-col-sm-6">
<DsfrBooleanRadio
v-model="payload.isSortedBySource"
legend="Avez-vous trié votre gaspillage en fonction de sa source ?"
legend="Avez-vous trié vos déchets en fonction de leur source ?"
name="isSortedBySource"
class="fr-mb-2w"
:error-message="formatError(v$.isSortedBySource)"
Expand All @@ -47,7 +47,7 @@ onMounted(() => {
<div class="fr-col-sm-6">
<HelpText>
<p class="fr-mb-0">
Cela signifie procéder à des pesées séparées en fonction de la source de gaspillage : restes assiettes,
Cela signifie procéder à des pesées séparées en fonction de la source des déchets : restes assiettes,
excédents présentés aux convives et non servis, et excédents de préparation.
</p>
</HelpText>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,31 @@ const firstSteps = [
},
{
urlSlug: "total",
title: "Masse totale de gaspillage",
title: "Masse totale des déchets alimentaires",
component: markRaw(TotalWaste),
},
{
urlSlug: "distinction",
title: "Distinction du gaspillage en fonction de la source",
title: "Distinction des déchets alimentaires en fonction de la source",
component: markRaw(WasteDistinction),
},
]
const breakdownSteps = [
{
urlSlug: "preparation",
title: "Gaspillage lié aux excédents de préparation",
title: "Déchets alimentaires liés aux excédents de préparation",
component: markRaw(BreakdownBySource),
componentData: { source: "preparation" },
},
{
urlSlug: "non-servies",
title: "Gaspillage lié aux denrées présentées aux convives mais non servies",
title: "Déchets alimentaires liés aux denrées présentées aux convives mais non servies",
component: markRaw(BreakdownBySource),
componentData: { source: "unserved" },
},
{
urlSlug: "reste-assiette",
title: "Gaspillage lié au reste assiette",
title: "Déchets alimentaires liés aux restes assiettes",
component: markRaw(BreakdownBySource),
componentData: { source: "leftovers" },
},
Expand Down
Loading
Loading