diff --git a/src/controllers/04-product-group-controller.ts b/src/controllers/04-product-group-controller.ts index 50b77f7..4ecc7f1 100644 --- a/src/controllers/04-product-group-controller.ts +++ b/src/controllers/04-product-group-controller.ts @@ -230,21 +230,34 @@ export class ProductGroup extends Controller { let companyAfter = !!body.registeredBranchId && branch ? (branch.headOffice || branch).code : false; - if (companyBefore && companyAfter && companyBefore !== companyAfter) { - throw new HttpError( - HttpStatus.BAD_REQUEST, - "Cannot move between different headoffice", - "crossCompanyNotPermit", - ); - } - - const result = await prisma.productGroup.update({ - include: { - createdBy: true, - updatedBy: true, - }, - data: { ...body, statusOrder: +(body.status === "INACTIVE"), updatedByUserId: req.user.sub }, - where: { id: groupId }, + const result = await prisma.$transaction(async (tx) => { + let code = ""; + if (companyBefore && companyAfter && companyBefore !== companyAfter) { + const last = await tx.runningNo.upsert({ + where: { + key: `PRODGRP_${companyAfter}`, + }, + create: { + key: `PRODGRP_${companyAfter}`, + value: 1, + }, + update: { value: { increment: 1 } }, + }); + code = `G${last.value.toString().padStart(2, "0")}`; + } + return await prisma.productGroup.update({ + include: { + createdBy: true, + updatedBy: true, + }, + data: { + ...body, + code: !!code ? code : undefined, + statusOrder: +(body.status === "INACTIVE"), + updatedByUserId: req.user.sub, + }, + where: { id: groupId }, + }); }); return result;