feat: institution status

This commit is contained in:
Methapon2001 2025-02-10 10:03:32 +07:00
parent fdd48fb670
commit cfc531d312
3 changed files with 25 additions and 3 deletions

View file

@ -986,6 +986,9 @@ model Institution {
subDistrict SubDistrict @relation(fields: [subDistrictId], references: [id], onDelete: Cascade) subDistrict SubDistrict @relation(fields: [subDistrictId], references: [id], onDelete: Cascade)
subDistrictId String subDistrictId String
status Status @default(CREATED)
statusOrder Int @default(0)
selectedImage String? selectedImage String?
taskOrder TaskOrder[] taskOrder TaskOrder[]

View file

@ -22,6 +22,7 @@ import { RequestWithUser } from "../interfaces/user";
import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio"; import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio";
import HttpError from "../interfaces/http-error"; import HttpError from "../interfaces/http-error";
import HttpStatus from "../interfaces/http-status"; import HttpStatus from "../interfaces/http-status";
import { Status } from "../generated/kysely/types";
type InstitutionPayload = { type InstitutionPayload = {
name: string; name: string;
@ -115,7 +116,12 @@ export class InstitutionController extends Controller {
@Post() @Post()
@Security("keycloak") @Security("keycloak")
@OperationId("createInstitution") @OperationId("createInstitution")
async createInstitution(@Body() body: InstitutionPayload) { async createInstitution(
@Body()
body: InstitutionPayload & {
status?: Status;
},
) {
return await prisma.$transaction(async (tx) => { return await prisma.$transaction(async (tx) => {
const last = await tx.runningNo.upsert({ const last = await tx.runningNo.upsert({
where: { where: {
@ -141,7 +147,13 @@ export class InstitutionController extends Controller {
@Put("{institutionId}") @Put("{institutionId}")
@Security("keycloak") @Security("keycloak")
@OperationId("updateInstitution") @OperationId("updateInstitution")
async updateInstitution(@Path() institutionId: string, @Body() body: InstitutionPayload) { async updateInstitution(
@Path() institutionId: string,
@Body()
body: InstitutionPayload & {
status?: "ACTIVE" | "INACTIVE";
},
) {
return await prisma.institution.update({ return await prisma.institution.update({
where: { id: institutionId }, where: { id: institutionId },
data: body, data: body,
@ -163,7 +175,9 @@ export class InstitutionController extends Controller {
}); });
if (!record) throw notFoundError("Institution"); if (!record) throw notFoundError("Institution");
if (record.taskOrder.length > 0) throw isUsedError("Institution"); if (record.status !== "CREATED" || record.taskOrder.length > 0) {
throw isUsedError("Institution");
}
return await tx.institution.delete({ return await tx.institution.delete({
where: { id: institutionId }, where: { id: institutionId },

View file

@ -20,6 +20,7 @@ import {
QuotationStatus, QuotationStatus,
RequestDataStatus, RequestDataStatus,
RequestWorkStatus, RequestWorkStatus,
Status,
TaskOrderStatus, TaskOrderStatus,
TaskStatus, TaskStatus,
UserTaskStatus, UserTaskStatus,
@ -295,6 +296,10 @@ export class TaskController extends Controller {
"requestWorkMustReady", "requestWorkMustReady",
); );
} }
await tx.institution.updateMany({
where: { id: body.institutionId, status: Status.CREATED },
data: { status: Status.ACTIVE },
});
const work = await tx.requestWorkStepStatus.findMany({ const work = await tx.requestWorkStepStatus.findMany({
include: { include: {