feat: isolate apartment portfolios by landlord (#25)

This commit is contained in:
nessar committed 2026-08-17 14:18:15 +02:00
1 parent e8f98a0b3f
commit f4acbffc9d
21 files changed
+430 -119

No files matched your search

@@ -7,6 +7,9 @@ import { MatInputModule } from '@angular/material/input';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { Apartment } from '../../services/apartment.service';
const requiredFieldsError =
'Veuillez remplir tous les champs obligatoires (Nom, Adresse, Prix > 0).';
@Component({
selector: 'app-apartment-form',
imports: [
@@ -36,10 +39,10 @@ export class ApartmentForm {
});
readonly apartmentForm = form(this.apartmentModel, (f) => {
required(f.name, { message: 'Veuillez remplir tous les champs obligatoires (Nom, Adresse, Prix > 0).' });
required(f.address, { message: 'Veuillez remplir tous les champs obligatoires (Nom, Adresse, Prix > 0).' });
required(f.purchasePrice, { message: 'Veuillez remplir tous les champs obligatoires (Nom, Adresse, Prix > 0).' });
min(f.purchasePrice, 1, { message: 'Veuillez remplir tous les champs obligatoires (Nom, Adresse, Prix > 0).' });
required(f.name, { message: requiredFieldsError });
required(f.address, { message: requiredFieldsError });
required(f.purchasePrice, { message: requiredFieldsError });
min(f.purchasePrice, 1, { message: requiredFieldsError });
});
readonly error = signal('');
@@ -51,9 +54,13 @@ export class ApartmentForm {
save(): void {
if (this.saving()) return;
this.apartmentForm().markAsTouched();
if (this.apartmentForm().invalid()) {
if (
this.apartmentForm().invalid() ||
!this.apartmentModel().name.trim() ||
!this.apartmentModel().address.trim()
) {
const firstError = this.apartmentForm().errorSummary()[0];
this.error.set(firstError?.message ?? 'Veuillez corriger les erreurs.');
this.error.set(firstError?.message ?? requiredFieldsError);
return;
}