feat: page client /admin/clients/{id} avec onglets et gestion contacts

Route /admin/clients/{id} (ClientsController::show) :
- 10 onglets : Information globale, Contacts, Factures, Avis de Paiement,
  Devis, Impayes, Echeancier, EsyFlex, Sites Internet, Services
- Onglet actif via query param ?tab=

Onglet Information globale :
- Formulaire edition complet : identite (prenom, nom, email, phone, type),
  entreprise (raison sociale, SIRET, RCS, TVA, APE, RNA),
  adresse (adresse, complement, CP, ville, geoLat/geoLong hidden)
- Section systeme : code comptable, Stripe ID, dates creation/modification
- POST sauvegarde + updatedAt mis a jour

Onglet Contacts :
- Formulaire ajout contact : prenom, nom, email, phone, role, isBillingEmail
- Table des contacts existants avec suppression (data-confirm modal)
- Gestion via handleContactForm() : create/delete avec verification owner

Onglets placeholder :
- Factures, Avis, Devis, Impayes, Echeancier, EsyFlex, Sites, Services
  affichent "Cette section sera disponible prochainement"

Customer entity :
- Ajout setUpdatedAt()

Template index :
- Nom du client cliquable (lien vers show)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-04-04 17:12:47 +02:00
parent 91b4100560
commit d6061a07c9
5 changed files with 337 additions and 2 deletions

View File

@@ -70,8 +70,9 @@ class AdminControllersTest extends TestCase
{
$repo = $this->createStub(CustomerRepository::class);
$repo->method('findBy')->willReturn([]);
$em = $this->createStub(\Doctrine\ORM\EntityManagerInterface::class);
$controller = $this->createMockController(ClientsController::class);
$response = $controller->index($repo);
$response = $controller->index($repo, $em);
$this->assertInstanceOf(Response::class, $response);
}