# Module Restauration et Gestion des Caisses - StayManager

## Vue d'ensemble

Ce module ajoute à StayManager les fonctionnalités de gestion de la restauration et de la caisse, permettant une gestion complète des factures de restaurant et des opérations de caisse.

## Architecture de la Base de Données

### 1. Tables de Restauration

#### `restaurant_invoices` - Factures de restauration
- **Structure principale** : Chaque facture contient les informations de base (client, table, serveur, etc.)
- **Lien avec réservations** : Peut être liée à une réservation de chambre ou d'événement
- **Calculs automatiques** : Sous-total, taxes, remises, total général
- **Statuts** : Brouillon, confirmée, en préparation, prête, servie, annulée, payée

#### `restaurant_invoice_items` - Lignes de facture
- **Détail des articles** : Chaque ligne contient un article avec quantité, prix unitaire, total
- **Lien avec l'inventaire** : Référence directe vers la table `inventory`
- **Impact sur le stock** : Décompte automatique lors de la validation

### 2. Tables de Gestion des Caisses

#### `cash_registers` - Caisses enregistreuses
- **Gestion des points de vente** : Réception, restaurant, événements
- **Configuration** : Nom, emplacement, statut actif

#### `cash_sessions` - Sessions de caisse
- **Ouverture/fermeture** : Gestion des sessions par utilisateur et par jour
- **Fond de caisse** : Montant d'ouverture et de fermeture
- **Suivi des encaissements** : Par méthode de paiement (espèces, carte, mobile money, virement)

#### `cash_transactions` - Transactions de caisse
- **Types de transactions** : Encaissement, paiement, remboursement, ajustement
- **Références** : Lien vers réservations, événements, factures restaurant
- **Traçabilité** : Numéro unique, description, notes

### 3. Modifications des Tables Existantes

#### `inventory` - Ajout des prix de vente
- **`selling_price`** : Prix de vente au client (différent du prix d'achat)
- **`is_menu_item`** : Indique si l'article est disponible au menu
- **`menu_category`** : Catégorie du menu (Plats, Boissons, etc.)

#### `reservations` et `event_bookings` - Solde restaurant
- **`restaurant_balance`** : Montant dû pour la restauration
- **`total_restaurant_amount`** : Total des consommations restaurant

#### `payments` - Support des factures restaurant
- **`restaurant_invoice_id`** : Lien vers les factures de restauration

## Fonctionnalités Principales

### 1. Gestion de la Restauration

#### Création de Factures
- **Client de passage** : Facture indépendante sans réservation
- **Client résident** : Facture liée à la réservation de chambre
- **Client événement** : Facture liée à la réservation de salle

#### Gestion des Commandes
- **Sélection d'articles** : Depuis l'inventaire disponible
- **Calculs automatiques** : Prix, taxes, remises
- **Suivi des statuts** : De la commande à la livraison

#### Impact sur le Stock
- **Décompte automatique** : À chaque validation de commande
- **Mouvements tracés** : Dans `inventory_movements`
- **Vérification disponibilité** : Avant validation

### 2. Gestion de la Caisse

#### Sessions de Caisse
- **Ouverture** : Définition du fond de caisse
- **Fermeture** : Calcul automatique des totaux
- **Suspension** : Possibilité de suspendre temporairement

#### Types de Transactions
- **Encaissements** : Paiements de réservations, événements, restaurant
- **Paiements** : Règlements de factures
- **Remboursements** : Annulations et remboursements
- **Ajustements** : Corrections et ajustements de caisse

#### Méthodes de Paiement
- **Espèces** : Gestion du fond de caisse
- **Carte bancaire** : Référence de transaction
- **Mobile Money** : Wave, Orange, MTN, Flooz
- **Virement** : Référence bancaire

### 3. Intégration avec les Réservations

#### Réservations de Chambres
- **Solde restaurant** : Ajouté au solde total
- **Paiement intégré** : Via le module de caisse
- **Historique complet** : Toutes les consommations

#### Réservations d'Événements
- **Facturation restaurant** : Liée à l'événement
- **Solde global** : Chambres + restaurant + événement
- **Règlement unifié** : Via la caisse

## Workflows Principaux

### 1. Création d'une Facture Restaurant

```
1. Sélection du client (résident ou de passage)
2. Lien optionnel avec réservation/événement
3. Ajout des articles depuis l'inventaire
4. Calcul automatique des totaux
5. Validation et impact sur le stock
6. Mise à jour du solde de réservation (si applicable)
```

### 2. Ouverture d'une Session de Caisse

```
1. Sélection de la caisse et de l'utilisateur
2. Saisie du fond de caisse
3. Génération du numéro de session
4. Statut "ouvert"
5. Prêt pour les transactions
```

### 3. Encaissement d'une Facture

```
1. Sélection du type de référence (réservation, événement, restaurant)
2. Saisie du montant et de la méthode de paiement
3. Création de la transaction
4. Mise à jour du statut de paiement
5. Impact sur le solde de la référence
```

### 4. Fermeture de Caisse

```
1. Calcul automatique des totaux par méthode
2. Saisie du montant de fermeture
3. Calcul de la différence
4. Statut "fermé"
5. Génération du rapport de clôture
```

## Sécurité et Contrôles

### 1. Gestion des Droits
- **Utilisateurs** : Seuls les utilisateurs autorisés peuvent ouvrir/fermer les caisses
- **Sessions** : Une session ne peut être modifiée que par son créateur
- **Transactions** : Traçabilité complète des opérations

### 2. Intégrité des Données
- **Contraintes** : Clés étrangères et contraintes d'intégrité
- **Transactions** : Opérations atomiques pour éviter les incohérences
- **Triggers** : Mise à jour automatique des soldes et stocks

### 3. Audit et Traçabilité
- **Horodatage** : Toutes les opérations sont horodatées
- **Utilisateur** : Chaque action est liée à un utilisateur
- **Historique** : Conservation de toutes les modifications

## Rapports et Suivi

### 1. Rapports de Restauration
- **Factures par période** : Chiffre d'affaires, nombre de clients
- **Articles les plus vendus** : Analyse des ventes
- **Consommation par réservation** : Suivi des clients résidents

### 2. Rapports de Caisse
- **État de caisse** : Totaux par méthode de paiement
- **Sessions par utilisateur** : Performance des caissiers
- **Différences de caisse** : Contrôle et audit

### 3. Rapports Intégrés
- **Solde global client** : Chambres + restaurant + événements
- **Paiements par période** : Analyse des encaissements
- **Stock consommé** : Mouvements et valorisation

## Utilisation Pratique

### 1. Interface Utilisateur
- **Menu principal** : Accès aux modules restaurant et caisse
- **Formulaires** : Création de factures, ouverture de caisse
- **Tableaux** : Liste des factures, transactions, sessions

### 2. Navigation
- **Restauration** : Factures → Articles → Validation
- **Caisse** : Sessions → Transactions → Clôture
- **Intégration** : Réservations → Restaurant → Paiements

### 3. Raccourcis
- **Création rapide** : Facture depuis une réservation
- **Paiement direct** : Depuis la facture restaurant
- **Ouverture caisse** : Depuis le menu principal

## Maintenance et Support

### 1. Sauvegarde
- **Base de données** : Sauvegarde régulière des nouvelles tables
- **Configuration** : Sauvegarde des paramètres de caisse
- **Historique** : Conservation des données de traçabilité

### 2. Mise à Jour
- **Scripts SQL** : Exécution des modifications de structure
- **Vérification** : Contrôle de l'intégrité après mise à jour
- **Tests** : Validation des fonctionnalités

### 3. Dépannage
- **Logs** : Traçabilité des erreurs et opérations
- **Vérification** : Contrôle des contraintes et relations
- **Restauration** : Procédures de récupération

## Conclusion

Ce module transforme StayManager en une solution complète de gestion hôtelière, intégrant parfaitement la restauration et la caisse avec les réservations existantes. L'architecture modulaire permet une maintenance facile et une évolution future du système.

---

*Documentation créée pour StayManager - Module Restauration et Gestion des Caisses*
