288 lines
7.9 KiB
Plaintext
288 lines
7.9 KiB
Plaintext
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
|
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL_DEV")
|
|
}
|
|
|
|
model Users {
|
|
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
|
|
first_name String
|
|
last_name String
|
|
email String @unique
|
|
phone_number Int @unique
|
|
residence String?
|
|
role Roles @default(GUEST)
|
|
|
|
employee Employees? @relation("UserEmployee")
|
|
customer Customers? @relation("UserCustomer")
|
|
oauth_access_tokens OAuthAccessTokens[] @relation("UserOAuthAccessToken")
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
model Employees {
|
|
id Int @id @default(autoincrement())
|
|
user Users @relation("UserEmployee", fields: [user_id], references: [id])
|
|
user_id String @unique @db.Uuid
|
|
external_payroll_id Int
|
|
company_code Int
|
|
first_work_day DateTime
|
|
last_work_day DateTime?
|
|
|
|
supervisor Employees? @relation("EmployeeSupervisor", fields: [supervisor_id], references: [id])
|
|
supervisor_id Int?
|
|
managed_employees Employees[] @relation("EmployeeSupervisor")
|
|
|
|
archive EmployeesArchive[] @relation("EmployeeToArchives")
|
|
timesheet Timesheets[] @relation("TimesheetEmployee")
|
|
leave_request LeaveRequests[] @relation("LeaveRequestEmployee")
|
|
|
|
@@map("employees")
|
|
}
|
|
|
|
model EmployeesArchive {
|
|
id Int @id @default(autoincrement())
|
|
employee Employees @relation("EmployeeToArchives", fields: [employee_id], references: [id])
|
|
employee_id Int
|
|
archived_at DateTime @default(now())
|
|
user_id String @db.Uuid
|
|
external_payroll_id Int
|
|
company_code Int
|
|
first_Work_Day DateTime
|
|
last_work_day DateTime
|
|
supervisor_id Int?
|
|
|
|
@@map("employees_archive")
|
|
}
|
|
|
|
model Customers {
|
|
id Int @id @default(autoincrement())
|
|
user Users @relation("UserCustomer", fields: [user_id], references: [id])
|
|
user_id String @unique @db.Uuid
|
|
invoice_id Int? @unique
|
|
|
|
archive CustomersArchive[] @relation("CustomerToArchives")
|
|
|
|
@@map("customers")
|
|
}
|
|
|
|
model CustomersArchive {
|
|
id Int @id @default(autoincrement())
|
|
customer Customers @relation("CustomerToArchives", fields: [customer_id], references: [id])
|
|
customer_id Int
|
|
archived_at DateTime @default(now())
|
|
user_id String @db.Uuid
|
|
invoice_id Int? @unique
|
|
|
|
@@map("customers_archive")
|
|
}
|
|
|
|
model LeaveRequests {
|
|
id Int @id @default(autoincrement())
|
|
employee Employees @relation("LeaveRequestEmployee", fields: [employee_id], references: [id])
|
|
employee_id Int
|
|
leave_type LeaveTypes
|
|
start_date_time DateTime
|
|
end_date_time DateTime?
|
|
comment String
|
|
approval_status LeaveApprovalStatus @default(PENDING)
|
|
|
|
archive LeaveRequestsArchive[] @relation("LeaveRequestToArchives")
|
|
|
|
@@map("leave_requests")
|
|
}
|
|
|
|
model LeaveRequestsArchive {
|
|
id Int @id @default(autoincrement())
|
|
leave_request LeaveRequests @relation("LeaveRequestToArchives", fields: [leave_request_id], references: [id])
|
|
leave_request_id Int
|
|
archived_at DateTime @default(now())
|
|
employee_id Int
|
|
leave_type LeaveTypes
|
|
start_date_time DateTime
|
|
end_date_time DateTime?
|
|
comment String
|
|
approval_status LeaveApprovalStatus
|
|
|
|
@@map("leave_requests_archive")
|
|
}
|
|
|
|
//pay-period vue
|
|
model PayPeriods {
|
|
period_number Int @id
|
|
start_date DateTime
|
|
end_date DateTime
|
|
year Int
|
|
label String
|
|
|
|
@@map("pay_period")
|
|
}
|
|
|
|
model Timesheets {
|
|
id Int @id @default(autoincrement())
|
|
employee Employees @relation("TimesheetEmployee", fields: [employee_id], references: [id])
|
|
employee_id Int
|
|
is_approved Boolean @default(false)
|
|
|
|
shift Shifts[] @relation("ShiftTimesheet")
|
|
expense Expenses[] @relation("ExpensesTimesheet")
|
|
archive TimesheetsArchive[] @relation("TimesheetsToArchives")
|
|
|
|
@@map("timesheets")
|
|
}
|
|
|
|
model TimesheetsArchive {
|
|
id Int @id @default(autoincrement())
|
|
timesheet Timesheets @relation("TimesheetsToArchives", fields: [timesheet_id], references: [id])
|
|
timesheet_id Int
|
|
archive_at DateTime @default(now())
|
|
employee_id Int
|
|
is_approved Boolean
|
|
|
|
@@map("timesheets_archive")
|
|
}
|
|
|
|
model Shifts {
|
|
id Int @id @default(autoincrement())
|
|
timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id])
|
|
timesheet_id Int
|
|
shift_code ShiftCodes @relation("ShiftShiftCode", fields: [shift_code_id], references: [id])
|
|
shift_code_id Int
|
|
description String?
|
|
date DateTime
|
|
start_time DateTime
|
|
end_time DateTime
|
|
|
|
archive ShiftsArchive[] @relation("ShiftsToArchives")
|
|
|
|
@@map("shifts")
|
|
}
|
|
|
|
model ShiftsArchive {
|
|
id Int @id @default(autoincrement())
|
|
shift Shifts @relation("ShiftsToArchives", fields: [shift_id], references: [id])
|
|
shift_id Int
|
|
archive_at DateTime
|
|
timesheet_id Int
|
|
shift_code_id Int
|
|
description String?
|
|
date DateTime
|
|
start_time DateTime
|
|
end_time DateTime
|
|
|
|
@@map("shifts_archive")
|
|
}
|
|
|
|
model ShiftCodes {
|
|
id Int @id @default(autoincrement())
|
|
shift_type String
|
|
bank_code String
|
|
|
|
shift Shifts[] @relation("ShiftShiftCode")
|
|
|
|
@@map("shift_codes")
|
|
}
|
|
|
|
model Expenses {
|
|
id Int @id @default(autoincrement())
|
|
timesheet Timesheets @relation("ExpensesTimesheet", fields: [timesheet_id], references: [id])
|
|
timesheet_id Int
|
|
expense_code ExpenseCodes @relation("ExpenseExpenseCode", fields: [expense_code_id], references: [id])
|
|
expense_code_id Int
|
|
date DateTime
|
|
amount Float
|
|
attachement String?
|
|
description String?
|
|
is_approved Boolean @default(false)
|
|
supervisor_comment String?
|
|
|
|
archive ExpensesArchive[] @relation("ExpensesToArchive")
|
|
|
|
@@map("expenses")
|
|
}
|
|
|
|
model ExpensesArchive {
|
|
id Int @id @default(autoincrement())
|
|
expense Expenses @relation("ExpensesToArchive", fields: [expense_id], references: [id])
|
|
expense_id Int
|
|
timesheet_id Int
|
|
archived_at DateTime
|
|
amount Float
|
|
attachement String?
|
|
description String?
|
|
is_approved Boolean
|
|
supervisor_comment String?
|
|
|
|
@@map("expenses_archive")
|
|
}
|
|
|
|
model ExpenseCodes {
|
|
id Int @id @default(autoincrement())
|
|
expense_type String
|
|
bank_code String
|
|
|
|
expense Expenses[] @relation("ExpenseExpenseCode")
|
|
|
|
@@map("expense_codes")
|
|
}
|
|
|
|
model OAuthAccessTokens {
|
|
id String @id @default(cuid())
|
|
user Users @relation("UserOAuthAccessToken", fields: [user_id], references: [id])
|
|
user_id String @db.Uuid
|
|
application String
|
|
access_token String @unique
|
|
refresh_token String @unique
|
|
access_token_expiry DateTime
|
|
refresh_token_expiry DateTime?
|
|
is_revoked Boolean @default(false)
|
|
scopes Json @default("[]")
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime?
|
|
|
|
@@map("refresh_tokens")
|
|
}
|
|
|
|
enum Roles {
|
|
ADMIN
|
|
SUPERVISOR
|
|
HR
|
|
ACCOUNTING
|
|
EMPLOYEE
|
|
DEALER
|
|
CUSTOMER
|
|
GUEST
|
|
|
|
@@map("roles")
|
|
}
|
|
|
|
enum LeaveTypes {
|
|
SICK // maladie ou repos
|
|
VACATION // paye
|
|
UNPAID // non-paye
|
|
BEREAVEMENT // deuil de famille
|
|
PARENTAL // maternite/paternite/adoption
|
|
LEGAL // obligations legales comme devoir de juree
|
|
|
|
@@map("leave_types")
|
|
}
|
|
|
|
enum LeaveApprovalStatus {
|
|
PENDING
|
|
APPROVED
|
|
DENIED
|
|
CANCELLED
|
|
ESCALATED
|
|
|
|
@@map("leave_approval_status")
|
|
}
|