Files
lmnp-organizer/frontend/src/app/components/rent-revision-preview/rent-revision-preview.html
T
nessar 878da155bd chore: add husky pre-commit hook and lint-staged configuration
- Created a pre-commit hook in .husky to run lint-staged.
- Added .lintstagedrc.mjs to format frontend files with Prettier and apply Spotless to backend Java files.
- Introduced .prettierignore to exclude specific directories from formatting.
2026-08-17 14:18:16 +02:00

174 lines
4.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<section
class="revision-preview"
aria-label="Prévision de révision annuelle du loyer"
[attr.aria-busy]="pending()"
>
<header>
<h3>Révision annuelle du loyer</h3>
<p>
Calculez le plafond applicable avant toute décision. Aucun nouveau loyer ne sera
appliqué.
</p>
</header>
<form [formRoot]="requestForm" (submit)="prepare(); $event.preventDefault()">
<fieldset [disabled]="pending()">
<details class="advanced-options">
<summary>Changer la série INSEE</summary>
<label>
<span>Nouvelle série officielle</span>
<select class="series-override" [formField]="requestForm.seriesIdOverride">
<option value="">Série prévue dans le bail</option>
<option value="001515333">Métropole — 001515333</option>
<option value="010760507">Corse — 010760507</option>
<option value="010760509">
Départements d’outre-mer (article 73) — 010760509
</option>
</select>
</label>
@if (requestModel().seriesIdOverride.trim()) {
<label class="attestation">
<input
class="series-confirm"
type="checkbox"
[formField]="requestForm.seriesOverrideConfirmed"
/>
<span>Je confirme remplacer la série INSEE prévue par le bail.</span>
</label>
}
</details>
@if (manualRequired()) {
<div class="manual-indices">
<h4>Indices IRL saisis manuellement</h4>
<div class="field-grid">
<label>
<span>Indice précédent</span>
<input
class="previous-index"
type="number"
step="0.01"
[formField]="requestForm.previousIndex"
/>
</label>
<label>
<span>Nouvel indice</span>
<input
class="new-index"
type="number"
step="0.01"
[formField]="requestForm.newIndex"
/>
</label>
</div>
<label class="attestation">
<input
class="manual-confirm"
type="checkbox"
[formField]="requestForm.manualIndicesConfirmed"
/>
<span>J’atteste avoir vérifié ces deux indices IRL officiels.</span>
</label>
</div>
}
@if (validationError()) {
<p class="operation-error" role="alert">{{ validationError() }}</p>
}
<button mat-flat-button type="submit" class="preview-submit" [disabled]="pending()">
{{
pending()
? 'Calcul en cours…'
: preview()
? 'Recalculer'
: 'Préparer la révision'
}}
</button>
</fieldset>
</form>
@if (error()) {
<div class="operation-error" role="alert">
<p>{{ error() }}</p>
@if (!manualRequired()) {
<button mat-button type="button" class="retry-preview" (click)="prepare()">
Réessayer
</button>
}
</div>
}
@if (preview(); as result) {
<article class="preview-result">
<h4>Simulation de révision</h4>
<p class="source-label">Source : {{ sourceLabel(result.indexSource) }}</p>
<dl>
<div>
<dt>Date annuelle</dt>
<dd>{{ civilDate(result.annualRevisionDate) }}</dd>
</div>
<div>
<dt>Date limite de demande</dt>
<dd>{{ civilDate(result.requestDeadline) }}</dd>
</div>
<div>
<dt>Série et référence</dt>
<dd>
{{ result.seriesId }} · T{{ result.referenceQuarter }} ·
{{ result.previousIndexYear }} → {{ result.newIndexYear }}
@if (result.seriesOverridden) {
<span>Série remplacée après attestation.</span>
}
</dd>
</div>
<div>
<dt>Plafond du nouveau loyer</dt>
<dd>{{ currency(result.rentCeiling) }}</dd>
</div>
<div>
<dt>Plafond des charges</dt>
<dd>
{{
result.chargeCeiling === null
? 'Non applicable'
: currency(result.chargeCeiling)
}}
</dd>
</div>
</dl>
<p class="formula">
{{ currency(result.previousRent) }} × {{ index(result.newIndex) }} ÷
{{ index(result.previousIndex) }} = {{ currency(result.rentCeiling) }}
</p>
@if (result.chargeCeiling !== null) {
<p class="formula charge-formula">
{{ currency(result.previousCharges) }} × {{ index(result.newIndex) }} ÷
{{ index(result.previousIndex) }} = {{ currency(result.chargeCeiling) }}
</p>
}
@if (result.warnings.length) {
<div class="preview-warnings" role="status">
<strong>Avertissements</strong>
<ul>
@for (
warning of result.warnings;
track warning.code + ':' + warning.ruleVersion
) {
<li>
{{ warningLabel(warning.code) }}
<span>Version de règle : {{ warning.ruleVersion }}</span>
</li>
}
</ul>
</div>
}
</article>
}
<app-rent-revision-proposals
[leaseId]="leaseId()"
[preview]="preview()"
[previewRequest]="lastSuccessfulRequest()"
/>
</section>