From 212369ff636fd5d8d8a382ff86b49d31bb1d4c19 Mon Sep 17 00:00:00 2001 From: Jackson Roberts Date: Wed, 29 Apr 2026 02:06:05 +0000 Subject: [PATCH] feat(migrate): add migration for time entries, activity, and related tables --- .../migration.sql | 292 ++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 api/prisma/migrations/20260429000000_add_time_entries_activity_and_related_tables/migration.sql diff --git a/api/prisma/migrations/20260429000000_add_time_entries_activity_and_related_tables/migration.sql b/api/prisma/migrations/20260429000000_add_time_entries_activity_and_related_tables/migration.sql new file mode 100644 index 0000000..14b2547 --- /dev/null +++ b/api/prisma/migrations/20260429000000_add_time_entries_activity_and_related_tables/migration.sql @@ -0,0 +1,292 @@ +-- DropForeignKey +ALTER TABLE "Opportunity" DROP CONSTRAINT "Opportunity_typeId_fkey"; + +-- CreateTable +CREATE TABLE "Activity" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "subject" TEXT NOT NULL, + "startTime" TIMESTAMP(3) NOT NULL, + "endTime" TIMESTAMP(3) NOT NULL, + "assignToId" TEXT NOT NULL, + "assignedById" TEXT NOT NULL, + "enteredBy" TEXT NOT NULL, + "automated" BOOLEAN NOT NULL DEFAULT false, + "closedFlag" BOOLEAN NOT NULL DEFAULT false, + "notifyCompleteFlag" BOOLEAN NOT NULL DEFAULT false, + "notificationSentFlat" BOOLEAN NOT NULL DEFAULT false, + "opportunityId" TEXT, + "serviceTicketId" TEXT, + "contactId" INTEGER, + "companyId" INTEGER, + "activityTypeId" INTEGER, + "activityStatusId" INTEGER, + "createdById" TEXT, + "updatedById" TEXT, + "closedById" TEXT, + "closedAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Activity_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "ActivityNotes" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "notes" TEXT NOT NULL DEFAULT '', + "activityId" INTEGER, + "internalAnalysisFlag" BOOLEAN NOT NULL DEFAULT false, + "enteredById" TEXT, + "updatedById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ActivityNotes_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "ActivityType" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "name" VARCHAR(15) NOT NULL, + "description" TEXT NOT NULL, + "inactiveFlag" BOOLEAN NOT NULL DEFAULT false, + "historyFlag" BOOLEAN NOT NULL DEFAULT false, + "defaultFlag" BOOLEAN NOT NULL DEFAULT false, + "importFlag" BOOLEAN NOT NULL DEFAULT false, + "emailFlag" BOOLEAN NOT NULL DEFAULT false, + "memoFlag" BOOLEAN NOT NULL DEFAULT false, + "pointsValue" INTEGER, + "updatedById" TEXT, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ActivityType_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "ActivityStatus" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "closedFlag" BOOLEAN NOT NULL DEFAULT false, + "inactiveFlag" BOOLEAN NOT NULL DEFAULT false, + "defaultFlag" BOOLEAN NOT NULL DEFAULT false, + "spawnFollowupFlag" BOOLEAN NOT NULL DEFAULT false, + "updatedById" TEXT, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "ActivityStatus_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "TimeEntry" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "memberId" TEXT, + "serviceTicketId" INTEGER, + "activityId" INTEGER, + "projectId" INTEGER, + "chargeCodeId" INTEGER, + "companyId" INTEGER NOT NULL, + "statusId" INTEGER, + "locationId" INTEGER, + "contactId" INTEGER, + "dateStart" TIMESTAMP(3), + "timeStart" TIMESTAMP(3), + "timeEnd" TIMESTAMP(3), + "notes" TEXT, + "notesMd" TEXT, + "internalNote" TEXT, + "billableHours" DOUBLE PRECISION, + "actualHours" DOUBLE PRECISION, + "invoicedHours" DOUBLE PRECISION, + "deductedHours" DOUBLE PRECISION, + "hourlyRate" DOUBLE PRECISION, + "effectiveRate" DOUBLE PRECISION, + "issueFlag" BOOLEAN NOT NULL DEFAULT false, + "mergedFlag" BOOLEAN NOT NULL DEFAULT false, + "invoiceFlag" BOOLEAN NOT NULL DEFAULT false, + "billableFlag" BOOLEAN NOT NULL DEFAULT true, + "documentFlag" BOOLEAN NOT NULL DEFAULT false, + "teProblemFlag" BOOLEAN NOT NULL DEFAULT false, + "teResolutionFlag" BOOLEAN NOT NULL DEFAULT false, + "teInternalAnalysisFlag" BOOLEAN NOT NULL DEFAULT false, + "chargeToRecId" INTEGER, + "chargeToType" VARCHAR(13), + "createdById" TEXT, + "updatedById" TEXT, + "originalAuthorId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TimeEntry_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "TimeEntryStatus" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "statusId" INTEGER NOT NULL, + "description" VARCHAR(50), + "action" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TimeEntryStatus_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "TimeEntryChargeCode" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "chargeCodeId" INTEGER NOT NULL, + "description" VARCHAR(50), + "expenseFlag" BOOLEAN NOT NULL DEFAULT false, + "timeFlag" BOOLEAN NOT NULL DEFAULT true, + "billableFlag" BOOLEAN NOT NULL DEFAULT true, + "invoiceFlag" BOOLEAN NOT NULL DEFAULT true, + "updatedById" TEXT, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TimeEntryChargeCode_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "TimeActivityClass" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "description" VARCHAR(50), + "hourlyRate" DOUBLE PRECISION, + "inactiveFlag" BOOLEAN NOT NULL DEFAULT false, + "taxExemptFlag" BOOLEAN NOT NULL DEFAULT false, + "createdById" TEXT, + "updatedById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TimeActivityClass_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "TimeActivityType" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "description" VARCHAR(50), + "minHours" DOUBLE PRECISION, + "maxHours" DOUBLE PRECISION, + "rate" DOUBLE PRECISION DEFAULT 1, + "costMultiplier" DOUBLE PRECISION NOT NULL DEFAULT 1, + "inactiveFlag" BOOLEAN NOT NULL DEFAULT false, + "invoiceFlag" BOOLEAN NOT NULL DEFAULT false, + "billableFlag" BOOLEAN NOT NULL DEFAULT false, + "utilizationFlag" BOOLEAN NOT NULL DEFAULT false, + "defaultFlag" BOOLEAN NOT NULL DEFAULT false, + "multiplierFlag" BOOLEAN NOT NULL DEFAULT false, + "createdById" TEXT, + "updatedById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TimeActivityType_pkey" PRIMARY KEY ("uid") +); + +-- CreateTable +CREATE TABLE "CwMemberType" ( + "id" INTEGER NOT NULL, + "uid" TEXT NOT NULL, + "description" VARCHAR(30), + "inactiveFlag" BOOLEAN NOT NULL DEFAULT false, + "updatedById" TEXT, + "createdById" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "CwMemberType_pkey" PRIMARY KEY ("uid") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Activity_id_key" ON "Activity"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "ActivityNotes_id_key" ON "ActivityNotes"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "ActivityNotes_activityId_key" ON "ActivityNotes"("activityId"); + +-- CreateIndex +CREATE UNIQUE INDEX "ActivityType_id_key" ON "ActivityType"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "ActivityStatus_id_key" ON "ActivityStatus"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeEntry_id_key" ON "TimeEntry"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeEntryStatus_id_key" ON "TimeEntryStatus"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeEntryStatus_statusId_key" ON "TimeEntryStatus"("statusId"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeEntryChargeCode_id_key" ON "TimeEntryChargeCode"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeEntryChargeCode_chargeCodeId_key" ON "TimeEntryChargeCode"("chargeCodeId"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeActivityClass_id_key" ON "TimeActivityClass"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "TimeActivityType_id_key" ON "TimeActivityType"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "CwMemberType_id_key" ON "CwMemberType"("id"); + +-- AddForeignKey +ALTER TABLE "Opportunity" ADD CONSTRAINT "Opportunity_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "OpportunityType"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Activity" ADD CONSTRAINT "Activity_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Activity" ADD CONSTRAINT "Activity_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Activity" ADD CONSTRAINT "Activity_activityTypeId_fkey" FOREIGN KEY ("activityTypeId") REFERENCES "ActivityType"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Activity" ADD CONSTRAINT "Activity_activityStatusId_fkey" FOREIGN KEY ("activityStatusId") REFERENCES "ActivityStatus"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ActivityNotes" ADD CONSTRAINT "ActivityNotes_activityId_fkey" FOREIGN KEY ("activityId") REFERENCES "Activity"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "Contact"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "CorporateLocation"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_statusId_fkey" FOREIGN KEY ("statusId") REFERENCES "TimeEntryStatus"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_chargeCodeId_fkey" FOREIGN KEY ("chargeCodeId") REFERENCES "TimeEntryChargeCode"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_serviceTicketId_fkey" FOREIGN KEY ("serviceTicketId") REFERENCES "ServiceTicket"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimeEntry" ADD CONSTRAINT "TimeEntry_activityId_fkey" FOREIGN KEY ("activityId") REFERENCES "Activity"("id") ON DELETE SET NULL ON UPDATE CASCADE;