BCard - Documentation technique

CompanyOrderController extends AbstractController
in package

Gère les commandes de cartes de visite passées par une entreprise pour ses employés.

Destiné aux comptes entreprise (manager) et, en lecture élargie, aux administrateurs. Il couvre le listing des commandes contenant au moins un article rattaché à un employé, la sélection des employés à équiper (à l'unité ou en commande groupée) et la consultation du détail. Règle transverse : un compte entreprise non activé par l'administration est bloqué et renvoyé à l'accueil. La sélection d'employés n'est pas transformée en commande ici : elle est stockée en session sous la clé company_order_data puis reprise par CompanyPaymentController lors du choix du moyen de paiement.

Préfixe de route : /admin/company-orders. Authentification complète requise (IS_AUTHENTICATED_FULLY) ; les actions exigent en pratique un compte rattaché à une entreprise, ROLE_ADMIN élargissant le périmètre en consultation.

Attributes
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Route]
'/admin/company-orders'

Table of Contents

Properties

$cardRepository  : CardRepository
$employeeRepository  : EmployeeRepository
$entityManager  : EntityManagerInterface
$mailer  : MailerInterface
$mailerService  : MailerService

Methods

__construct()  : mixed
bulkOrder()  : Response
Sélectionne les employés pour une commande groupée reposant sur un unique modèle de carte.
index()  : Response
Liste les commandes entreprise visibles par l'utilisateur connecté.
new()  : Response
Sélectionne les employés à équiper pour une commande entreprise à l'unité.
show()  : Response
Affiche le détail d'une commande entreprise.
processBulkOrder()  : Response
Construit et enregistre une commande entreprise groupée sur un unique modèle de carte.
processOrder()  : Response
Construit et enregistre une commande entreprise à partir de la sélection d'employés.
sendOrderConfirmationEmail()  : void
Envoie au titulaire de la commande l'e-mail de confirmation de commande entreprise.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, EmployeeRepository $employeeRepository, CardRepository $cardRepository, MailerInterface $mailer, MailerService $mailerService) : mixed
Parameters
$entityManager : EntityManagerInterface

Gestionnaire Doctrine utilisé pour les requêtes de commandes et les transactions.

$employeeRepository : EmployeeRepository

Dépôt des employés, source des listes d'employés sans carte et par entreprise.

$cardRepository : CardRepository

Dépôt des produits carte, filtré sur les cartes non masquées.

$mailer : MailerInterface

Mailer Symfony utilisé pour envoyer les TemplatedEmail de confirmation.

$mailerService : MailerService

Service applicatif de messagerie, ici utilisé pour l'adresse d'expédition.

bulkOrder()

Sélectionne les employés pour une commande groupée reposant sur un unique modèle de carte.

public bulkOrder(Request $request) : Response

Mêmes contrôles d'accès et d'activation que CompanyOrderController::new(), mais la liste proposée couvre tous les employés de l'entreprise et non les seuls employés sans carte. En POST, la sélection employees et le champ card_id sont tous deux obligatoires ; le card_id retenu est recopié sur chaque employé effectivement coché (selected === '1') avant mise en session sous company_order_data avec is_bulk = true, puis redirection vers le choix du moyen de paiement.

Route : /admin/company-orders/bulk-order (GET, POST), nom admin_company_order_bulk.

Parameters
$request : Request

Requête HTTP portant la sélection employees et le card_id en POST.

Tags
throws
AccessDeniedException

Si l'utilisateur n'est pas rattaché à une entreprise.

Attributes
#[Route]
'/bulk-order'
$name: 'admin_company_order_bulk'
$methods: ['GET', 'POST']
Return values
Response

Page HTML admin/company_order/bulk_order.html.twig, ou redirection vers admin_company_payment_select_method, admin_company_order_bulk ou app_home selon le cas.

index()

Liste les commandes entreprise visibles par l'utilisateur connecté.

public index() : Response

Refuse l'accès si l'utilisateur n'est pas une instance de User, ou s'il n'a pas d'entreprise sans détenir ROLE_ADMIN. Un compte entreprise non activé (et non admin) est bloqué par un flash d'erreur invitant à contacter le support, avec redirection vers app_home. Un ROLE_ADMIN voit toutes les commandes comportant au moins un OrderItem rattaché à un employé ; un manager ne voit que celles dont il est le titulaire. Tri par date de création décroissante, sans pagination.

Route : /admin/company-orders/ (GET), nom admin_company_order_index.

Tags
throws
AccessDeniedException

Si l'utilisateur n'est pas rattaché à une entreprise et n'est pas administrateur.

Attributes
#[Route]
'/'
$name: 'admin_company_order_index'
$methods: ['GET']
Return values
Response

Page HTML admin/company_order/index.html.twig, ou redirection vers app_home si le compte entreprise n'est pas activé.

new()

Sélectionne les employés à équiper pour une commande entreprise à l'unité.

public new(Request $request) : Response

Réservée aux comptes rattachés à une entreprise et activés (sinon accès refusé ou redirection vers app_home avec flash). Charge les employés ne possédant pas encore de carte de visite via EmployeeRepository::findWithoutBusinessCard() ; si la liste est vide, un flash informatif renvoie vers la gestion des employés. Les cartes proposées sont les produits non masqués.

En POST, la sélection employees doit être non vide, sinon un flash d'erreur ramène au formulaire. La sélection valide n'est pas convertie en commande ici : elle est stockée en session sous company_order_data (avec is_bulk = false et l'identifiant du compte), puis l'utilisateur est redirigé vers le choix du moyen de paiement.

Route : /admin/company-orders/new (GET, POST), nom admin_company_order_new.

Parameters
$request : Request

Requête HTTP portant la sélection employees en POST.

Tags
throws
AccessDeniedException

Si l'utilisateur n'est pas rattaché à une entreprise.

Attributes
#[Route]
'/new'
$name: 'admin_company_order_new'
$methods: ['GET', 'POST']
Return values
Response

Page HTML admin/company_order/new.html.twig, ou redirection vers admin_company_payment_select_method, admin_employee_index ou app_home selon le cas.

show()

Affiche le détail d'une commande entreprise.

public show(Order $order) : Response

Un ROLE_ADMIN peut consulter n'importe quelle commande ; tout autre utilisateur doit être rattaché à une entreprise et être le titulaire de la commande, sans quoi une exception d'accès refusé est levée. Aucune vérification d'activation du compte n'est faite ici.

Route : /admin/company-orders/{id} (GET), nom admin_company_order_show.

Parameters
$order : Order

Commande consultée, résolue depuis {id}.

Tags
throws
AccessDeniedException

Si l'utilisateur n'est ni administrateur ni titulaire de la commande.

Attributes
#[Route]
'/{id}'
$name: 'admin_company_order_show'
$methods: ['GET']
Return values
Response

Page HTML admin/company_order/show.html.twig.

processBulkOrder()

Construit et enregistre une commande entreprise groupée sur un unique modèle de carte.

private processBulkOrder(Request $request, User $user, array<string|int, mixed> $employees, array<string|int, mixed> $availableCards) : Response

Méthode interne actuellement non appelée par les actions du contrôleur. Elle exige une sélection employees non vide et un card_id correspondant à un produit existant, sinon un flash d'erreur ramène au formulaire de commande groupée. Un OrderItem est créé pour chaque employé coché et appartenant au compte, tous avec la même carte, chacun avec sa quantité, sa police, sa couleur et son design (valeurs par défaut 1, Arial, #000000, default). Si aucun employé valide ne subsiste, l'opération est abandonnée.

Contrairement à CompanyOrderController::processOrder(), le paiement est ici toujours cash_on_delivery : la commande est directement confirmée (Order::EN_TRAITEMENT, paiement ACCEPTED_STATUS). La persistance se fait dans une transaction explicite avec rollback() et flash d'erreur en cas d'exception, suivie de l'envoi de l'e-mail de confirmation.

Parameters
$request : Request

Requête HTTP portant la sélection employees et le card_id.

$user : User

Compte entreprise titulaire de la commande.

$employees : array<string|int, mixed>

Liste d'employés du contexte appelant (non utilisée dans le corps).

$availableCards : array<string|int, mixed>

Liste des produits carte disponibles (non utilisée dans le corps).

Return values
Response

Redirection vers admin_company_order_show en cas de succès, vers admin_company_order_bulk en cas d'erreur.

processOrder()

Construit et enregistre une commande entreprise à partir de la sélection d'employés.

private processOrder(Request $request, User $user, array<string|int, mixed> $employees, array<string|int, mixed> $availableCards) : Response

Méthode interne actuellement non appelée par les actions du contrôleur : le flux passe désormais par la session et CompanyPaymentController::processPayment(). Elle exige une sélection employees non vide et lit payment_method dans la requête. Pour chaque employé coché (selected === '1'), l'employé est rechargé et écarté s'il n'appartient pas au compte ; un card_id est obligatoire et le produit doit exister, faute de quoi un flash d'erreur nommant l'employé interrompt le traitement. Chaque OrderItem reçoit la quantité (1 par défaut), la police (Arial), la couleur (#000000) et le design (default) fournis ou leurs valeurs par défaut, et le total est cumulé.

Le mode cash_on_delivery confirme immédiatement la commande (Order::EN_TRAITEMENT et paiement ACCEPTED_STATUS) ; tout autre mode la laisse en Order::EN_ATTENTE avec un paiement PENDING_STATUS. La persistance se fait dans une transaction explicite ; en cas d'exception, rollback() et flash d'erreur. Un e-mail de confirmation est envoyé via CompanyOrderController::sendOrderConfirmationEmail() avec le libellé de statut correspondant. Note : le paiement n'enregistre que la première carte de la commande.

Parameters
$request : Request

Requête HTTP portant la sélection employees et payment_method.

$user : User

Compte entreprise titulaire de la commande.

$employees : array<string|int, mixed>

Liste d'employés du contexte appelant (non utilisée dans le corps).

$availableCards : array<string|int, mixed>

Liste des produits carte disponibles (non utilisée dans le corps).

Return values
Response

Redirection vers admin_company_order_show en cas de succès, vers admin_company_order_new en cas d'erreur.

sendOrderConfirmationEmail()

Envoie au titulaire de la commande l'e-mail de confirmation de commande entreprise.

private sendOrderConfirmationEmail(Order $order, string $paymentMethod) : void

Compose un TemplatedEmail basé sur email/company_order_confirmation.html.twig, expédié depuis l'adresse fournie par le service de messagerie et adressé à l'e-mail porté par la commande. Toute exception est capturée et simplement écrite dans le log PHP (error_log) : un échec d'envoi ne remet jamais en cause la commande déjà enregistrée.

Parameters
$order : Order

Commande dont on confirme l'enregistrement.

$paymentMethod : string

Libellé du mode ou du statut de paiement affiché dans l'e-mail.


        
On this page

Search results