AdminClientController
extends AbstractController
in package
Expose la fiche client consolidée du back-office.
Regroupe sur une seule page tout ce que le staff doit savoir d'un client : son abonnement
courant (ou à défaut le plus récent), ses cartes virtuelles, ses cartes physiques, ses
commandes d'abonnement, ses commandes « retail » et son journal d'audit filtrable et paginé.
La distinction entre commandes d'abonnement, commandes de carte physique et commandes retail
repose sur des sous-requêtes EXISTS/NOT EXISTS sur Payment.subscription et PhysicalCard.
Préfixe de route : /admin/clients (préfixe de nom admin_clients_). Authentification complète
requise (IS_AUTHENTICATED_FULLY), et l'action exige ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT.
Attributes
- #[IsGranted]
- 'IS_AUTHENTICATED_FULLY'
- #[Route]
- '/admin/clients'
- $name: 'admin_clients_'
Table of Contents
Properties
Methods
- __construct() : mixed
- show() : Response
- Affiche la fiche détaillée d'un client.
- getLatestSubscription() : Subscription|null
- Retourne l'abonnement le plus récemment créé d'un client.
Properties
$physicalCardRepository read-only
private
PhysicalCardRepository
$physicalCardRepository
Methods
__construct()
public
__construct(PhysicalCardRepository $physicalCardRepository) : mixed
Parameters
- $physicalCardRepository : PhysicalCardRepository
-
Dépôt des cartes physiques, utilisé pour charger celles du client avec leur commande.
show()
Affiche la fiche détaillée d'un client.
public
show(User $user, Request $request, BusinessCardAizeRepository $businessCardAizeRepository, OrderRepository $orderRepository, AuditLogRepository $auditLogRepository, PaginatorInterface $paginator) : Response
Refuse l'accès si l'utilisateur ne détient ni ROLE_ADMIN, ni ROLE_OPERATOR, ni
ROLE_SUPPORT. Sélectionne l'abonnement actif du client ou, à défaut, le plus récent via
AdminClientController::getLatestSubscription(). Charge ensuite quatre jeux de
données : les cartes virtuelles (BusinessCardAize, tri id décroissant), les cartes
physiques avec leur commande jointe (tri createdAt décroissant), les commandes
d'abonnement (celles ayant un paiement rattaché à une souscription) et les commandes
retail (celles qui n'ont ni paiement d'abonnement ni carte physique associée). Le journal
d'audit du client est paginé séparément (10 par page, paramètre auditPage) et filtrable
par recherche libre auditQ et par type d'action auditAction. Deux tables de
correspondance sont passées à la vue pour traduire les codes d'action en libellés
français et en classes CSS de badge.
Route : /admin/clients/{id} (GET), nom admin_clients_show.
Réservée à ROLE_ADMIN, ROLE_OPERATOR ou ROLE_SUPPORT (contrôle en dur dans la méthode).
Parameters
- $user : User
-
Client consulté, résolu depuis
{id}. - $request : Request
-
Requête HTTP source des filtres d'audit et de la pagination.
- $businessCardAizeRepository : BusinessCardAizeRepository
-
Dépôt des cartes virtuelles du client.
- $orderRepository : OrderRepository
-
Dépôt des commandes, utilisé pour séparer commandes d'abonnement et retail.
- $auditLogRepository : AuditLogRepository
-
Dépôt fournissant la requête de journal d'audit filtrée par utilisateur.
- $paginator : PaginatorInterface
-
Paginateur KnpPaginator appliqué au journal d'audit.
Tags
Attributes
- #[Route]
- '/{id}'
- $name: 'show'
- $methods: ['GET']
Return values
Response —Page HTML admin/client/show.html.twig.
getLatestSubscription()
Retourne l'abonnement le plus récemment créé d'un client.
private
getLatestSubscription(User $user) : Subscription|null
Parcourt en mémoire la collection User::getSubscriptions() en ignorant les éléments qui
ne sont pas des instances de Subscription, et conserve celui dont createdAt est le plus
grand. Utilisée en repli lorsque le client n'a aucun abonnement actif.
Parameters
- $user : User
-
Client dont on cherche le dernier abonnement.
Return values
Subscription|null —Abonnement le plus récent, ou null si le client n'en a aucun.