improvement: fdi tooth chart selection modes polished. bugs related to teeth selecyion fixed.
This commit is contained in:
@@ -33,6 +33,9 @@ const taskListInclude = {
|
||||
},
|
||||
} satisfies Prisma.LabCaseTaskInclude;
|
||||
|
||||
/** Completing this step completes every matching task in the same case (catalog: first step of all prosthesis types). */
|
||||
const CASE_SCOPED_SCAN_STEP_CODE = 'intraoral_scan';
|
||||
|
||||
@Injectable()
|
||||
export class TasksService {
|
||||
constructor(
|
||||
@@ -238,12 +241,13 @@ export class TasksService {
|
||||
}
|
||||
|
||||
const updated = await this.prisma.$transaction(async (tx) => {
|
||||
const now = new Date();
|
||||
const result = await tx.labCaseTask.update({
|
||||
where: { id: taskId },
|
||||
data: {
|
||||
status: dto.status,
|
||||
lastStatusChangedByUserId: actorUserId,
|
||||
lastStatusChangedAt: new Date(),
|
||||
lastStatusChangedAt: now,
|
||||
},
|
||||
include: taskListInclude,
|
||||
});
|
||||
@@ -259,13 +263,58 @@ export class TasksService {
|
||||
});
|
||||
}
|
||||
|
||||
const cascadedScanTaskIds: string[] = [];
|
||||
if (
|
||||
dto.status === LabTaskStatus.COMPLETED &&
|
||||
task.status !== LabTaskStatus.COMPLETED &&
|
||||
task.workflowStepCode === CASE_SCOPED_SCAN_STEP_CODE
|
||||
) {
|
||||
const siblingScans = await tx.labCaseTask.findMany({
|
||||
where: {
|
||||
labCaseId: task.labCaseId,
|
||||
workflowStepCode: CASE_SCOPED_SCAN_STEP_CODE,
|
||||
status: { not: LabTaskStatus.COMPLETED },
|
||||
id: { not: taskId },
|
||||
},
|
||||
select: { id: true, status: true },
|
||||
});
|
||||
|
||||
for (const sibling of siblingScans) {
|
||||
await tx.labCaseTask.update({
|
||||
where: { id: sibling.id },
|
||||
data: {
|
||||
status: LabTaskStatus.COMPLETED,
|
||||
lastStatusChangedByUserId: actorUserId,
|
||||
lastStatusChangedAt: now,
|
||||
},
|
||||
});
|
||||
await tx.labCaseTaskStatusEvent.create({
|
||||
data: {
|
||||
taskId: sibling.id,
|
||||
fromStatus: sibling.status,
|
||||
toStatus: LabTaskStatus.COMPLETED,
|
||||
changedByUserId: actorUserId,
|
||||
},
|
||||
});
|
||||
cascadedScanTaskIds.push(sibling.id);
|
||||
}
|
||||
}
|
||||
|
||||
if (dto.status === LabTaskStatus.COMPLETED && task.status !== LabTaskStatus.COMPLETED) {
|
||||
await this.labCaseActivity.record(
|
||||
{
|
||||
labCaseId: task.labCaseId,
|
||||
type: LabCaseActivityType.TASK_COMPLETED,
|
||||
actorUserId,
|
||||
payload: { taskId },
|
||||
payload: {
|
||||
taskId,
|
||||
...(cascadedScanTaskIds.length > 0
|
||||
? {
|
||||
cascadedTaskIds: cascadedScanTaskIds,
|
||||
caseScopedStep: CASE_SCOPED_SCAN_STEP_CODE,
|
||||
}
|
||||
: {}),
|
||||
},
|
||||
},
|
||||
tx,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user