You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.9 KiB
163 lines
4.9 KiB
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;
|
|
};
|
|
|