Features: - Copy Previous Week (entries duplication) - Bulk Approve/Reject (admin workflow) - Overtime tracking (employee + admin views) - DayCard component with auto-save - PDF generation, email notifications - React + Tailwind frontend, Prisma + PostgreSQL backend - Docker deployment (3 containers)
99 lines
2.9 KiB
SQL
99 lines
2.9 KiB
SQL
-- CreateSchema
|
|
CREATE SCHEMA IF NOT EXISTS "public";
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"password" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'warehouse',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Client" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"address" TEXT,
|
|
"phone" TEXT,
|
|
"email" TEXT,
|
|
"notes" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Client_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Package" (
|
|
"id" TEXT NOT NULL,
|
|
"trackingCode" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"clientId" TEXT NOT NULL,
|
|
"createdById" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'received',
|
|
"priority" TEXT NOT NULL DEFAULT 'normal',
|
|
"notes" TEXT,
|
|
"itemNotes" TEXT,
|
|
"deliveryNotes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Package_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CustodyEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"packageId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"fromStatus" TEXT,
|
|
"toStatus" TEXT NOT NULL,
|
|
"photoUrl" TEXT,
|
|
"latitude" DOUBLE PRECISION,
|
|
"longitude" DOUBLE PRECISION,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"syncedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "CustodyEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Package_trackingCode_key" ON "Package"("trackingCode");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Package_clientId_idx" ON "Package"("clientId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Package_status_idx" ON "Package"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Package_trackingCode_idx" ON "Package"("trackingCode");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CustodyEvent_packageId_idx" ON "CustodyEvent"("packageId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CustodyEvent_userId_idx" ON "CustodyEvent"("userId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Package" ADD CONSTRAINT "Package_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Package" ADD CONSTRAINT "Package_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CustodyEvent" ADD CONSTRAINT "CustodyEvent_packageId_fkey" FOREIGN KEY ("packageId") REFERENCES "Package"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CustodyEvent" ADD CONSTRAINT "CustodyEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|