115 lines
4.2 KiB
SQL
115 lines
4.2 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "ScheduleTemplate" AS ENUM ('STANDARD_FILM', 'SMALL_COMMERCIAL', 'EPISODIC', 'CUSTOM');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "MilestoneStatus" AS ENUM ('DRAFT', 'PENDING', 'INVOICED', 'PARTIALLY_PAID', 'PAID', 'OVERDUE', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "InvoiceStatus" AS ENUM ('DRAFT', 'SENT', 'VIEWED', 'PARTIALLY_PAID', 'PAID', 'OVERDUE', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentMethod" AS ENUM ('EFT', 'CASH', 'CREDIT_CARD', 'BANK_TRANSFER', 'CRYPTO', 'OTHER');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "jobs" ADD COLUMN "estimatedCompletionDate" TIMESTAMP(3),
|
|
ADD COLUMN "startDate" TIMESTAMP(3);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "payment_schedules" (
|
|
"id" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"template" "ScheduleTemplate" NOT NULL DEFAULT 'CUSTOM',
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "payment_schedules_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "payment_milestones" (
|
|
"id" TEXT NOT NULL,
|
|
"scheduleId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"dueDate" TIMESTAMP(3),
|
|
"percentOfTotal" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"fixedAmount" DECIMAL(14,4),
|
|
"status" "MilestoneStatus" NOT NULL DEFAULT 'PENDING',
|
|
"paymentReceivedDate" TIMESTAMP(3),
|
|
"notes" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "payment_milestones_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "invoices" (
|
|
"id" TEXT NOT NULL,
|
|
"invoiceNumber" TEXT NOT NULL,
|
|
"clientId" TEXT NOT NULL,
|
|
"jobId" TEXT NOT NULL,
|
|
"milestoneId" TEXT,
|
|
"status" "InvoiceStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"issueDate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"dueDate" TIMESTAMP(3),
|
|
"paymentTerms" TEXT,
|
|
"currency" TEXT NOT NULL DEFAULT 'ZAR',
|
|
"subtotal" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"taxPercent" DECIMAL(10,4) NOT NULL DEFAULT 0,
|
|
"taxAmount" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"totalAmount" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"amountPaid" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"amountDue" DECIMAL(14,4) NOT NULL DEFAULT 0,
|
|
"notes" TEXT,
|
|
"internalNotes" TEXT,
|
|
"bankingDetails" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "invoices_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "invoice_payments" (
|
|
"id" TEXT NOT NULL,
|
|
"invoiceId" TEXT NOT NULL,
|
|
"amount" DECIMAL(14,4) NOT NULL,
|
|
"paymentDate" TIMESTAMP(3) NOT NULL,
|
|
"paymentMethod" "PaymentMethod" NOT NULL DEFAULT 'EFT',
|
|
"reference" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "invoice_payments_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "payment_schedules_jobId_key" ON "payment_schedules"("jobId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "invoices_invoiceNumber_key" ON "invoices"("invoiceNumber");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "invoices_milestoneId_key" ON "invoices"("milestoneId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "payment_schedules" ADD CONSTRAINT "payment_schedules_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "payment_milestones" ADD CONSTRAINT "payment_milestones_scheduleId_fkey" FOREIGN KEY ("scheduleId") REFERENCES "payment_schedules"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "invoices" ADD CONSTRAINT "invoices_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "clients"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "invoices" ADD CONSTRAINT "invoices_jobId_fkey" FOREIGN KEY ("jobId") REFERENCES "jobs"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "invoices" ADD CONSTRAINT "invoices_milestoneId_fkey" FOREIGN KEY ("milestoneId") REFERENCES "payment_milestones"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "invoice_payments" ADD CONSTRAINT "invoice_payments_invoiceId_fkey" FOREIGN KEY ("invoiceId") REFERENCES "invoices"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|