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
$cardRepository
private
CardRepository
$cardRepository
$employeeRepository
private
EmployeeRepository
$employeeRepository
$entityManager
private
EntityManagerInterface
$entityManager
$mailer
private
MailerInterface
$mailer
$mailerService
private
MailerService
$mailerService
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
TemplatedEmailde 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
employeeset lecard_iden POST.
Tags
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
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
employeesen POST.
Tags
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
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
employeeset lecard_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
employeesetpayment_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.