# 📦 Guide de Déploiement Offline (Sans Internet)

## 🎯 Objectif

Ce guide vous explique comment déployer l'application Pressing Yehiya sur un ordinateur **sans connexion internet**.

---

## 📋 Vue d'Ensemble

```
┌─────────────────────┐
│  ORDINATEUR SOURCE  │
│  (Avec Internet)    │
│                     │
│  1. Préparer        │
│  2. Empaqueter      │
└──────────┬──────────┘
           │
           │ USB / Réseau
           ▼
┌─────────────────────┐
│  ORDINATEUR CIBLE   │
│  (Sans Internet)    │
│                     │
│  3. Copier          │
│  4. Installer       │
│  5. Utiliser        │
└─────────────────────┘
```

---

## 🖥️ PARTIE 1: Sur l'Ordinateur SOURCE (Avec Internet)

### Prérequis
- PHP 8.2+
- Composer
- Node.js et NPM
- Connexion internet

### Étape 1: Préparer le Package

1. **Ouvrez un terminal** dans le dossier de l'application:
   ```
   cd C:\Softsys\pressing_yehiya
   ```

2. **Exécutez le script de packaging**:
   ```bash
   .\package-for-offline.bat
   ```

3. **Attendez la fin** (5-10 minutes):
   - Installation des dépendances PHP
   - Installation des dépendances Node.js
   - Copie de tous les fichiers

4. **Package créé**:
   ```
   C:\Softsys\pressing_yehiya_offline_YYYYMMDD\
   ```

### Étape 2: Transférer le Package

#### Option A: Clé USB

1. Copiez le dossier `pressing_yehiya_offline_YYYYMMDD` sur une clé USB
2. Branchez la clé sur l'ordinateur cible
3. Copiez le dossier à l'emplacement souhaité

#### Option B: Réseau Local

1. Partagez le dossier sur le réseau
2. Sur l'ordinateur cible, copiez depuis le réseau

#### Option C: Compression (Recommandé pour USB)

1. **Compresser** le dossier en ZIP:
   - Clic droit → Envoyer vers → Dossier compressé
   - Ou utilisez 7-Zip, WinRAR, etc.

2. **Transférer** le fichier ZIP (plus rapide)

3. **Décompresser** sur l'ordinateur cible

---

## 💻 PARTIE 2: Sur l'Ordinateur CIBLE (Sans Internet)

### Prérequis sur l'Ordinateur Cible

Avant l'installation, installez (si pas déjà fait):

#### 1. PHP 8.2 ou supérieur

**Télécharger** (sur un ordinateur avec internet):
- https://windows.php.net/download/

**Installer**:
1. Extraire le ZIP dans `C:\php`
2. Ajouter `C:\php` au PATH
3. Activer l'extension SQLite dans `php.ini`:
   ```ini
   extension=pdo_sqlite
   extension=sqlite3
   ```

**Vérifier**:
```bash
php --version
```

#### 2. Node.js

**Télécharger** (sur un ordinateur avec internet):
- https://nodejs.org/

**Installer**:
- Exécuter l'installeur `.msi`

**Vérifier**:
```bash
node --version
npm --version
```

### Étape 1: Copier les Fichiers

1. Copiez le dossier `pressing_yehiya_offline_YYYYMMDD` depuis la clé USB vers:
   ```
   C:\Softsys\pressing_yehiya\
   ```

2. Vérifiez que le dossier contient:
   - ✅ `vendor/` (dépendances PHP)
   - ✅ `node_modules/` (dépendances Node.js)
   - ✅ `install-offline.bat`
   - ✅ Tous les autres fichiers de l'application

### Étape 2: Installer l'Application

1. **Ouvrez l'Explorateur** et naviguez vers:
   ```
   C:\Softsys\pressing_yehiya\
   ```

2. **Double-cliquez** sur:
   ```
   install-offline.bat
   ```

3. **Suivez les instructions** à l'écran:
   - Vérification des prérequis
   - Configuration de `.env`
   - Création de la base de données
   - Exécution des migrations
   - Compilation des assets

4. **Configuration `.env`**:
   
   Quand le fichier `.env` s'ouvre, configurez:
   
   ```env
   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 (si vous avez un serveur)
   # Si pas de serveur distant, laissez vide ou commentez
   REMOTE_DB_DRIVER=mysql
   REMOTE_DB_HOST=
   REMOTE_DB_PORT=3306
   REMOTE_DB_DATABASE=
   REMOTE_DB_USERNAME=
   REMOTE_DB_PASSWORD=
   
   QUEUE_CONNECTION=database
   ```
   
   **Important**: Si vous n'avez pas de serveur distant, laissez les champs `REMOTE_DB_*` vides.

5. **Attendez la fin** de l'installation

### Étape 3: Démarrer l'Application

#### Terminal 1 - Serveur Web

1. Double-cliquez sur:
   ```
   start-local.bat
   ```

2. Le serveur démarre sur: **http://localhost:8000**

#### Terminal 2 - Synchronisation (Optionnel)

Si vous avez configuré un serveur distant:

1. Double-cliquez sur:
   ```
   start-queue.bat
   ```

**Note**: Si vous n'avez pas de serveur distant, cette étape est optionnelle.

### Étape 4: Accéder à l'Application

1. Ouvrez un navigateur
2. Allez sur: **http://localhost:8000**
3. Connectez-vous avec vos identifiants

---

## 🔄 Synchronisation (Si Serveur Distant)

### Première Synchronisation

Si l'ordinateur cible obtient internet ET que vous avez un serveur distant:

1. **Configurer `.env`** avec les infos du serveur distant

2. **Télécharger les données**:
   ```bash
   php artisan sync:from-remote
   ```

3. **Démarrer la synchronisation automatique**:
   - Lancez `start-queue.bat`

### Sans Serveur Distant

Si vous n'avez pas de serveur distant:
- L'application fonctionne **100% en local**
- Aucune synchronisation nécessaire
- Toutes les données restent sur cet ordinateur

---

## 📊 Tailles Approximatives

| Composant | Taille |
|-----------|--------|
| Application | ~10 MB |
| vendor/ (PHP) | ~50-80 MB |
| node_modules/ (Node) | ~200-300 MB |
| **TOTAL** | **~260-390 MB** |

**Conseil**: Utilisez une clé USB de 1 GB minimum.

---

## 🐛 Dépannage

### PHP n'est pas reconnu

**Problème**: `'php' n'est pas reconnu comme une commande`

**Solution**:
1. Installez PHP (voir prérequis)
2. Ajoutez PHP au PATH système:
   - Panneau de configuration → Système → Variables d'environnement
   - Dans PATH, ajoutez: `C:\php`

### Node n'est pas reconnu

**Problème**: `'node' n'est pas reconnu comme une commande`

**Solution**:
1. Installez Node.js (voir prérequis)
2. Redémarrez le terminal après installation

### Dossier vendor manquant

**Problème**: `vendor\autoload.php introuvable`

**Solution**:
1. Le package n'est pas complet
2. Refaites le packaging sur l'ordinateur source
3. Vérifiez que `vendor/` est bien copié

### Dossier node_modules manquant

**Problème**: `node_modules introuvable`

**Solution**:
1. Le package n'est pas complet
2. Refaites le packaging sur l'ordinateur source
3. Vérifiez que `node_modules/` est bien copié

### Erreur lors de la compilation des assets

**Problème**: `npm run build` échoue

**Solutions possibles**:
1. Vérifiez que Node.js est bien installé
2. Vérifiez que `node_modules/` est complet
3. Si nécessaire, sur un ordinateur avec internet:
   ```bash
   npm install
   npm run build
   ```
   Puis copiez le dossier `public/build/` dans le package

### Extension SQLite non activée

**Problème**: `could not find driver`

**Solution**:
1. Ouvrez `C:\php\php.ini`
2. Décommentez (enlevez le `;`):
   ```ini
   extension=pdo_sqlite
   extension=sqlite3
   ```
3. Redémarrez le terminal

---

## 📝 Checklist d'Installation

### Sur l'Ordinateur Source
- [ ] `package-for-offline.bat` exécuté
- [ ] Package créé avec succès
- [ ] Dossier `vendor/` présent dans le package
- [ ] Dossier `node_modules/` présent dans le package
- [ ] Package transféré sur clé USB ou compressé

### Sur l'Ordinateur Cible
- [ ] PHP 8.2+ installé et dans le PATH
- [ ] Node.js installé et dans le PATH
- [ ] Extension SQLite activée dans `php.ini`
- [ ] Package copié à destination
- [ ] `install-offline.bat` exécuté avec succès
- [ ] `.env` configuré
- [ ] Base de données créée
- [ ] Migrations exécutées
- [ ] Assets compilés
- [ ] `start-local.bat` lancé
- [ ] Application accessible sur http://localhost:8000

---

## 🎯 Scénarios d'Usage

### Scénario 1: Installation 100% Offline

**Situation**: L'ordinateur cible n'aura **jamais** internet

**Configuration**:
1. Ne configurez PAS les paramètres `REMOTE_DB_*` dans `.env`
2. Ne lancez PAS `start-queue.bat`
3. Travaillez uniquement en local

**Avantages**:
- Simple
- Pas de dépendance externe
- Données 100% locales

### Scénario 2: Installation Offline puis Online

**Situation**: L'ordinateur cible n'a pas internet maintenant, mais en aura plus tard

**Configuration**:
1. Installez sans configurer les paramètres distants
2. Travaillez en local
3. Quand internet arrive:
   - Configurez les paramètres `REMOTE_DB_*` dans `.env`
   - Lancez `start-queue.bat`
   - Synchronisez: `php artisan sync:to-remote`

**Avantages**:
- Utilisable immédiatement
- Synchronisation future possible
- Flexibilité maximale

### Scénario 3: Réseau Local sans Internet

**Situation**: Plusieurs ordinateurs en réseau local, mais pas d'internet

**Configuration**:
1. Installez sur un ordinateur "serveur"
2. Partagez l'accès via le réseau local
3. Les autres ordinateurs accèdent via: `http://IP-SERVEUR:8000`

**Exemple**:
- Serveur: `192.168.1.10`
- Clients accèdent à: `http://192.168.1.10:8000`

---

## 💡 Conseils Pro

### Optimiser le Transfert

1. **Compressez** avant de transférer:
   - Réduit le temps de transfert de 70%
   - Package de 300 MB → ~100 MB compressé

2. **Excluez** les fichiers inutiles:
   - `.history/`
   - `storage/logs/`
   - `.git/` (si présent)

### Préparer Plusieurs Machines

Pour installer sur plusieurs ordinateurs:

1. Préparez **un seul package**
2. Copiez-le sur **plusieurs clés USB** ou réseau
3. Installez sur chaque machine avec `install-offline.bat`

### Mise à Jour Future

Pour mettre à jour l'application sur l'ordinateur offline:

1. Sur l'ordinateur source (avec internet):
   - Mettez à jour le code
   - Refaites le package: `package-for-offline.bat`

2. Sur l'ordinateur cible:
   - Sauvegardez `database/database.sqlite`
   - Sauvegardez `.env`
   - Copiez le nouveau package
   - Restaurez `database.sqlite` et `.env`
   - Exécutez: `php artisan migrate`

---

## 📞 Support

### Logs

En cas de problème, consultez:
```
storage/logs/laravel.log
```

### Commandes Utiles

```bash
# Vérifier PHP
php --version
php -m | findstr sqlite

# Vérifier Node
node --version
npm --version

# Vérifier l'application
php artisan --version
php artisan route:list

# Tester la base de données
php artisan tinker
>>> DB::connection()->getDatabaseName()
```

---

## ✅ Résumé

**Sur l'ordinateur SOURCE**:
1. `package-for-offline.bat`
2. Transférer le package

**Sur l'ordinateur CIBLE**:
1. Installer PHP + Node.js
2. Copier le package
3. `install-offline.bat`
4. `start-local.bat`

**C'est tout!** 🎉

L'application fonctionne maintenant sur un ordinateur sans internet!

---

**Version**: 1.0  
**Date**: 9 février 2026  
**Type**: Déploiement Offline
