fix(transport) : volume m³ en champ texte décimal + indexation en montant % plafonné à 100 (ERP-170)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m16s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m35s

This commit is contained in:
2026-06-17 14:11:24 +02:00
parent f5a9159ff4
commit 55d2c877bd
4 changed files with 77 additions and 6 deletions
@@ -63,7 +63,15 @@
/>
</div>
<template v-if="showCharteredFields">
<MalioInputNumber v-model="main.indexationRate" :label="t('transport.carriers.form.main.indexationRate')" :required="true" :error="mainErrors.errors.indexationRate" />
<MalioInputAmount
:model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent"
icon-position="right"
:required="true"
:error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)"
/>
<MalioSelect
:model-value="main.containerType"
:options="containerOptions"
@@ -73,7 +81,13 @@
:error="mainErrors.errors.containerType"
@update:model-value="(v: string | number | null) => main.containerType = v === null ? null : String(v)"
/>
<MalioInputNumber v-model="main.volumeM3" :label="t('transport.carriers.form.main.volumeM3')" :required="true" :error="mainErrors.errors.volumeM3" />
<MalioInputText
:model-value="main.volumeM3"
:label="t('transport.carriers.form.main.volumeM3')"
:required="true"
:error="mainErrors.errors.volumeM3"
@update:model-value="(v: string) => main.volumeM3 = sanitizeDecimal(v)"
/>
</template>
</template>
</div>
@@ -173,6 +187,7 @@ import CarrierContactBlock from '~/modules/transport/components/CarrierContactBl
import CarrierPriceBlock from '~/modules/transport/components/CarrierPriceBlock.vue'
import { useCarrierForm } from '~/modules/transport/composables/useCarrierForm'
import { useCarrier } from '~/modules/transport/composables/useCarrier'
import { clampPercent, sanitizeDecimal } from '~/modules/transport/utils/forms/numberInput'
interface SelectOption {
value: string
@@ -86,12 +86,16 @@
« Affreter ». La ligne 1 étant pleine (4 colonnes), ils démarrent
naturellement en colonne 1 de la ligne 2. -->
<template v-if="showCharteredFields">
<MalioInputNumber
v-model="main.indexationRate"
<!-- Indexation : montant en % (icône à droite), plafonné à 100. -->
<MalioInputAmount
:model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent"
icon-position="right"
:required="true"
:readonly="mainLocked"
:error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)"
/>
<!-- Contenant : Benne / Fond mouvant (RG-4.03). -->
@@ -106,12 +110,14 @@
@update:model-value="(v: string | number | null) => main.containerType = v === null ? null : String(v)"
/>
<MalioInputNumber
v-model="main.volumeM3"
<!-- Volume m³ : champ texte restreint aux nombres à décimales (point). -->
<MalioInputText
:model-value="main.volumeM3"
:label="t('transport.carriers.form.main.volumeM3')"
:required="true"
:readonly="mainLocked"
:error="mainErrors.errors.volumeM3"
@update:model-value="(v: string) => main.volumeM3 = sanitizeDecimal(v)"
/>
</template>
</template>
@@ -344,6 +350,7 @@ import CarrierContactBlock from '~/modules/transport/components/CarrierContactBl
import CarrierPriceBlock from '~/modules/transport/components/CarrierPriceBlock.vue'
import { useCarrierForm } from '~/modules/transport/composables/useCarrierForm'
import { useQualimatSearch, type QualimatCarrierRow } from '~/modules/transport/composables/useQualimatSearch'
import { clampPercent, sanitizeDecimal } from '~/modules/transport/utils/forms/numberInput'
interface SelectOption {
value: string