feat: update task relation
This commit is contained in:
parent
d58d88c0d4
commit
46a16cf697
3 changed files with 105 additions and 71 deletions
|
|
@ -1428,8 +1428,6 @@ enum RequestWorkStatus {
|
|||
Validate
|
||||
Ended
|
||||
Completed
|
||||
|
||||
Redo
|
||||
Canceled
|
||||
}
|
||||
|
||||
|
|
@ -1470,13 +1468,12 @@ model RequestWorkStepStatus {
|
|||
responsibleUserId String?
|
||||
responsibleUser User? @relation(fields: [responsibleUserId], references: [id])
|
||||
|
||||
taskOrder TaskOrder? @relation(fields: [taskOrderId], references: [id], onDelete: SetNull)
|
||||
taskOrderId String?
|
||||
task Task[]
|
||||
|
||||
@@id([step, requestWorkId])
|
||||
}
|
||||
|
||||
enum TaskStatus {
|
||||
enum TaskOrderStatus {
|
||||
Pending
|
||||
InProgress
|
||||
Validate
|
||||
|
|
@ -1484,14 +1481,36 @@ enum TaskStatus {
|
|||
Canceled
|
||||
}
|
||||
|
||||
enum TaskStatus {
|
||||
Pending
|
||||
InProgress
|
||||
Validate
|
||||
Complete
|
||||
Redo
|
||||
Canceled
|
||||
}
|
||||
|
||||
model Task {
|
||||
id String @id @default(cuid())
|
||||
|
||||
taskStatus TaskStatus @default(Pending)
|
||||
|
||||
step Int
|
||||
requestWorkId String
|
||||
requestWorkStep RequestWorkStepStatus @relation(fields: [step, requestWorkId], references: [step, requestWorkId])
|
||||
|
||||
taskOrder TaskOrder @relation(fields: [taskOrderId], references: [id])
|
||||
taskOrderId String
|
||||
}
|
||||
|
||||
model TaskOrder {
|
||||
id String @id @default(cuid())
|
||||
|
||||
code String
|
||||
|
||||
taskName String
|
||||
taskStatus TaskStatus @default(Pending)
|
||||
taskList RequestWorkStepStatus[]
|
||||
taskName String
|
||||
taskOrderStatus TaskOrderStatus @default(Pending)
|
||||
taskList Task[]
|
||||
|
||||
contactName String
|
||||
contactTel String
|
||||
|
|
|
|||
|
|
@ -196,10 +196,10 @@ export class RequestDataActionController extends Controller {
|
|||
prisma.taskOrder.updateMany({
|
||||
where: {
|
||||
taskList: {
|
||||
every: { workStatus: RequestWorkStatus.Canceled },
|
||||
every: { taskStatus: RequestWorkStatus.Canceled },
|
||||
},
|
||||
},
|
||||
data: { taskStatus: TaskStatus.Canceled },
|
||||
data: { taskOrderStatus: TaskStatus.Canceled },
|
||||
}),
|
||||
]);
|
||||
}
|
||||
|
|
@ -223,7 +223,12 @@ export class RequestListController extends Controller {
|
|||
if (readyToTask) {
|
||||
statusCondition = {
|
||||
some: {
|
||||
OR: [{ workStatus: RequestWorkStatus.Ready }, { workStatus: RequestWorkStatus.Redo }],
|
||||
OR: [
|
||||
{ workStatus: RequestWorkStatus.Ready },
|
||||
{
|
||||
task: { some: { taskStatus: TaskStatus.Redo } },
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import {
|
|||
} from "tsoa";
|
||||
import prisma from "../db";
|
||||
import { notFoundError } from "../utils/error";
|
||||
import { TaskStatus } from "@prisma/client";
|
||||
import { TaskOrderStatus, TaskStatus } from "@prisma/client";
|
||||
import { RequestWithUser } from "../interfaces/user";
|
||||
import {
|
||||
branchRelationPermInclude,
|
||||
|
|
@ -44,17 +44,17 @@ export class TaskController extends Controller {
|
|||
@Get("stats")
|
||||
async getTaskOrderStats() {
|
||||
const task = await prisma.taskOrder.groupBy({
|
||||
by: ["taskStatus"],
|
||||
by: ["taskOrderStatus"],
|
||||
_count: true,
|
||||
});
|
||||
return task.reduce<Record<TaskStatus, number>>(
|
||||
(a, c) => Object.assign(a, { [c.taskStatus]: c._count }),
|
||||
return task.reduce<Record<TaskOrderStatus, number>>(
|
||||
(a, c) => Object.assign(a, { [c.taskOrderStatus]: c._count }),
|
||||
{
|
||||
[TaskStatus.Pending]: 0,
|
||||
[TaskStatus.InProgress]: 0,
|
||||
[TaskStatus.Validate]: 0,
|
||||
[TaskStatus.Complete]: 0,
|
||||
[TaskStatus.Canceled]: 0,
|
||||
[TaskOrderStatus.Pending]: 0,
|
||||
[TaskOrderStatus.InProgress]: 0,
|
||||
[TaskOrderStatus.Validate]: 0,
|
||||
[TaskOrderStatus.Complete]: 0,
|
||||
[TaskOrderStatus.Canceled]: 0,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -66,9 +66,9 @@ export class TaskController extends Controller {
|
|||
@Query() query: string = "",
|
||||
@Query() page = 1,
|
||||
@Query() pageSize = 30,
|
||||
@Query() taskStatus?: TaskStatus,
|
||||
@Query() taskOrderStatus?: TaskOrderStatus,
|
||||
) {
|
||||
return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskStatus);
|
||||
return this.getTaskOrderListByCriteria(req, query, page, pageSize, taskOrderStatus);
|
||||
}
|
||||
|
||||
@Post("list")
|
||||
|
|
@ -78,13 +78,13 @@ export class TaskController extends Controller {
|
|||
@Query() query: string = "",
|
||||
@Query() page = 1,
|
||||
@Query() pageSize = 30,
|
||||
@Query() taskStatus?: TaskStatus,
|
||||
@Query() taskOrderStatus?: TaskOrderStatus,
|
||||
@Body() body?: { code?: string[] },
|
||||
) {
|
||||
const [result, total] = await prisma.$transaction([
|
||||
prisma.taskOrder.findMany({
|
||||
where: {
|
||||
taskStatus,
|
||||
taskOrderStatus,
|
||||
registeredBranch: { OR: permissionCondCompany(req.user) },
|
||||
code: body?.code ? { in: body.code } : undefined,
|
||||
OR: [
|
||||
|
|
@ -113,19 +113,23 @@ export class TaskController extends Controller {
|
|||
include: {
|
||||
taskList: {
|
||||
include: {
|
||||
requestWork: {
|
||||
requestWorkStep: {
|
||||
include: {
|
||||
request: {
|
||||
requestWork: {
|
||||
include: {
|
||||
employee: true,
|
||||
quotation: true,
|
||||
},
|
||||
},
|
||||
productService: {
|
||||
include: {
|
||||
service: true,
|
||||
work: true,
|
||||
product: true,
|
||||
request: {
|
||||
include: {
|
||||
employee: true,
|
||||
quotation: true,
|
||||
},
|
||||
},
|
||||
productService: {
|
||||
include: {
|
||||
service: true,
|
||||
work: true,
|
||||
product: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -201,19 +205,23 @@ export class TaskController extends Controller {
|
|||
include: {
|
||||
taskList: {
|
||||
include: {
|
||||
requestWork: {
|
||||
requestWorkStep: {
|
||||
include: {
|
||||
request: {
|
||||
requestWork: {
|
||||
include: {
|
||||
employee: true,
|
||||
quotation: true,
|
||||
},
|
||||
},
|
||||
productService: {
|
||||
include: {
|
||||
service: true,
|
||||
work: true,
|
||||
product: true,
|
||||
request: {
|
||||
include: {
|
||||
employee: true,
|
||||
quotation: true,
|
||||
},
|
||||
},
|
||||
productService: {
|
||||
include: {
|
||||
service: true,
|
||||
work: true,
|
||||
product: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -228,9 +236,7 @@ export class TaskController extends Controller {
|
|||
code,
|
||||
registeredBranchId: userAffiliatedBranch.id,
|
||||
createdByUserId: req.user.sub,
|
||||
taskList: {
|
||||
connect: taskList.map((v) => ({ step_requestWorkId: v })),
|
||||
},
|
||||
taskList: { create: taskList },
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
@ -244,7 +250,7 @@ export class TaskController extends Controller {
|
|||
@Body()
|
||||
body: {
|
||||
taskName: string;
|
||||
taskStatus: TaskStatus;
|
||||
taskOrderStatus: TaskOrderStatus;
|
||||
|
||||
contactName: string;
|
||||
contactTel: string;
|
||||
|
|
@ -259,7 +265,11 @@ export class TaskController extends Controller {
|
|||
include: {
|
||||
registeredBranch: { include: branchRelationPermInclude(req.user) },
|
||||
taskList: {
|
||||
include: { requestWork: true },
|
||||
include: {
|
||||
requestWorkStep: {
|
||||
include: { requestWork: true },
|
||||
},
|
||||
},
|
||||
},
|
||||
institution: true,
|
||||
createdBy: true,
|
||||
|
|
@ -275,7 +285,11 @@ export class TaskController extends Controller {
|
|||
include: {
|
||||
taskList: {
|
||||
include: {
|
||||
requestWork: true,
|
||||
requestWorkStep: {
|
||||
include: {
|
||||
requestWork: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
institution: true,
|
||||
|
|
@ -285,20 +299,16 @@ export class TaskController extends Controller {
|
|||
data: {
|
||||
...body,
|
||||
taskList: {
|
||||
disconnect: record?.taskList
|
||||
.filter(
|
||||
(lhs) =>
|
||||
!body.taskList.find(
|
||||
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
|
||||
),
|
||||
)
|
||||
.map((v) => ({
|
||||
step_requestWorkId: {
|
||||
requestWorkId: v.requestWorkId,
|
||||
step: v.step,
|
||||
},
|
||||
})),
|
||||
connect: body.taskList.map((v) => ({ step_requestWorkId: v })),
|
||||
deleteMany: record?.taskList.filter(
|
||||
(lhs) =>
|
||||
!body.taskList.find(
|
||||
(rhs) => lhs.requestWorkId === rhs.requestWorkId && lhs.step === rhs.step,
|
||||
),
|
||||
),
|
||||
createMany: {
|
||||
data: body.taskList,
|
||||
skipDuplicates: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
@ -345,13 +355,13 @@ export class TaskActionController extends Controller {
|
|||
await tx.taskOrder.update({
|
||||
where: { id: taskId },
|
||||
data: {
|
||||
taskStatus: "InProgress",
|
||||
taskOrderStatus: TaskOrderStatus.InProgress,
|
||||
},
|
||||
});
|
||||
await tx.requestWorkStepStatus.updateMany({
|
||||
await tx.task.updateMany({
|
||||
where: { taskOrderId: taskId },
|
||||
data: {
|
||||
workStatus: "InProgress",
|
||||
taskStatus: TaskStatus.InProgress,
|
||||
},
|
||||
});
|
||||
await tx.requestData.updateMany({
|
||||
|
|
@ -359,7 +369,7 @@ export class TaskActionController extends Controller {
|
|||
requestWork: {
|
||||
some: {
|
||||
stepStatus: {
|
||||
some: { taskOrderId: taskId },
|
||||
some: { task: { some: { taskOrderId: taskId } } },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -378,7 +388,7 @@ export class TaskActionController extends Controller {
|
|||
async completeTaskOrder(@Request() req: RequestWithUser, @Path() taskId: string) {}
|
||||
}
|
||||
|
||||
@Route("api/v1/task-order/{taskId}")
|
||||
@Route("api/v1/task/{taskId}")
|
||||
@Tags("Task Order")
|
||||
export class TaskOrderAttachmentController extends Controller {
|
||||
private async checkPermission(user: RequestWithUser["user"], id: string) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue