diff --git a/prisma/migrations/20241025093744_add_more_quotation_status/migration.sql b/prisma/migrations/20241025093744_add_more_quotation_status/migration.sql new file mode 100644 index 0000000..032ae7d --- /dev/null +++ b/prisma/migrations/20241025093744_add_more_quotation_status/migration.sql @@ -0,0 +1,13 @@ +-- AlterEnum +-- This migration adds more than one value to an enum. +-- With PostgreSQL versions 11 and earlier, this is not possible +-- in a single migration. This can be worked around by creating +-- multiple migrations, each migration adding only one value to +-- the enum. + + +ALTER TYPE "QuotationStatus" ADD VALUE 'Accepted'; +ALTER TYPE "QuotationStatus" ADD VALUE 'Invoice'; + +-- AlterTable +ALTER TABLE "WorkProduct" ADD COLUMN "attributes" JSONB; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c53750a..3976955 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1083,6 +1083,8 @@ model WorkProduct { } enum QuotationStatus { + Accepted + Invoice PaymentPending PaymentInProcess // For Installments / Split Payment PaymentSuccess diff --git a/src/controllers/04-invoice-controller.ts b/src/controllers/04-invoice-controller.ts index c7a74f9..588cd4c 100644 --- a/src/controllers/04-invoice-controller.ts +++ b/src/controllers/04-invoice-controller.ts @@ -134,19 +134,25 @@ export class InvoiceController extends Controller { if (!quotation) throw notFoundError("Quotation"); await permissionCheck(req.user, quotation.registeredBranch); - return await prisma.invoice.create({ - data: { - productServiceList: { connect: productServiceList.map((v) => ({ id: v.id })) }, - quotationId: body.quotationId, - amount: body.amount, - payment: { - create: { - paymentStatus: "PaymentWait", - amount: body.amount, + return await prisma.$transaction(async (tx) => { + await tx.quotation.update({ + where: { id: body.quotationId }, + data: { quotationStatus: "PaymentInProcess" }, + }); + return await tx.invoice.create({ + data: { + productServiceList: { connect: productServiceList.map((v) => ({ id: v.id })) }, + quotationId: body.quotationId, + amount: body.amount, + payment: { + create: { + paymentStatus: "PaymentWait", + amount: body.amount, + }, }, + createdByUserId: req.user.sub, }, - createdByUserId: req.user.sub, - }, + }); }); }