ProPaymentController
extends AbstractController
in package
Consulte les paiements liés aux abonnements « Pro » et « Entreprise » et édite leurs factures.
Les deux gammes partagent les mêmes templates (admin/pro_payment/*) et la même mécanique : un
listing filtrable présenté soit par paiement, soit par utilisateur abonné (avec son dernier
paiement complété), une fiche de détail, et la génération de facture PDF. Seuls les paiements au
statut « complété » d'utilisateurs possédant un abonnement actif, expiré ou annulé sur le plan
concerné sont retenus. Les statistiques ne sont calculées que pour la gamme Pro ; celles de la
gamme Entreprise sont renvoyées à zéro.
Préfixe de route : /admin/pro-payments. Authentification complète requise au niveau de la
classe ; chaque action exige en plus ROLE_ADMIN ou ROLE_OPERATOR via
ProPaymentController::assertBackofficeStaffAccess().
Attributes
- #[IsGranted]
- 'IS_AUTHENTICATED_FULLY'
- #[Route]
- '/admin/pro-payments'
Table of Contents
Methods
- downloadInvoice() : Response
- Génère et télécharge la facture PDF d'un paiement d'abonnement « Pro ».
- enterpriseIndex() : Response
- Affiche le tableau des paiements liés aux abonnements « Entreprise ».
- enterpriseShow() : Response
- Affiche le détail d'un paiement rattaché à un abonnement « Entreprise ».
- index() : Response
- Affiche le tableau des paiements liés aux abonnements « Pro ».
- show() : Response
- Affiche le détail d'un paiement rattaché à un abonnement « Pro ».
- assertBackofficeStaffAccess() : void
- Vérifie que l'utilisateur courant fait partie du personnel du back-office.
- getProPaymentStats() : array<string, mixed>
- Calcule les indicateurs affichés en tête du tableau des paiements « Pro ».
Methods
downloadInvoice()
Génère et télécharge la facture PDF d'un paiement d'abonnement « Pro ».
public
downloadInvoice(Payment $payment, DomPdfService $pdfGenerator) : Response
Exige ROLE_ADMIN ou ROLE_OPERATOR. Vérifie d'abord que l'utilisateur du paiement possède un
abonnement au plan « Pro », sinon lève une 404. Le logo BCard
(public/assets/new_design/image/bcard.png) est lu sur le disque et encodé en base64 ; le
montant est formaté sans décimale avec séparateur d'espace et la date au format d/m/Y. Les
coordonnées de l'émetteur, y compris l'adresse email, sont codées en dur. Le fichier produit
est nommé facture_pro_<idPaiement>_<ddmmyyyy>.pdf.
Route : /admin/pro-payments/{id}/invoice (GET, id numérique), nom admin_pro_payment_download_invoice.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $payment : Payment
-
Paiement résolu automatiquement depuis l'identifiant de l'URL.
- $pdfGenerator : DomPdfService
-
Service de génération de PDF à partir de HTML.
Tags
Attributes
- #[Route]
- '/{id}/invoice'
- $name: 'admin_pro_payment_download_invoice'
- $methods: ['GET']
- $requirements: ['id' => '\d+']
Return values
Response —Réponse de téléchargement du PDF produite par DomPdfService::generatePdfFile().
enterpriseIndex()
Affiche le tableau des paiements liés aux abonnements « Entreprise ».
public
enterpriseIndex(Request $request, PaymentRepository $paymentRepository, SubscriptionRepository $subscriptionRepository, PaginatorInterface $paginator) : Response
Exige ROLE_ADMIN ou ROLE_OPERATOR. Reprend la mécanique de
ProPaymentController::index() en ciblant le plan « Entreprise », avec deux
différences : le mode d'affichage par défaut est users (et non payments), et les
statistiques ne sont pas calculées — le tableau stats est renvoyé avec toutes ses valeurs à
zéro. Filtres identiques (status, date_from, date_to, user), pagination de 20 éléments.
Route : /admin/pro-payments/enterprise-payments (GET), nom admin_enterprise_payment_index.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $request : Request
-
Requête HTTP courante portant la vue, les filtres et la page.
- $paymentRepository : PaymentRepository
-
Dépôt des paiements.
- $subscriptionRepository : SubscriptionRepository
-
Dépôt des abonnements.
- $paginator : PaginatorInterface
-
Service de pagination KnpPaginator.
Attributes
- #[Route]
- '/enterprise-payments'
- $name: 'admin_enterprise_payment_index'
- $methods: ['GET']
Return values
Response —Rendu du template admin/pro_payment/index.html.twig avec planName valant
« Entreprise » et index_route pointant sur admin_enterprise_payment_index.
enterpriseShow()
Affiche le détail d'un paiement rattaché à un abonnement « Entreprise ».
public
enterpriseShow(Payment $payment) : Response
Exige ROLE_ADMIN ou ROLE_OPERATOR. Recherche parmi les abonnements du propriétaire du
paiement le premier dont le plan se nomme « Entreprise » ; en son absence, une exception 404
est levée. Rendu identique à ProPaymentController::show() mais avec planName et
index_route propres à la gamme Entreprise.
Route : /admin/pro-payments/enterprise-payments/{id} (GET, id numérique), nom admin_enterprise_payment_show.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $payment : Payment
-
Paiement résolu automatiquement depuis l'identifiant de l'URL.
Tags
Attributes
- #[Route]
- '/enterprise-payments/{id}'
- $name: 'admin_enterprise_payment_show'
- $methods: ['GET']
- $requirements: ['id' => '\d+']
Return values
Response —Rendu du template admin/pro_payment/show.html.twig.
index()
Affiche le tableau des paiements liés aux abonnements « Pro ».
public
index(Request $request, PaymentRepository $paymentRepository, SubscriptionRepository $subscriptionRepository, PaginatorInterface $paginator) : Response
Exige ROLE_ADMIN ou ROLE_OPERATOR. Deux modes d'affichage selon le paramètre view
(défaut payments) :
payments: liste les paiements au statut complété d'utilisateurs disposant d'un abonnement Pro actif, expiré ou annulé, triés par date décroissante ;users: liste plutôt les abonnements Pro (triés par date de début décroissante) et associe à chaque utilisateur son dernier paiement complété, reconstitué en mémoire à partir d'une requête unique triée par utilisateur puis date décroissante.
Filtres communs issus de la query string : status (statut d'abonnement, ignoré si all),
date_from et date_to (bornes sur la date de paiement, la borne haute incluant la journée
entière), et user (identifiant d'utilisateur). Les statistiques sont calculées par
ProPaymentController::getProPaymentStats(). Pagination de 20 éléments.
Route : /admin/pro-payments/ (GET), nom admin_pro_payment_index.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $request : Request
-
Requête HTTP courante portant la vue, les filtres et la page.
- $paymentRepository : PaymentRepository
-
Dépôt des paiements.
- $subscriptionRepository : SubscriptionRepository
-
Dépôt des abonnements.
- $paginator : PaginatorInterface
-
Service de pagination KnpPaginator.
Attributes
- #[Route]
- '/'
- $name: 'admin_pro_payment_index'
- $methods: ['GET']
Return values
Response —Rendu du template admin/pro_payment/index.html.twig avec listMode valant
users ou payments selon le mode retenu.
show()
Affiche le détail d'un paiement rattaché à un abonnement « Pro ».
public
show(Payment $payment) : Response
Exige ROLE_ADMIN ou ROLE_OPERATOR. Parcourt les abonnements du propriétaire du paiement pour y trouver le premier dont le plan se nomme « Pro » ; l'association est donc déduite de l'utilisateur et non du paiement lui-même. Si aucun abonnement Pro n'est trouvé, une exception 404 est levée.
Route : /admin/pro-payments/{id} (GET, id numérique), nom admin_pro_payment_show.
Requiert ROLE_ADMIN ou ROLE_OPERATOR.
Parameters
- $payment : Payment
-
Paiement résolu automatiquement depuis l'identifiant de l'URL.
Tags
Attributes
- #[Route]
- '/{id}'
- $name: 'admin_pro_payment_show'
- $methods: ['GET']
- $requirements: ['id' => '\d+']
Return values
Response —Rendu du template admin/pro_payment/show.html.twig.
assertBackofficeStaffAccess()
Vérifie que l'utilisateur courant fait partie du personnel du back-office.
private
assertBackofficeStaffAccess() : void
Exige ROLE_ADMIN ou ROLE_OPERATOR ; appelée en tête de chaque action publique du contrôleur.
Tags
getProPaymentStats()
Calcule les indicateurs affichés en tête du tableau des paiements « Pro ».
private
getProPaymentStats(PaymentRepository $paymentRepository, SubscriptionRepository $subscriptionRepository) : array<string, mixed>
Quatre requêtes d'agrégation sont exécutées. Les trois portant sur les paiements ne retiennent
que les paiements complétés d'utilisateurs abonnés au plan « Pro » et dont la méthode de
paiement est CREDIT_CARD ou ORANGE_MONEY : nombre total, somme des montants (ramenée à 0
si nulle) et nombre de paiements depuis le premier jour du mois courant. La quatrième compte
les abonnements Pro au statut actif. La clé completed_payments reprend volontairement la
même valeur que total_payments, le filtre ne portant déjà que sur les paiements complétés.
Ces jointures peuvent démultiplier les lignes lorsqu'un utilisateur possède plusieurs
abonnements.
Parameters
- $paymentRepository : PaymentRepository
-
Dépôt des paiements.
- $subscriptionRepository : SubscriptionRepository
-
Dépôt des abonnements.
Return values
array<string, mixed> —Tableau contenant les clés total_payments, completed_payments,
total_revenue, active_subscriptions et this_month_payments.