BCard - Documentation technique

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
throws
NotFoundHttpException

Si l'utilisateur du paiement n'a aucun abonnement au plan « Pro ».

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
throws
NotFoundHttpException

Si l'utilisateur du paiement n'a aucun abonnement au plan « Entreprise ».

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
throws
NotFoundHttpException

Si l'utilisateur du paiement n'a aucun abonnement au plan « Pro ».

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
throws
AccessDeniedException

Si aucun des deux rôles n'est accordé (message « Accès réservé aux administrateurs et gestionnaires. »).

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.


        
On this page

Search results