# GSM Manager

Application Symfony 7 de gestion pour **magasins de réparation de téléphones
et vente d'accessoires**, basée sur le cahier des charges du projet.

## Modules inclus dans ce squelette

| Module | Statut |
|---|---|
| Authentification & rôles (Admin / Vendeur / Technicien) | ✅ |
| Tableau de bord (alertes stock, tickets en cours, ventes du jour) | ✅ |
| Gestion des produits / stock (CRUD + alerte seuil) | ✅ |
| Gestion des catégories & fournisseurs | ✅ |
| Point de vente (POS) avec panier dynamique | ✅ |
| Facturation (numéro auto, historique, impression) | ✅ |
| Tickets de réparation (statuts, technicien assigné, IMEI...) | ✅ |
| Gestion des clients (historique achats + réparations) | ✅ |
| Interface en arabe (RTL) | ✅ |
| Notifications SMS/WhatsApp, rapports avancés | 🔲 à développer (voir "Pour aller plus loin") |

> ⚠️ Important : cet environnement de génération n'a pas accès à
> `packagist.org` ni à PHP/Composer installés, donc **`composer install`
> n'a pas pu être exécuté ici**. Tous les fichiers sources sont prêts ;
> il vous suffit d'installer les dépendances chez vous (voir ci-dessous).

## Prérequis

- PHP >= 8.2 avec les extensions `ctype`, `iconv`, `pdo_mysql` (ou `pdo_sqlite`)
- Composer 2
- MySQL/MariaDB (ou SQLite pour tester rapidement)
- Symfony CLI (optionnel, pratique pour le serveur local)

## Installation

```bash
# 1. Décompressez puis placez-vous dans le dossier du projet
cd gsm-manager

# 2. Installez les dépendances PHP (télécharge Symfony + Doctrine etc.)
composer install

# 3. Configurez la base de données dans .env (ou créez un .env.local)
#    Par défaut le projet est configuré pour MySQL :
#    DATABASE_URL="mysql://gsm_user:gsm_password@127.0.0.1:3306/gsm_manager?serverVersion=8.0&charset=utf8mb4"
#
#    Pour tester rapidement sans serveur MySQL, utilisez SQLite : dans .env,
#    commentez la ligne DATABASE_URL de MySQL et décommentez celle de SQLite.

# 4. Créez la base de données
php bin/console doctrine:database:create

# 5. Générez la migration à partir des entités, puis appliquez-la
php bin/console make:migration
php bin/console doctrine:migrations:migrate

# 6. (Optionnel mais recommandé) Chargez les données de démonstration
#    -> crée un compte admin, un vendeur, des produits et des clients de test
composer require --dev doctrine/doctrine-fixtures-bundle   # si pas déjà présent
php bin/console doctrine:fixtures:load

# 7. Lancez le serveur local
symfony server:start
# ou, sans Symfony CLI :
php -S 127.0.0.1:8000 -t public
```

Rendez-vous ensuite sur `http://127.0.0.1:8000`.

### Comptes de démonstration (si vous avez chargé les fixtures)

| Rôle | Email | Mot de passe |
|---|---|---|
| Administrateur | admin@gsm-manager.local | admin1234 |
| Vendeur | vendeur@gsm-manager.local | vendeur1234 |

**Pensez à changer ces mots de passe avant toute mise en production.**

## Structure du projet

```
src/
  Entity/          -> Produit, Client, Fournisseur, Categorie,
                       TicketReparation, Vente, LigneVente, User...
  Repository/       -> requêtes Doctrine (ex: findStockFaible())
  Controller/        -> Dashboard, Produit, Client, Fournisseur,
                         TicketReparation, Vente (POS), Security
  Form/             -> formulaires liés aux entités
  DataFixtures/     -> données de démonstration
templates/          -> vues Twig (interface entièrement en arabe, RTL)
config/             -> configuration Symfony (sécurité, doctrine, twig...)
```

## Créer un nouvel utilisateur (technicien, vendeur...)

Le plus simple est de passer par `make:user` ou une petite commande
console, ou d'insérer directement en base avec un mot de passe hashé via :

```bash
php bin/console security:hash-password
```

## Pour aller plus loin

D'après le cahier des charges, voici les évolutions naturelles suivantes :

- **Notifications SMS/WhatsApp** : intégrer `symfony/notifier` avec un
  transport Twilio ou une passerelle SMS locale, déclenché au changement de
  statut d'un ticket (`StatutReparation::PRET`).
- **Génération de factures PDF** : ajouter `dompdf/dompdf` ou
  `knplabs/knp-snappy-bundle` pour exporter les factures/tickets en PDF.
- **Rapports avancés** : page de statistiques (ventes par période, produits
  les plus vendus, durée moyenne de réparation) avec des graphiques
  (Chart.js).
- **Lecteur de code-barres physique** : la recherche produit dans le POS
  fonctionne déjà avec un lecteur USB (il se comporte comme un clavier).
- **Gestion des mouvements de stock détaillés** (entrées manuelles, pertes,
  retours fournisseur) : ajouter une entité `MouvementStock`.
- **Multi-boutique** : ajouter une entité `Magasin` et un champ
  `magasin` sur les entités concernées.

## Licence

Projet généré comme base de démarrage — à adapter librement à vos besoins.
