fix(#156): superviser nom, e-mail et CP comme à l’inscription.
IdentityBlock editable : capitalisation live, e-mail/CP normalisés et validés à la perte de focus (aligné création de compte). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -10,8 +10,10 @@ import 'package:p_tits_pas/services/api/api_config.dart';
|
||||
import 'package:p_tits_pas/services/user_service.dart';
|
||||
import 'package:p_tits_pas/utils/date_display_utils.dart';
|
||||
import 'package:p_tits_pas/utils/email_utils.dart';
|
||||
import 'package:p_tits_pas/utils/name_format_utils.dart';
|
||||
import 'package:p_tits_pas/utils/nir_utils.dart';
|
||||
import 'package:p_tits_pas/utils/phone_utils.dart';
|
||||
import 'package:p_tits_pas/utils/postal_utils.dart';
|
||||
import 'package:p_tits_pas/widgets/admin/common/admin_am_photo_frame.dart';
|
||||
import 'package:p_tits_pas/widgets/admin/common/admin_detail_modal.dart';
|
||||
import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart';
|
||||
@@ -361,7 +363,8 @@ class _AmDossierWizardState extends State<AmDossierWizard> {
|
||||
if (_adresseCtrl.text.trim().isEmpty) {
|
||||
return 'L’adresse est requise.';
|
||||
}
|
||||
if (_cpCtrl.text.trim().isEmpty) return 'Le code postal est requis.';
|
||||
final cpErr = validateFrenchPostalCode(_cpCtrl.text);
|
||||
if (cpErr != null) return cpErr;
|
||||
if (_villeCtrl.text.trim().isEmpty) return 'La ville est requise.';
|
||||
return null;
|
||||
}
|
||||
@@ -466,21 +469,24 @@ class _AmDossierWizardState extends State<AmDossierWizard> {
|
||||
|
||||
return <String, dynamic>{
|
||||
'email': normalizeEmailText(_emailCtrl.text),
|
||||
'prenom': _prenomCtrl.text.trim(),
|
||||
'nom': _nomCtrl.text.trim(),
|
||||
'prenom': formatPersonNameCase(_prenomCtrl.text),
|
||||
'nom': formatPersonNameCase(_nomCtrl.text),
|
||||
'telephone': normalizePhone(_telCtrl.text),
|
||||
'adresse':
|
||||
_adresseCtrl.text.trim().isNotEmpty ? _adresseCtrl.text.trim() : null,
|
||||
'code_postal':
|
||||
_cpCtrl.text.trim().isNotEmpty ? _cpCtrl.text.trim() : null,
|
||||
'ville':
|
||||
_villeCtrl.text.trim().isNotEmpty ? _villeCtrl.text.trim() : null,
|
||||
'ville': _villeCtrl.text.trim().isNotEmpty
|
||||
? formatPersonNameCase(_villeCtrl.text)
|
||||
: null,
|
||||
'photo_base64': photoBase64,
|
||||
'photo_filename': fn.isNotEmpty ? fn : 'photo_am.jpg',
|
||||
'consentement_photo': true,
|
||||
'date_naissance': birthIso,
|
||||
'lieu_naissance_ville': _lieuNaissanceVilleCtrl.text.trim(),
|
||||
'lieu_naissance_pays': _lieuNaissancePaysCtrl.text.trim(),
|
||||
'lieu_naissance_ville':
|
||||
formatPersonNameCase(_lieuNaissanceVilleCtrl.text),
|
||||
'lieu_naissance_pays':
|
||||
formatPersonNameCase(_lieuNaissancePaysCtrl.text),
|
||||
'nir': normalizeNir(_nirCtrl.text),
|
||||
'numero_agrement': _agrementCtrl.text.trim(),
|
||||
'date_agrement': agrementIso,
|
||||
@@ -695,12 +701,14 @@ class _AmDossierWizardState extends State<AmDossierWizard> {
|
||||
label: 'Ville de naissance',
|
||||
field: ValidationEditableField(
|
||||
controller: _lieuNaissanceVilleCtrl,
|
||||
inputFormatters: const [PersonNameInputFormatter()],
|
||||
),
|
||||
),
|
||||
ValidationLabeledField(
|
||||
label: 'Pays de naissance',
|
||||
field: ValidationEditableField(
|
||||
controller: _lieuNaissancePaysCtrl,
|
||||
inputFormatters: const [PersonNameInputFormatter()],
|
||||
),
|
||||
),
|
||||
ValidationLabeledField(
|
||||
|
||||
Reference in New Issue
Block a user