128 lines
5.1 KiB
Plaintext
128 lines
5.1 KiB
Plaintext
enum MaterialKind {
|
|
WAX
|
|
FRAGRANCE
|
|
WICK
|
|
DYE
|
|
VESSEL
|
|
PACKAGING
|
|
LABEL
|
|
OTHER
|
|
}
|
|
|
|
enum MaterialUnit {
|
|
GRAM
|
|
KILOGRAM
|
|
MILLILITRE
|
|
LITRE
|
|
PIECE
|
|
METRE
|
|
}
|
|
|
|
enum PurchaseOrderStatus {
|
|
DRAFT
|
|
ISSUED
|
|
CANCELLED
|
|
}
|
|
|
|
model Supplier {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
organizationId String @map("organization_id") @db.Uuid
|
|
name String @db.VarChar(160)
|
|
code String @db.VarChar(32)
|
|
contactName String @map("contact_name") @db.VarChar(160)
|
|
email String @db.VarChar(254)
|
|
phone String @db.VarChar(24)
|
|
active Boolean @default(true)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
|
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
|
|
materials SupplierMaterial[]
|
|
purchaseOrders PurchaseOrder[]
|
|
|
|
@@unique([organizationId, code])
|
|
@@unique([id, organizationId])
|
|
@@index([organizationId, active, name, id])
|
|
@@map("suppliers")
|
|
}
|
|
|
|
model Material {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
organizationId String @map("organization_id") @db.Uuid
|
|
name String @db.VarChar(160)
|
|
code String @db.VarChar(32)
|
|
kind MaterialKind
|
|
unit MaterialUnit
|
|
active Boolean @default(true)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
|
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
|
|
suppliers SupplierMaterial[]
|
|
purchaseOrderLines PurchaseOrderLine[]
|
|
|
|
@@unique([organizationId, code])
|
|
@@unique([id, organizationId])
|
|
@@index([organizationId, active, kind, name, id])
|
|
@@map("materials")
|
|
}
|
|
|
|
model PurchaseOrder {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
organizationId String @map("organization_id") @db.Uuid
|
|
supplierId String @map("supplier_id") @db.Uuid
|
|
createdById String @map("created_by_id") @db.Uuid
|
|
reference String @db.VarChar(20)
|
|
status PurchaseOrderStatus @default(DRAFT)
|
|
currency String @db.Char(3)
|
|
expectedDeliveryAt DateTime? @map("expected_delivery_at") @db.Date
|
|
merchandiseTotal Decimal @map("merchandise_total") @db.Decimal(12,2)
|
|
issuedAt DateTime? @map("issued_at") @db.Timestamptz(3)
|
|
cancelledAt DateTime? @map("cancelled_at") @db.Timestamptz(3)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
supplier Supplier @relation(fields: [supplierId, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
createdBy User @relation(fields: [createdById, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
|
|
lines PurchaseOrderLine[]
|
|
@@unique([organizationId, reference])
|
|
@@unique([id, organizationId])
|
|
@@index([organizationId, status, createdAt, id])
|
|
@@map("purchase_orders")
|
|
}
|
|
|
|
model PurchaseOrderLine {
|
|
id String @id @default(uuid()) @db.Uuid
|
|
purchaseOrderId String @map("purchase_order_id") @db.Uuid
|
|
organizationId String @map("organization_id") @db.Uuid
|
|
materialId String @map("material_id") @db.Uuid
|
|
materialName String @map("material_name") @db.VarChar(160)
|
|
materialCode String @map("material_code") @db.VarChar(32)
|
|
unit MaterialUnit
|
|
supplierSku String @map("supplier_sku") @db.VarChar(64)
|
|
quantity Decimal @db.Decimal(12,3)
|
|
unitPrice Decimal @map("unit_price") @db.Decimal(12,2)
|
|
lineTotal Decimal @map("line_total") @db.Decimal(12,2)
|
|
purchaseOrder PurchaseOrder @relation(fields: [purchaseOrderId, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
material Material @relation(fields: [materialId, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
@@unique([purchaseOrderId, materialId])
|
|
@@index([materialId, organizationId])
|
|
@@map("purchase_order_lines")
|
|
}
|
|
|
|
model SupplierMaterial {
|
|
supplierId String @map("supplier_id") @db.Uuid
|
|
materialId String @map("material_id") @db.Uuid
|
|
organizationId String @map("organization_id") @db.Uuid
|
|
supplierSku String @map("supplier_sku") @db.VarChar(64)
|
|
leadTimeDays Int @map("lead_time_days")
|
|
minOrderQuantity Decimal @map("min_order_quantity") @db.Decimal(12, 3)
|
|
unitPrice Decimal @map("unit_price") @db.Decimal(12, 2)
|
|
currency String @db.Char(3)
|
|
active Boolean @default(true)
|
|
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
|
supplier Supplier @relation(fields: [supplierId, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
material Material @relation(fields: [materialId, organizationId], references: [id, organizationId], onDelete: Restrict)
|
|
|
|
@@id([supplierId, materialId])
|
|
@@index([materialId, organizationId, active])
|
|
@@map("supplier_materials")
|
|
}
|