154 lines
5.6 KiB
SQL
154 lines
5.6 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "InvoiceStatus" AS ENUM ('draft', 'issued', 'partially_paid', 'paid', 'canceled');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentMethod" AS ENUM ('cash', 'transfer', 'card', 'check', 'other');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "InstallmentStatus" AS ENUM ('pending', 'paid', 'canceled');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Invoice" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"number" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"status" "InvoiceStatus" NOT NULL DEFAULT 'draft',
|
|
"currency" TEXT NOT NULL DEFAULT 'IRR',
|
|
"notes" TEXT,
|
|
"issuedAt" TIMESTAMP(3),
|
|
"dueDate" TIMESTAMP(3),
|
|
"personId" TEXT,
|
|
"companyId" TEXT,
|
|
"dealId" TEXT,
|
|
"quoteId" TEXT,
|
|
"ownerId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Invoice_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "InvoiceLineItem" (
|
|
"id" TEXT NOT NULL,
|
|
"invoiceId" TEXT NOT NULL,
|
|
"productId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"quantity" DECIMAL(18,2) NOT NULL DEFAULT 1,
|
|
"unitPrice" DECIMAL(18,2) NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'IRR',
|
|
"position" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "InvoiceLineItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Payment" (
|
|
"id" TEXT NOT NULL,
|
|
"invoiceId" TEXT NOT NULL,
|
|
"amount" DECIMAL(18,2) NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'IRR',
|
|
"method" "PaymentMethod" NOT NULL DEFAULT 'transfer',
|
|
"paidAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"notes" TEXT,
|
|
"installmentId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "InvoiceInstallment" (
|
|
"id" TEXT NOT NULL,
|
|
"invoiceId" TEXT NOT NULL,
|
|
"position" INTEGER NOT NULL DEFAULT 0,
|
|
"dueDate" TIMESTAMP(3) NOT NULL,
|
|
"amount" DECIMAL(18,2) NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'IRR',
|
|
"status" "InstallmentStatus" NOT NULL DEFAULT 'pending',
|
|
"paidAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "InvoiceInstallment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_organizationId_status_updatedAt_idx" ON "Invoice"("organizationId", "status", "updatedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_personId_idx" ON "Invoice"("personId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_companyId_idx" ON "Invoice"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_dealId_idx" ON "Invoice"("dealId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_quoteId_idx" ON "Invoice"("quoteId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Invoice_ownerId_idx" ON "Invoice"("ownerId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Invoice_organizationId_number_key" ON "Invoice"("organizationId", "number");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InvoiceLineItem_invoiceId_position_idx" ON "InvoiceLineItem"("invoiceId", "position");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InvoiceLineItem_productId_idx" ON "InvoiceLineItem"("productId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Payment_installmentId_key" ON "Payment"("installmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Payment_invoiceId_paidAt_idx" ON "Payment"("invoiceId", "paidAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InvoiceInstallment_invoiceId_position_idx" ON "InvoiceInstallment"("invoiceId", "position");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InvoiceInstallment_invoiceId_dueDate_idx" ON "InvoiceInstallment"("invoiceId", "dueDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "InvoiceInstallment_status_dueDate_idx" ON "InvoiceInstallment"("status", "dueDate");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_personId_fkey" FOREIGN KEY ("personId") REFERENCES "Person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_dealId_fkey" FOREIGN KEY ("dealId") REFERENCES "Deal"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_quoteId_fkey" FOREIGN KEY ("quoteId") REFERENCES "Quote"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Invoice" ADD CONSTRAINT "Invoice_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "InvoiceLineItem" ADD CONSTRAINT "InvoiceLineItem_invoiceId_fkey" FOREIGN KEY ("invoiceId") REFERENCES "Invoice"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "InvoiceLineItem" ADD CONSTRAINT "InvoiceLineItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_invoiceId_fkey" FOREIGN KEY ("invoiceId") REFERENCES "Invoice"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_installmentId_fkey" FOREIGN KEY ("installmentId") REFERENCES "InvoiceInstallment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "InvoiceInstallment" ADD CONSTRAINT "InvoiceInstallment_invoiceId_fkey" FOREIGN KEY ("invoiceId") REFERENCES "Invoice"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|