Aller au contenu

Documentation des modules — BConnect POS

Cette documentation décrit l'application par module fonctionnel. Pour chaque module : son rôle, tous les contrôleurs qui entrent en jeu (avec liens vers le code), les routes principales, et les dépendances (services, entités, subscribers, gabarits).

Les liens de type ../src/Controller/...php#L120 pointent vers le fichier source et, quand une ligne est indiquée, directement vers l'action concernée. La source de vérité des routes reste : php bin/console debug:router --show-controllers.

Documentation de référence (phpDocumentor) — chaque contrôleur dispose aussi d'une page HTML générée, listant ses méthodes, signatures et commentaires PHPDoc. Voir la vue d'ensemble des namespaces App\Controller et App\Controller\Api, et la table de correspondance complète en fin de document. Ces liens s'ouvrent depuis une consultation locale du dossier docs/ ou un hébergement (GitHub Pages) ; l'aperçu de code de GitHub n'exécute pas le HTML.

Sommaire

# Module Contrôleurs principaux
1 Authentification & Sécurité AuthController, Api/IdentificationController, Api/RefreshTokenController, Api/SystemTokenController
2 Catalogue (produits de vente) ProductController, CategoryController, FieldOfActivityController
3 Stock d'entrepôt ProductStockController
4 Inventaire InventoryController, InventoryStockController
5 Ventes & Point de vente (POS) SaleController, Api/GenerateReferenceSaleController, Api/MarkSaleAsPaidController
6 Sessions de caisse SessionSaleController, Api/SessionSaleController
7 Fonds / Trésorerie FundController, Api/GetFundInformation, Api/GetFundListAndStatsController
8 Clients CustomerController
9 Fournisseurs SupplierController
10 Commandes d'achat PurchaseOrderController
11 Utilisateurs UserController, Api/CreateUserController, Api/UpdateUserController, Api/AnonymizeUsersController, Api/GetUsersByPointOfSale
12 Configuration & Abonnement ConfigController, SubscriptionController
13 Tableau de bord & Reporting DashboardController, AnalyticsController, Api/GetInformationDashboard, AppController
14 Système & gestion des erreurs ErrorController

Cloisonnement multi-POS : la quasi-totalité des contrôleurs filtre les données sur le pointOfSaleId de l'utilisateur authentifié. Toute nouvelle action doit reproduire ce filtrage pour éviter une fuite de données entre points de vente.


1. Authentification & Sécurité

Rôle — Gérer la connexion web (session Symfony), l'authentification de l'API mobile (JWT via LexikJWTAuthenticationBundle), le rafraîchissement/révocation des tokens, et l'identification d'un même email présent dans plusieurs points de vente.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
AuthController Connexion/déconnexion web + point d'entrée login_check de l'API
Api/IdentificationController /api Liste les POS associés à un email (étape préalable au login mobile)
Api/RefreshTokenController /api/token Renouvellement et révocation des refresh tokens
Api/SystemTokenController /api/system Émission d'un jeton « système » pour les intégrations serveur-à-serveur

Routes principales

Méthode Route Nom Action
GET/POST /login app_login AuthController::login
/logout app.logout AuthController::logout
POST /api/login_check api_login AuthController::apiLogin
POST /api/identify api_identify IdentificationController::__invoke
POST /api/token/refresh api_refresh_token RefreshTokenController::refresh
POST /api/token/revoke api_revoke_token RefreshTokenController::revoke
POST /api/token/revoke-all api_revoke_all_tokens RefreshTokenController::revokeAll
POST /api/system/token api_system_token SystemTokenController::generateSystemToken

Dépendances


2. Catalogue — produits de vente

Rôle — Gestion des produits vendus, de leurs catégories/sous-catégories, variantes, codes-barres, images et domaines d'activité. Inclut l'export, l'archivage et la génération de descriptions assistée par IA.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
ProductController /product CRUD produit, images, code-barres, export, historique, description IA
CategoryController /category CRUD des catégories et sous-catégories, archivage
FieldOfActivityController /field/of/activity Domaines d'activité rattachés aux produits/POS

Routes principales — ProductController

Méthode Route Nom Action
GET /product/ product.index index
GET /product/datatable product.datatable datatable
GET/POST /product/create product.create create
GET/POST /product/update/{id} product.update update
GET /product/show/{id} product.show show
GET /product/product/{id}/barcode product.barcode manageBarcode
GET /product/export/download product.export.download exportDownload
POST /product/generate-description generate_description generateDescription
GET /product/archive/{id} · /desarchive/{id} product.archive · product.desarchive archiver / desarchiver

CategoryController et FieldOfActivityController suivent le même patron (index, datatable, create/update, delete, search, archive/desarchive).

Dépendances


3. Stock d'entrepôt

Rôle — Gestion du stock d'entrepôt (distinct des produits de vente) : entrées, seuils, historiques de mouvement, préparation des commandes d'achat.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
ProductStockController /product/stock CRUD stock d'entrepôt, historiques, archivage, déclenchement de commande d'achat

Routes principales

Méthode Route Nom Action
GET /product/stock/ product.stock.index index
GET /product/stock/datatable product.stock.datatable datatable
GET/POST /product/stock/create product.stock.create create
GET/POST /product/stock/update/{id} product.stock.update update
GET /product/stock/show/{id} product.stock.show show
GET /product/stock/{id}/histories/datatable product.stock.histories.datatable historiesDatatable
GET/POST /product/stock/purchase-order/stock/{id} product.stock.purchase.order purchaseOrderProduct

Dépendances


4. Inventaire

Rôle — Comptages physiques et ajustements. Deux périmètres coexistent : l'inventaire des produits de vente et l'inventaire du stock d'entrepôt.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
InventoryController /inventory Inventaire des produits de vente (unitaire ou global)
InventoryStockController /inventory/stock Inventaire du stock d'entrepôt

Routes principales

Méthode Route Nom Action
GET /inventory/ inventory.index index
GET/POST /inventory/create inventory.create.one createInventoryForOneProduct
GET/POST /inventory/create/all inventory.create.all createInventoryForAllProduct
GET /inventory/show/inventory/{id} inventory.show.retail showDetailInventory
GET/POST /inventory/stock/create/inventory/stock inventory.stock.create.all.product createInventoryForAllProduct
GET /inventory/stock/show/inventory/{id} inventory.stock.show.retail showDetailInventory

Chaque contrôleur fournit aussi datatable, update/delete et archive/desarchive.

Dépendances


5. Ventes & Point de vente (POS)

Rôle — Cœur métier : panier, création de vente, lignes de vente, paiements (dont ventes différées), remises, annulation, facturation (PDF A4 et tickets thermiques ESC/POS), envoi de facture par email, ainsi que l'API POS interne (interface caisse tactile) et l'API mobile consommée par pos-mobile.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
SaleController /sale Ventes web, panier, factures, POS tactile, endpoints mobiles
Api/GenerateReferenceSaleController /api Génération d'une référence de facture unique
Api/MarkSaleAsPaidController /api Règlement d'une vente différée

Routes principales — SaleController

Méthode Route Nom Action
GET /sale/ sale.index index
GET /sale/datatable sale.datatable datatable
POST /sale/cart/add sale.create create
GET /sale/detail/{id} sale.detail showDetailSale
GET /sale/invoice/{id} sale.invoice generateInvoiceBySale
GET /sale/thermal-invoice/{id} sale.thermal_invoice generateThermalInvoice
GET /sale/send/email/{id} sale.send.email sendEmailToCustomer
GET /sale/pos sale.pos pos
GET /sale/export/download sale.export.download exportDownload

Endpoints POS tactile (/sale/api/pos/...)

Méthode Route Action
GET /sale/api/pos/products getProductsForPos
GET /sale/api/pos/product/search searchProductForPos
GET /sale/api/pos/categories getCategoriesForPos
POST /sale/api/pos/cart/add addToCart
GET/PUT/DELETE /sale/api/pos/cart[...] getCart / updateCartItem / removeCartItem / clearPOSCart
POST /sale/api/pos/sale/finalize finalizePOSSale
POST /sale/api/pos-sale processPOSSale (vente issue du mobile)
GET /sale/api/pos/product/barcode/{barcode} voir L1953

Endpoints API mobile complémentaires

Méthode Route Action
GET /api/get-reference-sale GenerateReferenceSaleController::generateInvoiceReference
POST /api/sales/{id}/mark-paid MarkSaleAsPaidController::__invoke

Dépendances

Flux de vente : une vente contrôle la session active, vérifie les quantités, crée Sale + lignes, enregistre les paiements, décrémente le stock, alimente historiques et fonds, puis déclenche les alertes. Une vente différée reste non payée jusqu'à mark-paid. Les effets secondaires (fonds, paiements, notifications) doivent rester idempotents.


6. Sessions de caisse

Rôle — Ouverture/fermeture de sessions de caisse par utilisateur, rattachement des ventes à une session, validation managériale, annulation de vente et édition PDF du détail de session.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
SessionSaleController /session/sale Sessions de caisse côté interface web
Api/SessionSaleController /api (via API Platform) Sessions côté mobile : session active, ouverture, fermeture

Routes principales — web

Méthode Route Nom Action
GET /session/sale/ session.index index
GET /session/sale/start session.start startSession
GET /session/sale/end/{id} session.end closeSession
GET /session/sale/session/{id} session.retail viewSession
GET /session/sale/valide-session/{id} session.valide valideSessionByManager
GET /session/sale/cancel-sale/{id}/{sessionId} session.sale.cancel cancelSale
GET /session/sale/session-detail/{id} session.retail.pdf generatePdfForSessionDetail

API mobile (opérations API Platform sur SessionSale)

Les méthodes de Api/SessionSaleController sont câblées comme opérations #[ApiResource] de l'entité SessionSale (voir docs/api.md) : getActiveSession (GET /api/session_sales/active), startSession (POST /api/session_sales/start), closeSession (PATCH /api/session_sales/{id}/close).

Dépendances


7. Fonds / Trésorerie

Rôle — Suivi du fonds de caisse par point de vente : entrées/sorties, historique des mouvements, statistiques, et impact des ventes et annulations sur le solde.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
FundController /fund Consultation, mouvements (sortie), mise à jour et détail du fonds
Api/GetFundInformation /api État du fonds d'un POS (mobile)
Api/GetFundListAndStatsController via API Platform Liste des fonds et statistiques

Routes principales

Méthode Route Nom Action
GET /fund/ fund.index index
GET /fund/datatable fund.datatable datatable
GET/POST /fund/update/fund/{id} fund.update updateFund
GET/POST /fund/output fund.output ouputFund
GET /fund/show/fund/{id} fund.show showRetailFund
GET /api/point_of_sale/fund/{pointOfSale} api_fund_info GetFundInformation::getFundInfo

Dépendances


8. Clients

Rôle — Répertoire clients (référentiel), avec création (SMS de bienvenue possible), fiche client, recherche, archivage et export DataTable.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
CustomerController /customer CRUD clients, fiche, archivage

Routes principales

Méthode Route Nom Action
GET /customer/ customer.index index
GET /customer/datatable customer.datatable datatable
GET/POST /customer/create customer.create create
GET/POST /customer/update/{id} customer.update update
GET /customer/show/{id} customer.show showCustomer
GET /customer/archive/{id} · /desarchive/{id} customer.archive · customer.desarchive archiver / desarchiver

Dépendances


9. Fournisseurs

Rôle — Référentiel des fournisseurs utilisés par le stock d'entrepôt et les commandes d'achat.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
SupplierController /supplier CRUD fournisseurs, fiche, archivage

Routes principales

Méthode Route Nom Action
GET /supplier/ supplier.index index
GET/POST /supplier/create supplier.create create
GET /supplier/show/{id} supplier.show show
GET/POST /supplier/update/{id} supplier.update update
GET /supplier/datatable supplier.datatable datatable

Dépendances


10. Commandes d'achat

Rôle — Cycle de vie des commandes d'achat auprès des fournisseurs : validation, rejet, suspension, paiement, avec historisation.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
PurchaseOrderController /purchase/... Listes par statut, détail et transitions d'état

Routes principales

Méthode Route Nom Action
GET /purchase/order purchase.order.index index
GET /purchase/order/valid · /rejet · /suspendu purchase.order.valid.index indexValid / indexRejet / indexSuspendu
GET /purchase/order/show/{id} purchase.order.show showRetailPurchaseOrder
GET/POST /purchase/valid/{id} purchase.order.valid validPurchaseOrder
GET/POST /purchase/rejet/{id} purchase.order.rejet rejetPurchaseOrder
GET/POST /purchase/suspend/{id} purchase.order.suspend suspendPurchaseOrder
GET/POST /purchase/paye/{id} purchase.order.paye payePurchaseOrder

Dépendances


11. Utilisateurs

Rôle — Administration des comptes (interface web) et opérations utilisateurs de l'API (création, mise à jour, anonymisation RGPD, récupération par POS).

Contrôleurs impliqués

Contrôleur Préfixe Rôle
UserController /user CRUD comptes, profil, archivage
Api/CreateUserController via API Platform Création utilisateur (hash mot de passe)
Api/UpdateUserController /api/point_of_sale/users Mise à jour utilisateur
Api/AnonymizeUsersController /api/users Anonymisation des comptes d'un POS (ROLE_SYSTEM)
Api/GetUsersByPointOfSale /api/users Liste des utilisateurs d'un POS

Routes principales

Méthode Route Nom Action
GET /user/ user.index index
GET/POST /user/register user.register register
GET/POST /user/update/{id} user.update update
GET /user/users/profile app_user_profil userProfile
PUT/PATCH /api/point_of_sale/users/{id} update_user_api UpdateUserController::updateUser
POST /api/users/anonymize-by-pos api_anonymize_users_by_pos AnonymizeUsersController::anonymizeUsersByPointOfSale
GET /api/users/point_of_sale/{pointOfSale} api_get_user_point_of_sale GetUsersByPointOfSale::getUsersByPointOfSale

Dépendances

  • Entités : User.
  • Sécurité : UserPasswordHasherInterface, rôles (ROLE_SYSTEM pour l'anonymisation).
  • Services : SearchService, DataTableService.
  • Gabarits : templates/user/.

12. Configuration & Abonnement

Rôle — Paramétrage de l'application par POS (identité, logo, options d'impression, fonctionnalités activées) et blocage d'accès en cas d'abonnement expiré.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
ConfigController Écran de configuration du POS, gestion des utilisateurs liés à la config
SubscriptionController Page « abonnement expiré »

Routes principales

Méthode Route Nom Action
GET/POST /config app.config ConfigController::index
GET /delete/config/user/{id} delete.config.user ConfigController::updateUserInConfig
GET /subscription/expired subscription_expired SubscriptionController::expired

Dépendances


13. Tableau de bord & Reporting

Rôle — Vues de synthèse : tableau de bord (KPIs), analytics par catégorie / sous-catégorie / produit, calendrier, et l'agrégat dashboard exposé à l'API mobile.

Contrôleurs impliqués

Contrôleur Préfixe Rôle
DashboardController / Tableau de bord principal (page d'accueil)
AnalyticsController /analytics Analyses détaillées catégorie/sous-catégorie/produit
Api/GetInformationDashboard /api Données du tableau de bord d'un POS (mobile)
AppController /app Calendrier

Routes principales

Méthode Route Nom Action
GET / dashboard DashboardController::dashboard
GET /analytics analytics.index AnalyticsController::index
GET /analytics/category/{id} analytics.category category
GET /analytics/subcategory/{id} analytics.subcategory subcategory
GET /analytics/product/{id} analytics.product product
GET /app/calendar app.calendar AppController::index
GET /api/point_of_sale/{pointOfSale} api_dashboard GetInformationDashboard::dashboard

Dépendances

  • Entités : agrégations sur Sale, Product, Category, Fund.
  • Gabarits : templates/dashboard/, templates/analytics/, templates/app/.

14. Système & gestion des erreurs

Rôle — Traitement centralisé des exceptions, page d'erreur personnalisée et alerting technique (SMS) en cas de défaillance.

Contrôleurs impliqués

Contrôleur Rôle
ErrorController Affiche une page d'erreur et notifie l'incident par SMS

Dépendances


Éléments transverses

Ces briques sont réutilisées par la plupart des modules :

Brique Fichier Usage
Listes serveur (DataTables) DataTableService Toutes les actions *.datatable
Recherche SearchService Toutes les actions *.search
Upload & compression d'image UploaderService Produits, stock, config
Documents PDF PdfService Factures, tickets, détails de session
Email MailerService Factures, alertes
SMS SmsService Alertes stock/vente, incidents
Communication Business PosService, ConfigService, FeatureService Infos POS, fonctionnalités

Pour l'architecture globale, le modèle de données et les intégrations, voir architecture.md, data-model.md et integrations.md.


Pages de référence phpDocumentor

Documentation HTML générée avec phpDocumentor (dossier docs/). Chaque contrôleur possède sa page listant méthodes, signatures et commentaires PHPDoc. La colonne « Source » renvoie au code, la colonne « Réf. générée » à la page phpDocumentor.

Régénération : php -d memory_limit=-1 phpDocumentor.phar -d src/ -t docs/ --force. Vues d'ensemble : App\Controller · App\Controller\Api · index général.

Contrôleurs web

Contrôleur Source Réf. générée (phpDoc)
AnalyticsController code page
AppController code page
AuthController code page
CategoryController code page
ConfigController code page
CustomerController code page
DashboardController code page
ErrorController code page
FieldOfActivityController code page
FundController code page
InventoryController code page
InventoryStockController code page
ProductController code page
ProductStockController code page
PurchaseOrderController code page
SaleController code page
SessionSaleController code page
SubscriptionController code page
SupplierController code page
UserController code page

Contrôleurs API (App\Controller\Api)

Contrôleur Source Réf. générée (phpDoc)
Api/AnonymizeUsersController code page
Api/CreateUserController code page
Api/GenerateReferenceSaleController code page
Api/GetFundInformation code page
Api/GetFundListAndStatsController code page
Api/GetInformationDashboard code page
Api/GetUsersByPointOfSale code page
Api/IdentificationController code page
Api/MarkSaleAsPaidController code page
Api/RefreshTokenController code page
Api/SessionSaleController code page
Api/SystemTokenController code page
Api/UpdateUserController code page