Initial commit: SecourIT Gestion
This commit is contained in:
@@ -0,0 +1,253 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
name String?
|
||||
passwordHash String?
|
||||
role String @default("admin")
|
||||
infomaniakId String? @unique
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
sessions Session[]
|
||||
quotes Quote[]
|
||||
contracts Contract[]
|
||||
clients Client[]
|
||||
sales Sale[]
|
||||
todos TodoItem[]
|
||||
}
|
||||
|
||||
model Session {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
token String @unique
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId])
|
||||
@@index([token])
|
||||
}
|
||||
|
||||
model Client {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
email String?
|
||||
phone String?
|
||||
address String?
|
||||
siret String?
|
||||
type ClientType @default(PROSPECT)
|
||||
isProfessional Boolean? @default(true)
|
||||
notes String?
|
||||
userId String
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
quotes Quote[]
|
||||
contracts Contract[]
|
||||
sales Sale[]
|
||||
|
||||
@@index([userId])
|
||||
@@index([type])
|
||||
}
|
||||
|
||||
enum ClientType {
|
||||
PROSPECT
|
||||
CLIENT
|
||||
}
|
||||
|
||||
model Quote {
|
||||
id String @id @default(cuid())
|
||||
clientId String
|
||||
userId String
|
||||
name String
|
||||
quoteNumber String?
|
||||
status QuoteStatus @default(DRAFT)
|
||||
setupTotal Float @default(0)
|
||||
monthlyTotal Float @default(0)
|
||||
costTotal Float @default(0)
|
||||
marginTotal Float @default(0)
|
||||
discount Float @default(0)
|
||||
travelKm Int @default(0)
|
||||
travelCost Float @default(0)
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
client Client @relation(fields: [clientId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
items QuoteItem[]
|
||||
contract Contract?
|
||||
|
||||
@@index([clientId])
|
||||
@@index([userId])
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
enum QuoteStatus {
|
||||
DRAFT
|
||||
PROPOSAL
|
||||
SENT
|
||||
ACCEPTED
|
||||
REJECTED
|
||||
EXPIRED
|
||||
}
|
||||
|
||||
model QuoteItem {
|
||||
id String @id @default(cuid())
|
||||
quoteId String
|
||||
type QuoteItemType
|
||||
label String
|
||||
description String?
|
||||
unitPrice Float
|
||||
costPrice Float
|
||||
quantity Int @default(1)
|
||||
isRecurring Boolean @default(false)
|
||||
setupPrice Float @default(0)
|
||||
setupCost Float @default(0)
|
||||
monthlyPrice Float @default(0)
|
||||
monthlyCost Float @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
quote Quote @relation(fields: [quoteId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([quoteId])
|
||||
}
|
||||
|
||||
enum QuoteItemType {
|
||||
MAINTENANCE_POSTE
|
||||
MAINTENANCE_SERVER
|
||||
KS_SUITE_STANDARD
|
||||
KS_SUITE_BUSINESS
|
||||
KS_SUITE_ENTREPRISE
|
||||
HOURLY_INTERVENTION
|
||||
TRAVEL
|
||||
CUSTOM
|
||||
}
|
||||
|
||||
model Contract {
|
||||
id String @id @default(cuid())
|
||||
clientId String
|
||||
userId String
|
||||
quoteId String? @unique
|
||||
name String
|
||||
startDate DateTime
|
||||
endDate DateTime?
|
||||
setupPrice Float @default(0)
|
||||
setupCost Float @default(0)
|
||||
monthlyPrice Float @default(0)
|
||||
monthlyCost Float @default(0)
|
||||
status ContractStatus @default(ACTIVE)
|
||||
billingDay Int @default(1)
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
client Client @relation(fields: [clientId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
quote Quote? @relation(fields: [quoteId], references: [id], onDelete: SetNull)
|
||||
invoices Invoice[]
|
||||
|
||||
@@index([clientId])
|
||||
@@index([userId])
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
enum ContractStatus {
|
||||
PROPOSAL
|
||||
ACTIVE
|
||||
PAUSED
|
||||
CANCELLED
|
||||
EXPIRED
|
||||
}
|
||||
|
||||
model Invoice {
|
||||
id String @id @default(cuid())
|
||||
contractId String
|
||||
month DateTime
|
||||
amount Float
|
||||
invoiceNumber String?
|
||||
emitted Boolean @default(false)
|
||||
emittedAt DateTime?
|
||||
paidAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([contractId])
|
||||
@@unique([contractId, month])
|
||||
}
|
||||
|
||||
model TodoItem {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
text String
|
||||
position Int
|
||||
done Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
model Sale {
|
||||
id String @id @default(cuid())
|
||||
clientId String
|
||||
userId String
|
||||
date DateTime @default(now())
|
||||
totalAmount Float @default(0)
|
||||
totalCost Float @default(0)
|
||||
paid Boolean @default(false)
|
||||
notes String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
client Client @relation(fields: [clientId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
items SaleItem[]
|
||||
|
||||
@@index([clientId])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
model SaleItem {
|
||||
id String @id @default(cuid())
|
||||
saleId String
|
||||
label String
|
||||
description String?
|
||||
quantity Int @default(1)
|
||||
unitPrice Float @default(0)
|
||||
costPrice Float @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
sale Sale @relation(fields: [saleId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([saleId])
|
||||
}
|
||||
|
||||
model ProductCost {
|
||||
id String @id @default(cuid())
|
||||
key String @unique
|
||||
label String
|
||||
costPrice Float
|
||||
sellPrice Float
|
||||
unit String
|
||||
category String
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
Reference in New Issue
Block a user