improvement: treatment plan turned into a wizard. shift+click control added to FDI tooth chart for cunnected prosthesises.
This commit is contained in:
@@ -660,24 +660,44 @@ export class CasesService {
|
||||
}
|
||||
|
||||
private buildProsthesisGroupsFromTasks(
|
||||
tasks: Array<{ prosthesisTypeCode: string; teeth: Prisma.JsonValue }>,
|
||||
): Array<{ prosthesisTypeCode: string; teeth: string[] }> {
|
||||
const prosthesisByCode = new Map<string, string[]>();
|
||||
tasks: Array<{
|
||||
prosthesisTypeCode: string;
|
||||
teeth: Prisma.JsonValue;
|
||||
selectionGroupId?: string;
|
||||
}>,
|
||||
): Array<{
|
||||
prosthesisTypeCode: string;
|
||||
teeth: string[];
|
||||
connected?: boolean;
|
||||
selectionGroupId?: string;
|
||||
}> {
|
||||
const prosthesisByGroup = new Map<
|
||||
string,
|
||||
{ prosthesisTypeCode: string; teeth: string[]; selectionGroupId: string }
|
||||
>();
|
||||
|
||||
for (const task of tasks) {
|
||||
if (!task.prosthesisTypeCode) continue;
|
||||
const selectionGroupId = task.selectionGroupId ?? '';
|
||||
const key = `${selectionGroupId}::${task.prosthesisTypeCode}`;
|
||||
const teeth = normalizeTaskTeeth(task.teeth);
|
||||
const list = prosthesisByCode.get(task.prosthesisTypeCode) ?? [];
|
||||
list.push(...teeth);
|
||||
prosthesisByCode.set(task.prosthesisTypeCode, list);
|
||||
const entry = prosthesisByGroup.get(key) ?? {
|
||||
prosthesisTypeCode: task.prosthesisTypeCode,
|
||||
teeth: [],
|
||||
selectionGroupId,
|
||||
};
|
||||
entry.teeth.push(...teeth);
|
||||
prosthesisByGroup.set(key, entry);
|
||||
}
|
||||
|
||||
return [...prosthesisByCode.entries()]
|
||||
.map(([prosthesisTypeCode, teeth]) => ({
|
||||
prosthesisTypeCode,
|
||||
teeth: [...new Set(teeth)].sort((a, b) =>
|
||||
return [...prosthesisByGroup.values()]
|
||||
.map((group) => ({
|
||||
prosthesisTypeCode: group.prosthesisTypeCode,
|
||||
teeth: [...new Set(group.teeth)].sort((a, b) =>
|
||||
a.localeCompare(b, undefined, { numeric: true }),
|
||||
),
|
||||
selectionGroupId: group.selectionGroupId || undefined,
|
||||
connected: Boolean(group.selectionGroupId) && [...new Set(group.teeth)].length > 1,
|
||||
}))
|
||||
.sort((a, b) => a.prosthesisTypeCode.localeCompare(b.prosthesisTypeCode));
|
||||
}
|
||||
@@ -694,12 +714,14 @@ export class CasesService {
|
||||
treatmentType: string;
|
||||
prosthesisTypeCode: string;
|
||||
prosthesisTypeLabel: string;
|
||||
selectionGroupId: string;
|
||||
tasks: ReturnType<CasesService['mapTask']>[];
|
||||
}
|
||||
>();
|
||||
|
||||
for (const task of tasks) {
|
||||
const key = `${task.treatmentDetailId}:${task.prosthesisTypeCode}`;
|
||||
const selectionGroupId = task.selectionGroupId ?? '';
|
||||
const key = `${task.treatmentDetailId}:${selectionGroupId}:${task.prosthesisTypeCode}`;
|
||||
const entry = groups.get(key) ?? {
|
||||
treatmentDetailId: task.treatmentDetailId,
|
||||
teeth: normalizeTaskTeeth(task.teeth),
|
||||
@@ -707,6 +729,7 @@ export class CasesService {
|
||||
prosthesisTypeCode: task.prosthesisTypeCode,
|
||||
prosthesisTypeLabel:
|
||||
prosthesisLabels.get(task.prosthesisTypeCode) ?? task.prosthesisTypeCode,
|
||||
selectionGroupId,
|
||||
tasks: [],
|
||||
};
|
||||
entry.tasks.push(this.mapTask(task, prosthesisLabels));
|
||||
|
||||
Reference in New Issue
Block a user