Dateien nach "prisma" hochladen
This commit is contained in:
parent
1dc1eade8f
commit
5261ef3710
@ -179,6 +179,8 @@ model User {
|
|||||||
invitationsSent Invitation[] @relation("InvitationsSent")
|
invitationsSent Invitation[] @relation("InvitationsSent")
|
||||||
storageSlots StorageSlot[]
|
storageSlots StorageSlot[]
|
||||||
documentsUploaded Document[]
|
documentsUploaded Document[]
|
||||||
|
utilityStatementsCreated UtilityStatement[]
|
||||||
|
utilityStatementShares UtilityStatementShare[]
|
||||||
|
|
||||||
@@map("users")
|
@@map("users")
|
||||||
}
|
}
|
||||||
@ -205,6 +207,7 @@ model Room {
|
|||||||
inventoryItems Inventory[]
|
inventoryItems Inventory[]
|
||||||
meterReadings MeterReading[]
|
meterReadings MeterReading[]
|
||||||
invitations Invitation[]
|
invitations Invitation[]
|
||||||
|
utilityStatementShares UtilityStatementShare[]
|
||||||
|
|
||||||
@@map("rooms")
|
@@map("rooms")
|
||||||
}
|
}
|
||||||
@ -309,8 +312,10 @@ model Ticket {
|
|||||||
id String @id @default(uuid())
|
id String @id @default(uuid())
|
||||||
creatorId String @map("creator_id")
|
creatorId String @map("creator_id")
|
||||||
creator User @relation("TicketCreator", fields: [creatorId], references: [id])
|
creator User @relation("TicketCreator", fields: [creatorId], references: [id])
|
||||||
assigneeId String? @map("assignee_id") // Handwerker
|
assigneeId String? @map("assignee_id") // Handwerker (interner User-Account, optional)
|
||||||
assignee User? @relation("TicketAssignee", fields: [assigneeId], references: [id])
|
assignee User? @relation("TicketAssignee", fields: [assigneeId], references: [id])
|
||||||
|
craftsmanId String? @map("craftsman_id") // Handwerker-Kontakt (externer Betrieb ohne Login)
|
||||||
|
craftsman Craftsman? @relation(fields: [craftsmanId], references: [id])
|
||||||
roomId String? @map("room_id") // NULL = Gemeinschaftsbereich
|
roomId String? @map("room_id") // NULL = Gemeinschaftsbereich
|
||||||
room Room? @relation(fields: [roomId], references: [id])
|
room Room? @relation(fields: [roomId], references: [id])
|
||||||
|
|
||||||
@ -598,3 +603,83 @@ model Document {
|
|||||||
|
|
||||||
@@map("documents")
|
@@map("documents")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// NEBENKOSTENABRECHNUNG (Utility-Statements)
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Eine Nebenkostenabrechnung für einen Zeitraum (z. B. ein Jahr). Der
|
||||||
|
// Vermieter trägt den Gesamtbetrag ein; die App verteilt ihn automatisch
|
||||||
|
// proportional zur Zimmergröße (sizeSqm) auf alle aktuell aktiven Mieter —
|
||||||
|
// dieselbe faire Grundlage wie bei der Nettokaltmiete.
|
||||||
|
model UtilityStatement {
|
||||||
|
id String @id @default(uuid())
|
||||||
|
periodStart DateTime @map("period_start")
|
||||||
|
periodEnd DateTime @map("period_end")
|
||||||
|
totalAmount Decimal @map("total_amount") @db.Decimal(10, 2)
|
||||||
|
description String?
|
||||||
|
createdById String @map("created_by_id")
|
||||||
|
createdBy User @relation(fields: [createdById], references: [id])
|
||||||
|
|
||||||
|
createdAt DateTime @default(now()) @map("created_at")
|
||||||
|
|
||||||
|
shares UtilityStatementShare[]
|
||||||
|
|
||||||
|
@@map("utility_statements")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Anteil eines einzelnen Mieters an einer Nebenkostenabrechnung. Für den
|
||||||
|
// betroffenen Mieter selbst sichtbar, für alle anderen Mieter NICHT (private
|
||||||
|
// Abrechnungsdaten) — nur der Vermieter/Admin sieht alle Anteile.
|
||||||
|
model UtilityStatementShare {
|
||||||
|
id String @id @default(uuid())
|
||||||
|
statementId String @map("statement_id")
|
||||||
|
statement UtilityStatement @relation(fields: [statementId], references: [id])
|
||||||
|
userId String @map("user_id")
|
||||||
|
user User @relation(fields: [userId], references: [id])
|
||||||
|
roomId String? @map("room_id")
|
||||||
|
room Room? @relation(fields: [roomId], references: [id])
|
||||||
|
|
||||||
|
shareAmount Decimal @map("share_amount") @db.Decimal(8, 2)
|
||||||
|
settlementStatus SettlementStatus @default(OPEN) @map("settlement_status")
|
||||||
|
settledAt DateTime? @map("settled_at")
|
||||||
|
|
||||||
|
createdAt DateTime @default(now()) @map("created_at")
|
||||||
|
|
||||||
|
@@index([userId])
|
||||||
|
@@index([statementId])
|
||||||
|
@@map("utility_statement_shares")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// HANDWERKER-KONTAKTE (Anbindung für Schadensmeldungen)
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
enum CraftsmanTrade {
|
||||||
|
SANITAER
|
||||||
|
ELEKTRIK
|
||||||
|
HEIZUNG
|
||||||
|
SCHREINEREI
|
||||||
|
MALER
|
||||||
|
SCHLUESSELDIENST
|
||||||
|
SONSTIGES
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kontaktkarte eines Handwerksbetriebs (kein eigener Login nötig). Kann
|
||||||
|
// Tickets zugewiesen werden, damit direkt klar ist, wer sich kümmert und wie
|
||||||
|
// er erreichbar ist.
|
||||||
|
model Craftsman {
|
||||||
|
id String @id @default(uuid())
|
||||||
|
name String
|
||||||
|
trade CraftsmanTrade @default(SONSTIGES)
|
||||||
|
phone String?
|
||||||
|
email String?
|
||||||
|
notes String?
|
||||||
|
|
||||||
|
createdAt DateTime @default(now()) @map("created_at")
|
||||||
|
updatedAt DateTime @updatedAt @map("updated_at")
|
||||||
|
|
||||||
|
tickets Ticket[]
|
||||||
|
|
||||||
|
@@map("craftsmen")
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user