enhance: provide count of used instances

This commit is contained in:
Julian Krauser 2025-07-26 12:02:39 +02:00
parent 2d978b960b
commit a26bbe6e45
12 changed files with 30 additions and 12 deletions

View file

@ -19,5 +19,6 @@ export class equipmentType {
@OneToMany(() => inspectionPlan, (ip) => ip.equipmentType, { cascade: ["insert"] }) @OneToMany(() => inspectionPlan, (ip) => ip.equipmentType, { cascade: ["insert"] })
inspectionPlans: inspectionPlan[]; inspectionPlans: inspectionPlan[];
equipmentCount: number; equipmentCount?: number;
equipmentCountUsed?: number;
} }

View file

@ -19,5 +19,6 @@ export class vehicleType {
@OneToMany(() => inspectionPlan, (ip) => ip.vehicleType, { cascade: ["insert"] }) @OneToMany(() => inspectionPlan, (ip) => ip.vehicleType, { cascade: ["insert"] })
inspectionPlans: inspectionPlan[]; inspectionPlans: inspectionPlan[];
vehicleCount: number; vehicleCount?: number;
vehicleCountUsed?: number;
} }

View file

@ -19,5 +19,6 @@ export class wearableType {
@OneToMany(() => inspectionPlan, (ip) => ip.wearableType, { cascade: ["insert"] }) @OneToMany(() => inspectionPlan, (ip) => ip.wearableType, { cascade: ["insert"] })
inspectionPlans: inspectionPlan[]; inspectionPlans: inspectionPlan[];
wearableCount: number; wearableCount?: number;
wearableCountUsed?: number;
} }

View file

@ -13,6 +13,7 @@ export default abstract class EquipmentTypeFactory {
type: record.type, type: record.type,
description: record.description, description: record.description,
equipmentCount: record.equipmentCount, equipmentCount: record.equipmentCount,
equipmentCountUsed: record.equipmentCountUsed,
}; };
} }

View file

@ -13,6 +13,7 @@ export default abstract class VehicleTypeFactory {
type: record.type, type: record.type,
description: record.description, description: record.description,
vehicleCount: record.vehicleCount, vehicleCount: record.vehicleCount,
vehicleCountUsed: record.vehicleCountUsed,
}; };
} }

View file

@ -13,6 +13,7 @@ export default abstract class WearableTypeFactory {
type: record.type, type: record.type,
description: record.description, description: record.description,
wearableCount: record.wearableCount, wearableCount: record.wearableCount,
wearableCountUsed: record.wearableCountUsed,
}; };
} }

View file

@ -1,4 +1,4 @@
import { Like, In } from "typeorm"; import { Like, IsNull } from "typeorm";
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { equipmentType } from "../../../entity/unit/equipment/equipmentType"; import { equipmentType } from "../../../entity/unit/equipment/equipmentType";
import DatabaseActionException from "../../../exceptions/databaseActionException"; import DatabaseActionException from "../../../exceptions/databaseActionException";
@ -22,7 +22,10 @@ export default abstract class EquipmentTypeService {
let query = dataSource let query = dataSource
.getRepository(equipmentType) .getRepository(equipmentType)
.createQueryBuilder("equipmentType") .createQueryBuilder("equipmentType")
.loadRelationCountAndMap("equipmentType.equipmentCount", "equipmentType.equipment"); .loadRelationCountAndMap("equipmentType.equipmentCount", "equipmentType.equipment", "count")
.loadRelationCountAndMap("equipmentType.equipmentCountUsed", "equipmentType.equipment", "countUsed", (qb) =>
qb.where({ decommissioned: IsNull() })
);
if (search != "") { if (search != "") {
query = query.where({ query = query.where({

View file

@ -1,4 +1,4 @@
import { Like, In } from "typeorm"; import { Like, In, IsNull } from "typeorm";
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { vehicleType } from "../../../entity/unit/vehicle/vehicleType"; import { vehicleType } from "../../../entity/unit/vehicle/vehicleType";
import DatabaseActionException from "../../../exceptions/databaseActionException"; import DatabaseActionException from "../../../exceptions/databaseActionException";
@ -22,7 +22,10 @@ export default abstract class VehicleTypeService {
let query = dataSource let query = dataSource
.getRepository(vehicleType) .getRepository(vehicleType)
.createQueryBuilder("vehicleType") .createQueryBuilder("vehicleType")
.loadRelationCountAndMap("vehicleType.vehicleCount", "vehicleType.vehicle"); .loadRelationCountAndMap("vehicleType.vehicleCount", "vehicleType.vehicle", "count")
.loadRelationCountAndMap("vehicleType.vehicleCountUsed", "vehicleType.vehicle", "countUsed", (qb) =>
qb.where({ decommissioned: IsNull() })
);
if (search != "") { if (search != "") {
query = query.where({ query = query.where({

View file

@ -1,4 +1,4 @@
import { In, Like } from "typeorm"; import { In, IsNull, Like } from "typeorm";
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { wearableType } from "../../../entity/unit/wearable/wearableType"; import { wearableType } from "../../../entity/unit/wearable/wearableType";
import DatabaseActionException from "../../../exceptions/databaseActionException"; import DatabaseActionException from "../../../exceptions/databaseActionException";
@ -22,7 +22,10 @@ export default abstract class WearableTypeService {
let query = dataSource let query = dataSource
.getRepository(wearableType) .getRepository(wearableType)
.createQueryBuilder("wearableType") .createQueryBuilder("wearableType")
.loadRelationCountAndMap("wearableType.wearableCount", "wearableType.wearable"); .loadRelationCountAndMap("wearableType.wearableCount", "wearableType.wearable", "count")
.loadRelationCountAndMap("wearableType.wearableCountUsed", "wearableType.wearable", "countUsed", (qb) =>
qb.where({ decommissioned: IsNull() })
);
if (search != "") { if (search != "") {
query = query.where({ query = query.where({

View file

@ -2,5 +2,6 @@ export interface EquipmentTypeViewModel {
id: string; id: string;
type: string; type: string;
description: string; description: string;
equipmentCount: number; equipmentCount?: number;
equipmentCountUsed?: number;
} }

View file

@ -2,5 +2,6 @@ export interface VehicleTypeViewModel {
id: string; id: string;
type: string; type: string;
description: string; description: string;
vehicleCount: number; vehicleCount?: number;
vehicleCountUsed?: number;
} }

View file

@ -2,5 +2,6 @@ export interface WearableTypeViewModel {
id: string; id: string;
type: string; type: string;
description: string; description: string;
wearableCount: number; wearableCount?: number;
wearableCountUsed?: number;
} }