Add external row quantity foundation

This commit is contained in:
2026-08-02 18:26:22 +02:00
parent bc2bc7ece5
commit dac19b093c
30 changed files with 2750 additions and 22 deletions
@@ -82,6 +82,14 @@ export class CircuitDeviceRowProjectCommandRepository
change.value,
])
) as CircuitDeviceRowPatchInput;
const targetQuantity = patch.quantity ?? current.quantity;
const targetManualQuantity =
patch.manualQuantity ?? current.manualQuantity;
if (targetManualQuantity > targetQuantity) {
throw new Error(
"Device-row manual quantity must not exceed total quantity."
);
}
if (
input.source === "user" &&
patch.phaseType !== undefined &&
@@ -20,6 +20,7 @@ import { circuitLists } from "../schema/circuit-lists.js";
import { circuits } from "../schema/circuits.js";
import {
assertCircuitDeviceRowReferencesInProject,
toCircuitDeviceRowInsertValues,
toCircuitDeviceRowSnapshot,
} from "./circuit-device-row-structure.persistence.js";
import { executeProjectCommandTransaction } from "./project-command-transaction.persistence.js";
@@ -92,7 +93,10 @@ export class CircuitDeviceRowStructureProjectCommandRepository
throw new Error("Circuit device-row id already exists.");
}
database.insert(circuitDeviceRows).values(row).run();
database
.insert(circuitDeviceRows)
.values(toCircuitDeviceRowInsertValues(row))
.run();
const circuitUpdate = database
.update(circuits)
.set({ isReserve: 0 })
@@ -61,6 +61,7 @@ export function toCircuitDeviceRowSnapshot(
roomNumberSnapshot: row.roomNumberSnapshot,
roomNameSnapshot: row.roomNameSnapshot,
quantity: row.quantity,
manualQuantity: row.manualQuantity,
powerPerUnit: row.powerPerUnit,
simultaneityFactor: row.simultaneityFactor,
cosPhi: row.cosPhi,
@@ -68,3 +69,10 @@ export function toCircuitDeviceRowSnapshot(
overriddenFields: row.overriddenFields,
};
}
export function toCircuitDeviceRowInsertValues(row: CircuitDeviceRowSnapshot) {
return {
...row,
manualQuantity: row.manualQuantity ?? row.quantity,
};
}
@@ -13,6 +13,7 @@ export interface CircuitDeviceRowUpdateInput {
roomNumberSnapshot?: string;
roomNameSnapshot?: string;
quantity: number;
manualQuantity?: number;
powerPerUnit: number;
simultaneityFactor: number;
cosPhi?: number;
@@ -34,6 +35,7 @@ export interface CircuitDeviceRowPatchInput {
roomNumberSnapshot?: string | null;
roomNameSnapshot?: string | null;
quantity?: number;
manualQuantity?: number;
powerPerUnit?: number;
simultaneityFactor?: number;
cosPhi?: number | null;
@@ -61,6 +63,7 @@ export function toCircuitDeviceRowUpdateValues(input: CircuitDeviceRowUpdateInpu
roomNumberSnapshot: input.roomNumberSnapshot ?? null,
roomNameSnapshot: input.roomNameSnapshot ?? null,
quantity: input.quantity,
manualQuantity: input.manualQuantity ?? input.quantity,
powerPerUnit: input.powerPerUnit,
simultaneityFactor: input.simultaneityFactor,
cosPhi: input.cosPhi ?? null,
@@ -90,6 +93,7 @@ export function toCircuitDeviceRowPatchValues(input: CircuitDeviceRowPatchInput)
}
if (has("roomNameSnapshot")) values.roomNameSnapshot = input.roomNameSnapshot ?? null;
if (input.quantity !== undefined) values.quantity = input.quantity;
if (input.manualQuantity !== undefined) values.manualQuantity = input.manualQuantity;
if (input.powerPerUnit !== undefined) values.powerPerUnit = input.powerPerUnit;
if (input.simultaneityFactor !== undefined) {
values.simultaneityFactor = input.simultaneityFactor;
@@ -37,6 +37,7 @@ export class CircuitDeviceRowRepository {
roomNumberSnapshot: circuitDeviceRows.roomNumberSnapshot,
roomNameSnapshot: circuitDeviceRows.roomNameSnapshot,
quantity: circuitDeviceRows.quantity,
manualQuantity: circuitDeviceRows.manualQuantity,
powerPerUnit: circuitDeviceRows.powerPerUnit,
simultaneityFactor: circuitDeviceRows.simultaneityFactor,
cosPhi: circuitDeviceRows.cosPhi,
@@ -24,6 +24,7 @@ import { circuitSections } from "../schema/circuit-sections.js";
import { circuits } from "../schema/circuits.js";
import { distributionBoardComponentProtectionDevices } from "../schema/distribution-board-component-protection-devices.js";
import { distributionBoardComponents } from "../schema/distribution-board-components.js";
import { toCircuitDeviceRowInsertValues } from "./circuit-device-row-structure.persistence.js";
import { executeProjectCommandTransaction } from "./project-command-transaction.persistence.js";
export class CircuitGroupSubtreeProjectCommandRepository
@@ -212,7 +213,10 @@ export class CircuitGroupSubtreeProjectCommandRepository
.run();
}
if (deviceRows.length > 0) {
database.insert(circuitDeviceRows).values(deviceRows).run();
database
.insert(circuitDeviceRows)
.values(deviceRows.map(toCircuitDeviceRowInsertValues))
.run();
}
}
}
@@ -22,6 +22,7 @@ import { circuitSections } from "../schema/circuit-sections.js";
import { circuits } from "../schema/circuits.js";
import {
assertCircuitDeviceRowReferencesInProject,
toCircuitDeviceRowInsertValues,
toCircuitDeviceRowSnapshot,
} from "./circuit-device-row-structure.persistence.js";
import { executeProjectCommandTransaction } from "./project-command-transaction.persistence.js";
@@ -166,7 +167,10 @@ export class CircuitStructureProjectCommandRepository
})
.run();
if (snapshot.deviceRows.length > 0) {
database.insert(circuitDeviceRows).values(snapshot.deviceRows).run();
database
.insert(circuitDeviceRows)
.values(snapshot.deviceRows.map(toCircuitDeviceRowInsertValues))
.run();
}
if (snapshot.protectionDevice) {
database
@@ -29,6 +29,7 @@ import { floors } from "../schema/floors.js";
import { projectDevices } from "../schema/project-devices.js";
import { projects } from "../schema/projects.js";
import { rooms } from "../schema/rooms.js";
import { toCircuitDeviceRowInsertValues } from "./circuit-device-row-structure.persistence.js";
import { executeProjectCommandTransaction } from "./project-command-transaction.persistence.js";
export class DistributionBoardSubtreeProjectCommandRepository
@@ -253,7 +254,10 @@ export class DistributionBoardSubtreeProjectCommandRepository
.run();
}
if (deviceRows.length > 0) {
database.insert(circuitDeviceRows).values(deviceRows).run();
database
.insert(circuitDeviceRows)
.values(deviceRows.map(toCircuitDeviceRowInsertValues))
.run();
}
}
}
@@ -192,6 +192,7 @@ export function readProjectStateSnapshot(
roomNumberSnapshot: circuitDeviceRows.roomNumberSnapshot,
roomNameSnapshot: circuitDeviceRows.roomNameSnapshot,
quantity: circuitDeviceRows.quantity,
manualQuantity: circuitDeviceRows.manualQuantity,
powerPerUnit: circuitDeviceRows.powerPerUnit,
simultaneityFactor: circuitDeviceRows.simultaneityFactor,
cosPhi: circuitDeviceRows.cosPhi,