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) => ({