const { DataTypes } = require('sequelize'); module.exports = (sequelize) => { const Ticket = sequelize.define('Ticket', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, numero_ticket: { type: DataTypes.STRING(50), allowNull: false, unique: true, comment: 'Numéro unique du ticket' }, commande_id: { type: DataTypes.INTEGER, allowNull: false, references: { model: 'commandes', key: 'id' }, comment: 'ID de la commande associée' }, table_id: { type: DataTypes.INTEGER, allowNull: true, references: { model: 'tables', key: 'id' }, comment: 'ID de la table (optionnel)' }, // Informations du serveur directement dans le ticket serveur_nom: { type: DataTypes.STRING(100), allowNull: true, comment: 'Nom du serveur' }, serveur_prenom: { type: DataTypes.STRING(100), allowNull: true, comment: 'Prénom du serveur' }, // Données client directement dans le ticket (optionnel) client_nom: { type: DataTypes.STRING(100), allowNull: true, comment: 'Nom du client (optionnel)' }, client_prenom: { type: DataTypes.STRING(100), allowNull: true, comment: 'Prénom du client (optionnel)' }, client_telephone: { type: DataTypes.STRING(20), allowNull: true, comment: 'Téléphone du client (optionnel)' }, client_email: { type: DataTypes.STRING(100), allowNull: true, comment: 'Email du client (optionnel)' }, client_adresse: { type: DataTypes.TEXT, allowNull: true, comment: 'Adresse du client (optionnel)' }, montant_ht: { type: DataTypes.DECIMAL(10, 2), allowNull: false, defaultValue: 0.00, comment: 'Montant hors taxes' }, montant_tva: { type: DataTypes.DECIMAL(10, 2), allowNull: false, defaultValue: 0.00, comment: 'Montant de la TVA' }, montant_ttc: { type: DataTypes.DECIMAL(10, 2), allowNull: false, defaultValue: 0.00, comment: 'Montant toutes taxes comprises' }, remise: { type: DataTypes.DECIMAL(10, 2), allowNull: false, defaultValue: 0.00, comment: 'Montant de la remise appliquée' }, taux_tva: { type: DataTypes.DECIMAL(5, 2), allowNull: false, defaultValue: 20.00, comment: 'Taux de TVA en pourcentage' }, mode_paiement: { type: DataTypes.ENUM('especes', 'carte', 'cheque', 'virement', 'mobile', 'autre'), allowNull: false, defaultValue: 'especes', comment: 'Mode de paiement' }, statut: { type: DataTypes.ENUM('brouillon', 'emis', 'paye', 'rembourse', 'annule'), allowNull: false, defaultValue: 'brouillon', comment: 'Statut du ticket' }, type_service: { type: DataTypes.ENUM('sur_place', 'emporter', 'livraison'), allowNull: false, defaultValue: 'sur_place', comment: 'Type de service' }, date_emission: { type: DataTypes.DATE, allowNull: false, defaultValue: DataTypes.NOW, comment: 'Date d\'émission du ticket' }, date_paiement: { type: DataTypes.DATE, allowNull: true, comment: 'Date de paiement' }, notes: { type: DataTypes.TEXT, allowNull: true, comment: 'Notes sur le ticket' }, facture_pdf: { type: DataTypes.STRING(500), allowNull: true, comment: 'Chemin vers le PDF généré' }, donnees_supplementaires: { type: DataTypes.JSON, allowNull: true, comment: 'Données supplémentaires en JSON' } }, { tableName: 'tickets', timestamps: true, createdAt: 'created_at', updatedAt: 'updated_at', indexes: [ { fields: ['numero_ticket'], unique: true }, { fields: ['commande_id'] }, { fields: ['table_id'] }, { fields: ['statut'] }, { fields: ['date_emission'] }, { fields: ['client_email'] }, { fields: ['client_telephone'] }, { fields: ['serveur_nom'] } ] }); return Ticket; };