BIZ8-11 增强采购项目关联
这个提交包含在:
@@ -187,6 +187,7 @@ function buildProjectDetailInclude() {
|
||||
tasks: true,
|
||||
risks: true,
|
||||
reimbursements: true,
|
||||
purchase_requests: true,
|
||||
travel_requests: true,
|
||||
todo_items: true,
|
||||
weekly_reports: true,
|
||||
@@ -425,6 +426,7 @@ function mapProjectDetail(project) {
|
||||
tasks: project._count?.tasks ?? 0,
|
||||
risks: project._count?.risks ?? 0,
|
||||
reimbursements: project._count?.reimbursements ?? 0,
|
||||
purchaseRequests: project._count?.purchase_requests ?? 0,
|
||||
travelRequests: project._count?.travel_requests ?? 0,
|
||||
todoItems: project._count?.todo_items ?? 0,
|
||||
weeklyReports: project._count?.weekly_reports ?? 0,
|
||||
@@ -861,6 +863,29 @@ async function projectsRoutes(fastify) {
|
||||
return sendData(reply, request, { totalAmount: totalAmount.toFixed(2), items: items.map((item) => ({ id: item.id, requestNo: item.request_no ?? item.id, status: item.status, estimatedAmount: String(item.estimated_amount ?? 0), startDate: item.start_date?.toISOString?.().slice(0, 10) ?? null, endDate: item.end_date?.toISOString?.().slice(0, 10) ?? null, updatedAt: item.updated_at?.toISOString?.() ?? null })) });
|
||||
});
|
||||
|
||||
fastify.get("/projects/:id/purchase-requests/summary", { preHandler: fastify.authenticate }, async (request, reply) => {
|
||||
await ensureFeatureEnabled(fastify, request, FEATURE_FLAG_KEYS.projectLinking);
|
||||
const projectId = parseId(request.params?.id);
|
||||
await ensureReadableProject(fastify, request, projectId);
|
||||
const items = await fastify.prisma.purchaseRequest.findMany({
|
||||
where: { project_id: projectId },
|
||||
orderBy: { updated_at: "desc" },
|
||||
select: { id: true, request_no: true, title: true, status: true, total_amount: true, updated_at: true },
|
||||
});
|
||||
const totalAmount = items.reduce((sum, item) => sum + Number(item.total_amount ?? 0), 0);
|
||||
return sendData(reply, request, {
|
||||
totalAmount: totalAmount.toFixed(2),
|
||||
items: items.map((item) => ({
|
||||
id: item.id,
|
||||
requestNo: item.request_no ?? item.id,
|
||||
title: item.title,
|
||||
status: item.status,
|
||||
totalAmount: String(item.total_amount ?? 0),
|
||||
updatedAt: item.updated_at?.toISOString?.() ?? null,
|
||||
})),
|
||||
});
|
||||
});
|
||||
|
||||
fastify.get("/projects/:id/weekly-reports", { preHandler: fastify.authenticate }, async (request, reply) => {
|
||||
await ensureFeatureEnabled(fastify, request, FEATURE_FLAG_KEYS.projectLinking);
|
||||
const projectId = parseId(request.params?.id);
|
||||
|
||||
在新工单中引用
屏蔽一个用户