94 lines
4.7 KiB
JavaScript
94 lines
4.7 KiB
JavaScript
const { PrismaClient } = require('@prisma/client')
|
|
const bcrypt = require('bcryptjs')
|
|
|
|
const prisma = new PrismaClient()
|
|
|
|
async function main() {
|
|
const passwordHash = await bcrypt.hash('demo123', 12)
|
|
|
|
const user = await prisma.user.upsert({
|
|
where: { email: 'demo@secourit.fr' },
|
|
update: {},
|
|
create: {
|
|
email: 'demo@secourit.fr',
|
|
name: 'Démo',
|
|
passwordHash,
|
|
role: 'demo',
|
|
},
|
|
})
|
|
|
|
console.log('Demo user created:', user.email)
|
|
|
|
// Nettoyer les anciennes données démo
|
|
await prisma.contract.deleteMany({ where: { userId: user.id } })
|
|
await prisma.quote.deleteMany({ where: { userId: user.id } })
|
|
await prisma.client.deleteMany({ where: { userId: user.id } })
|
|
|
|
// Créer des clients
|
|
const clients = await Promise.all([
|
|
prisma.client.create({
|
|
data: { name: 'SARL Dupont Informatique', email: 'contact@dupont-info.fr', phone: '01 23 45 67 89', address: '12 Rue de Paris, 75001 Paris', siret: '12345678900012', type: 'CLIENT', notes: 'Client principal', userId: user.id },
|
|
}),
|
|
prisma.client.create({
|
|
data: { name: 'Cabinet Médical Martin', email: 'secretariat@cabinet-martin.fr', phone: '01 98 76 54 32', address: '5 Avenue des Lilas, 69001 Lyon', siret: '98765432100045', type: 'CLIENT', notes: '3 postes + 1 serveur', userId: user.id },
|
|
}),
|
|
prisma.client.create({
|
|
data: { name: 'Boulangerie Le Pain Doré', email: 'contact@lepaindore.fr', phone: '03 20 15 30 45', address: '8 Rue du Four, 59000 Lille', siret: '45678912300078', type: 'CLIENT', notes: '1 poste, maintenance simple', userId: user.id },
|
|
}),
|
|
prisma.client.create({
|
|
data: { name: 'SCI Bellevue', email: 'gestion@scibellevue.com', phone: '04 91 23 45 67', address: '15 Boulevard de la Mer, 13008 Marseille', siret: '32165498700023', type: 'PROSPECT', notes: 'Projet 5 postes + KSuite', userId: user.id },
|
|
}),
|
|
prisma.client.create({
|
|
data: { name: 'Restaurant Le Gourmet', email: 'contact@legourmet.fr', phone: '02 40 12 34 56', address: '3 Place du Marché, 44000 Nantes', siret: '65412378900056', type: 'PROSPECT', notes: 'A besoin de 2 caisses', userId: user.id },
|
|
}),
|
|
prisma.client.create({
|
|
data: { name: 'École Privée Saint-Joseph', email: 'direction@saint-joseph.fr', phone: '05 56 78 90 12', address: '20 Rue de lÉducation, 33000 Bordeaux', siret: '14725836900089', type: 'CLIENT', notes: '10 postes, 2 serveurs, KSuite Business 15 utilisateurs', userId: user.id },
|
|
}),
|
|
])
|
|
|
|
console.log('Clients created:', clients.length)
|
|
|
|
// Créer des contrats
|
|
const contracts = [
|
|
{ clientId: clients[0].id, name: 'Contrat maintenance SARL Dupont', startDate: new Date('2025-01-01'), monthlyPrice: 76.80, monthlyCost: 11.20, setupPrice: 500, setupCost: 150, status: 'ACTIVE' },
|
|
{ clientId: clients[0].id, name: 'KSuite Business - SARL Dupont (3 users)', startDate: new Date('2025-01-01'), monthlyPrice: 47.40, monthlyCost: 19.74, setupPrice: 0, setupCost: 0, status: 'ACTIVE' },
|
|
{ clientId: clients[1].id, name: 'Contrat maintenance Cabinet Médical', startDate: new Date('2025-03-15'), monthlyPrice: 54.00, monthlyCost: 8.60, setupPrice: 800, setupCost: 200, status: 'ACTIVE' },
|
|
{ clientId: clients[2].id, name: 'Maintenance Boulangerie', startDate: new Date('2025-06-01'), monthlyPrice: 9.60, monthlyCost: 1.40, setupPrice: 150, setupCost: 50, status: 'ACTIVE' },
|
|
{ clientId: clients[5].id, name: 'Contrat global École St-Joseph', startDate: new Date('2025-09-01'), monthlyPrice: 333.00, monthlyCost: 115.70, setupPrice: 2500, setupCost: 800, status: 'ACTIVE' },
|
|
{ clientId: clients[1].id, name: 'KSuite Business - Cabinet Médical (2 users)', startDate: new Date('2025-04-01'), monthlyPrice: 31.60, monthlyCost: 13.16, setupPrice: 0, setupCost: 0, status: 'PAUSED' },
|
|
]
|
|
|
|
for (const contract of contracts) {
|
|
await prisma.contract.create({
|
|
data: { ...contract, userId: user.id, billingDay: 1, notes: null },
|
|
})
|
|
}
|
|
|
|
console.log('Contracts created:', contracts.length)
|
|
|
|
// Créer des devis
|
|
const quotes = [
|
|
{ clientId: clients[3].id, name: 'Devis SCI Bellevue - 5 postes', status: 'DRAFT', setupTotal: 250, monthlyTotal: 48, costTotal: 7, marginTotal: 41, discount: 0, travelKm: 30, travelCost: 15 },
|
|
{ clientId: clients[4].id, name: 'Devis Restaurant Le Gourmet', status: 'SENT', setupTotal: 300, monthlyTotal: 19.20, costTotal: 2.80, marginTotal: 16.40, discount: 10, travelKm: 15, travelCost: 7.50 },
|
|
]
|
|
|
|
for (const quote of quotes) {
|
|
await prisma.quote.create({
|
|
data: { ...quote, userId: user.id, notes: null },
|
|
})
|
|
}
|
|
|
|
console.log('Quotes created:', quotes.length)
|
|
console.log('')
|
|
console.log('Demo account: demo@secourit.fr / demo123')
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error(e)
|
|
process.exit(1)
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect()
|
|
})
|