[#FER-13] Faire des recherches sur le scanner des bêtes #42
34
.idea/workspace.xml
generated
34
.idea/workspace.xml
generated
@@ -4,11 +4,11 @@
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7c107abe-5995-4428-8429-b146aaca8386" name="Changes" comment="feat : système de blocage utilisateur">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/config/reference.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/reference.php" 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" />
|
||||
<list default="true" id="7c107abe-5995-4428-8429-b146aaca8386" name="Changes" comment="feat : ajout d'un système de scanner bovin">
|
||||
<change beforePath="$PROJECT_DIR$/CLAUDE.md" beforeDir="false" afterPath="$PROJECT_DIR$/CLAUDE.md" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/frontend/services/dto/building-data.ts" beforeDir="false" afterPath="$PROJECT_DIR$/frontend/services/dto/building-data.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/Entity/Building.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Entity/Building.php" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/Entity/BuildingCase.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Entity/BuildingCase.php" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@@ -325,15 +325,7 @@
|
||||
<workItem from="1773766075191" duration="6202000" />
|
||||
<workItem from="1773824491213" duration="24805000" />
|
||||
<workItem from="1774275549972" duration="51000" />
|
||||
<workItem from="1774276665015" duration="27805000" />
|
||||
</task>
|
||||
<task id="LOCAL-00033" summary="feat : ajout de la debug bar en mod dev">
|
||||
<option name="closed" value="true" />
|
||||
<created>1769177611987</created>
|
||||
<option name="number" value="00033" />
|
||||
<option name="presentableId" value="LOCAL-00033" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1769177611987</updated>
|
||||
<workItem from="1774276665015" duration="28168000" />
|
||||
</task>
|
||||
<task id="LOCAL-00034" summary="feat : ajout du bundle Malio ednotif pour l'utilisation des WS">
|
||||
<option name="closed" value="true" />
|
||||
@@ -719,7 +711,15 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1774450388149</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="82" />
|
||||
<task id="LOCAL-00082" summary="feat : ajout d'un système de scanner bovin">
|
||||
<option name="closed" value="true" />
|
||||
<created>1774543296474</created>
|
||||
<option name="number" value="00082" />
|
||||
<option name="presentableId" value="LOCAL-00082" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1774543296474</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="83" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
@@ -769,7 +769,6 @@
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="fix: corrections diverses" />
|
||||
<MESSAGE value="fix : corrections diverses" />
|
||||
<MESSAGE value="fix : corrections frontend" />
|
||||
<MESSAGE value="feat : affichage et modification expédition et modification bouton valider" />
|
||||
@@ -794,7 +793,8 @@
|
||||
<MESSAGE value="fix : bouton de mise en attente" />
|
||||
<MESSAGE value="fix : problème de bearer token" />
|
||||
<MESSAGE value="feat : système de blocage utilisateur" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="feat : système de blocage utilisateur" />
|
||||
<MESSAGE value="feat : ajout d'un système de scanner bovin" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="feat : ajout d'un système de scanner bovin" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
|
||||
@@ -142,6 +142,15 @@ frontend/
|
||||
- `BuildingCase` a `bovines` (OneToMany).
|
||||
- Rapport PDF cases : `GET /building_cases/{id}/weights-report` → template Twig, projection depuis `arrivalDate`, gain journalier fixe `1.3 kg/jour`.
|
||||
|
||||
### Scanner boucles auriculaires
|
||||
- Page dédiée `/scan` : scan de codes-barres Code 39/128 (boucles auriculaires bovines) depuis un téléphone Android via Chrome.
|
||||
- Utilise l'API native `BarcodeDetector` (Shape Detection API, Chrome Android 83+) — pas de lib JS, décodage hardware quasi-instantané.
|
||||
- **Non supporté sur iOS** (tous les navigateurs iOS utilisent WebKit, qui n'implémente pas `BarcodeDetector`).
|
||||
- Les 4 premiers caractères du code-barres sont retirés avant enregistrement (`rawValue.slice(4)`).
|
||||
- Composable `useBarcodeScanner` : caméra arrière, anti-doublon 2s, vibration au scan.
|
||||
- Le bovin est créé via `POST /bovines` avec `Content-Type: application/ld+json` (nécessaire pour la résolution d'IRI de `buildingCase`).
|
||||
- Sélection bâtiment → case (filtrées dynamiquement) avant de scanner.
|
||||
|
||||
### Données de référence
|
||||
- `ReceptionType`, `MerchandiseType`, `PelletType`, `Building`, `Supplier` (avec `Address` via join table, `createdBy` → User), `Customer` (avec `Address` via join table, `createdBy` → User), `Truck`, `Carrier`, `Driver`, `Vehicle`.
|
||||
- `Address` : champ `label` nullable (déprécié, retiré du front et du `address:write`), expose `fullAddress` via getter. `countryCode` par défaut `FR` côté front.
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import type { BuildingLayoutData } from '~/services/dto/building-layout-data'
|
||||
import type { BuildingCaseData } from '~/services/dto/building-case-data'
|
||||
|
||||
export interface BuildingData {
|
||||
id: number
|
||||
label: string
|
||||
code: string
|
||||
layouts?: BuildingLayoutData[] | null
|
||||
buildingCases?: BuildingCaseData[] | null
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ class Building
|
||||
* @var Collection<int, BuildingCase>
|
||||
*/
|
||||
#[ORM\OneToMany(targetEntity: BuildingCase::class, mappedBy: 'id_building')]
|
||||
#[Groups(['building:read'])]
|
||||
#[SerializedName('buildingCases')]
|
||||
private Collection $buildingCases;
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,10 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
|
||||
#[ORM\Entity]
|
||||
#[ApiResource(
|
||||
operations: [
|
||||
new Get(
|
||||
requirements: ['id' => '\d+'],
|
||||
normalizationContext: ['groups' => ['building:read']],
|
||||
),
|
||||
new Get(
|
||||
uriTemplate: '/building_cases/{id}/weights-report',
|
||||
requirements: ['id' => '\d+'],
|
||||
|
||||
Reference in New Issue
Block a user