# Documentation des Routes API - Module Central


| **Méthode** | **URL**                       | **Description**                                                       | **Paramètres**                            | **Sortie**                                             | **Headers**                                                                                       |
|-------------|-------------------------------|-----------------------------------------------------------------------|-------------------------------------------|--------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| POST        | `/inscription`                | Inscription d'une société via le contrôleur `SubscriptionController`. | *Aucun*                                   | Réponse JSON (détails de l'inscription)                | `api`, `localization` (middleware)                                                                |
| GET         | `/get/countries`              | Récupérer la liste des pays disponibles.                              | *Aucun*                                   | Réponse JSON (liste des pays)                          | `api`, `localization` (middleware)                                                                |
| GET         | `/get/currencies/collection`  | Récupérer la collection des devises disponibles.                      | *Aucun*                                   | Réponse JSON (liste des devises)                       | `api`, `localization` (middleware)                                                                |
| GET         | `/get/gender/enum`            | Récupérer les options de genre via l'énumération `GenderEnum`.        | *Aucun*                                   | Réponse JSON (options de genre)                        | `api`, `localization` (middleware)                                                                |
| GET         | `/get/society/infos`          | Récupérer les informations du tenant (société)                        | *Aucun*                                   | Réponse JSON (informations du tenant)                  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/suit/apps`              | Récupérer la liste des applications de la suite.                      | *Aucun*                                   | Réponse JSON (liste des applications)                  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/suit/modules`           | Récupérer la liste des modules de la suite.                           | *Aucun*                                   | Réponse JSON (liste des modules)                       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/suit/installed/apps`    | Récupérer la liste des applications installées.                       | *Aucun*                                   | Réponse JSON (liste des applications installées)       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/suit/installed/modules` | Récupérer la liste des modules installés.                             | *Aucun*                                   | Réponse JSON (liste des modules installés)             | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/install/modules`            | Installer des modules spécifiques.                                    | Corps de la requête (détails des modules) | Réponse JSON (confirmation d'installation)             | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/check/{module}/module`      | Vérifier l'état d'un module spécifique.                               | `{module}` (nom du module)                | Réponse JSON (état du module)                          | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/smtpsettings`           | Récupérer les paramètres SMTP actuels.                                | *Aucun*                                   | Réponse JSON (paramètres SMTP)                         | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/store/smtpsettings`         | Enregistrer ou mettre à jour les paramètres SMTP.                     | Corps de la requête (détails SMTP)        | Réponse JSON (confirmation d'enregistrement)           | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/banks/collection`       | Récupère la collection des banques pour une société spécifique.       | Aucun                                     | Réponse JSON (listes des information bancaire)         | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                                    |
| POST        | `/store/bank`                 | Enregistre les informations bancaires d'une société.                  | **Corps de la requête :                   | Réponse JSON (Enregistrement des information bancaire) |`api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`
| PATCH       | `/update/{bankDetail}/bank`   | Met à jour les informations bancaires existantes.                     | `{bankDetail}`(nom du bank)               | Réponse JSON (Modification des information bancaire)   | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` 


## Détails des Paramètres

- **Aucun** : Ces routes ne nécessitent pas de paramètres dans l'URL.
- **Corps de la requête** : Certaines routes POST nécessitent des informations spécifiques dans le corps de la requête.
- **{module}** : Paramètre d'URL correspondant au nom du module à vérifier.


## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Pour indiquer que la route fait partie de l'API.
- **localization** : Pour gérer la localisation des réponses en fonction de la langue de l'utilisateur.
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.








# Documentation des Routes API - Module de Gestion des Contacts

| **Méthode** | **URL**                                           | **Description**                                                         | **Paramètres**                                     | **Sortie**                                                    | **Headers**                                       |
|-------------|---------------------------------------------------|-------------------------------------------------------------------------|----------------------------------------------------|---------------------------------------------------------------|--------------------------------------------------|
| GET         | `/contact/scroll`                                 | Récupérer la liste paginée des contacts.                                | *Aucun*                                            | Réponse JSON (liste paginée des contacts)                     | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/contacts/collection`                        | Récupérer la collection de contacts.                                    | *Aucun*                                            | Réponse JSON (collection des contacts)                        | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/contacts/datatables`                            | Récupérer les contacts sous forme de tableau de données (datatables).    | *Aucun*                                            | Réponse JSON (tableau de données des contacts)                | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/store/contact`                                  | Enregistrer un nouveau contact.                                         | Corps de la requête (détails du contact)           | Réponse JSON (confirmation d'enregistrement)                  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/contact/upload-avatar`                          | Télécharger l'avatar d'un contact.                                      | Corps de la requête (image de l'avatar)            | Réponse JSON (confirmation de téléchargement)                 | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH       | `/contact/{contact}/update`                       | Mettre à jour les informations d'un contact.                            | `{contact}` (ID du contact), Corps de la requête   | Réponse JSON (confirmation de mise à jour)                    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH       | `/contact/{contact}/set/address`                  | Définir l'adresse d'un contact.                                         | `{contact}` (ID du contact), Corps de la requête   | Réponse JSON (confirmation de mise à jour)                    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/contact/{contact}/details`                      | Obtenir les détails d'un contact spécifique.                            | `{contact}` (ID du contact)                        | Réponse JSON (détails du contact)                              | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/contact/supplier/collection`                | Récupérer la collection des fournisseurs de contact.                    | *Aucun*                                            | Réponse JSON (collection des fournisseurs)                    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/contact/{contact}/invoices/stats`           | Récupérer les statistiques de facturation pour un contact.               | `{contact}` (ID du contact)                        | Réponse JSON (statistiques des factures)                      | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/contact/{contact}/collaborators`                | Lister les collaborateurs d'un contact.                                 | `{contact}` (ID du contact)                        | Réponse JSON (liste des collaborateurs)                       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/contact/without/company`                    | Récupérer la liste des contacts sans entreprise.                        | *Aucun*                                            | Réponse JSON (liste des contacts sans entreprise)             | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/contact/{contact}/add/collaborators`            | Ajouter des collaborateurs à un contact.                                | `{contact}` (ID du contact), Corps de la requête   | Réponse JSON (confirmation d'ajout de collaborateurs)         | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH       | `/contact/{contact}/update/collaborators`         | Mettre à jour les collaborateurs d'un contact.                          | `{contact}` (ID du contact), Corps de la requête   | Réponse JSON (confirmation de mise à jour des collaborateurs) | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| DELETE      | `/contact/{contact}/delete/collaborators`         | Supprimer des collaborateurs d'un contact.                              | `{contact}` (ID du contact)                        | Réponse JSON (confirmation de suppression)                    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| DELETE      | `/contact/{contact}/address/{address}/delete`     | Supprimer une adresse d'un contact.                                     | `{contact}`, `{address}` (ID de l'adresse)         | Réponse JSON (confirmation de suppression)                    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH       | `/contact/{contact}/address/{address}/set/default` | Définir une adresse par défaut pour un contact.                     | `{contact}`, `{address}` (ID de l'adresse)         | Réponse JSON (confirmation de la mise à jour)                 | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/download-contact-model`                         | Télécharger le modèle de contact au format Excel.                       | *Aucun*                                            | Fichier Excel                                                  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| POST        | `/import/contacts`                                | Importer des contacts à partir d'un fichier Excel.                      | Fichier Excel (corps de la requête)                | Réponse JSON (confirmation d'importation)                     | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/export/contacts`                                | Exporter les contacts au format Excel.                                  | *Aucun*                                            | Fichier Excel                                                  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/countries/collection`                       | Récupérer la collection des pays.                                       | *Aucun*                                            | Réponse JSON (collection des pays)                             | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/cities/collection`                          | Récupérer la collection des villes.                                     | *Aucun*                                            | Réponse JSON (collection des villes)                           | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/gender/enum`                                | Obtenir les options de genre.                                           | *Aucun*                                            | Réponse JSON (options de genre)                                | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET         | `/get/contactType/enum`                           | Obtenir les options de type de contact.                                 | *Aucun*                                            | Réponse JSON (options de type de contact)                      | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |


# Détails des Paramètres

- **{contact}** : Paramètre d'URL correspondant à l'ID du contact concerné par l'action.

- **{address}** : Paramètre d'URL correspondant à l'ID de l'adresse associée à un contact.

- **Corps de la requête** : Certaines routes POST et PATCH nécessitent des informations spécifiques dans le corps de la requête, au format JSON.
  
- **Fichier Excel** : Certaines routes d'importation/exportation nécessitent un fichier au format Excel (`.xlsx`).
  

## Headers

Ces routes utilisent les middlewares suivants :

- **api** : Indique que la route fait partie de l'API.

- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.

- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.

- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.










# Documentation des Routes - Module de Gestion des Devis

## Détails des Routes

| URL                                             | Description                                      | Paramètres                                              | Sortie                                              | Headers                                              |
|-------------------------------------------------|--------------------------------------------------|---------------------------------------------------------|-----------------------------------------------------|------------------------------------------------------|
| `POST /store/estimate`                         | Crée un nouveau devis.                          | Corps de la requête : détails du devis.                | Réponse JSON avec les informations du devis créé.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/{estimate}/estimate`             | Met à jour un devis existant.                    | `{estimate}` : ID du devis.                            | Réponse JSON avec les informations du devis mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/estimates/datatables`                 | Récupère les devis pour affichage dans un tableau. | Aucun.                                                | Réponse JSON avec les données des devis pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/approved/estimates/datatables`        | Récupère les devis approuvés pour affichage dans un tableau. | Aucun.                                                | Réponse JSON avec les données des devis approuvés pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/estimate/{estimate}`                   | Récupère les détails d'un devis spécifique.       | `{estimate}` : ID du devis.                            | Réponse JSON avec les détails du devis.             | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/estimate/statistics`                   | Récupère les statistiques des devis.              | Aucun.                                                | Réponse JSON avec les statistiques des devis.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/estimate/pdf/{estimate}`               | Télécharge le PDF d'un devis.                    | `{estimate}` : ID du devis.                            | Fichier PDF du devis.                              | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /send/estimate/{estimate}/email`           | Envoie un devis par email.                       | `{estimate}` : ID du devis.                            | Réponse JSON confirmant l'envoi de l'email.         | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /cancel-email/estimate/{estimate}/email`   | Annule l'envoi d'un devis par email.             | `{estimate}` : ID du devis.                            | Réponse JSON confirmant l'annulation de l'envoi.    | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `DELETE /delete/{estimate}/estimate`             | Supprime un devis spécifique.                    | `{estimate}` : ID du devis.                            | Réponse JSON confirmant la suppression du devis.    | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/estimate/{estimate}/invoice`        | Crée une facture à partir d'un devis.            | `{estimate}` : ID du devis.                            | Réponse JSON avec les informations de la facture créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /duplicate/{estimate}/estimate`            | Duplique un devis existant.                      | `{estimate}` : ID du devis.                            | Réponse JSON avec les informations du devis dupliqué. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /set/estimate/{estimate}/validated`       | Définit un devis comme validé.                   | `{estimate}` : ID du devis.                            | Réponse JSON confirmant la validation du devis.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /upload/validated/estimate/{invoice}/files`| Télécharge des fichiers associés à un devis validé. | `{invoice}` : ID de la facture associée.              | Réponse JSON confirmant l'upload des fichiers.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/estimate/{estimate}/status`       | Change le statut d'un devis.                     | `{estimate}` : ID du devis.                            | Réponse JSON avec les informations du devis mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /estimate/status/enum`                      | Récupère les options de statut des devis.         | Aucun.                                                | Réponse JSON avec les options de statut des devis.  | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |

## Headers

Ces routes utilisent les middlewares suivants :

- **api** : Indique que la route fait partie de l'API.

- **auth:api** : Authentification via un token API.

- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.

- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.

- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.








# Documentation des Routes - Module de Gestion des Factures

## Détails des Routes

| URL                                              | Description                                     | Paramètres                                                | Sortie                                             | Headers                                              |
|--------------------------------------------------|-------------------------------------------------|-----------------------------------------------------------|----------------------------------------------------|------------------------------------------------------|
| `POST /store/invoice`                           | Crée une nouvelle facture.                     | Corps de la requête : détails de la facture.             | Réponse JSON avec les informations de la facture créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/{invoice}/invoice`                | Met à jour une facture existante.               | `{invoice}` : ID de la facture.                          | Réponse JSON avec les informations de la facture mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/invoices/datatables`                   | Récupère les factures pour affichage dans un tableau. | Aucun.                                                | Réponse JSON avec les données des factures pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/invoice/{invoice}`                     | Récupère les détails d'une facture spécifique.  | `{invoice}` : ID de la facture.                          | Réponse JSON avec les détails de la facture.      | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/invoice/{invoice}/credit/note`      | Crée une note de crédit pour une facture.       | `{invoice}` : ID de la facture.                          | Réponse JSON avec les informations de la note de crédit créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/invoice/pdf/{invoice}`                 | Télécharge le PDF d'une facture.               | `{invoice}` : ID de la facture.                          | Fichier PDF de la facture.                        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /send/invoice/{invoice}/email`             | Envoie une facture par email.                  | `{invoice}` : ID de la facture.                          | Réponse JSON confirmant l'envoi de l'email.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /cancel-email/invoice/{invoice}/email`     | Annule l'envoi d'une facture par email.        | `{invoice}` : ID de la facture.                          | Réponse JSON confirmant l'annulation de l'envoi.  | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /set/invoice/{invoice}/validated`         | Définit une facture comme validée.              | `{invoice}` : ID de la facture.                          | Réponse JSON confirmant la validation de la facture. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /set/invoice/{invoice}/archived`          | Archive une facture.                           | `{invoice}` : ID de la facture.                          | Réponse JSON confirmant l'archivage de la facture. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /upload/validated/invoice/{invoice}/files` | Télécharge des fichiers associés à une facture validée. | `{invoice}` : ID de la facture validée.                  | Réponse JSON confirmant l'upload des fichiers.    | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/invoice/payment`                    | Crée un paiement pour une facture.              | Corps de la requête : détails du paiement.               | Réponse JSON avec les informations du paiement créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/acompte/invoice/payment`            | Crée un acompte pour une facture.              | Corps de la requête : détails de l'acompte.              | Réponse JSON avec les informations de l'acompte créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/payment/{payment}/status`         | Met à jour le statut d'un paiement.             | `{payment}` : ID du paiement.                            | Réponse JSON avec les informations du paiement mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /cancel/payment/{payment}`                | Annule un paiement.                             | `{payment}` : ID du paiement.                            | Réponse JSON confirmant l'annulation du paiement. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /payment/status/enum`                       | Récupère les options de statut de paiement.      | Aucun.                                                | Réponse JSON avec les options de statut des paiements. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /invoice/status/enum`                       | Récupère les options de statut des factures.    | Aucun.                                                | Réponse JSON avec les options de statut des factures. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |

# Headers

Ces routes utilisent les middlewares suivants :

- **api** : Indique que la route fait partie de l'API.

- **auth:api** : Authentification via un token API.

- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.

- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.

- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.








# Documentation des Routes API - Module Pipeline

## Routes de Gestion des Tags

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/tags/collection`                 | Récupère la collection des tags.                  | Aucun.                                                | Réponse JSON avec la collection des tags.             | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/tags/datatables`                 | Récupère les tags pour affichage dans un tableau.  | Aucun.                                                | Réponse JSON avec les données des tags pour tableau.  | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /store/tag`                         | Crée un nouveau tag.                              | Corps de la requête : détails du tag.                 | Réponse JSON avec les informations du tag créé.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{tag}/tag`                  | Met à jour un tag existant.                       | `{tag}` : ID du tag.                                  | Réponse JSON avec les informations du tag mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{tag}/tag`                 | Supprime un tag.                                 | `{tag}` : ID du tag.                                  | Réponse JSON confirmant la suppression du tag.        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Gestion des Sources

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/sources/collection`              | Récupère la collection des sources.               | Aucun.                                                | Réponse JSON avec la collection des sources.          | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/sources/datatables`              | Récupère les sources pour affichage dans un tableau. | Aucun.                                             | Réponse JSON avec les données des sources pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /store/source`                      | Crée une nouvelle source.                        | Corps de la requête : détails de la source.           | Réponse JSON avec les informations de la source créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{source}/source`             | Met à jour une source existante.                  | `{source}` : ID de la source.                          | Réponse JSON avec les informations de la source mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{source}/source`            | Supprime une source.                             | `{source}` : ID de la source.                          | Réponse JSON confirmant la suppression de la source.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Gestion des Raisons

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/reasons/collection`              | Récupère la collection des raisons.               | Aucun.                                                | Réponse JSON avec la collection des raisons.          | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/reasons/datatables`              | Récupère les raisons pour affichage dans un tableau. | Aucun.                                             | Réponse JSON avec les données des raisons pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /store/reason`                      | Crée une nouvelle raison.                        | Corps de la requête : détails de la raison.           | Réponse JSON avec les informations de la raison créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{reason}/reason`             | Met à jour une raison existante.                  | `{reason}` : ID de la raison.                           | Réponse JSON avec les informations de la raison mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{reason}/reason`            | Supprime une raison.                             | `{reason}` : ID de la raison.                           | Réponse JSON confirmant la suppression de la raison.    | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Gestion des Activités

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/typeActivities/collection`        | Récupère la collection des types d'activités.      | Aucun.                                                | Réponse JSON avec la collection des types d'activités. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/typeActivities/datatables`        | Récupère les types d'activités pour affichage dans un tableau. | Aucun.                                            | Réponse JSON avec les données des types d'activités pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /store/typeActivity`                  | Crée un nouveau type d'activité.                   | Corps de la requête : détails du type d'activité.      | Réponse JSON avec les informations du type d'activité créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{typeActivity}/typeActivity`  | Met à jour un type d'activité existant.            | `{typeActivity}` : ID du type d'activité.              | Réponse JSON avec les informations du type d'activité mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/typeActivity/{typeActivity}/status` | Change le statut d'un type d'activité.              | `{typeActivity}` : ID du type d'activité.              | Réponse JSON confirmant la mise à jour du statut du type d'activité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{typeActivity}/typeActivity` | Supprime un type d'activité.                      | `{typeActivity}` : ID du type d'activité.              | Réponse JSON confirmant la suppression du type d'activité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Gestion des Opportunités

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/opportunities/stats`              | Récupère les statistiques des opportunités par état. | Aucun.                                                | Réponse JSON avec les statistiques des opportunités.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/opportunities/forecast`           | Récupère les prévisions des opportunités.          | Aucun.                                                | Réponse JSON avec les prévisions des opportunités.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/opportunities/collection`         | Récupère la collection des opportunités.           | Aucun.                                                | Réponse JSON avec la collection des opportunités.      | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/opportunities/datatables`         | Récupère les opportunités pour affichage dans un tableau. | Aucun.                                            | Réponse JSON avec les données des opportunités pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/lost/opportunities/collection`    | Récupère la collection des opportunités perdues.   | Aucun.                                                | Réponse JSON avec la collection des opportunités perdues. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/opportunity/{opportunity}/histories` | Récupère les historiques d'état d'une opportunité.  | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON avec les historiques d'état de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/opportunity/{opportunity}/activities` | Récupère les activités d'une opportunité.           | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON avec les activités de l'opportunité.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /show/{opportunity}/opportunity`        | Affiche les détails d'une opportunité.              | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON avec les détails de l'opportunité.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /store/opportunity`                   | Crée une nouvelle opportunité.                     | Corps de la requête : détails de l'opportunité.        | Réponse JSON avec les informations de l'opportunité créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{opportunity}/opportunity`    | Met à jour une opportunité existante.              | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON avec les informations de l'opportunité mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /duplicate/{opportunity}/opportunity`  | Duplique une opportunité.                         | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON avec les informations de l'opportunité dupliquée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{opportunity}/opportunity`   | Supprime une opportunité.                         | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la suppression de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/opportunity/{opportunity}/status` | Change le statut d'une opportunité.                | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la mise à jour du statut de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /archive/opportunity/{opportunity}`    | Archive une opportunité.                          | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant l'archivage de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /set/opportunity/{opportunity}/lost/status` | Marque une opportunité comme perdue.                | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la mise à jour du statut de perte de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /change/opportunity/{opportunity}/state` | Change l'état d'une opportunité.                   | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la mise à jour de l'état de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /add/opportunity/{opportunity}/feeling` | Ajoute un sentiment à une opportunité.             | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant l'ajout du sentiment à l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /add/opportunity/{opportunity}/followers` | Ajoute des followers à une opportunité.            | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant l'ajout des followers à l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/opportunity/{opportunity}/follower` | Supprime un follower d'une opportunité.            | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la suppression du follower de l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /upload/opportunity/{opportunity}/files` | Télécharge des fichiers pour une opportunité.      | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant le téléchargement des fichiers. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/opportunity/{file}/file`      | Supprime un fichier d'une opportunité.            | `{file}` : ID du fichier.                              | Réponse JSON confirmant la suppression du fichier.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /set/opportunity/{opportunity}/prospect` | Définit une opportunité comme prospect.            | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la mise à jour du statut de prospect. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `POST /add/opportunity/{opportunity}/collaborators` | Ajoute des collaborateurs à une opportunité.       | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant l'ajout des collaborateurs à l'opportunité. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/opportunity/{opportunity}/collaborators` | Supprime des collaborateurs d'une opportunité.      | `{opportunity}` : ID de l'opportunité.                 | Réponse JSON confirmant la suppression des collaborateurs. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Gestion des Activités

| **Route**                                   | **Description**                                    | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|---------------------------------------------|----------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `POST /store/activity`                     | Crée une nouvelle activité.                       | Corps de la requête : détails de l'activité.          | Réponse JSON avec les informations de l'activité créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `PATCH /update/{activity}/activity`        | Met à jour une activité existante.                | `{activity}` : ID de l'activité.                       | Réponse JSON avec les informations de l'activité mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `DELETE /delete/{activity}/activity`       | Supprime une activité.                           | `{activity}` : ID de l'activité.                       | Réponse JSON confirmant la suppression de l'activité.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |

## Routes de Statistiques

| **Route**                                          | **Description**                                      | **Paramètres**                                         | **Réponse**                                            | **Middleware**                                                                                               |
|----------------------------------------------------|------------------------------------------------------|-------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/contacts/stats`                        | Récupère les statistiques des contacts.              | Aucun.                                                | Réponse JSON avec les statistiques des contacts.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |
| `GET /get/contacts/stats/total`                   | Récupère les statistiques totales des contacts.      | Aucun.                                                | Réponse JSON avec les statistiques totales des contacts. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`           |


## Détails des Paramètres

- **Corps de la requête** : Certaines routes POST nécessitent des informations spécifiques dans le corps de la requête.
- **{tag}** : ID du tag à mettre à jour ou supprimer.
- **{source}** : ID de la source d'opportunité à mettre à jour ou supprimer.
- **{reason}** : ID de la raison à mettre à jour ou supprimer.
- **{activity}** : ID de l'activité à mettre à jour ou supprimer.
- **{opportunity}** : ID de l'opportunité pour les opérations liées aux opportunités.

## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.
















# Documentation des Routes API - Product

## Routes de Gestion des Taxes

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/taxes/collection`            | Récupère la collection des taxes.            | Aucun.                                              | Réponse JSON avec la collection des taxes.          | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/taxes/datatables`             | Récupère les données des taxes pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des taxes pour tableau. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/taxe`                     | Crée une nouvelle taxe.                      | Corps de la requête : détails de la taxe.            | Réponse JSON avec les informations de la taxe créée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{taxe}/taxe`             | Met à jour une taxe existante.               | `{taxe}` : ID de la taxe.                            | Réponse JSON avec les informations de la taxe mise à jour. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{taxe}/taxe`            | Supprime une taxe.                          | `{taxe}` : ID de la taxe.                            | Réponse JSON confirmant la suppression de la taxe.   | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Catégories

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/categories/collection`       | Récupère la collection des catégories.       | Aucun.                                              | Réponse JSON avec la collection des catégories.     | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/categories/datatables`        | Récupère les données des catégories pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des catégories pour tableau. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/category`                 | Crée une nouvelle catégorie.                 | Corps de la requête : détails de la catégorie.       | Réponse JSON avec les informations de la catégorie créée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{category}/category`     | Met à jour une catégorie existante.          | `{category}` : ID de la catégorie.                    | Réponse JSON avec les informations de la catégorie mise à jour. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{category}/category/status` | Met à jour le statut d'une catégorie.       | `{category}` : ID de la catégorie.                    | Réponse JSON avec les informations mises à jour.    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{category}/category`    | Supprime une catégorie.                     | `{category}` : ID de la catégorie.                    | Réponse JSON confirmant la suppression de la catégorie. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Attributs

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/attributs/collection`        | Récupère la collection des attributs.         | Aucun.                                              | Réponse JSON avec la collection des attributs.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/attributs/datatables`         | Récupère les données des attributs pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des attributs pour tableau. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/attribut`                 | Crée un nouvel attribut.                    | Corps de la requête : détails de l'attribut.         | Réponse JSON avec les informations de l'attribut créé. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/{attribut}/attribut/value` | Crée une nouvelle valeur pour un attribut.   | `{attribut}` : ID de l'attribut.                      | Réponse JSON avec les informations de la valeur créée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{attribut}/attribut`     | Met à jour un attribut existant.             | `{attribut}` : ID de l'attribut.                      | Réponse JSON avec les informations de l'attribut mise à jour. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{attribut}/attribut`    | Supprime un attribut.                      | `{attribut}` : ID de l'attribut.                      | Réponse JSON confirmant la suppression de l'attribut. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Variations

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/variations/collection`       | Récupère la collection des variations.        | Aucun.                                              | Réponse JSON avec la collection des variations.     | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/variation`                | Crée une nouvelle variation.                | Corps de la requête : détails de la variation.       | Réponse JSON avec les informations de la variation créée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{variation}/variation`   | Met à jour une variation existante.         | `{variation}` : ID de la variation.                  | Réponse JSON avec les informations de la variation mise à jour. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{variation}/variation`  | Supprime une variation.                    | `{variation}` : ID de la variation.                  | Réponse JSON confirmant la suppression de la variation. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Marques

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/brands/collection`           | Récupère la collection des marques.          | Aucun.                                              | Réponse JSON avec la collection des marques.         | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/brands/datatables`            | Récupère les données des marques pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des marques pour tableau. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/brand`                   | Crée une nouvelle marque.                   | Corps de la requête : détails de la marque.          | Réponse JSON avec les informations de la marque créée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{brand}/brand`           | Met à jour une marque existante.            | `{brand}` : ID de la marque.                          | Réponse JSON avec les informations de la marque mise à jour. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{brand}/brand`          | Supprime une marque.                       | `{brand}` : ID de la marque.                          | Réponse JSON confirmant la suppression de la marque. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Produits

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/products/collection`         | Récupère la collection des produits.         | Aucun.                                              | Réponse JSON avec la collection des produits.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/products/datatables`          | Récupère les données des produits pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des produits pour tableau. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/product`                  | Crée un nouveau produit.                    | Corps de la requête : détails du produit.            | Réponse JSON avec les informations du produit créé. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/product/variations`        | Crée des variations pour un produit.        | Corps de la requête : détails des variations.        | Réponse JSON avec les informations des variations créées. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /product/upload-avatar`           | Télécharge une image pour un produit.       | Corps de la requête : image du produit.              | Réponse JSON avec les informations de l'image téléchargée. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /product/{product}/details`         | Récupère les détails d'un produit spécifique. | `{product}` : ID du produit.                          | Réponse JSON avec les détails du produit.           | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Éléments de Vente

| **Route**                                          | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/all/productSaleElements/collection`     | Récupère la collection des éléments de vente. | Aucun.                                              | Réponse JSON avec la collection des éléments de vente. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /productSaleElements/update`                | Met à jour les éléments de vente.            | Corps de la requête : détails des éléments à mettre à jour. | Réponse JSON avec les informations mises à jour.    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /productSaleElement/{productSaleElement}/product/{product}/delete` | Supprime un élément de vente spécifique d'un produit. | `{productSaleElement}` : ID de l'élément de vente, `{product}` : ID du produit. | Réponse JSON confirmant la suppression de l'élément. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /productSaleElements/product/{product}/delete` | Supprime tous les éléments de vente d'un produit. | `{product}` : ID du produit.                        | Réponse JSON confirmant la suppression des éléments. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Téléchargements et Importations

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /download-product-model`           | Télécharge un modèle de produit.            | Aucun.                                              | Téléchargement du fichier modèle de produit.        | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /import/products`                | Importe des produits à partir d'un fichier. | Corps de la requête : fichier à importer.            | Réponse JSON avec le statut de l'importation.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /export/products`                 | Exporte les produits dans un fichier.       | Aucun.                                              | Téléchargement du fichier d'exportation des produits. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes de Gestion des Éléments de Vente par Produits

| **Route**                                          | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/productSaleElements/by/products`        | Récupère les éléments de vente groupés par produits. | Aucun.                                              | Réponse JSON avec les éléments de vente par produits. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/productSaleElements/groupBy/category`    | Récupère les éléments de vente groupés par catégorie. | Aucun.                                              | Réponse JSON avec les éléments de vente par catégorie. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/products/groupBy/category`               | Récupère les produits groupés par catégorie.  | Aucun.                                              | Réponse JSON avec les produits par catégorie.      | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Routes d'Enumération

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/product/type/enum`            | Récupère les options pour les types de produit. | Aucun.                                              | Réponse JSON avec les options pour les types de produit. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/discount/type/enum`           | Récupère les options pour les types de remise. | Aucun.                                              | Réponse JSON avec les options pour les types de remise. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Détails des Paramètres

- **Corps de la requête** : Certaines routes POST nécessitent des informations spécifiques dans le corps de la requête.
- **{taxe}** : ID de la taxe à mettre à jour ou supprimer.
- **{category}** : ID de la catégorie à mettre à jour ou supprimer.
- **{attribut}** : ID de l'attribut à mettre à jour ou supprimer.
- **{variation}** : ID de la variation à mettre à jour ou supprimer.
- **{brand}** : ID de la marque à mettre à jour ou supprimer.
- **{product}** : ID du produit pour les opérations spécifiques.
- **{productSaleElement}** : ID de l'élément de vente à supprimer.

## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.






















# Documentation des Routes API- Setting

## Routes de Gestion des Monnaies

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/currencies/collection`       | Récupère la collection des monnaies.         | Aucun.                                              | Réponse JSON avec la collection des monnaies.        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Routes de Gestion des Départements

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/departments/collection`      | Récupère la collection des départements.     | Aucun.                                              | Réponse JSON avec la collection des départements.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/departments/datatables`      | Récupère les données des départements pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des départements pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/department/{department}/users/datatables` | Récupère les utilisateurs d'un département pour un affichage en tableau. | `{department}` : ID du département.                    | Réponse JSON avec les utilisateurs pour tableau.   | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `POST /store/department`               | Crée un nouveau département.                | Corps de la requête : détails du département.        | Réponse JSON avec les informations du département créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `PUT /update/department/{id}`           | Met à jour un département existant.          | `{id}` : ID du département.                          | Réponse JSON avec les informations du département mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/department/{id}`              | Récupère les détails d'un département spécifique. | `{id}` : ID du département.                          | Réponse JSON avec les détails du département.       | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `DELETE /delete/department/{id}`       | Supprime un département.                   | `{id}` : ID du département.                          | Réponse JSON confirmant la suppression du département. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `POST /set/users/to/department`        | Associe des utilisateurs à un département.  | Corps de la requête : détails des utilisateurs et du département. | Réponse JSON confirmant l'association des utilisateurs. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `POST /delete/user/from/department`    | Supprime un utilisateur d'un département.   | Corps de la requête : détails de l'utilisateur et du département. | Réponse JSON confirmant la suppression de l'utilisateur. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Routes de Gestion des Types de Paiement

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/paymentType/collection`      | Récupère la collection des types de paiement. | Aucun.                                              | Réponse JSON avec la collection des types de paiement. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/paymentType/datatables`      | Récupère les données des types de paiement pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des types de paiement pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `POST /store/paymentType`              | Crée un nouveau type de paiement.            | Corps de la requête : détails du type de paiement.    | Réponse JSON avec les informations du type de paiement créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `PATCH /update/{paymentType}/paymentType` | Met à jour un type de paiement existant.      | `{paymentType}` : ID du type de paiement.              | Réponse JSON avec les informations du type de paiement mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `DELETE /delete/{paymentType}/paymentType` | Supprime un type de paiement.                | `{paymentType}` : ID du type de paiement.              | Réponse JSON confirmant la suppression du type de paiement. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Routes de Gestion des Conditions de Paiement

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/paymentCondition/collection` | Récupère la collection des conditions de paiement. | Aucun.                                              | Réponse JSON avec la collection des conditions de paiement. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/paymentCondition/datatables` | Récupère les données des conditions de paiement pour un affichage en tableau. | Aucun.                                              | Réponse JSON avec les données des conditions de paiement pour tableau. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `POST /store/paymentCondition`         | Crée une nouvelle condition de paiement.     | Corps de la requête : détails de la condition.       | Réponse JSON avec les informations de la condition créée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `PATCH /update/{paymentCondition}/paymentCondition` | Met à jour une condition de paiement existante. | `{paymentCondition}` : ID de la condition de paiement. | Réponse JSON avec les informations de la condition mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `DELETE /delete/{paymentCondition}/paymentCondition` | Supprime une condition de paiement.         | `{paymentCondition}` : ID de la condition de paiement. | Réponse JSON confirmant la suppression de la condition de paiement. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Routes de Gestion des Messages Email

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/emailMessage/collection`     | Récupère la collection des messages email.   | Aucun.                                              | Réponse JSON avec la collection des messages email.  | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /show/{emailMessage}/emailMessage` | Récupère les détails d'un message email spécifique. | `{emailMessage}` : ID du message email.              | Réponse JSON avec les détails du message email.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `PATCH /update/{emailMessage}/emailMessage` | Met à jour un message email existant.        | `{emailMessage}` : ID du message email.              | Réponse JSON avec les informations du message email mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `DELETE /delete/{emailMessage}/emailMessage` | Supprime un message email.                   | `{emailMessage}` : ID du message email.              | Réponse JSON confirmant la suppression du message email. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /emailMessage/type/enum`           | Récupère les options pour les types de message email. | Aucun.                                              | Réponse JSON avec les options pour les types de message email. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Détails des Paramètres

- **Corps de la requête** : Certaines routes POST nécessitent des informations spécifiques dans le corps de la requête.
- **{department}** : ID du département.
- **{paymentType}** : ID du type de paiement.
- **{paymentCondition}** : ID de la condition de paiement.
- **{emailMessage}** : ID du message email.

## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.




















# Documentation des Routes API- Module-Statistics

## Routes de Gestion des Statistiques

| **Route**                           | **Description**                            | **Paramètres** | **Réponse**                                          | **Middleware**                                                                                               |
|-------------------------------------|--------------------------------------------|----------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /get/statistics`                | Récupère les statistiques générales.       | Aucun.         | Réponse JSON avec les statistiques générales.        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |
| `GET /get/sales/statistics`          | Récupère les statistiques de ventes.       | Aucun.         | Réponse JSON avec les statistiques de ventes.        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api`          |

## Détails des Paramètres

- **Aucun paramètre requis** pour ces routes.

## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.

























# Documentation des Routes d'Authentification et de Gestion des Utilisateurs

## Routes d'Authentification

| **Route**                           | **Description**                                     | **Paramètres** | **Réponse**                                            | **Middleware**                                                                                               |
|-------------------------------------|-----------------------------------------------------|----------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `POST /register`                    | Inscrit un nouvel utilisateur.                     | Données de l'utilisateur | Réponse JSON avec les informations de l'utilisateur.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                     |
| `POST /login`                       | Connecte un utilisateur existant.                  | Données de connexion  | Réponse JSON avec les détails de la connexion.         | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                     |
| `POST /forget/password`             | Envoie un email pour réinitialiser le mot de passe. | Email de l'utilisateur   | Réponse JSON confirmant l'envoi de l'email.            | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                     |
| `POST /reset/password`              | Réinitialise le mot de passe de l'utilisateur.      | Token et nouveau mot de passe | Réponse JSON confirmant la réinitialisation du mot de passe. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                     |
| `POST /create/password`             | Crée un nouveau mot de passe pour un utilisateur.   | Token et nouveau mot de passe | Réponse JSON confirmant la création du mot de passe.     | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`                     |

## Routes Authentifiées

| **Route**                           | **Description**                                     | **Paramètres** | **Réponse**                                            | **Middleware**                                                                                               |
|-------------------------------------|-----------------------------------------------------|----------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `POST /logout`                      | Déconnecte l'utilisateur courant.                  | Aucun.         | Réponse JSON confirmant la déconnexion.                | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/user`                     | Récupère les informations de l'utilisateur courant. | Aucun.         | Réponse JSON avec les détails de l'utilisateur.        | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /user/password/update`        | Met à jour le mot de passe de l'utilisateur courant. | Nouveau mot de passe | Réponse JSON confirmant la mise à jour du mot de passe. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /user/profile/update`         | Met à jour le profil de l'utilisateur courant.      | Données du profil | Réponse JSON confirmant la mise à jour du profil.      | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/roles/collection`         | Récupère la collection des rôles.                   | Aucun.         | Réponse JSON avec les rôles disponibles.              | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/roles/datatables`         | Récupère les rôles sous forme de DataTable.         | Aucun.         | Réponse JSON avec les rôles sous forme de DataTable.   | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/role`                  | Crée un nouveau rôle.                              | Données du rôle | Réponse JSON confirmant la création du rôle.          | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{role}/role`          | Met à jour un rôle existant.                       | Données du rôle | Réponse JSON confirmant la mise à jour du rôle.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{role}/role`         | Supprime un rôle existant.                         | Aucun.         | Réponse JSON confirmant la suppression du rôle.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /role/{role}/getPermissionToRole` | Récupère les permissions associées à un rôle.     | ID du rôle     | Réponse JSON avec les permissions du rôle.            | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /role/{role}/attributePermissionToRole` | Attribue des permissions à un rôle.             | Données des permissions | Réponse JSON confirmant l'attribution des permissions. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/permissions`               | Récupère toutes les permissions disponibles.       | Aucun.         | Réponse JSON avec les permissions disponibles.        | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/{role}/role`               | Récupère les détails d'un rôle spécifique.         | ID du rôle     | Réponse JSON avec les détails du rôle.                | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PUT /role/{role}/attributePermissionToUser` | Attribue des permissions à un utilisateur via un rôle. | Données des permissions | Réponse JSON confirmant l'attribution des permissions. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/users/collection`         | Récupère la collection des utilisateurs.           | Aucun.         | Réponse JSON avec les utilisateurs disponibles.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/users/datatables`         | Récupère les utilisateurs sous forme de DataTable.  | Aucun.         | Réponse JSON avec les utilisateurs sous forme de DataTable. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /store/user`                  | Crée un nouvel utilisateur.                       | Données de l'utilisateur | Réponse JSON confirmant la création de l'utilisateur.  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{user}/status`        | Met à jour le statut d'un utilisateur.             | Nouveau statut | Réponse JSON confirmant la mise à jour du statut.      | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `PATCH /update/{user}/user`          | Met à jour les informations d'un utilisateur.      | Données de l'utilisateur | Réponse JSON confirmant la mise à jour des informations. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `DELETE /delete/{user}/user`         | Supprime un utilisateur.                          | Aucun.         | Réponse JSON confirmant la suppression de l'utilisateur. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /download-user-model`           | Télécharge un modèle de données utilisateur.      | Aucun.         | Télécharge un fichier Excel avec un modèle utilisateur. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /import/users`                | Importe des utilisateurs à partir d'un fichier.   | Fichier à importer | Réponse JSON confirmant l'importation des utilisateurs. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /export/users`                 | Exporte les utilisateurs dans un fichier.         | Aucun.         | Télécharge un fichier contenant les données des utilisateurs. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /get/permissions`               | Récupère toutes les permissions disponibles.       | Aucun.         | Réponse JSON avec les permissions disponibles.        | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /permission/{permissionName}`   | Vérifie si une permission spécifique est accordée. | Nom de la permission | Réponse JSON indiquant si la permission est accordée.  | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `GET /{user}/user`                  | Recherche un utilisateur par ID.                  | ID de l'utilisateur | Réponse JSON avec les détails de l'utilisateur.       | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |
| `POST /users/assignTeam`            | Assigne un utilisateur à une équipe.              | Données de l'équipe | Réponse JSON confirmant l'attribution de l'équipe.    | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`          |

## Détails des Paramètres

- **Pour les routes d'authentification** :
    - **Données de l'utilisateur** : Inclut des informations telles que l'email, le mot de passe, etc.
    - **Token** : Utilisé pour réinitialiser ou créer un mot de passe.
    - **Email** : Adresse de l'utilisateur pour envoyer les instructions de réinitialisation de mot de passe.

- **Pour les routes authentifiées** :
    - **ID du rôle** : Identifiant unique du rôle à gérer.
    - **Données du rôle** : Inclut des informations telles que le nom du rôle, les permissions associées, etc.
    - **ID de l'utilisateur** : Identifiant unique de l'utilisateur à mettre à jour ou supprimer.
    - **Données du profil** : Informations du profil utilisateur à mettre à jour.

## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.

# Documentation des Routes API- Module-Post Office



| **Route**                           | **Description**                                     | **Paramètres** | **Réponse**                                            | **Middleware**                                                                                               |
|-------------------------------------|-----------------------------------------------------|----------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| GET     | `/api/get/postoffices/collection`            | Récupère la collection complète de bureaux de poste.  | Aucun                                                                      | `Réponse JSON` : Retourne la liste des bureaux de poste. |  `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`  |
| GET     | `/api/get/postoffices/datatables`            | Récupère les données des bureaux de poste pour DataTables. | Aucun                                                                 | `Réponse JSON` : Retourne les données formatées pour DataTables. |  `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`  |
| POST    | `/api/store/postoffice`                      | Crée un nouveau bureau de poste.                     | `title` (string) : Titre du bureau de poste.                                | `Réponse JSON` : Retourne les détails du bureau de poste créé. |  `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`  |
| PATCH   | `/api/update/{postoffice}/postoffice`        | Met à jour un bureau de poste existant.              | `title` (string) : Titre du bureau de poste.<br>`{postoffice}` (UUID) : ID du bureau de poste à mettre à jour. | `Réponse JSON`: Retourne les détails du bureau de poste mis à jour. |  `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`  |
| DELETE  | `/api/delete/{postoffice}/postoffice`        | Supprime un bureau de poste existant.                | `{postoffice}` (UUID) : ID du bureau de poste à supprimer.                 | `Réponse JSON` : Le bureau de poste a été supprimé. | `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |


# Documentation des Routes API- Module-Rendez-vous

## Routes de Gestion des rendez-vous

| **Route**                           | **Description**                            | **Paramètres** | **Réponse**                                          | **Middleware**                                                                                               |
|-------------------------------------|--------------------------------------------|----------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
Type de rendez-vous|
`GET /get/appointmentType/collection` | Récupère la collection des types de rendez-vous. | Aucun. | Réponse JSON avec la liste des types de rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/appointmentType/datatable` | Récupère les types de rendez-vous pour le datatable. | Aucun. | Réponse JSON avec les données des types de rendez-vous pour le datatable. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/appointmentType` | Crée un nouveau type de rendez-vous. | Données du type de rendez-vous à créer (dans le corps de la requête). | Réponse JSON avec les détails du type de rendez-vous créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/{appointmentType}/appointmentType` | Met à jour un type de rendez-vous existant. | `appointmentType`: ID du type de rendez-vous à mettre à jour (dans l'URL). Données de mise à jour (dans le corps de la requête). | Réponse JSON avec les détails du type de rendez-vous mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `DELETE /delete/{appointmentType}/appointmentType` | Supprime un type de rendez-vous. | `appointmentType`: ID du type de rendez-vous à supprimer (dans l'URL). | Réponse JSON confirmant la suppression du type de rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
|Rendez vous
| `GET /get/appointment/collection` | Récupère la collection des rendez-vous. | Aucun. | Réponse JSON avec la liste des rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/calendar/appointment` | Récupère les rendez-vous pour le calendrier. | Aucun. | Réponse JSON avec les rendez-vous pour le calendrier. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/appointments/datatables` | Récupère les rendez-vous pour le datatable. | Aucun. | Réponse JSON avec les données des rendez-vous pour le datatable. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /store/appointment` | Crée un nouveau rendez-vous. | Données du rendez-vous à créer (dans le corps de la requête). | Réponse JSON avec les détails du rendez-vous créé. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /show/{appointment}/appointment` | Affiche les détails d'un rendez-vous spécifique. | `appointment`: ID du rendez-vous à afficher (dans l'URL). | Réponse JSON avec les détails du rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/{appointment}/appointment` | Met à jour un rendez-vous existant. | `appointment`: ID du rendez-vous à mettre à jour (dans l'URL). Données de mise à jour (dans le corps de la requête). | Réponse JSON avec les détails du rendez-vous mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `DELETE /delete/{appointment}/appointment` | Supprime un rendez-vous. | `appointment`: ID du rendez-vous à supprimer (dans l'URL). | Réponse JSON confirmant la suppression du rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /cancel/appointment/{appointment}` | Annule un rendez-vous. | `appointment`: ID du rendez-vous à annuler (dans l'URL). | Réponse JSON confirmant l'annulation du rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /reschedule/appointment/{appointment}` | Replanifie un rendez-vous. | `appointment`: ID du rendez-vous à replanifier (dans l'URL). Données de replanification (dans le corps de la requête). | Réponse JSON avec les détails du rendez-vous replanifié. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/appointment/{appointment}/status` | Change le statut d'un rendez-vous. | `appointment`: ID du rendez-vous dont le statut doit être changé (dans l'URL). Données du nouveau statut (dans le corps de la requête). | Réponse JSON avec les détails du rendez-vous et son nouveau statut. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /add/appointment/{appointment}/participants` | Ajoute des participants à un rendez-vous. | `appointment`: ID du rendez-vous auquel ajouter un participant (dans l'URL). Données du participant à ajouter (dans le corps de la requête). | Réponse JSON confirmant l'ajout du participant au rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `POST /add/appointment/{appointment}/note` | Ajoute une note à un rendez-vous. | `appointment`: ID du rendez-vous auquel ajouter une note (dans l'URL). Données de la note à ajouter (dans le corps de la requête). | Réponse JSON avec les détails de la note ajoutée. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /update/appointment/{appointment}/note/{note}` | Met à jour une note d'un rendez-vous. | `appointment`: ID du rendez-vous (dans l'URL). `note`: ID de la note à mettre à jour (dans l'URL). Données de mise à jour de la note (dans le corps de la requête). | Réponse JSON avec les détails de la note mise à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `DELETE /delete/appointment/{appointment}/note/{note}` | Supprime une note d'un rendez-vous. | `appointment`: ID du rendez-vous (dans l'URL). `note`: ID de la note à supprimer (dans l'URL). | Réponse JSON confirmant la suppression de la note du rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /set/appointment/{appointment}/presence` | Définit le statut de présence pour un rendez-vous. | `appointment`: ID du rendez-vous (dans l'URL). Données du statut de présence (dans le corps de la requête). | Réponse JSON avec le statut de présence mis à jour. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `PATCH /set/appointment/availability` | Définit la disponibilité d'un participant pour un rendez-vous. | Données de disponibilité du participant (dans le corps de la requête). | Réponse JSON confirmant la mise à jour de la disponibilité du participant. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /get/{appointment}/appointment` | Affiche les détails d'un rendez-vous spécifique. | `appointment`: ID du rendez-vous à afficher (dans l'URL). | Réponse JSON avec les détails du rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`|

## Routes d'Enumération

| **Route**                              | **Description**                              | **Paramètres**                                        | **Réponse**                                          | **Middleware**                                                                                               |
|----------------------------------------|----------------------------------------------|------------------------------------------------------|------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| `GET /appointment/status/enum` | Liste enum des statuts des rendez-vous. | Aucun. | Réponse JSON avec les options de statuts des rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |
| `GET /appointment/reminder/status/enum` | Liste enum des statuts de rappel des rendez-vous. | Aucun. | Réponse JSON avec les options de statuts de rappel des rendez-vous. | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`, `auth:api` |


## Détails des Paramètres de rendez-vous

- **title** : Champ obligatoire, chaîne de caractères, avec une longueur maximale de 255 caractères.
- **appointment_type_id** : Champ obligatoire, UUID, doit exister dans la table `appointment_types` (colonne `id`).
- **start_time** : Champ obligatoire, format de date `d-m-Y H:i`, doit être avant ou égal à `end_time`.
- **end_time** : Champ optionnel, format de date `d-m-Y H:i`, doit être après ou égal à `start_time`.
- **description** : Champ optionnel, chaîne de caractères, avec une longueur maximale de 255 caractères.
- **location** : Champ optionnel, chaîne de caractères, avec une longueur maximale de 255 caractères.
- **link** : Champ optionnel, URL valide.
- **users** : Champ optionnel, tableau d'UUIDs.
- **users.*** : Chaque élément du tableau `users` doit être un UUID valide existant dans la table `users` (colonne `id`).
- **contacts** : Champ optionnel, tableau d'UUIDs.
- **contacts.*** : Chaque élément du tableau `contacts` doit être un UUID valide existant dans la table `contacts` (colonne `id`).
- **reminders** : Champ optionnel, tableau de rappels.
- **reminders.*.id** : Chaque rappel doit exister dans la table `appointment_reminders` (colonne `id`).
- **reminders.*.reminder_time** : Optionnel, format de date `d-m-Y H:i` pour l'heure du rappel.
- **reminders.*.reminder_method** : Optionnel, chaîne de caractères, méthode de rappel valide parmi les options définies dans `AppointmentReminderMethodEnum`.
- **guest_emails** : Champ optionnel, tableau d'adresses email.
- **guest_emails.*** : Chaque élément du tableau `guest_emails` doit être une adresse email valide.


## Headers

Ces routes utilisent les middlewares suivants :
- **api** : Indique que la route fait partie de l'API.
- **auth:api** : Authentification via un token API.
- **InitializeTenancyByDomain** : Middleware pour gérer la multi-location par domaine.
- **PreventAccessFromCentralDomains** : Empêche l'accès depuis les domaines centraux.
- **localization** : Gère la localisation des réponses en fonction de la langue de l'utilisateur.


# Documentation des Routes API- Module-Time Zone

| **Méthode** | **URL**                       | **Description**                                                      | **Paramètres**                             | **Sortie**                                           | **Headers**                                                                                       |
|-------------|-------------------------------|----------------------------------------------------------------------|--------------------------------------------|------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| GET         | `/get/timeZone/collection`    | Récupère une collection des fuseaux horaires disponibles.            | Aucun                                      | - **200 OK**: JSON array des fuseaux horaires.       | - `api`, `auth:api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization`|


# Documentation des Routes Api- Recurring Invoice

| Méthode HTTP | URL                                          | Description                                  | Paramètres                                              | Sortie                          | Headers (Middleware)                                                                 |
|--------------|----------------------------------------------|----------------------------------------------|---------------------------------------------------------|---------------------------------|---------------------------------------------------------------------------------------|
| POST         | /store/recurring/invoice                     | Créer une nouvelle facture récurrente        | Aucun                                 | Objet JSON de la facture créée | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH        | /recurring/{recurring}/invoice/update        | Mettre à jour une facture récurrente existante | - `recurring`: UUID de la facture récurrente | Objet JSON de la facture mise à jour | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET          | /show/recurring/invoice/{invoice}            | Afficher les détails d'une facture récurrente | - `invoice`: UUID de la facture récurrente              | Objet JSON de la facture        | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| GET          | /get/recurring/invoices/datatables           | Récupérer les factures récurrentes pour Datatables | - Aucun                  | Objet JSON pour Datatables      | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |
| PATCH        | /update/recurring/{recurring}/invoice        | Changer le statut d'une facture récurrente    | - `recurring`: UUID de la facture récurrente | Objet JSON de la facture mise à jour | `api`, `InitializeTenancyByDomain`, `PreventAccessFromCentralDomains`, `localization` |






# Documentation des API 

| **Méthode** | **URL**                       | **Description**                                                       | **Paramètres**                                                                         | **Sortie**                                             | **Headers**                                                                                       |
|-------------|-------------------------------|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------|--------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| GET         | `/get/templateByModule/collection` | Récupère une collection de modèles filtrés par module.                | - `module` (query parameter): Requis, string.                                          | JSON array des modèles. Exemple :<br> `{ "id": "string", "name": "string", "path": "string", "file_url": "string", "default": true, "module": "string" }` | - `Authorization`: Token Bearer (si authentification requise)<br>- `Accept`: `application/json` |
| POST        | `/templates/{id}/setDefault `   | Définit le modèle spécifié comme défaut et met à jour les autres modèles dans le module pour ne pas être défaut. | - `id` (path parameter): Requis, string.<br>- `module` (request body): Requis, string. | JSON réponse indiquant le succès. Exemple :<br> `{ "message": "Le modèle par défaut a été mis à jour avec succès." }` | - `Authorization`: Token Bearer (si authentification requise)<br>- `Accept`: `application/json`<br>- `Content-Type`: `application/json` |
| POST        | `/store/configFrequency`        | Crée un nouvel enregistrement de fréquence de configuration.          | - Aucun                                                                                | JSON réponse avec les détails de la fréquence de configuration créée. Exemple :<br> `{ "message": "La configuration de fréquence a été créée avec succès.", "data": { "id": "string", "frequency": "string", "frequency_count": "integer", "period": "string", "context": "string" } }` | - `Authorization`: Token Bearer (si authentification requise)<br>- `Accept`: `application/json`<br>- `Content-Type`: `application/json` |
| GET         | `/get/frequencyByContext`     | Récupère les valeurs `frequency` et `frequency_count` pour chaque contexte défini dans l'énumération `ContextEnum`. Retourne une liste de tous les contextes avec leurs valeurs associées. | Aucun          | **Code**: `200 OK`<br>**Contenu**:<br>```json<br>[<br>    {<br>        "context": "UnvalidatedQuote",<br>        "frequency": "daily",<br>        "frequency_count": 2<br>    },<br>    {<br>        "context": "DueAdvanceInvoice",<br>        "frequency": null,<br>        "frequency_count": null<br>    }<br>]```<br>**Code d'erreur**: `500 Internal Server Error`<br>**Message**: Erreur serveur interne si problème de récupération des données. | **Content-Type**: `application/json`<br>**Accept**: `application/json` |



# Documentation des Routes - Téléchargement des Statistiques

| **Méthode** | **URL**                                      | **Description**                                                                                  | **Paramètres**                            | **Sortie**                                         | **Headers**                       |
|-------------|----------------------------------------------|--------------------------------------------------------------------------------------------------|-------------------------------------------|----------------------------------------------------|-----------------------------------|
| GET         | /download/crm/pipeline/statistics            | Télécharge les statistiques du pipeline CRM via le contrôleur `StatisticController`.             | *Aucun*                                   | PDF des statistiques du pipeline CRM               | *Aucun*                           |
| GET         | /download/crm/estimate/statistics            | Télécharge les statistiques des devis CRM via le contrôleur `StatisticController`.               | *Aucun*                                   | PDF des statistiques des devis CRM                 | *Aucun*                           |
| GET         | /download/crm/invoice/statistics             | Télécharge les statistiques des factures CRM via le contrôleur `StatisticController`.             | *Aucun*                                   | PDF des statistiques des factures CRM              | *Aucun*                           |
| GET         | /download/crm/appointment/statistics         | Télécharge les statistiques des rendez-vous CRM via le contrôleur `StatisticController`.           | *Aucun*                                   | PDF des statistiques des rendez-vous CRM           | *Aucun*                           |
| GET         | /download/contactsSheet                     | Télécharge la feuille de contacts via le contrôleur `ContactController`.                         | *Aucun*                                   | Feuille de contacts (format à préciser)            | *Aucun*                           |
| GET         | /download/statistics/dashboard              | Télécharge le PDF des statistiques du tableau de bord via le contrôleur `DashboardController`.     | *Aucun*                                   | PDF des statistiques du tableau de bord            | *Aucun*                           |
