From eca99dbcd1c2e5e22358458bee257e4134e4526b Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 09:55:39 +0700 Subject: [PATCH 01/10] fix: error not valid json payload --- src/controllers/08-credit-note-controller.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index d47376c..d2fd827 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -540,7 +540,7 @@ export class CreditNoteActionController extends Controller { async updateStatus( @Request() req: RequestWithUser, @Path() creditNoteId: string, - @Body() body: PaybackStatus, + @Body() body: { paybackStatus: PaybackStatus }, ) { await this.#checkPermission(req.user, creditNoteId); return await prisma.creditNote.update({ @@ -554,8 +554,9 @@ export class CreditNoteActionController extends Controller { quotation: true, }, data: { - creditNoteStatus: body === PaybackStatus.Done ? CreditNoteStatus.Success : undefined, - paybackStatus: body, + creditNoteStatus: + body.paybackStatus === PaybackStatus.Done ? CreditNoteStatus.Success : undefined, + paybackStatus: body.paybackStatus, }, }); } From f1312b586fa68e998b643d3536cd41f2638772d2 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:00:13 +0700 Subject: [PATCH 02/10] feat: add slip upload endpoint --- src/controllers/08-credit-note-controller.ts | 40 ++++++++++++++++++++ src/utils/minio.ts | 4 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index d2fd827..6839050 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -621,4 +621,44 @@ export class CreditNoteAttachmentController extends Controller { await this.#checkPermission(req.user, creditNoteId); return await deleteFile(fileLocation.creditNote.attachment(creditNoteId, name)); } + + @Get("file-slip") + @Security("keycloak") + async listSlip(@Request() req: RequestWithUser, @Path() creditNoteId: string) { + await this.#checkPermission(req.user, creditNoteId); + return await listFile(fileLocation.creditNote.slip(creditNoteId)); + } + + @Get("file-slip/{name}") + @Security("keycloak") + async getSlip(@Path() creditNoteId: string, @Path() name: string) { + return await getFile(fileLocation.creditNote.slip(creditNoteId, name)); + } + + @Head("file-slip/{name}") + async headSlip(@Path() creditNoteId: string, @Path() name: string) { + return await getPresigned("head", fileLocation.creditNote.slip(creditNoteId, name)); + } + + @Put("file-slip/{name}") + @Security("keycloak") + async putSlip( + @Request() req: RequestWithUser, + @Path() creditNoteId: string, + @Path() name: string, + ) { + await this.#checkPermission(req.user, creditNoteId); + return await setFile(fileLocation.creditNote.slip(creditNoteId, name)); + } + + @Delete("filel-slip/{name}") + @Security("keycloak") + async delSlip( + @Request() req: RequestWithUser, + @Path() creditNoteId: string, + @Path() name: string, + ) { + await this.#checkPermission(req.user, creditNoteId); + return await deleteFile(fileLocation.creditNote.slip(creditNoteId, name)); + } } diff --git a/src/utils/minio.ts b/src/utils/minio.ts index 7ec0a3b..f5f37e6 100644 --- a/src/utils/minio.ts +++ b/src/utils/minio.ts @@ -113,6 +113,8 @@ export const fileLocation = { attachment: (taskId: string, name?: string) => `task/attachment-${taskId}/${name || ""}`, }, creditNote: { - attachment: (taskId: string, name?: string) => `credit-note/attachment-${taskId}/${name || ""}`, + slip: (creditNoteId: string, name?: string) => `credit-note/slip-${creditNoteId}/${name || ""}`, + attachment: (creditNoteId: string, name?: string) => + `credit-note/attachment-${creditNoteId}/${name || ""}`, }, }; From bc6863517cbf802585a724aed59a907d2e4352ed Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:54:41 +0700 Subject: [PATCH 03/10] feat: add payback date --- prisma/schema.prisma | 1 + src/controllers/08-credit-note-controller.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d69cca0..afb0392 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1612,6 +1612,7 @@ model CreditNote { paybackAccount String? paybackAccountName String? paybackStatus PaybackStatus @default(Pending) + paybackDate DateTime? quotation Quotation @relation(fields: [quotationId], references: [id], onDelete: Cascade) quotationId String diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index 6839050..331775d 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -557,6 +557,7 @@ export class CreditNoteActionController extends Controller { creditNoteStatus: body.paybackStatus === PaybackStatus.Done ? CreditNoteStatus.Success : undefined, paybackStatus: body.paybackStatus, + paybackDate: body.paybackStatus === PaybackStatus.Done ? new Date() : undefined, }, }); } From c95b20da8f00e2b74729eba57e4adbe62c5409f5 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:02:21 +0700 Subject: [PATCH 04/10] chore: migration --- prisma/migrations/20250113070153_add_payback_date/migration.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 prisma/migrations/20250113070153_add_payback_date/migration.sql diff --git a/prisma/migrations/20250113070153_add_payback_date/migration.sql b/prisma/migrations/20250113070153_add_payback_date/migration.sql new file mode 100644 index 0000000..4375e97 --- /dev/null +++ b/prisma/migrations/20250113070153_add_payback_date/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "CreditNote" ADD COLUMN "paybackDate" TIMESTAMP(3); From 80f7c90b316b1a62df3aa7efe8cec11cf2c2a48b Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:30:13 +0700 Subject: [PATCH 05/10] fix: typo --- src/controllers/08-credit-note-controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index 331775d..d424202 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -652,7 +652,7 @@ export class CreditNoteAttachmentController extends Controller { return await setFile(fileLocation.creditNote.slip(creditNoteId, name)); } - @Delete("filel-slip/{name}") + @Delete("file-slip/{name}") @Security("keycloak") async delSlip( @Request() req: RequestWithUser, From 9235175303ab81c5266fda68934d522916332114 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:42:26 +0700 Subject: [PATCH 06/10] feat: handle delete credit note together with file --- src/controllers/08-credit-note-controller.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index d424202..ad17bb7 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -24,7 +24,15 @@ import { } from "../services/permission"; import HttpError from "../interfaces/http-error"; import HttpStatus from "../interfaces/http-status"; -import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio"; +import { + deleteFile, + deleteFolder, + fileLocation, + getFile, + getPresigned, + listFile, + setFile, +} from "../utils/minio"; import { notFoundError } from "../utils/error"; import { CreditNotePaybackType, CreditNoteStatus, Prisma } from "@prisma/client"; import { queryOrNot } from "../utils/relation"; @@ -511,6 +519,11 @@ export class CreditNoteController extends Controller { if (!record) throw notFoundError("Credit Note"); await permissionCheck(req.user, record.quotation.registeredBranch); + + await Promise.all([ + deleteFolder(fileLocation.creditNote.slip(creditNoteId)), + deleteFolder(fileLocation.creditNote.attachment(creditNoteId)), + ]); return await prisma.creditNote.delete({ where: { id: creditNoteId } }); } } From fa244a6e82e25398c2ed904a54abf2f0597ad656 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Mon, 13 Jan 2025 15:44:29 +0700 Subject: [PATCH 07/10] fix: delete task order not working --- src/controllers/07-task-controller.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/controllers/07-task-controller.ts b/src/controllers/07-task-controller.ts index 22357b4..77a593b 100644 --- a/src/controllers/07-task-controller.ts +++ b/src/controllers/07-task-controller.ts @@ -32,7 +32,15 @@ import { } from "../services/permission"; import HttpError from "../interfaces/http-error"; import HttpStatus from "../interfaces/http-status"; -import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio"; +import { + deleteFile, + deleteFolder, + fileLocation, + getFile, + getPresigned, + listFile, + setFile, +} from "../utils/minio"; import { queryOrNot } from "../utils/relation"; const MANAGE_ROLES = ["system", "head_of_admin", "admin", "document_checker"]; @@ -429,6 +437,9 @@ export class TaskController extends Controller { if (!record) throw notFoundError("Task Order"); await permissionCheck(req.user, record.registeredBranch); + + await Promise.all([deleteFolder(fileLocation.task.attachment(taskOrderId))]); + await tx.taskOrder.delete({ where: { id: taskOrderId } }); }); } } From 7f19b22dbb159f2a0059019f756b391d269e893f Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Tue, 14 Jan 2025 09:46:49 +0700 Subject: [PATCH 08/10] feat: add remark --- prisma/schema.prisma | 1 + src/controllers/08-credit-note-controller.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index afb0392..218e903 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1606,6 +1606,7 @@ model CreditNote { value Float @default(0) reason String? detail String? + remark String? paybackType CreditNotePaybackType? paybackBank String? diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index ad17bb7..ad29da1 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -64,6 +64,7 @@ type CreditNoteCreate = { quotationId: string; reason?: string; detail?: string; + remark?: string; paybackType?: CreditNotePaybackType; paybackBank?: string; paybackAccount?: string; @@ -74,6 +75,7 @@ type CreditNoteUpdate = { quotationId: string; reason?: string; detail?: string; + remark?: string; paybackType?: CreditNotePaybackType; paybackBank?: string; paybackAccount?: string; @@ -363,6 +365,7 @@ export class CreditNoteController extends Controller { data: { reason: body.reason, detail: body.detail, + remark: body.remark, paybackType: body.paybackType, paybackBank: body.paybackBank, paybackAccount: body.paybackAccount, @@ -479,6 +482,7 @@ export class CreditNoteController extends Controller { data: { reason: body.reason, detail: body.detail, + remark: body.remark, paybackType: body.paybackType, paybackBank: body.paybackBank, paybackAccount: body.paybackAccount, From 129c3d5737acbac8b65283d4c404e829c88f057e Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Tue, 14 Jan 2025 09:46:53 +0700 Subject: [PATCH 09/10] chore: migration --- .../20250114024611_add_credit_note_remark/migration.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 prisma/migrations/20250114024611_add_credit_note_remark/migration.sql diff --git a/prisma/migrations/20250114024611_add_credit_note_remark/migration.sql b/prisma/migrations/20250114024611_add_credit_note_remark/migration.sql new file mode 100644 index 0000000..05e0cf0 --- /dev/null +++ b/prisma/migrations/20250114024611_add_credit_note_remark/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "CreditNote" ADD COLUMN "remark" TEXT; From 527de34377c0a7c5b188eae3ef68a138f9114b4c Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 15 Jan 2025 09:07:00 +0700 Subject: [PATCH 10/10] feat: response customer along with receipt --- src/controllers/04-receipt-controller.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/controllers/04-receipt-controller.ts b/src/controllers/04-receipt-controller.ts index 42dbc55..c66b5de 100644 --- a/src/controllers/04-receipt-controller.ts +++ b/src/controllers/04-receipt-controller.ts @@ -38,7 +38,13 @@ export class ReceiptController extends Controller { invoice: { include: { installments: true, - quotation: true, + quotation: { + include: { + customerBranch: { + include: { customer: true }, + }, + }, + }, createdBy: true, }, },