d582c748a2
- Implemented a new route for managing financial transactions (money) for companies, including creating, editing, and deleting transactions. - Added a new model `Buchung` to represent transactions with fields for date, account type, transaction type, amount, and description. - Updated the `companies` model to include a relation to the new `Buchung` model. - Enhanced the company overview page to link to the new financial transactions page. - Added migration scripts to create the necessary database tables and fields for the new functionality. - Created utility scripts for resetting the admin password and setting up the initial admin user.
285 lines
7.3 KiB
Plaintext
285 lines
7.3 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "mysql"
|
|
url = env("DATABASE_URL")
|
|
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
|
|
}
|
|
|
|
enum UserRole {
|
|
USER
|
|
ADMIN
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(cuid())
|
|
email String @unique
|
|
username String @unique
|
|
passwordHash String
|
|
name String
|
|
role UserRole @default(USER)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
companies Company[]
|
|
auditLogs AuditLog[]
|
|
|
|
@@map("users")
|
|
}
|
|
|
|
model AuditLog {
|
|
id String @id @default(cuid())
|
|
userId String?
|
|
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
|
action String
|
|
entity String?
|
|
entityId String?
|
|
metadata Json?
|
|
ipAddress String?
|
|
createdAt DateTime @default(now())
|
|
|
|
@@index([userId])
|
|
@@index([createdAt])
|
|
@@map("audit_logs")
|
|
}
|
|
|
|
model Company {
|
|
id String @id @default(cuid())
|
|
name String
|
|
legalForm String?
|
|
taxId String?
|
|
vatId String?
|
|
address String
|
|
zip String
|
|
city String
|
|
country String @default("DE")
|
|
email String?
|
|
phone String?
|
|
website String?
|
|
bankIban String?
|
|
bankBic String?
|
|
bankName String?
|
|
invoicePrefix String @default("RE")
|
|
invoiceSequence Int @default(0)
|
|
kleinunternehmer Boolean @default(false)
|
|
archived Boolean @default(false)
|
|
archivedAt DateTime?
|
|
userId String
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
customers Customer[]
|
|
invoices Invoice[]
|
|
services Service[]
|
|
betriebsausgaben Betriebsausgabe[]
|
|
betriebseinnahmen Betriebseinnahme[]
|
|
anlagegueter Anlagegut[]
|
|
buchungen Buchung[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@map("companies")
|
|
}
|
|
|
|
enum TransactionAccount {
|
|
KASSE
|
|
BANK
|
|
}
|
|
|
|
enum TransactionType {
|
|
EINLAGE
|
|
ENTNAHME
|
|
}
|
|
|
|
model Buchung {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
date DateTime
|
|
account TransactionAccount
|
|
type TransactionType
|
|
amount Decimal @db.Decimal(10, 2)
|
|
description String? @db.Text
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([companyId])
|
|
@@index([date])
|
|
@@map("buchungen")
|
|
}
|
|
|
|
model Service {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
name String
|
|
description String? @db.Text
|
|
unit String?
|
|
unitPrice Decimal @db.Decimal(10, 2)
|
|
taxRate Decimal @db.Decimal(5, 2)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@map("services")
|
|
}
|
|
|
|
model Customer {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
name String
|
|
taxId String?
|
|
address String
|
|
zip String
|
|
city String
|
|
country String @default("DE")
|
|
email String?
|
|
phone String?
|
|
invoices Invoice[]
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@map("customers")
|
|
}
|
|
|
|
model Invoice {
|
|
id String @id @default(cuid())
|
|
number String?
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
customerId String
|
|
customer Customer @relation(fields: [customerId], references: [id])
|
|
issueDate DateTime
|
|
deliveryDate DateTime?
|
|
dueDate DateTime
|
|
status InvoiceStatus @default(DRAFT)
|
|
kleinunternehmer Boolean @default(false)
|
|
notes String? @db.Text
|
|
items InvoiceItem[]
|
|
netTotal Decimal @db.Decimal(10, 2)
|
|
taxTotal Decimal @db.Decimal(10, 2)
|
|
grossTotal Decimal @db.Decimal(10, 2)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
deletedAt DateTime?
|
|
|
|
@@unique([companyId, number])
|
|
@@map("invoices")
|
|
}
|
|
|
|
enum InvoiceStatus {
|
|
DRAFT
|
|
SENT
|
|
PAID
|
|
CANCELLED
|
|
DELETED
|
|
}
|
|
|
|
enum Zahlungsart {
|
|
KASSE
|
|
BANK
|
|
}
|
|
|
|
enum EinnahmeKategorie {
|
|
FUSSPFLEGE
|
|
PRIVATEINLAGEN
|
|
DARLEHEN
|
|
STEUERERSTATTUNGEN
|
|
VERSICHERUNGSERSTATTUNGEN
|
|
ZINSERTRAEGE
|
|
VERMIETUNG_VERPACHTUNG
|
|
VERAEUSSERUNGSERLOES
|
|
EIGENVERBRAUCH
|
|
SONSTIGE_EINNAHMEN
|
|
}
|
|
|
|
model Betriebseinnahme {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
kategorie EinnahmeKategorie
|
|
betrag Decimal @db.Decimal(10, 2)
|
|
steuersatz Decimal @db.Decimal(5, 2) @default(0)
|
|
zahlungsart Zahlungsart @default(BANK)
|
|
datum DateTime
|
|
beschreibung String? @db.Text
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([companyId])
|
|
@@index([datum])
|
|
@@map("betriebseinnahmen")
|
|
}
|
|
|
|
model Anlagegut {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
bezeichnung String
|
|
anschaffungsdatum DateTime
|
|
anschaffungskosten Decimal @db.Decimal(10, 2)
|
|
nutzungsdauerJahre Int
|
|
restwert Decimal @db.Decimal(10, 2) @default(0)
|
|
beschreibung String? @db.Text
|
|
aktiv Boolean @default(true)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([companyId])
|
|
@@map("anlagegueter")
|
|
}
|
|
|
|
enum AusgabeKategorie {
|
|
WAREN_ROHSTOFFE
|
|
GERINGWERTIGE_WIRTSCHAFTSGUETER
|
|
ABSCHREIBUNGEN
|
|
MIETE
|
|
STROM_WASSER
|
|
TELEKOMMUNIKATION
|
|
FORTBILDUNG_MESSEN
|
|
BEITRAEGE
|
|
VERSICHERUNGEN
|
|
WERBEKOSTEN
|
|
ZINSEN
|
|
REISEKOSTEN
|
|
REPARATUREN_INSTANDHALTUNG
|
|
BUEROBEDARF
|
|
REPRAESENTATIONSKOSTEN
|
|
SONSTIGER_BETRIEBSBEDARF
|
|
NEBENKOSTEN_GELDVERKEHR
|
|
}
|
|
|
|
model Betriebsausgabe {
|
|
id String @id @default(cuid())
|
|
companyId String
|
|
company Company @relation(fields: [companyId], references: [id], onDelete: Cascade)
|
|
kategorie AusgabeKategorie
|
|
betrag Decimal @db.Decimal(10, 2)
|
|
steuersatz Decimal @db.Decimal(5, 2) @default(0)
|
|
zahlungsart Zahlungsart @default(BANK)
|
|
datum DateTime
|
|
beschreibung String? @db.Text
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
@@index([companyId])
|
|
@@index([datum])
|
|
@@map("betriebsausgaben")
|
|
}
|
|
|
|
model InvoiceItem {
|
|
id String @id @default(cuid())
|
|
invoiceId String
|
|
invoice Invoice @relation(fields: [invoiceId], references: [id], onDelete: Cascade)
|
|
position Int
|
|
description String @db.Text
|
|
quantity Decimal @db.Decimal(10, 3)
|
|
unit String?
|
|
unitPrice Decimal @db.Decimal(10, 2)
|
|
taxRate Decimal @db.Decimal(5, 2)
|
|
netAmount Decimal @db.Decimal(10, 2)
|
|
taxAmount Decimal @db.Decimal(10, 2)
|
|
grossAmount Decimal @db.Decimal(10, 2)
|
|
|
|
@@map("invoice_items")
|
|
}
|