From a26bbe6e45ba19007ffddeeb86b10a62c777dd51 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 26 Jul 2025 12:02:39 +0200 Subject: [PATCH] enhance: provide count of used instances --- src/entity/unit/equipment/equipmentType.ts | 3 ++- src/entity/unit/vehicle/vehicleType.ts | 3 ++- src/entity/unit/wearable/wearableType.ts | 3 ++- src/factory/admin/unit/equipment/equipmentType.ts | 1 + src/factory/admin/unit/vehicle/vehicleType.ts | 1 + src/factory/admin/unit/wearable/wearableType.ts | 1 + src/service/unit/equipment/equipmentTypeService.ts | 7 +++++-- src/service/unit/vehicle/vehicleTypeService.ts | 7 +++++-- src/service/unit/wearable/wearableTypeService.ts | 7 +++++-- src/viewmodel/admin/unit/equipment/equipmentType.models.ts | 3 ++- src/viewmodel/admin/unit/vehicle/vehicleType.models.ts | 3 ++- src/viewmodel/admin/unit/wearable/wearableType.models.ts | 3 ++- 12 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/entity/unit/equipment/equipmentType.ts b/src/entity/unit/equipment/equipmentType.ts index 40c363b..70dd73b 100644 --- a/src/entity/unit/equipment/equipmentType.ts +++ b/src/entity/unit/equipment/equipmentType.ts @@ -19,5 +19,6 @@ export class equipmentType { @OneToMany(() => inspectionPlan, (ip) => ip.equipmentType, { cascade: ["insert"] }) inspectionPlans: inspectionPlan[]; - equipmentCount: number; + equipmentCount?: number; + equipmentCountUsed?: number; } diff --git a/src/entity/unit/vehicle/vehicleType.ts b/src/entity/unit/vehicle/vehicleType.ts index 2ed071a..1ba8128 100644 --- a/src/entity/unit/vehicle/vehicleType.ts +++ b/src/entity/unit/vehicle/vehicleType.ts @@ -19,5 +19,6 @@ export class vehicleType { @OneToMany(() => inspectionPlan, (ip) => ip.vehicleType, { cascade: ["insert"] }) inspectionPlans: inspectionPlan[]; - vehicleCount: number; + vehicleCount?: number; + vehicleCountUsed?: number; } diff --git a/src/entity/unit/wearable/wearableType.ts b/src/entity/unit/wearable/wearableType.ts index a7d7538..ca2ceb0 100644 --- a/src/entity/unit/wearable/wearableType.ts +++ b/src/entity/unit/wearable/wearableType.ts @@ -19,5 +19,6 @@ export class wearableType { @OneToMany(() => inspectionPlan, (ip) => ip.wearableType, { cascade: ["insert"] }) inspectionPlans: inspectionPlan[]; - wearableCount: number; + wearableCount?: number; + wearableCountUsed?: number; } diff --git a/src/factory/admin/unit/equipment/equipmentType.ts b/src/factory/admin/unit/equipment/equipmentType.ts index 6906215..56d9d9c 100644 --- a/src/factory/admin/unit/equipment/equipmentType.ts +++ b/src/factory/admin/unit/equipment/equipmentType.ts @@ -13,6 +13,7 @@ export default abstract class EquipmentTypeFactory { type: record.type, description: record.description, equipmentCount: record.equipmentCount, + equipmentCountUsed: record.equipmentCountUsed, }; } diff --git a/src/factory/admin/unit/vehicle/vehicleType.ts b/src/factory/admin/unit/vehicle/vehicleType.ts index b282b79..73320bc 100644 --- a/src/factory/admin/unit/vehicle/vehicleType.ts +++ b/src/factory/admin/unit/vehicle/vehicleType.ts @@ -13,6 +13,7 @@ export default abstract class VehicleTypeFactory { type: record.type, description: record.description, vehicleCount: record.vehicleCount, + vehicleCountUsed: record.vehicleCountUsed, }; } diff --git a/src/factory/admin/unit/wearable/wearableType.ts b/src/factory/admin/unit/wearable/wearableType.ts index 89c1066..6877241 100644 --- a/src/factory/admin/unit/wearable/wearableType.ts +++ b/src/factory/admin/unit/wearable/wearableType.ts @@ -13,6 +13,7 @@ export default abstract class WearableTypeFactory { type: record.type, description: record.description, wearableCount: record.wearableCount, + wearableCountUsed: record.wearableCountUsed, }; } diff --git a/src/service/unit/equipment/equipmentTypeService.ts b/src/service/unit/equipment/equipmentTypeService.ts index 6fa4bfd..bbc4b02 100644 --- a/src/service/unit/equipment/equipmentTypeService.ts +++ b/src/service/unit/equipment/equipmentTypeService.ts @@ -1,4 +1,4 @@ -import { Like, In } from "typeorm"; +import { Like, IsNull } from "typeorm"; import { dataSource } from "../../../data-source"; import { equipmentType } from "../../../entity/unit/equipment/equipmentType"; import DatabaseActionException from "../../../exceptions/databaseActionException"; @@ -22,7 +22,10 @@ export default abstract class EquipmentTypeService { let query = dataSource .getRepository(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 != "") { query = query.where({ diff --git a/src/service/unit/vehicle/vehicleTypeService.ts b/src/service/unit/vehicle/vehicleTypeService.ts index c1aa7dd..70d9124 100644 --- a/src/service/unit/vehicle/vehicleTypeService.ts +++ b/src/service/unit/vehicle/vehicleTypeService.ts @@ -1,4 +1,4 @@ -import { Like, In } from "typeorm"; +import { Like, In, IsNull } from "typeorm"; import { dataSource } from "../../../data-source"; import { vehicleType } from "../../../entity/unit/vehicle/vehicleType"; import DatabaseActionException from "../../../exceptions/databaseActionException"; @@ -22,7 +22,10 @@ export default abstract class VehicleTypeService { let query = dataSource .getRepository(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 != "") { query = query.where({ diff --git a/src/service/unit/wearable/wearableTypeService.ts b/src/service/unit/wearable/wearableTypeService.ts index e699a2f..82095b2 100644 --- a/src/service/unit/wearable/wearableTypeService.ts +++ b/src/service/unit/wearable/wearableTypeService.ts @@ -1,4 +1,4 @@ -import { In, Like } from "typeorm"; +import { In, IsNull, Like } from "typeorm"; import { dataSource } from "../../../data-source"; import { wearableType } from "../../../entity/unit/wearable/wearableType"; import DatabaseActionException from "../../../exceptions/databaseActionException"; @@ -22,7 +22,10 @@ export default abstract class WearableTypeService { let query = dataSource .getRepository(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 != "") { query = query.where({ diff --git a/src/viewmodel/admin/unit/equipment/equipmentType.models.ts b/src/viewmodel/admin/unit/equipment/equipmentType.models.ts index b7a1648..5a968fe 100644 --- a/src/viewmodel/admin/unit/equipment/equipmentType.models.ts +++ b/src/viewmodel/admin/unit/equipment/equipmentType.models.ts @@ -2,5 +2,6 @@ export interface EquipmentTypeViewModel { id: string; type: string; description: string; - equipmentCount: number; + equipmentCount?: number; + equipmentCountUsed?: number; } diff --git a/src/viewmodel/admin/unit/vehicle/vehicleType.models.ts b/src/viewmodel/admin/unit/vehicle/vehicleType.models.ts index a005853..8123f7e 100644 --- a/src/viewmodel/admin/unit/vehicle/vehicleType.models.ts +++ b/src/viewmodel/admin/unit/vehicle/vehicleType.models.ts @@ -2,5 +2,6 @@ export interface VehicleTypeViewModel { id: string; type: string; description: string; - vehicleCount: number; + vehicleCount?: number; + vehicleCountUsed?: number; } diff --git a/src/viewmodel/admin/unit/wearable/wearableType.models.ts b/src/viewmodel/admin/unit/wearable/wearableType.models.ts index 0c15a26..2ab5ab0 100644 --- a/src/viewmodel/admin/unit/wearable/wearableType.models.ts +++ b/src/viewmodel/admin/unit/wearable/wearableType.models.ts @@ -2,5 +2,6 @@ export interface WearableTypeViewModel { id: string; type: string; description: string; - wearableCount: number; + wearableCount?: number; + wearableCountUsed?: number; }