forked from jappel/leistungsbilanz-ts
Add Revit circuit list object feed
This commit is contained in:
parent
a69b7b603f
commit
74bea1a3c9
11 changed files with 287 additions and 0 deletions
|
|
@ -0,0 +1,88 @@
|
|||
import type {
|
||||
ExternalModelStateSnapshot,
|
||||
} from "../domain/external-model-contracts.js";
|
||||
|
||||
export interface ExternalCircuitListObjectDto {
|
||||
id: string;
|
||||
ifcGuid: string;
|
||||
selectionMarker: string;
|
||||
familyAndType: string;
|
||||
sourceCircuitIdentifier: string;
|
||||
displayName: string | null;
|
||||
category: string | null;
|
||||
connectionKind: string | null;
|
||||
effectiveQuantity: number;
|
||||
powerPerUnitW: number | null;
|
||||
sourceRoomNumber: string;
|
||||
sourceRoomName: string;
|
||||
roomId: string | null;
|
||||
linkedProjectDeviceId: string | null;
|
||||
circuitDeviceRowId: string | null;
|
||||
presenceStatus: "present" | "missing";
|
||||
}
|
||||
|
||||
export interface ExternalCircuitListObjectsDto {
|
||||
sourceName: string | null;
|
||||
objectCount: number;
|
||||
unassignedObjectCount: number;
|
||||
objects: ExternalCircuitListObjectDto[];
|
||||
}
|
||||
|
||||
export function createExternalCircuitListObjects(input: {
|
||||
state: ExternalModelStateSnapshot;
|
||||
distributionBoardId: string;
|
||||
}): ExternalCircuitListObjectsDto {
|
||||
const mappingById = new Map(
|
||||
input.state.roomMappings.map((mapping) => [mapping.id, mapping])
|
||||
);
|
||||
const objects = input.state.objects
|
||||
.filter((object) => object.distributionBoardId === input.distributionBoardId)
|
||||
.map((object) => {
|
||||
const mapping = object.externalRoomMappingId === null
|
||||
? null
|
||||
: mappingById.get(object.externalRoomMappingId) ?? null;
|
||||
return {
|
||||
id: object.id,
|
||||
ifcGuid: object.ifcGuid,
|
||||
selectionMarker: object.acceptedSourceValues.selectionMarker,
|
||||
familyAndType: object.acceptedSourceValues.familyAndType,
|
||||
sourceCircuitIdentifier: object.acceptedSourceValues.circuitIdentifier,
|
||||
displayName: object.planningValues.displayName,
|
||||
category: object.planningValues.category,
|
||||
connectionKind: object.planningValues.connectionKind,
|
||||
effectiveQuantity: object.planningValues.effectiveQuantity,
|
||||
powerPerUnitW: object.planningValues.powerPerUnitW,
|
||||
sourceRoomNumber:
|
||||
mapping?.sourceRoomNumber ?? object.acceptedSourceValues.roomNumber,
|
||||
sourceRoomName:
|
||||
mapping?.sourceRoomName ?? object.acceptedSourceValues.roomName,
|
||||
roomId: mapping?.roomId ?? null,
|
||||
linkedProjectDeviceId: object.linkedProjectDeviceId,
|
||||
circuitDeviceRowId: object.circuitDeviceRowId,
|
||||
presenceStatus: object.presenceStatus,
|
||||
} satisfies ExternalCircuitListObjectDto;
|
||||
})
|
||||
.sort(compareExternalObjects);
|
||||
return {
|
||||
sourceName: input.state.source?.name ?? null,
|
||||
objectCount: objects.length,
|
||||
unassignedObjectCount: objects.filter(
|
||||
(object) => object.circuitDeviceRowId === null
|
||||
).length,
|
||||
objects,
|
||||
};
|
||||
}
|
||||
|
||||
function compareExternalObjects(
|
||||
left: ExternalCircuitListObjectDto,
|
||||
right: ExternalCircuitListObjectDto
|
||||
) {
|
||||
const assignmentOrder = Number(left.circuitDeviceRowId !== null) -
|
||||
Number(right.circuitDeviceRowId !== null);
|
||||
if (assignmentOrder !== 0) return assignmentOrder;
|
||||
return left.sourceRoomNumber.localeCompare(right.sourceRoomNumber, "de", {
|
||||
numeric: true,
|
||||
}) || left.selectionMarker.localeCompare(right.selectionMarker, "de", {
|
||||
numeric: true,
|
||||
}) || left.ifcGuid.localeCompare(right.ifcGuid);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue