Compare commits

...

3 Commits

Author SHA1 Message Date
gitea-actions
995e7de2cc chore: bump version to v0.0.70
All checks were successful
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Successful in 1m23s
2026-03-18 09:38:23 +00:00
2408ccab67 fix : on ne pèse plus automatiquement + fix message de création réception
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
2026-03-18 10:38:11 +01:00
82af4d4c1e feat : ajout de bâtiment dans les fixtures et seed + organisation du menu 2026-03-17 17:49:58 +01:00
13 changed files with 72 additions and 78 deletions

67
.idea/workspace.xml generated
View File

@@ -4,13 +4,17 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="7c107abe-5995-4428-8429-b146aaca8386" name="Changes" comment="fix : on ne bloque plus le poids max d'une pesée"> <list default="true" id="7c107abe-5995-4428-8429-b146aaca8386" name="Changes" comment="feat : ajout de bâtiment dans les fixtures et seed + organisation du menu">
<change beforePath="$PROJECT_DIR$/.idea/dataSources.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/db-forest-config.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/db-forest-config.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/AGENTS.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/config/reference.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/reference.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/config/reference.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/reference.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Command/SeedCommand.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Command/SeedCommand.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/frontend/components/reception/reception-weight.vue" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/components/reception/reception-weight.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/components/shipment/shipment-loading.vue" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/components/shipment/shipment-loading.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/components/shipment/shipment-weight.vue" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/components/shipment/shipment-weight.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/composables/useWeighing.ts" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/composables/useWeighing.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/i18n/locales/fr.json" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/i18n/locales/fr.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/layouts/default.vue" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/layouts/default.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/services/reception.ts" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/services/reception.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/frontend/services/shipment.ts" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/services/shipment.ts" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -234,7 +238,7 @@
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;, &quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;RunOnceActivity.typescript.service.memoryLimit.init&quot;: &quot;true&quot;, &quot;RunOnceActivity.typescript.service.memoryLimit.init&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;develop&quot;, &quot;git-widget-placeholder&quot;: &quot;develop&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/sroy/Documents/test/Ferme/frontend/components/commun&quot;, &quot;last_opened_file_path&quot;: &quot;//wsl.localhost/Ubuntu-24.04/home/m-tristan/workspace/Ferme&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
@@ -258,8 +262,8 @@
}</component> }</component>
<component name="RecentsManager"> <component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS"> <key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/frontend/components/commun" />
<recent name="\\wsl.localhost\Ubuntu-24.04\home\m-tristan\workspace\Ferme" /> <recent name="\\wsl.localhost\Ubuntu-24.04\home\m-tristan\workspace\Ferme" />
<recent name="$PROJECT_DIR$/frontend/components/commun" />
<recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\pages\shipment" /> <recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\pages\shipment" />
<recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\composables" /> <recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\composables" />
<recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\components\shipment" /> <recent name="\\wsl.localhost\Ubuntu-24.04\home\kevin\Stage\Ferme\frontend\components\shipment" />
@@ -323,23 +327,9 @@
<workItem from="1773050154207" duration="1879000" /> <workItem from="1773050154207" duration="1879000" />
<workItem from="1773212999001" duration="652000" /> <workItem from="1773212999001" duration="652000" />
<workItem from="1773215356754" duration="5754000" /> <workItem from="1773215356754" duration="5754000" />
<workItem from="1773756072697" duration="3129000" /> <workItem from="1773756072697" duration="5450000" />
</task> <workItem from="1773766075191" duration="6202000" />
<task id="LOCAL-00021" summary="ci : ajout du script et de la doc déploiement"> <workItem from="1773824491213" duration="1794000" />
<option name="closed" value="true" />
<created>1769026716634</created>
<option name="number" value="00021" />
<option name="presentableId" value="LOCAL-00021" />
<option name="project" value="LOCAL" />
<updated>1769026716634</updated>
</task>
<task id="LOCAL-00022" summary="fix : correction du path URI pour la création d'un poids dans une réception">
<option name="closed" value="true" />
<created>1769073690382</created>
<option name="number" value="00022" />
<option name="presentableId" value="LOCAL-00022" />
<option name="project" value="LOCAL" />
<updated>1769073690382</updated>
</task> </task>
<task id="LOCAL-00023" summary="feat : Ajout du bundle Monolog pour la gestion des logs"> <task id="LOCAL-00023" summary="feat : Ajout du bundle Monolog pour la gestion des logs">
<option name="closed" value="true" /> <option name="closed" value="true" />
@@ -717,7 +707,23 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1772447581744</updated> <updated>1772447581744</updated>
</task> </task>
<option name="localTasksCounter" value="70" /> <task id="LOCAL-00070" summary="feat : ajout de supplier dans la feed et fixtures">
<option name="closed" value="true" />
<created>1773761787472</created>
<option name="number" value="00070" />
<option name="presentableId" value="LOCAL-00070" />
<option name="project" value="LOCAL" />
<updated>1773761787472</updated>
</task>
<task id="LOCAL-00071" summary="feat : ajout de bâtiment dans les fixtures et seed + organisation du menu">
<option name="closed" value="true" />
<created>1773766207721</created>
<option name="number" value="00071" />
<option name="presentableId" value="LOCAL-00071" />
<option name="project" value="LOCAL" />
<updated>1773766207721</updated>
</task>
<option name="localTasksCounter" value="72" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@@ -767,8 +773,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="feat : mise en place de composant UI pour les select, checkbox, date, text" />
<MESSAGE value="feat : update CHANGELOG.md" />
<MESSAGE value="feat : ajout de commentaire" /> <MESSAGE value="feat : ajout de commentaire" />
<MESSAGE value="fix : correction de l'affichage de l'immatriculation sur une réception en cours + correction css étape 3 d'une réception" /> <MESSAGE value="fix : correction de l'affichage de l'immatriculation sur une réception en cours + correction css étape 3 d'une réception" />
<MESSAGE value="feat : ajout de colonne pour les Supplier, Address et modification du numéro de réception" /> <MESSAGE value="feat : ajout de colonne pour les Supplier, Address et modification du numéro de réception" />
@@ -792,7 +796,9 @@
<MESSAGE value="fix : text" /> <MESSAGE value="fix : text" />
<MESSAGE value="feat : front page admin bovin et changelog" /> <MESSAGE value="feat : front page admin bovin et changelog" />
<MESSAGE value="fix : on ne bloque plus le poids max d'une pesée" /> <MESSAGE value="fix : on ne bloque plus le poids max d'une pesée" />
<option name="LAST_COMMIT_MESSAGE" value="fix : on ne bloque plus le poids max d'une pesée" /> <MESSAGE value="feat : ajout de supplier dans la feed et fixtures" />
<MESSAGE value="feat : ajout de bâtiment dans les fixtures et seed + organisation du menu" />
<option name="LAST_COMMIT_MESSAGE" value="feat : ajout de bâtiment dans les fixtures et seed + organisation du menu" />
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
@@ -811,11 +817,6 @@
<url>file://$PROJECT_DIR$/frontend/services/dto/shipment-data.ts</url> <url>file://$PROJECT_DIR$/frontend/services/dto/shipment-data.ts</url>
<option name="timeStamp" value="43" /> <option name="timeStamp" value="43" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" type="javascript">
<url>file://$PROJECT_DIR$/frontend/layouts/default.vue</url>
<line>72</line>
<option name="timeStamp" value="48" />
</line-breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>
</component> </component>

View File

@@ -1,2 +1,2 @@
parameters: parameters:
app.version: '0.0.69' app.version: '0.0.70'

View File

@@ -5,11 +5,11 @@
<!--@TODO Voir comment faire pour savoir si le pont-bascule et bien connecté + ajouter un icon comme sur la maquette--> <!--@TODO Voir comment faire pour savoir si le pont-bascule et bien connecté + ajouter un icon comme sur la maquette-->
<p class="text-primary-500 uppercase text-2xl text-primary-500 mt-2">Pont-bascule connecté</p> <p class="text-primary-500 uppercase text-2xl text-primary-500 mt-2">Pont-bascule connecté</p>
<div <div
v-if="showLoadingBox" v-if="!displayWeight"
class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[86px]"> class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[86px]">
<UiLoadingDots /> <UiLoadingDots />
</div> </div>
<div v-else-if="displayWeight !== null" class="w-full"> <div v-else class="w-full">
<div <div
class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[25px] text-4xl text-primary-500"> class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[25px] text-4xl text-primary-500">
{{ displayWeight }} kg {{ displayWeight }} kg
@@ -36,7 +36,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {computed, onMounted} from 'vue' import {computed} from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useWeighing } from '~/composables/useWeighing' import { useWeighing } from '~/composables/useWeighing'
import { usePdfPrinter } from '~/composables/usePdfPrinter' import { usePdfPrinter } from '~/composables/usePdfPrinter'
@@ -92,10 +92,4 @@ const printReceipt = async () => {
await router.push('/') await router.push('/')
} }
// Récupère le poids dès l'arrivée sur l'écran
onMounted(() => {
if (displayWeight.value === null) {
fetchWeight()
}
})
</script> </script>

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="flex flex-col items-center gap-[118px]"> <div class="flex flex-col items-center gap-[150px]">
<h1 class="font-bold text-5xl uppercase text-primary-500">Chargement des bovins</h1> <h1 class="font-bold text-5xl uppercase text-primary-500">Chargement des bovins</h1>
<div <div
class="w-full flex flex-col items-center justify-center"> class="w-full flex flex-col items-center justify-center">

View File

@@ -5,13 +5,13 @@
<!--@TODO Voir comment faire pour savoir si le pont-bascule et bien connecté + ajouter un icon comme sur la maquette--> <!--@TODO Voir comment faire pour savoir si le pont-bascule et bien connecté + ajouter un icon comme sur la maquette-->
<p class="text-primary-500 uppercase text-2xl mt-2">Pont-bascule connecté</p> <p class="text-primary-500 uppercase text-2xl mt-2">Pont-bascule connecté</p>
<div <div
v-if="showLoadingBox" v-if="!displayWeight"
class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[86px]"> class="w-full flex flex-col items-center justify-center border border-black h-[90px] mt-12 mb-[86px]">
<UiLoadingDots /> <UiLoadingDots />
</div> </div>
<div v-else-if="displayWeight !== null" class="w-full"> <div v-else class="w-full">
<div <div
class="w-full flex flex-col items-center justify-center border border-primary-500 h-[90px] mt-12 mb-[25px] text-4xl text-primary-500"> class="w-full flex flex-col items-center justify-center border border-primary-500 h-[90px] mt-12 mb-[86px] text-4xl text-primary-500">
{{ displayWeight }} kg {{ displayWeight }} kg
</div> </div>
</div> </div>
@@ -36,7 +36,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted } from 'vue' import { computed } from 'vue'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { useWeighingShipment } from '~/composables/useWeighing' import { useWeighingShipment } from '~/composables/useWeighing'
import { usePdfPrinter } from '~/composables/usePdfPrinter' import { usePdfPrinter } from '~/composables/usePdfPrinter'
@@ -92,10 +92,4 @@ const printReceipt = async () => {
await router.push('/') await router.push('/')
} }
// Récupère le poids dès l'arrivée sur l'écran
onMounted(() => {
if (displayWeight.value === null) {
fetchWeight()
}
})
</script> </script>

View File

@@ -27,9 +27,7 @@ export const useWeighing = ({
const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null) const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null)
const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-') const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-')
const title = computed(() => (mode === 'gross' ? 'Pesée à plein' : 'Pesée à vide')) const title = computed(() => (mode === 'gross' ? 'Pesée à plein' : 'Pesée à vide'))
const showLoadingBox = computed( const showLoadingBox = computed(() => isFetching.value)
() => isFetching.value || (displayWeight.value === null && currentWeightEntry.value === null)
)
const fetchWeight = async () => { const fetchWeight = async () => {
isFetching.value = true isFetching.value = true
@@ -111,9 +109,7 @@ export const useWeighingShipment = ({
const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null) const displayWeight = computed(() => weightData.value?.weight ?? currentWeightEntry.value?.weight ?? null)
const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-') const displayDsd = computed(() => weightData.value?.dsd ?? currentWeightEntry.value?.dsd ?? '-')
const title = computed(() => (modeShipment === 'gross' ? 'Pesée à vide' : 'Pesée à plein')) const title = computed(() => (modeShipment === 'gross' ? 'Pesée à vide' : 'Pesée à plein'))
const showLoadingBox = computed( const showLoadingBox = computed(() => isFetching.value)
() => isFetching.value || (displayWeight.value === null && currentWeightEntry.value === null)
)
const fetchWeight = async () => { const fetchWeight = async () => {
isFetching.value = true isFetching.value = true

View File

@@ -109,9 +109,11 @@
}, },
"success": { "success": {
"reception": { "reception": {
"create": "Réception créée avec succès",
"update": "Réception mise à jour avec succès." "update": "Réception mise à jour avec succès."
}, },
"shipment": { "shipment": {
"create": "Éxpedition créée avec succès",
"update": "Éxpedition mise à jour avec succès." "update": "Éxpedition mise à jour avec succès."
}, },
"supplier": { "supplier": {

View File

@@ -38,6 +38,23 @@
</a> </a>
</NuxtLink> </NuxtLink>
<NuxtLink
v-if="auth.isAdmin"
to="/admin/user/list"
custom
v-slot="{ href, navigate }"
>
<a
:href="href"
@click="navigate"
:class="route.path.startsWith('/admin/user')
? 'opacity-100'
: 'opacity-65 hover:opacity-100 transition'"
>
Utilisateurs
</a>
</NuxtLink>
<NuxtLink <NuxtLink
v-if="auth.isAdmin" v-if="auth.isAdmin"
to="/admin/supplier/supplier-list" to="/admin/supplier/supplier-list"
@@ -72,23 +89,6 @@
</a> </a>
</NuxtLink> </NuxtLink>
<NuxtLink
v-if="auth.isAdmin"
to="/admin/user/list"
custom
v-slot="{ href, navigate }"
>
<a
:href="href"
@click="navigate"
:class="route.path.startsWith('/admin/user')
? 'opacity-100'
: 'opacity-65 hover:opacity-100 transition'"
>
Utilisateurs
</a>
</NuxtLink>
<NuxtLink <NuxtLink
v-if="auth.isAdmin" v-if="auth.isAdmin"
to="/admin/customer/customer-list" to="/admin/customer/customer-list"
@@ -134,7 +134,8 @@
class="inline-flex items-center py-2 -my-2 text-xl leading-none transition hover:opacity-80" class="inline-flex items-center py-2 -my-2 text-xl leading-none transition hover:opacity-80"
aria-haspopup="true" aria-haspopup="true"
> >
<span class="capitalize font-bold">{{ userDisplayName }}</span> <Icon name="mdi:account-circle-outline" class="self-center" size="36"/>
<span class="capitalize font-bold ml-4">{{ userDisplayName }}</span>
<span <span
class="ml-[6px] inline-flex items-center font-bold transition-transform group-hover:rotate-180 group-focus-within:rotate-180"> class="ml-[6px] inline-flex items-center font-bold transition-transform group-hover:rotate-180 group-focus-within:rotate-180">
<Icon name="mdi:chevron-down" size="20"/> <Icon name="mdi:chevron-down" size="20"/>

View File

@@ -16,6 +16,7 @@
<select <select
id="user-select" id="user-select"
v-model="selectedUsername" v-model="selectedUsername"
autocomplete="username"
class="mt-2 w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-base text-neutral-900 focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-200" class="mt-2 w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-base text-neutral-900 focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-200"
:disabled="isLoadingUsers" :disabled="isLoadingUsers"
> >

View File

@@ -21,6 +21,7 @@ export async function getReception(id: number) {
export async function createReception(payload: ReceptionPayload = {}) { export async function createReception(payload: ReceptionPayload = {}) {
const api = useApi() const api = useApi()
return api.post<ReceptionData>('receptions', payload, { return api.post<ReceptionData>('receptions', payload, {
toastSuccessKey: 'success.reception.create',
toastErrorKey: 'errors.reception.create' toastErrorKey: 'errors.reception.create'
}) })
} }

View File

@@ -18,8 +18,10 @@ export async function getShipment(id: number) {
} }
export async function createShipment(payload: ShipmentPayload = {}) { export async function createShipment(payload: ShipmentPayload = {}) {
console.log('test')
const api = useApi() const api = useApi()
return api.post<ShipmentData>('shipments', payload, { return api.post<ShipmentData>('shipments', payload, {
toastSuccessKey: 'success.shipment.create',
toastErrorKey: 'errors.shipment.create' toastErrorKey: 'errors.shipment.create'
}) })
} }

View File

@@ -216,6 +216,7 @@ class SeedCommand extends Command
['label' => 'Bâtiment 1', 'code' => 'B1'], ['label' => 'Bâtiment 1', 'code' => 'B1'],
['label' => 'Bâtiment 2', 'code' => 'B2'], ['label' => 'Bâtiment 2', 'code' => 'B2'],
['label' => 'Bâtiment 3', 'code' => 'B3'], ['label' => 'Bâtiment 3', 'code' => 'B3'],
['label' => 'Zone tampon', 'code' => 'ZT'],
]; ];
foreach ($buildings as $buildingData) { foreach ($buildings as $buildingData) {
$this->upsertByCode(Building::class, $buildingData['code'], static function (Building $entity) use ($buildingData) { $this->upsertByCode(Building::class, $buildingData['code'], static function (Building $entity) use ($buildingData) {

View File

@@ -54,6 +54,7 @@ class ReferenceFixtures extends Fixture
['label' => 'Bâtiment 1', 'code' => 'B1'], ['label' => 'Bâtiment 1', 'code' => 'B1'],
['label' => 'Bâtiment 2', 'code' => 'B2'], ['label' => 'Bâtiment 2', 'code' => 'B2'],
['label' => 'Bâtiment 3', 'code' => 'B3'], ['label' => 'Bâtiment 3', 'code' => 'B3'],
['label' => 'Zone tampon', 'code' => 'ZT'],
]; ];
foreach ($buildings as $buildingData) { foreach ($buildings as $buildingData) {
$building = new Building() $building = new Building()