247 lines
10 KiB
SQL
247 lines
10 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "RoutineTaskStatus" AS ENUM ('todo', 'in_progress', 'completed', 'overdue', 'skipped', 'cancelled');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RoutineRecurrence" AS ENUM ('daily', 'weekdays', 'weekly', 'biweekly', 'monthly', 'every_n_days', 'specific_dates');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RoutineTaskSource" AS ENUM ('routine', 'manual', 'follow_up', 'lead', 'customer', 'deal');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RoutineCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL DEFAULT '#14b8a6',
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "RoutineCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Routine" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"assigneeId" TEXT,
|
|
"teamId" TEXT,
|
|
"categoryId" TEXT,
|
|
"priority" "ActivityPriority" NOT NULL DEFAULT 'medium',
|
|
"timeOfDay" TEXT NOT NULL DEFAULT '09:00',
|
|
"durationMinutes" INTEGER,
|
|
"startDate" DATE NOT NULL,
|
|
"endDate" DATE,
|
|
"recurrence" "RoutineRecurrence" NOT NULL DEFAULT 'daily',
|
|
"weekdays" INTEGER[] DEFAULT ARRAY[]::INTEGER[],
|
|
"intervalDays" INTEGER,
|
|
"monthDay" INTEGER,
|
|
"specificDates" DATE[],
|
|
"isMandatory" BOOLEAN NOT NULL DEFAULT true,
|
|
"allowSkip" BOOLEAN NOT NULL DEFAULT false,
|
|
"skipReasonRequired" BOOLEAN NOT NULL DEFAULT true,
|
|
"reportRequired" BOOLEAN NOT NULL DEFAULT false,
|
|
"allowAfterDeadline" BOOLEAN NOT NULL DEFAULT true,
|
|
"carryOverOverdue" BOOLEAN NOT NULL DEFAULT false,
|
|
"entityLink" TEXT NOT NULL DEFAULT 'none',
|
|
"reminderMinutesBefore" INTEGER,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdById" TEXT,
|
|
"deletedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Routine_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RoutineTask" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"routineId" TEXT,
|
|
"assigneeId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"categoryId" TEXT,
|
|
"priority" "ActivityPriority" NOT NULL DEFAULT 'medium',
|
|
"status" "RoutineTaskStatus" NOT NULL DEFAULT 'todo',
|
|
"scheduledFor" DATE NOT NULL,
|
|
"dueAt" TIMESTAMP(3),
|
|
"startedAt" TIMESTAMP(3),
|
|
"completedAt" TIMESTAMP(3),
|
|
"resultNote" TEXT,
|
|
"skipReason" TEXT,
|
|
"source" "RoutineTaskSource" NOT NULL DEFAULT 'manual',
|
|
"isMandatory" BOOLEAN NOT NULL DEFAULT false,
|
|
"leadId" TEXT,
|
|
"personId" TEXT,
|
|
"companyId" TEXT,
|
|
"dealId" TEXT,
|
|
"invoiceId" TEXT,
|
|
"activityId" TEXT,
|
|
"reminderAt" TIMESTAMP(3),
|
|
"reminderSentAt" TIMESTAMP(3),
|
|
"overdueNotifiedAt" TIMESTAMP(3),
|
|
"createdById" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "RoutineTask_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RoutineTaskEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"taskId" TEXT NOT NULL,
|
|
"actorId" TEXT,
|
|
"type" TEXT NOT NULL,
|
|
"fromStatus" "RoutineTaskStatus",
|
|
"toStatus" "RoutineTaskStatus",
|
|
"note" TEXT,
|
|
"meta" JSONB NOT NULL DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "RoutineTaskEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RoutineUserSettings" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"remindBeforeMinutes" INTEGER DEFAULT 30,
|
|
"endOfDaySummary" BOOLEAN NOT NULL DEFAULT true,
|
|
"overdueAlert" BOOLEAN NOT NULL DEFAULT true,
|
|
"summaryHour" INTEGER NOT NULL DEFAULT 16,
|
|
"lastSummaryOn" DATE,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "RoutineUserSettings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineCategory_organizationId_sortOrder_idx" ON "RoutineCategory"("organizationId", "sortOrder");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RoutineCategory_organizationId_name_key" ON "RoutineCategory"("organizationId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Routine_organizationId_isActive_deletedAt_idx" ON "Routine"("organizationId", "isActive", "deletedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Routine_assigneeId_idx" ON "Routine"("assigneeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Routine_teamId_idx" ON "Routine"("teamId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_organizationId_assigneeId_scheduledFor_idx" ON "RoutineTask"("organizationId", "assigneeId", "scheduledFor");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_organizationId_status_dueAt_idx" ON "RoutineTask"("organizationId", "status", "dueAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_reminderAt_reminderSentAt_idx" ON "RoutineTask"("reminderAt", "reminderSentAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_leadId_idx" ON "RoutineTask"("leadId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_personId_idx" ON "RoutineTask"("personId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_companyId_idx" ON "RoutineTask"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_dealId_idx" ON "RoutineTask"("dealId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTask_activityId_idx" ON "RoutineTask"("activityId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RoutineTask_routineId_assigneeId_scheduledFor_key" ON "RoutineTask"("routineId", "assigneeId", "scheduledFor");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTaskEvent_taskId_createdAt_idx" ON "RoutineTaskEvent"("taskId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RoutineTaskEvent_organizationId_createdAt_idx" ON "RoutineTaskEvent"("organizationId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RoutineUserSettings_organizationId_userId_key" ON "RoutineUserSettings"("organizationId", "userId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineCategory" ADD CONSTRAINT "RoutineCategory_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Routine" ADD CONSTRAINT "Routine_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Routine" ADD CONSTRAINT "Routine_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Routine" ADD CONSTRAINT "Routine_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Routine" ADD CONSTRAINT "Routine_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "RoutineCategory"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Routine" ADD CONSTRAINT "Routine_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_routineId_fkey" FOREIGN KEY ("routineId") REFERENCES "Routine"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "RoutineCategory"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_leadId_fkey" FOREIGN KEY ("leadId") REFERENCES "Lead"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_personId_fkey" FOREIGN KEY ("personId") REFERENCES "Person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_dealId_fkey" FOREIGN KEY ("dealId") REFERENCES "Deal"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_invoiceId_fkey" FOREIGN KEY ("invoiceId") REFERENCES "Invoice"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_activityId_fkey" FOREIGN KEY ("activityId") REFERENCES "Activity"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTask" ADD CONSTRAINT "RoutineTask_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTaskEvent" ADD CONSTRAINT "RoutineTaskEvent_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTaskEvent" ADD CONSTRAINT "RoutineTaskEvent_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "RoutineTask"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineTaskEvent" ADD CONSTRAINT "RoutineTaskEvent_actorId_fkey" FOREIGN KEY ("actorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineUserSettings" ADD CONSTRAINT "RoutineUserSettings_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "RoutineUserSettings" ADD CONSTRAINT "RoutineUserSettings_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
|
|
-- Enable the new routines module for organizations with an explicit module list
|
|
UPDATE "Organization"
|
|
SET "enabledModules" = array_append("enabledModules", 'routines')
|
|
WHERE cardinality("enabledModules") > 0 AND NOT ('routines' = ANY("enabledModules")); |