Add SIRET/RNA verification, organizer management, registration flow pages

SIRET/RNA verification:
- Create SiretService with API gouv lookup + JOAFE RNA lookup + cache pool (24h)
- Verification page: declared info vs API data side by side
- Display NAF code + label (from naf.json), nature juridique code + label
- Association/Entreprise/EI badges, ESS badge, RNA, coordonnees lat/long
- JOAFE section: objet, regime, domaine, dates, lieu, PDF download link
- Tranche effectif with readable labels
- Refresh cache button
- Page restricted to non-approved organizers only

Organizer approval flow:
- Approval form with offer (free/basic/custom) and commission rate (default 3%)
- Add commissionRate field to User entity + migration
- Rejection form with required reason textarea, sent in email
- Edit page for approved organizers: all fields modifiable
- Modify button in approved organizers table

Registration flow pages:
- Post-registration success page with email verification message
- Organizer gets additional 48h staff review notice
- Post-email-verification page: confirmed for buyers, 48h notice for organizers

Dashboard:
- Simplified Meilisearch sync to single button

Tests: SiretServiceTest (9), AdminControllerTest (31), RegistrationControllerTest updated, UserTest updated

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-19 20:25:04 +01:00
parent b1912f4362
commit 100ff96c70
18 changed files with 7858 additions and 56 deletions

View File

@@ -136,12 +136,14 @@ class UserTest extends TestCase
self::assertFalse($user->isApproved());
self::assertNull($user->getOffer());
self::assertNull($user->getCommissionRate());
$result = $user->setIsApproved(true)->setOffer('custom');
$result = $user->setIsApproved(true)->setOffer('custom')->setCommissionRate(1.5);
self::assertSame($user, $result);
self::assertTrue($user->isApproved());
self::assertSame('custom', $user->getOffer());
self::assertSame(1.5, $user->getCommissionRate());
}
public function testEmailVerificationFields(): void