feat: add restart task within same order

This commit is contained in:
Methapon2001 2025-01-08 13:09:59 +07:00
parent 2536394fb2
commit 27d80de0ec

View file

@ -452,6 +452,7 @@ export class TaskActionController extends Controller {
return await prisma.$transaction(async (tx) => { return await prisma.$transaction(async (tx) => {
const promises = body.map(async (v) => { const promises = body.map(async (v) => {
const record = await tx.task.findFirst({ const record = await tx.task.findFirst({
include: { requestWorkStep: true },
where: { where: {
step: v.step, step: v.step,
requestWorkId: v.requestWorkId, requestWorkId: v.requestWorkId,
@ -459,6 +460,16 @@ export class TaskActionController extends Controller {
}, },
}); });
if (!record) throw notFoundError("Task List"); if (!record) throw notFoundError("Task List");
if (v.taskStatus === TaskStatus.Restart && record.requestWorkStep.responsibleUserId) {
await tx.userTask.updateMany({
where: {
taskOrderId: record.taskOrderId,
userId: record.requestWorkStep.responsibleUserId,
},
data: { userTaskStatus: UserTaskStatus.Restart },
});
}
return await tx.task.update({ return await tx.task.update({
where: { id: record.id }, where: { id: record.id },
data: { data: {
@ -520,13 +531,7 @@ export class TaskActionController extends Controller {
@Post("complete") @Post("complete")
@Security("keycloak") @Security("keycloak")
async completeTaskOrder( async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskOrderId: string) {
@Request() req: RequestWithUser,
@Path() taskOrderId: string,
@Query() submitUserId?: string,
) {
submitUserId = submitUserId ?? req.user.sub;
const record = await prisma.taskOrder.findFirst({ where: { id: taskOrderId } }); const record = await prisma.taskOrder.findFirst({ where: { id: taskOrderId } });
if (!record) throw notFoundError("Task Order"); if (!record) throw notFoundError("Task Order");
@ -540,16 +545,25 @@ export class TaskActionController extends Controller {
tx.requestWorkStepStatus.updateMany({ tx.requestWorkStepStatus.updateMany({
where: { where: {
task: { task: {
some: { taskOrderId, taskStatus: TaskStatus.Redo }, some: {
taskOrderId,
taskStatus: { notIn: [TaskStatus.Canceled, TaskStatus.Success] },
},
}, },
}, },
data: { workStatus: RequestWorkStatus.Ready }, data: { workStatus: RequestWorkStatus.Ready },
}), }),
tx.task.updateMany({
where: {
taskOrderId: taskOrderId,
taskStatus: TaskStatus.Restart,
},
data: { taskStatus: TaskStatus.Redo },
}),
tx.task.updateMany({ tx.task.updateMany({
where: { where: {
taskOrderId: taskOrderId, taskOrderId: taskOrderId,
taskStatus: TaskStatus.Validate, taskStatus: TaskStatus.Validate,
requestWorkStep: { responsibleUserId: submitUserId },
}, },
data: { taskStatus: TaskStatus.Complete }, data: { taskStatus: TaskStatus.Complete },
}), }),
@ -712,13 +726,16 @@ export class UserTaskController extends Controller {
userTask: userTaskStatus userTask: userTaskStatus
? { ? {
some: some:
userTaskStatus !== UserTaskStatus.Pending userTaskStatus !== UserTaskStatus.Pending && userTaskStatus !== UserTaskStatus.Restart
? { ? {
userTaskStatus, userTaskStatus,
userId: req.user.sub, userId: req.user.sub,
} }
: undefined, : undefined,
none: userTaskStatus === UserTaskStatus.Pending ? { userId: req.user.sub } : undefined, none:
userTaskStatus === UserTaskStatus.Pending || userTaskStatus === UserTaskStatus.Restart
? { userId: req.user.sub }
: undefined,
} }
: undefined, : undefined,
OR: queryOrNot(query, [ OR: queryOrNot(query, [