From e74516ce3bca4c37aac97f16ef58e78b99cbe676 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:59:13 +0700 Subject: [PATCH 1/5] fix: allow anyone in company to see template --- src/controllers/04-flow-template-controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/04-flow-template-controller.ts b/src/controllers/04-flow-template-controller.ts index 85ab0b3..cdb654f 100644 --- a/src/controllers/04-flow-template-controller.ts +++ b/src/controllers/04-flow-template-controller.ts @@ -56,7 +56,7 @@ const MANAGE_ROLES = [ ]; function globalAllow(user: RequestWithUser["user"]) { - const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"]; + const listAllowed = MANAGE_ROLES; return user.roles?.some((v) => listAllowed.includes(v)) || false; } From 8fb28ec3ab1a05b7122f6e33d21ec487b15e88e9 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:40:39 +0700 Subject: [PATCH 2/5] fix: perm --- src/controllers/03-customer-branch-controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/03-customer-branch-controller.ts b/src/controllers/03-customer-branch-controller.ts index 61852ad..7f13048 100644 --- a/src/controllers/03-customer-branch-controller.ts +++ b/src/controllers/03-customer-branch-controller.ts @@ -57,7 +57,7 @@ const MANAGE_ROLES = [ ]; function globalAllow(user: RequestWithUser["user"]) { - const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"]; + const listAllowed = MANAGE_ROLES; return user.roles?.some((v) => listAllowed.includes(v)) || false; } From a61bd8c83ed9a4f92efeb92110a7f6423231a807 Mon Sep 17 00:00:00 2001 From: Kanjana Date: Wed, 9 Jul 2025 15:21:00 +0700 Subject: [PATCH 3/5] chore: migration --- .../migration.sql | 36 +++++++++++++++++++ prisma/schema.prisma | 32 +++++++++++++---- 2 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 prisma/migrations/20250709082027_add_business_type_add_delect_customer_name/migration.sql diff --git a/prisma/migrations/20250709082027_add_business_type_add_delect_customer_name/migration.sql b/prisma/migrations/20250709082027_add_business_type_add_delect_customer_name/migration.sql new file mode 100644 index 0000000..50f8cd1 --- /dev/null +++ b/prisma/migrations/20250709082027_add_business_type_add_delect_customer_name/migration.sql @@ -0,0 +1,36 @@ +/* + Warnings: + + - You are about to drop the column `businessType` on the `CustomerBranch` table. All the data in the column will be lost. + - You are about to drop the column `customerName` on the `CustomerBranch` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "CustomerBranch" DROP COLUMN "businessType", +DROP COLUMN "customerName", +ADD COLUMN "businessTypeId" TEXT; + +-- AlterTable +ALTER TABLE "EmployeeVisa" ADD COLUMN "reportDate" DATE; + +-- CreateTable +CREATE TABLE "BusinessType" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "nameEN" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdByUserId" TEXT, + "updatedAt" TIMESTAMP(3) NOT NULL, + "updatedByUserId" TEXT, + + CONSTRAINT "BusinessType_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "CustomerBranch" ADD CONSTRAINT "CustomerBranch_businessTypeId_fkey" FOREIGN KEY ("businessTypeId") REFERENCES "BusinessType"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BusinessType" ADD CONSTRAINT "BusinessType_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BusinessType" ADD CONSTRAINT "BusinessType_updatedByUserId_fkey" FOREIGN KEY ("updatedByUserId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 72b19a3..e444ae1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -501,6 +501,8 @@ model User { creditNoteCreated CreditNote[] @relation("CreditNoteCreatedByUser") institutionCreated Institution[] @relation("InstitutionCreatedByUser") institutionUpdated Institution[] @relation("InstitutionUpdatedByUser") + businessTypeCreated BusinessType[] @relation("BusinessTypeCreatedByUser") + businessTypeUpdated BusinessType[] @relation("BusinessTypeUpdatedByUser") requestWorkStepStatus RequestWorkStepStatus[] userTask UserTask[] @@ -550,10 +552,9 @@ model Customer { } model CustomerBranch { - id String @id @default(cuid()) - customer Customer @relation(fields: [customerId], references: [id], onDelete: Cascade) - customerId String - customerName String? + id String @id @default(cuid()) + customer Customer @relation(fields: [customerId], references: [id], onDelete: Cascade) + customerId String code String codeCustomer String @@ -615,7 +616,8 @@ model CustomerBranch { agentUser User? @relation(fields: [agentUserId], references: [id], onDelete: SetNull) // NOTE: Business - businessType String + businessTypeId String? + businessType BusinessType? @relation(fields: [businessTypeId], references: [id], onDelete: SetNull) jobPosition String jobDescription String payDate String @@ -774,6 +776,21 @@ model CustomerBranchVatRegis { customerBranch CustomerBranch @relation(fields: [customerBranchId], references: [id], onDelete: Cascade) } +model BusinessType { + id String @id @default(cuid()) + name String + nameEN String + + createdAt DateTime @default(now()) + createdBy User? @relation(name: "BusinessTypeCreatedByUser", fields: [createdByUserId], references: [id], onDelete: SetNull) + createdByUserId String? + updatedAt DateTime @updatedAt + updatedBy User? @relation(name: "BusinessTypeUpdatedByUser", fields: [updatedByUserId], references: [id], onDelete: SetNull) + updatedByUserId String? + + customerBranch CustomerBranch[] +} + model Employee { id String @id @default(cuid()) @@ -895,8 +912,9 @@ model EmployeeVisa { entryCount Int issueCountry String issuePlace String - issueDate DateTime @db.Date - expireDate DateTime @db.Date + issueDate DateTime @db.Date + expireDate DateTime @db.Date + reportDate DateTime? @db.Date mrz String? remark String? From 50fca4d540fd1b56b0b38a65b96b7eb16562d919 Mon Sep 17 00:00:00 2001 From: Kanjana Date: Wed, 9 Jul 2025 16:02:45 +0700 Subject: [PATCH 4/5] feat: remove customerName add reportDate --- .../03-customer-branch-controller.ts | 31 ++++++++++++++----- src/controllers/03-customer-controller.ts | 5 ++- .../03-employee-visa-controller.ts | 1 + src/controllers/04-invoice-controller.ts | 1 - src/controllers/05-quotation-controller.ts | 1 - src/controllers/06-request-list-controller.ts | 1 - src/controllers/08-credit-note-controller.ts | 1 - src/controllers/09-debit-note-controller.ts | 1 - src/controllers/09-line-controller.ts | 3 +- src/controllers/09-web-hook-controller.ts | 8 ++--- 10 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/controllers/03-customer-branch-controller.ts b/src/controllers/03-customer-branch-controller.ts index 7f13048..f8c8a6b 100644 --- a/src/controllers/03-customer-branch-controller.ts +++ b/src/controllers/03-customer-branch-controller.ts @@ -57,7 +57,7 @@ const MANAGE_ROLES = [ ]; function globalAllow(user: RequestWithUser["user"]) { - const listAllowed = MANAGE_ROLES; + const listAllowed = ["system", "head_of_admin", "admin", "executive", "accountant"]; return user.roles?.some((v) => listAllowed.includes(v)) || false; } @@ -87,7 +87,6 @@ export type CustomerBranchCreate = { authorizedCapital?: string; authorizedName?: string; authorizedNameEN?: string; - customerName?: string; telephoneNo: string; @@ -111,7 +110,7 @@ export type CustomerBranchCreate = { contactName: string; agentUserId?: string; - businessType: string; + businessTypeId?: string; jobPosition: string; jobDescription: string; payDate: string; @@ -145,7 +144,6 @@ export type CustomerBranchUpdate = { authorizedCapital?: string; authorizedName?: string; authorizedNameEN?: string; - customerName?: string; telephoneNo: string; @@ -169,7 +167,7 @@ export type CustomerBranchUpdate = { contactName?: string; agentUserId?: string; - businessType?: string; + businessTypeId?: string; jobPosition?: string; jobDescription?: string; payDate?: string; @@ -204,7 +202,6 @@ export class CustomerBranchController extends Controller { ) { const where = { OR: queryOrNot(query, [ - { customerName: { contains: query, mode: "insensitive" } }, { registerName: { contains: query, mode: "insensitive" } }, { registerNameEN: { contains: query, mode: "insensitive" } }, { email: { contains: query, mode: "insensitive" } }, @@ -381,7 +378,15 @@ export class CustomerBranchController extends Controller { (v) => (v.headOffice || v).code, ); - const { provinceId, districtId, subDistrictId, customerId, agentUserId, ...rest } = body; + const { + provinceId, + districtId, + subDistrictId, + customerId, + agentUserId, + businessTypeId, + ...rest + } = body; const record = await prisma.$transaction( async (tx) => { @@ -435,6 +440,7 @@ export class CustomerBranchController extends Controller { province: connectOrNot(provinceId), district: connectOrNot(districtId), subDistrict: connectOrNot(subDistrictId), + businessType: connectOrNot(businessTypeId), createdBy: { connect: { id: req.user.sub } }, updatedBy: { connect: { id: req.user.sub } }, }, @@ -509,7 +515,15 @@ export class CustomerBranchController extends Controller { await permissionCheck(req.user, customer.registeredBranch); } - const { provinceId, districtId, subDistrictId, customerId, agentUserId, ...rest } = body; + const { + provinceId, + districtId, + subDistrictId, + customerId, + agentUserId, + businessTypeId, + ...rest + } = body; return await prisma.customerBranch.update({ where: { id: branchId }, @@ -528,6 +542,7 @@ export class CustomerBranchController extends Controller { province: connectOrDisconnect(provinceId), district: connectOrDisconnect(districtId), subDistrict: connectOrDisconnect(subDistrictId), + businessType: connectOrNot(businessTypeId), updatedBy: { connect: { id: req.user.sub } }, }, }); diff --git a/src/controllers/03-customer-controller.ts b/src/controllers/03-customer-controller.ts index 082b067..580e60f 100644 --- a/src/controllers/03-customer-controller.ts +++ b/src/controllers/03-customer-controller.ts @@ -85,7 +85,6 @@ export type CustomerCreate = { authorizedCapital?: string; authorizedName?: string; authorizedNameEN?: string; - customerName?: string; telephoneNo: string; @@ -109,7 +108,7 @@ export type CustomerCreate = { contactName: string; agentUserId?: string; - businessType: string; + businessTypeId?: string | null; jobPosition: string; jobDescription: string; payDate: string; @@ -174,7 +173,6 @@ export class CustomerController extends Controller { const where = { OR: queryOrNot(query, [ { branch: { some: { namePrefix: { contains: query, mode: "insensitive" } } } }, - { branch: { some: { customerName: { contains: query, mode: "insensitive" } } } }, { branch: { some: { registerName: { contains: query, mode: "insensitive" } } } }, { branch: { some: { registerNameEN: { contains: query, mode: "insensitive" } } } }, { branch: { some: { firstName: { contains: query, mode: "insensitive" } } } }, @@ -220,6 +218,7 @@ export class CustomerController extends Controller { }, createdBy: true, updatedBy: true, + // businessType:true }, orderBy: [{ statusOrder: "asc" }, { createdAt: "asc" }], where, diff --git a/src/controllers/03-employee-visa-controller.ts b/src/controllers/03-employee-visa-controller.ts index eafb22a..7c51bf2 100644 --- a/src/controllers/03-employee-visa-controller.ts +++ b/src/controllers/03-employee-visa-controller.ts @@ -44,6 +44,7 @@ type EmployeeVisaPayload = { issuePlace: string; issueDate: Date; expireDate: Date; + reportDate?: Date | null; mrz?: string | null; remark?: string | null; diff --git a/src/controllers/04-invoice-controller.ts b/src/controllers/04-invoice-controller.ts index 5902521..cff9d20 100644 --- a/src/controllers/04-invoice-controller.ts +++ b/src/controllers/04-invoice-controller.ts @@ -117,7 +117,6 @@ export class InvoiceController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { registerName: { contains: query, mode: "insensitive" } }, { registerNameEN: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/05-quotation-controller.ts b/src/controllers/05-quotation-controller.ts index 5a375e5..04353bb 100644 --- a/src/controllers/05-quotation-controller.ts +++ b/src/controllers/05-quotation-controller.ts @@ -225,7 +225,6 @@ export class QuotationController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, { firstNameEN: { contains: query, mode: "insensitive" } }, { lastName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/06-request-list-controller.ts b/src/controllers/06-request-list-controller.ts index a20020f..37fd8e2 100644 --- a/src/controllers/06-request-list-controller.ts +++ b/src/controllers/06-request-list-controller.ts @@ -95,7 +95,6 @@ export class RequestDataController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { registerName: { contains: query, mode: "insensitive" } }, { registerNameEN: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/08-credit-note-controller.ts b/src/controllers/08-credit-note-controller.ts index f1bef3c..fd7a2a3 100644 --- a/src/controllers/08-credit-note-controller.ts +++ b/src/controllers/08-credit-note-controller.ts @@ -163,7 +163,6 @@ export class CreditNoteController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, { firstNameEN: { contains: query, mode: "insensitive" } }, { lastName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/09-debit-note-controller.ts b/src/controllers/09-debit-note-controller.ts index badb52e..5fcdee9 100644 --- a/src/controllers/09-debit-note-controller.ts +++ b/src/controllers/09-debit-note-controller.ts @@ -211,7 +211,6 @@ export class DebitNoteController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, { firstNameEN: { contains: query, mode: "insensitive" } }, { lastName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/09-line-controller.ts b/src/controllers/09-line-controller.ts index 91c06bb..8e708be 100644 --- a/src/controllers/09-line-controller.ts +++ b/src/controllers/09-line-controller.ts @@ -189,7 +189,6 @@ export class LineController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, { registerName: { contains: query, mode: "insensitive" } }, { registerNameEN: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, @@ -624,7 +623,7 @@ export class LineController extends Controller { customerBranch: { OR: [ { code: { contains: query, mode: "insensitive" } }, - { customerName: { contains: query, mode: "insensitive" } }, + { registerName: { contains: query, mode: "insensitive" } }, { firstName: { contains: query, mode: "insensitive" } }, { firstNameEN: { contains: query, mode: "insensitive" } }, { lastName: { contains: query, mode: "insensitive" } }, diff --git a/src/controllers/09-web-hook-controller.ts b/src/controllers/09-web-hook-controller.ts index 2914e20..028bf75 100644 --- a/src/controllers/09-web-hook-controller.ts +++ b/src/controllers/09-web-hook-controller.ts @@ -90,7 +90,7 @@ export class WebHookController extends Controller { firstNameEN: true, lastName: true, lastNameEN: true, - customerName: true, + registerName: true, customer: { select: { customerType: true, @@ -133,13 +133,13 @@ export class WebHookController extends Controller { let textData = ""; if (dataEmployee.length > 0) { - const customerName = - dataEmployee[0]?.employee?.customerBranch?.customerName ?? "ไม่ระบุ"; + const registerName = + dataEmployee[0]?.employee?.customerBranch?.registerName ?? "ไม่ระบุ"; const telephoneNo = dataEmployee[0]?.employee?.customerBranch?.customer.registeredBranch.telephoneNo ?? "ไม่ระบุ"; - const textEmployer = `เรียน คุณ${customerName}`; + const textEmployer = `เรียน คุณ${registerName}`; const textAlert = "ขอแจ้งให้ทราบว่าหนังสือเดินทางของลูกจ้าง"; const textAlert2 = "และจำเป็นต้องดำเนินการต่ออายุในเร็ว ๆ นี้"; const textExpDate = From 73fea9d9ed2a56901fe799cb2fc8368d90a0ab17 Mon Sep 17 00:00:00 2001 From: Kanjana Date: Wed, 9 Jul 2025 16:12:13 +0700 Subject: [PATCH 5/5] feat: add businessType --- src/controllers/03-customer-branch-controller.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/controllers/03-customer-branch-controller.ts b/src/controllers/03-customer-branch-controller.ts index f8c8a6b..d07f0ce 100644 --- a/src/controllers/03-customer-branch-controller.ts +++ b/src/controllers/03-customer-branch-controller.ts @@ -246,6 +246,7 @@ export class CustomerBranchController extends Controller { createdBy: true, updatedBy: true, _count: true, + businessType: true, }, where, take: pageSize, @@ -268,6 +269,7 @@ export class CustomerBranchController extends Controller { subDistrict: true, createdBy: true, updatedBy: true, + businessType: true, }, where: { id: branchId }, }); @@ -429,6 +431,7 @@ export class CustomerBranchController extends Controller { subDistrict: true, createdBy: true, updatedBy: true, + businessType: true, }, data: { ...rest, @@ -471,6 +474,7 @@ export class CustomerBranchController extends Controller { }, }, }, + businessType: true, }, }); @@ -533,6 +537,7 @@ export class CustomerBranchController extends Controller { subDistrict: true, createdBy: true, updatedBy: true, + businessType: true, }, data: { ...rest, @@ -561,6 +566,7 @@ export class CustomerBranchController extends Controller { }, }, }, + businessType: true, }, }); @@ -613,6 +619,7 @@ export class CustomerBranchFileController extends Controller { }, }, }, + businessType: true, }, }); if (!data) throw notFoundError("Customer Branch");