From 615429dc1c623ec946f9dac4301ec4d0545d18ca Mon Sep 17 00:00:00 2001 From: Nessar Date: Mon, 27 Jul 2026 19:42:41 +0200 Subject: [PATCH] fix: preserve entry summary inventory facts (#62) --- .../condition-report-comparison-section.ts | 10 +----- .../condition-report-state-label.ts | 10 ++++++ .../condition-report-summary.html | 32 ++++++++++++++++--- .../condition-report-summary.spec.ts | 13 +++++--- .../condition-report-summary.ts | 29 +++++++---------- 5 files changed, 59 insertions(+), 35 deletions(-) create mode 100644 frontend/src/app/components/condition-report-page/condition-report-state-label.ts diff --git a/frontend/src/app/components/condition-report-page/condition-report-comparison-section.ts b/frontend/src/app/components/condition-report-page/condition-report-comparison-section.ts index 4bd93e8..d11b17e 100644 --- a/frontend/src/app/components/condition-report-page/condition-report-comparison-section.ts +++ b/frontend/src/app/components/condition-report-page/condition-report-comparison-section.ts @@ -7,13 +7,13 @@ import { ConditionReportComparison, ConditionReportComparisonLine, ConditionReportService, - ConditionState, ConditionZone, InventoryCondition, MeterReading, PropertyConditionReportSupplement, } from '../../services/condition-report.service'; import { httpErrorMessage } from '../../services/http-error-message'; +import { conditionReportStateLabels as stateLabels } from './condition-report-state-label'; @Component({ selector: 'app-condition-report-comparison-section', @@ -83,14 +83,6 @@ function comparisonSection( })), }; } -const stateLabels: Record = { - NEUF: 'Neuf', - BON_ETAT: 'Bon état', - ETAT_USAGE: 'État d’usage', - DEGRADE: 'Dégradé', - ABSENT: 'Absent', - NON_APPLICABLE: 'Non applicable', -}; function describeObservation(value: ConditionObservation): string { return [stateLabels[value.state], value.observation].filter(Boolean).join(' — '); } diff --git a/frontend/src/app/components/condition-report-page/condition-report-state-label.ts b/frontend/src/app/components/condition-report-page/condition-report-state-label.ts new file mode 100644 index 0000000..579524d --- /dev/null +++ b/frontend/src/app/components/condition-report-page/condition-report-state-label.ts @@ -0,0 +1,10 @@ +import { ConditionState } from '../../services/condition-report.service'; + +export const conditionReportStateLabels: Record = { + NEUF: 'Neuf', + BON_ETAT: 'Bon état', + ETAT_USAGE: 'État d’usage', + DEGRADE: 'Dégradé', + ABSENT: 'Absent', + NON_APPLICABLE: 'Non applicable', +}; diff --git a/frontend/src/app/components/condition-report-page/condition-report-summary.html b/frontend/src/app/components/condition-report-page/condition-report-summary.html index d888158..fa0b5ad 100644 --- a/frontend/src/app/components/condition-report-page/condition-report-summary.html +++ b/frontend/src/app/components/condition-report-page/condition-report-summary.html @@ -62,10 +62,34 @@
    @for (item of area.inventory; track item.id) {
  • - {{ item.designation }} — {{ item.observedQuantity }} constaté(s), - {{ item.contractualQuantity }} au bail{{ - item.conditions ? ' · ' + item.conditions : '' - }}{{ item.description ? ' : ' + item.description : '' }} + {{ item.designation }} +
    +
    +
    Quantité constatée
    +
    {{ item.observedQuantity }}
    +
    +
    +
    Quantité au bail
    +
    {{ item.contractualQuantity }}
    +
    +
    +
    Description constatée
    +
    {{ item.observedDescription }}
    +
    +
    +
    Description au bail
    +
    {{ item.contractualDescription }}
    +
    +
    + @if (item.splits.length) { +
      + @for (split of item.splits; track $index) { +
    • {{ split.condition }} — {{ split.observation }}
    • + } +
    + } @else { +

    Aucun état détaillé.

    + }
  • }
diff --git a/frontend/src/app/components/condition-report-page/condition-report-summary.spec.ts b/frontend/src/app/components/condition-report-page/condition-report-summary.spec.ts index 103f300..78b8833 100644 --- a/frontend/src/app/components/condition-report-page/condition-report-summary.spec.ts +++ b/frontend/src/app/components/condition-report-page/condition-report-summary.spec.ts @@ -48,15 +48,15 @@ describe('ConditionReportSummaryComponent', () => { privateAreaLabel: 'Cuisine', designation: 'Chaise', contractualQuantity: 2, - contractualDescription: 'Bois', + contractualDescription: 'Bois verni', observedQuantity: 1, - observedDescription: 'Assise marquée', + observedDescription: 'Bois peint', splits: [ { inventoryLineId: 'chair', state: 'DEGRADE', quantity: 1, - observation: 'Assise marquée', + observation: 'Pied rayé', }, ], }, @@ -91,7 +91,12 @@ describe('ConditionReportSummaryComponent', () => { expect(summary).toContain('Cuisine'); expect(summary).toContain('Sol — Bon état'); expect(summary).toContain('Climatisation — Dégradé · Climatisation : Filtre à nettoyer'); - expect(summary).toContain('Chaise — 1 constaté(s), 2 au bail · 1 dégradé : Assise marquée'); + expect(summary).toContain('Quantité constatée'); + expect(summary).toContain('Description constatée'); + expect(summary).toContain('Bois peint'); + expect(summary).toContain('Description au bail'); + expect(summary).toContain('Bois verni'); + expect(summary).toContain('1 dégradé — Pied rayé'); expect(summary).toContain('Cave'); expect(summary).toContain('Aucune surface ni équipement constaté.'); expect(summary).toContain('Compteur entrée — 42 kWh'); diff --git a/frontend/src/app/components/condition-report-page/condition-report-summary.ts b/frontend/src/app/components/condition-report-page/condition-report-summary.ts index dc4318e..0c956fc 100644 --- a/frontend/src/app/components/condition-report-page/condition-report-summary.ts +++ b/frontend/src/app/components/condition-report-page/condition-report-summary.ts @@ -1,23 +1,14 @@ import { Component, computed, input } from '@angular/core'; import { AccessMeansType, - ConditionState, MeterType, PropertyConditionReport, ZoneEquipment, } from '../../services/condition-report.service'; +import { conditionReportStateLabels } from './condition-report-state-label'; type ConditionReportSummary = ReturnType; -const conditionLabels: Record = { - NEUF: 'Neuf', - BON_ETAT: 'Bon état', - ETAT_USAGE: 'État d’usage', - DEGRADE: 'Dégradé', - ABSENT: 'Absent', - NON_APPLICABLE: 'Non applicable', -}; - const equipmentLabels: Record = { NONE: 'Aucun équipement', CLIMATISATION: 'Climatisation', @@ -64,7 +55,7 @@ function summarize(report: PropertyConditionReport) { label: zone.label, equipment: zone.equipment === 'NONE' ? '' : equipmentLabels[zone.equipment], condition: observation - ? conditionLabels[observation.state] + ? conditionReportStateLabels[observation.state] : 'Non constaté', observation: observation?.observation ?? '', }; @@ -76,13 +67,15 @@ function summarize(report: PropertyConditionReport) { designation: item.designation, observedQuantity: item.observedQuantity, contractualQuantity: item.contractualQuantity, - description: item.observedDescription || item.contractualDescription, - conditions: item.splits - .map( - (split) => - split.quantity + ' ' + conditionLabels[split.state].toLowerCase(), - ) - .join(', '), + observedDescription: item.observedDescription || '—', + contractualDescription: item.contractualDescription || '—', + splits: item.splits.map((split) => ({ + condition: + split.quantity + + ' ' + + conditionReportStateLabels[split.state].toLowerCase(), + observation: split.observation || 'Sans observation.', + })), })), })), meters: report.meterReadings.map((meter) => ({