# 🧺 Pressing Yehiya - Système de Gestion Complet

Application Laravel pour la gestion d'un pressing avec **support offline/online** et **synchronisation automatique**.

---

## ✨ Fonctionnalités

- ✅ Gestion des clients
- ✅ Gestion des dépôts (vêtements)
- ✅ Gestion des paiements
- ✅ Gestion des articles et catégories
- ✅ Gestion des dépenses
- ✅ Tarifs spéciaux par client
- ✅ Impressions de tickets
- ✅ Tableaux de bord et statistiques
- ✅ **Mode offline avec synchronisation automatique**
- ✅ **Base de données locale (SQLite)**
- ✅ **Synchronisation vers serveur distant (MySQL)**

---

## 🚀 Démarrage Ultra-Rapide

### Avec Internet

```bash
.\deploy-local.bat
.\start-local.bat
```

### Sans Internet

**Sur PC avec internet**:
```bash
.\package-for-offline.bat
# Copiez sur clé USB
```

**Sur PC sans internet**:
```bash
.\install-offline.bat
.\start-local.bat
```

---

## 📚 Documentation

### Choisissez votre Guide

| Situation | Guide à Lire | Script à Exécuter |
|-----------|--------------|-------------------|
| 🌐 **J'ai internet** | `GUIDE_RAPIDE.md` | `deploy-local.bat` |
| 📦 **Pas d'internet** | `TRANSFERT_RAPIDE.md` | `package-for-offline.bat` |
| 📖 **Vue d'ensemble** | `README_DEPLOIEMENT.md` | - |
| 🔍 **Liste complète** | `INDEX_GUIDES.md` | - |

### Tous les Guides Disponibles

#### 🚀 Démarrage Rapide (5 min)
- `GUIDE_RAPIDE.md` - Installation avec internet
- `TRANSFERT_RAPIDE.md` - Installation sans internet (TL;DR)
- `README_DEPLOIEMENT.md` - Vue d'ensemble

#### 📘 Guides Complets (15 min)
- `DEPLOIEMENT_LOCAL.md` - Installation locale détaillée
- `GUIDE_DEPLOIEMENT_OFFLINE.md` - Installation sans internet détaillée
- `README_SYNCHRONISATION.md` - Documentation technique complète

#### 📋 Référence
- `RESUME_INSTALLATION.md` - Récapitulatif de l'installation
- `INDEX_GUIDES.md` - Index de tous les guides

---

## ⚡ Installation en 3 Étapes

### Option A: Avec Internet

```bash
# 1. Installer
.\deploy-local.bat

# 2. Démarrer (2 terminaux)
.\start-local.bat      # Terminal 1
.\start-queue.bat      # Terminal 2

# 3. Ouvrir
# http://localhost:8000
```

### Option B: Sans Internet

```bash
# 1. Préparer (sur PC avec internet)
.\package-for-offline.bat

# 2. Transférer sur clé USB et copier sur PC cible

# 3. Installer (sur PC sans internet)
.\install-offline.bat
.\start-local.bat
```

---

## 🔄 Synchronisation

### Mode Online (Avec Internet)
- Synchronisation **automatique** en arrière-plan
- Données sauvegardées localement **ET** sur serveur distant
- Travaillez normalement, tout est géré automatiquement

### Mode Offline (Sans Internet)
- Travaillez normalement, données sauvegardées **localement**
- Quand internet revient, synchronisation **automatique**
- **Aucune perte de données**

### Commandes

```bash
# Vérifier le statut
php artisan sync:status

# Synchroniser manuellement
php artisan sync:to-remote

# Récupérer depuis serveur
php artisan sync:from-remote
```

### Interface Web

**Page de synchronisation**: http://localhost:8000/sync/status
- 📊 Statistiques en temps réel
- 🌐 État de la connexion
- ⚡ Boutons d'action
- 🕐 Dernière synchronisation

---

## 🛠️ Prérequis

- **PHP** 8.2 ou supérieur
- **Composer** (pour installation avec internet)
- **Node.js** et NPM
- **Extension PHP SQLite** activée
- **MySQL** (pour serveur distant - optionnel)

---

## 📊 Architecture

```
┌──────────────────┐
│   Application    │
│   Laravel 12     │
└────────┬─────────┘
         │
    ┌────┴────┐
    │         │
┌───▼──┐  ┌──▼────┐
│Local │  │Remote │
│SQLite│◄─►│MySQL │
└──────┘  └───────┘
Offline   Online
Mode      Sync
```

- **Base locale**: SQLite (travail offline)
- **Base distante**: MySQL (synchronisation)
- **Queue system**: Synchronisation automatique
- **Détection auto**: Connexion internet

---

## 🎯 Cas d'Usage

### ✅ Idéal Pour

- Boutiques avec connexion internet instable
- Zones avec coupures internet fréquentes
- Besoin de travailler offline
- Synchronisation centralisée de plusieurs boutiques
- Sauvegarde locale + cloud

### ✅ Modes Supportés

1. **100% Online**: Internet stable, sync en temps réel
2. **Offline/Online**: Travail offline, sync quand internet revient
3. **100% Offline**: Aucun serveur distant, tout en local

---

## 🔧 Scripts Disponibles

### Déploiement

| Script | Description | Usage |
|--------|-------------|-------|
| `deploy-local.bat` | Installation avec internet | PC avec internet |
| `package-for-offline.bat` | Créer package offline | Avant transfert |
| `install-offline.bat` | Installation sans internet | PC sans internet |

### Utilisation

| Script | Description | Obligatoire? |
|--------|-------------|--------------|
| `start-local.bat` | Démarrer le serveur | ✅ Oui |
| `start-queue.bat` | Démarrer la synchronisation | ⚠️ Si serveur distant |

---

## 🌐 Accès

Une fois démarré:

- **Application principale**: http://localhost:8000
- **Page de synchronisation**: http://localhost:8000/sync/status

---

## 🔒 Sécurité

- ✓ Authentification requise
- ✓ Gestion des rôles et permissions (Spatie)
- ✓ Base de données locale chiffrée (recommandé)
- ✓ Connexion HTTPS au serveur distant (recommandé)
- ✓ Logs détaillés de synchronisation

---

## 📦 Technologies

- **Backend**: Laravel 12
- **Frontend**: Blade + Tailwind CSS
- **Base locale**: SQLite
- **Base distante**: MySQL
- **Queue**: Database driver
- **Export**: Maatwebsite Excel
- **Permissions**: Spatie Laravel Permission

---

## 🐛 Dépannage Rapide

### L'application ne démarre pas

```bash
# Vérifier PHP
php --version

# Vérifier les dépendances
composer install
npm install

# Régénérer la clé
php artisan key:generate
```

### La synchronisation ne fonctionne pas

```bash
# Vérifier le statut
php artisan sync:status

# Vérifier les logs
type storage\logs\laravel.log

# Redémarrer la queue
# Ctrl+C puis relancer start-queue.bat
```

### Database locked (SQLite)

```bash
# Redémarrer le queue worker
# Fermer start-queue.bat et relancer
```

---

## 📝 Configuration

### Fichier `.env`

```env
# Application
APP_NAME="Pressing Yehiya"
APP_ENV=local
APP_URL=http://localhost:8000

# Base de données LOCALE
DB_CONNECTION=sqlite
DB_DATABASE=C:\Softsys\pressing_yehiya\database\database.sqlite

# Base de données DISTANTE (optionnel)
REMOTE_DB_DRIVER=mysql
REMOTE_DB_HOST=votre-serveur.com
REMOTE_DB_PORT=3306
REMOTE_DB_DATABASE=pressing_db
REMOTE_DB_USERNAME=utilisateur
REMOTE_DB_PASSWORD=mot_de_passe

# Queue
QUEUE_CONNECTION=database
```

---

## 🎓 Workflow Quotidien

### Démarrage

1. **Terminal 1**: `.\start-local.bat` (serveur)
2. **Terminal 2**: `.\start-queue.bat` (synchronisation)
3. **Navigateur**: http://localhost:8000

### Utilisation

- Créez des clients, dépôts, paiements normalement
- La synchronisation se fait automatiquement
- Vérifiez le statut: http://localhost:8000/sync/status

### Arrêt

- Fermez les 2 terminaux (Ctrl+C)
- Les données sont sauvegardées automatiquement

---

## 📊 Statistiques

- **Code**: ~30 fichiers créés pour la sync
- **Migrations**: 16+ tables
- **Modèles**: 10+ modèles Eloquent
- **Commandes**: 3 commandes Artisan de sync
- **Documentation**: 8 guides complets
- **Scripts**: 5 scripts batch automatisés

---

## 🎉 Fonctionnalités Uniques

### ✨ Points Forts

- 🚀 **Installation automatisée** (scripts .bat)
- 📦 **Package offline complet** (dépendances incluses)
- 🔄 **Synchronisation transparente** (automatique en arrière-plan)
- 📊 **Interface de monitoring** (page web de statut)
- 🛠️ **Commandes CLI** (contrôle manuel)
- 📱 **Détection auto internet** (pas de configuration)
- ⚡ **Retry automatique** (en cas d'échec)
- 📝 **Logs détaillés** (debugging facile)

---

## 🤝 Support

### Documentation

- Consultez `INDEX_GUIDES.md` pour la liste complète
- Chaque guide contient une section "Dépannage"
- Logs disponibles dans `storage/logs/laravel.log`

### Commandes Debug

```bash
# Voir les enregistrements en attente
php artisan tinker
>>> App\Models\SyncLog::where('status', 'pending')->count()

# Tester la connexion distante
>>> app(App\Services\SyncService::class)->testRemoteConnection()

# Voir les erreurs
>>> App\Models\SyncLog::where('status', 'failed')->get()
```

---

## 📜 Licence

Propriétaire - Pressing Yehiya

---

## 🎯 Prochaines Étapes

1. **Lisez** le guide adapté à votre situation:
   - Avec internet → `GUIDE_RAPIDE.md`
   - Sans internet → `TRANSFERT_RAPIDE.md`

2. **Exécutez** le script correspondant

3. **Démarrez** l'application

4. **Consultez** `INDEX_GUIDES.md` pour plus d'infos

---

## ✅ Checklist de Démarrage

- [ ] J'ai lu le guide adapté à ma situation
- [ ] J'ai vérifié les prérequis (PHP, Node.js)
- [ ] J'ai les informations du serveur distant (si applicable)
- [ ] J'ai exécuté le script d'installation
- [ ] J'ai configuré le fichier `.env`
- [ ] J'ai démarré le serveur (`start-local.bat`)
- [ ] J'ai démarré la queue (`start-queue.bat`) si serveur distant
- [ ] L'application est accessible sur http://localhost:8000

---

## 🚀 C'est Parti!

Vous avez maintenant tout ce qu'il faut pour déployer et utiliser Pressing Yehiya en mode local avec synchronisation!

**Bonne utilisation!** 🎉

---

**Version**: 1.0  
**Date**: 9 février 2026  
**Développé pour**: Pressing Yehiya  
**Mode**: Offline/Online avec synchronisation automatique
