BCard - Documentation technique

OrderStatusController extends AbstractController
in package

Pilote le cycle de vie des commandes via des points d'entrée JSON consommés par le back-office.

Toutes les actions renvoient du JSON et sont destinées à des appels AJAX depuis les écrans de gestion des commandes. Le contrôleur traduit les statuts « anglais » envoyés par l'interface vers les constantes métier de Order, refuse les transitions non autorisées, met à jour les informations de livraison, journalise chaque changement via AuditLogger et notifie le client par email (échec d'envoi non bloquant).

Aucun préfixe de route au niveau de la classe. Authentification complète requise (IS_AUTHENTICATED_FULLY) ; chaque action exige en plus ROLE_ADMIN ou ROLE_OPERATOR via OrderStatusController::assertBackofficeStaffAccess().

Attributes
#[IsGranted]
'IS_AUTHENTICATED_FULLY'

Table of Contents

Properties

$auditLogger  : AuditLogger
$entityManager  : EntityManagerInterface
$mailerService  : MailerService

Methods

__construct()  : mixed
getAvailableStatuses()  : JsonResponse
Renvoie la liste des statuts de commande sélectionnables dans l'interface.
updateShippingInfo()  : JsonResponse
Met à jour les informations de livraison d'une commande.
updateStatus()  : JsonResponse
Met à jour le statut d'une commande à partir d'une charge utile JSON.
assertBackofficeStaffAccess()  : void
Vérifie que l'utilisateur courant fait partie du personnel du back-office.
getStatusLabel()  : string
Traduit une constante de statut de commande en libellé affichable.
isValidStatusTransition()  : bool
Indique si le passage d'un statut de commande à un autre est autorisé.
sendStatusNotification()  : void
Notifie le client du changement de statut de sa commande.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, MailerService $mailerService, AuditLogger $auditLogger) : mixed
Parameters
$entityManager : EntityManagerInterface

Gestionnaire d'entités utilisé pour flusher les modifications de commande et de paiement.

$mailerService : MailerService

Service d'envoi des notifications de changement de statut au client.

$auditLogger : AuditLogger

Service de journalisation des actions d'audit sur les commandes.

getAvailableStatuses()

Renvoie la liste des statuts de commande sélectionnables dans l'interface.

public getAvailableStatuses() : JsonResponse

Exige ROLE_ADMIN ou ROLE_OPERATOR. La liste est codée en dur et ne contient que les cinq statuts principaux (EN_ATTENTE, EN_TRAITEMENT, TERMINER, ANNULER, REMBOURSE), avec leur libellé d'affichage ; EN_ATTENTE_PAIEMENT n'y figure pas.

Route : /admin/order/statuses (GET), nom admin_order_get_statuses. Requiert ROLE_ADMIN ou ROLE_OPERATOR.

Attributes
#[Route]
'/admin/order/statuses'
$name: 'admin_order_get_statuses'
$methods: ['GET']
Return values
JsonResponse

{"statuses": [{"value": string, "label": string}, ...]}.

updateShippingInfo()

Met à jour les informations de livraison d'une commande.

public updateShippingInfo(Order $order, Request $request) : JsonResponse

Exige ROLE_ADMIN ou ROLE_OPERATOR. Applique, si les clés correspondantes sont présentes dans le JSON, le numéro de suivi (tracking_number), le transporteur (carrier), la date d'expédition (shipped_at) et la date de livraison (delivered_at). Contrairement à OrderStatusController::updateStatus(), cette action modifie le statut sans passer par la validation des transitions : renseigner shipped_at bascule la commande de EN_ATTENTE vers EN_TRAITEMENT, et renseigner delivered_at la force à TERMINER. L'opération est journalisée par AuditLogger avec l'ancien et le nouveau statut. Aucun email n'est envoyé.

Route : /admin/order/{id}/shipping (POST), nom admin_order_update_shipping. Requiert ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$order : Order

Commande résolue automatiquement depuis l'identifiant de l'URL.

$request : Request

Requête HTTP dont le corps JSON porte les informations de livraison.

Attributes
#[Route]
'/admin/order/{id}/shipping'
$name: 'admin_order_update_shipping'
$methods: ['POST']
Return values
JsonResponse

{success: true, message, tracking_number, carrier, shipped_at, delivered_at} en cas de succès ; statut 400 si le JSON est invalide ; statut 500 si une exception survient (date non analysable, erreur de flush, etc.).

updateStatus()

Met à jour le statut d'une commande à partir d'une charge utile JSON.

public updateStatus(Order $order, Request $request) : JsonResponse

Exige ROLE_ADMIN ou ROLE_OPERATOR. Le corps de la requête doit contenir une clé status parmi pending, processing, shipped, delivered, cancelled, refunded ou paid, traduite vers les constantes de Order (shipped est mappé sur EN_TRAITEMENT et paid sur EN_ATTENTE). La transition est ensuite validée par OrderStatusController::isValidStatusTransition() et rejetée si elle n'est pas permise.

Effets de bord : pour paid, le premier paiement de la commande passe au statut « complété » et se voit affecter la méthode MANUAL s'il n'en avait pas, avec mise à jour de updatedAt. Les champs de suivi optionnels tracking_number, carrier, shipped_at et delivered_at sont appliqués s'ils sont fournis ; shipped renseigne automatiquement la date d'expédition et delivered la date de livraison. Une annulation enregistre cancelledAt et, si présente, la clé cancellation_reason. Le changement est journalisé (ancien et nouveau statut, numéro de suivi, transporteur), puis une notification email est tentée via OrderStatusController::sendStatusNotification() — son échec est ignoré.

Route : /admin/order/{id}/update-status (POST), nom admin_order_update_status. Requiert ROLE_ADMIN ou ROLE_OPERATOR.

Parameters
$order : Order

Commande résolue automatiquement depuis l'identifiant de l'URL.

$request : Request

Requête HTTP dont le corps JSON porte le nouveau statut et les informations de suivi.

Attributes
#[Route]
'/admin/order/{id}/update-status'
$name: 'admin_order_update_status'
$methods: ['POST']
Return values
JsonResponse

{success: true, message, new_status, status_label} en cas de succès ; statut 400 pour un JSON invalide, un statut manquant, un statut inconnu ou une transition interdite ; statut 500 si une exception est levée pendant le traitement.

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 début de chacune des actions publiques du contrôleur ; les rôles ROLE_MANAGER et ROLE_SUPPORT ne sont donc pas admis ici.

Tags
throws
AccessDeniedException

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

getStatusLabel()

Traduit une constante de statut de commande en libellé affichable.

private getStatusLabel(string $status) : string

Couvre EN_ATTENTE, EN_TRAITEMENT, TERMINER, ANNULER et REMBOURSE ; tout autre statut (par exemple EN_ATTENTE_PAIEMENT) est renvoyé tel quel.

Parameters
$status : string

Constante de statut de Order.

Return values
string

Libellé lisible, ou le statut d'origine si aucun libellé n'est défini.

isValidStatusTransition()

Indique si le passage d'un statut de commande à un autre est autorisé.

private isValidStatusTransition(string $currentStatus, string $newStatus) : bool

Machine à états implémentée sous forme de table : depuis EN_ATTENTE vers EN_TRAITEMENT ou ANNULER ; depuis EN_TRAITEMENT vers TERMINER ou ANNULER ; depuis TERMINER uniquement vers REMBOURSE ; depuis EN_ATTENTE_PAIEMENT vers EN_ATTENTE ou ANNULER. Les statuts ANNULER et REMBOURSE sont terminaux. Un statut courant absent de la table n'autorise aucune transition.

Parameters
$currentStatus : string

Statut actuel de la commande (constante de Order).

$newStatus : string

Statut cible demandé (constante de Order).

Return values
bool

true si la transition figure dans la table des transitions autorisées.

sendStatusNotification()

Notifie le client du changement de statut de sa commande.

private sendStatusNotification(Order $order, string $status) : void

Délègue à MailerService::sendOrderStatusUpdate() en ne lui transmettant que la commande : le paramètre $status n'est pas utilisé, le service déduisant le contenu du message du statut déjà enregistré sur l'entité. Toute exception d'envoi est capturée et volontairement ignorée afin de ne pas faire échouer la mise à jour du statut.

Parameters
$order : Order

Commande concernée par la notification.

$status : string

Statut cible (non exploité dans le corps de la méthode).


        
On this page

Search results