# 🚀 Pressing Yehiya - Déploiement Local avec Synchronisation

## 📖 Introduction

Cette application de gestion de pressing peut fonctionner **en local** (sans internet permanent) avec **synchronisation automatique** vers un serveur distant quand une connexion internet est disponible.

```
┌─────────────┐         ┌──────────────┐
│   LOCAL     │  Sync   │   SERVEUR    │
│   SQLite    │ ◄─────► │   MySQL      │
│             │  Auto   │   (Online)   │
└─────────────┘         └──────────────┘
```

---

## 🎯 Cas d'Usage

Cette solution est parfaite si:
- ✅ Vous avez une connexion internet **intermittente**
- ✅ Vous voulez travailler **hors ligne**
- ✅ Vous avez besoin de **synchroniser** avec un serveur central
- ✅ Vous voulez une **sauvegarde locale** des données

---

## 📋 Prérequis

- PHP 8.2+
- Composer
- Node.js et NPM
- Extension PHP SQLite
- Accès à une base MySQL distante (serveur en ligne)

---

## 🚀 Installation Ultra-Rapide

### Windows (Recommandé)

1. **Double-cliquez sur `deploy-local.bat`**
2. **Suivez les instructions**
3. **C'est tout!**

### Manuel (Toutes Plateformes)

```bash
# 1. Installer les dépendances
composer install
npm install

# 2. Configurer l'environnement
copy .env.local.example .env
# Éditez .env avec vos informations

# 3. Créer la base de données
type nul > database\database.sqlite

# 4. Générer la clé
php artisan key:generate

# 5. Exécuter les migrations
php artisan migrate

# 6. Compiler les assets
npm run build

# 7. Synchroniser depuis le serveur (optionnel)
php artisan sync:from-remote
```

---

## ⚙️ Configuration

### Fichier `.env`

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

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

# Base de données DISTANTE (MySQL - pour synchronisation)
REMOTE_DB_DRIVER=mysql
REMOTE_DB_HOST=votre-serveur-en-ligne.com
REMOTE_DB_PORT=3306
REMOTE_DB_DATABASE=nom_de_votre_base
REMOTE_DB_USERNAME=votre_utilisateur
REMOTE_DB_PASSWORD=votre_mot_de_passe

# Queue pour synchronisation
QUEUE_CONNECTION=database
```

---

## 🎮 Démarrage

### Option 1: Scripts Windows (Facile)

**Terminal 1** - Serveur Web:
```bash
.\start-local.bat
```

**Terminal 2** - Synchronisation:
```bash
.\start-queue.bat
```

### Option 2: Commandes Manuelles

**Terminal 1**:
```bash
php artisan serve
```

**Terminal 2**:
```bash
php artisan queue:work
```

---

## 🌐 Accès

- **Application**: http://localhost:8000
- **Synchronisation**: http://localhost:8000/sync/status

---

## 🔄 Synchronisation

### Automatique

Tant que le **queue worker** tourne (Terminal 2), la synchronisation se fait **automatiquement** en arrière-plan.

### Manuelle

#### Vérifier le Statut

```bash
php artisan sync:status
```

#### Envoyer au Serveur

```bash
php artisan sync:to-remote
```

#### Récupérer du Serveur

```bash
php artisan sync:from-remote
```
⚠️ Écrase les données locales!

---

## 📊 Interface Web

Accédez à **http://localhost:8000/sync/status** pour:

- 📈 Voir les statistiques
- 🌐 Vérifier l'état de connexion
- ⚡ Synchroniser manuellement
- 🕐 Voir la dernière sync

La page se rafraîchit automatiquement toutes les 30 secondes.

---

## 🎯 Modèles Synchronisés

Les données suivantes sont synchronisées automatiquement:

- ✅ Clients
- ✅ Dépôts
- ✅ Paiements
- ✅ Articles
- ✅ Catégories
- ✅ Dépenses

---

## 📚 Documentation Complète

| Fichier | Description |
|---------|-------------|
| **GUIDE_RAPIDE.md** | Guide de démarrage rapide |
| **DEPLOIEMENT_LOCAL.md** | Guide détaillé de déploiement |
| **README_SYNCHRONISATION.md** | Documentation technique complète |
| **RESUME_INSTALLATION.md** | Résumé de l'installation |

---

## 🐛 Dépannage Rapide

### Les données ne se synchronisent pas

1. Vérifiez que le queue worker est actif (Terminal 2)
2. Vérifiez: `php artisan sync:status`
3. Consultez: `storage\logs\laravel.log`

### Database locked

- Redémarrez le queue worker
- Fermez les autres connexions à la DB

### Erreur de connexion distante

- Vérifiez `.env` (REMOTE_DB_*)
- Testez: `php artisan sync:status`

---

## ✅ Workflow Quotidien

1. **Démarrer** les 2 terminaux (`start-local.bat` + `start-queue.bat`)
2. **Travailler** normalement dans l'application
3. **Synchronisation** automatique en arrière-plan
4. **Vérifier** de temps en temps: `php artisan sync:status`

---

## 🔒 Sécurité

- ✓ Ne committez jamais `.env`
- ✓ Sauvegardez `database/database.sqlite` régulièrement
- ✓ Utilisez HTTPS pour le serveur distant
- ✓ Chiffrez les sauvegardes sensibles

---

## 📞 Support

### Commandes Debug

```bash
# Voir les logs
type storage\logs\laravel.log

# 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()
```

### Ressources

- Documentation Laravel: https://laravel.com/docs
- Laravel Queues: https://laravel.com/docs/queues
- SQLite: https://www.sqlite.org/docs.html

---

## 🎉 C'est Tout!

Vous êtes maintenant prêt à utiliser Pressing Yehiya en mode local avec synchronisation!

**Bon travail! 🚀**

---

## 📝 Structure du Projet

```
pressing_yehiya/
├── app/
│   ├── Console/Commands/
│   │   ├── SyncToRemote.php
│   │   ├── SyncFromRemote.php
│   │   └── SyncStatus.php
│   ├── Http/Controllers/
│   │   └── SyncController.php
│   ├── Jobs/
│   │   └── AutoSyncJob.php
│   ├── Models/
│   │   ├── SyncLog.php
│   │   ├── Customer.php (+ Syncable)
│   │   ├── Deposit.php (+ Syncable)
│   │   └── ...
│   ├── Services/
│   │   └── SyncService.php
│   └── Traits/
│       └── Syncable.php
├── database/
│   ├── migrations/
│   │   └── 2026_02_09_000000_create_sync_logs_table.php
│   └── database.sqlite
├── resources/views/
│   └── sync/
│       └── status.blade.php
├── deploy-local.bat (Script de déploiement)
├── start-local.bat (Démarrer serveur)
├── start-queue.bat (Démarrer queue)
├── GUIDE_RAPIDE.md
├── DEPLOIEMENT_LOCAL.md
├── README_SYNCHRONISATION.md
└── RESUME_INSTALLATION.md
```

---

**Version**: 1.0  
**Date**: 9 février 2026  
**Auteur**: Système de Synchronisation Pressing Yehiya
