Compare commits

..

No commits in common. "c4e0c4fa28fe2fb527ab736da18d98becc3998cb" and "799a7190129cb4e5d19657cf218fb7a76fe20ddb" have entirely different histories.

30 changed files with 58 additions and 939 deletions

View file

@ -1,5 +1,4 @@
export interface CreateDamageReportCommand { export interface CreateDamageReportCommand {
title: string;
description: string; description: string;
location: string; location: string;
noteByReporter: string; noteByReporter: string;
@ -16,9 +15,9 @@ export interface UpdateDamageReportCommand {
done: boolean; done: boolean;
} }
export interface UpdateDamageReportRelatedRepairCommand { export interface UpdateDamageReportRelatedMaintenanceCommand {
id: string; id: string;
repairId: string; maintenanceId: string;
} }
export interface DeleteDamageReportCommand { export interface DeleteDamageReportCommand {

View file

@ -1,4 +1,3 @@
import { EntityManager, In, UpdateResult } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { damageReport } from "../../entity/unit/damageReport"; import { damageReport } from "../../entity/unit/damageReport";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -6,9 +5,8 @@ import {
CreateDamageReportCommand, CreateDamageReportCommand,
UpdateDamageReportCommand, UpdateDamageReportCommand,
DeleteDamageReportCommand, DeleteDamageReportCommand,
UpdateDamageReportRelatedRepairCommand, UpdateDamageReportRelatedMaintenanceCommand,
} from "./damageReportCommand"; } from "./damageReportCommand";
import DamageReportService from "../../service/unit/damageReportService";
export default abstract class DamageReportCommandHandler { export default abstract class DamageReportCommandHandler {
/** /**
@ -23,7 +21,6 @@ export default abstract class DamageReportCommandHandler {
.into(damageReport) .into(damageReport)
.values({ .values({
status: "eingereicht", status: "eingereicht",
title: createDamageReport.title,
description: createDamageReport.description, description: createDamageReport.description,
location: createDamageReport.location, location: createDamageReport.location,
noteByReporter: createDamageReport.noteByReporter, noteByReporter: createDamageReport.noteByReporter,
@ -69,12 +66,14 @@ export default abstract class DamageReportCommandHandler {
* @param {UpdateDamageReportCommand} updateDamageReport * @param {UpdateDamageReportCommand} updateDamageReport
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
static async updateRelatedMaintenance(updateDamageReport: UpdateDamageReportRelatedRepairCommand): Promise<void> { static async updateRelatedMaintenance(
updateDamageReport: UpdateDamageReportRelatedMaintenanceCommand
): Promise<void> {
return await dataSource return await dataSource
.createQueryBuilder() .createQueryBuilder()
.update(damageReport) .update(damageReport)
.set({ .set({
repairId: updateDamageReport.repairId, maintenanceId: updateDamageReport.maintenanceId,
}) })
.where("id = :id", { id: updateDamageReport.id }) .where("id = :id", { id: updateDamageReport.id })
.execute() .execute()
@ -84,60 +83,6 @@ export default abstract class DamageReportCommandHandler {
}); });
} }
/**
* @description update damageReport related maintenance
* @returns {Promise<void>}
*/
static async updateRelatedMaintenanceMulti(repairId: string, reports: Array<string>): Promise<void> {
let [related] = await DamageReportService.getAllForRepair(repairId, { noLimit: true });
return await dataSource
.transaction(async (manager) => {
let added = reports.filter((id) => !related.some((r) => r.id === id));
let removed = related.map((r) => r.id).filter((id) => !reports.includes(id));
await manager
.createQueryBuilder()
.update(damageReport)
.set({
repairId: repairId,
})
.where({ id: In(added) })
.execute();
await manager
.createQueryBuilder()
.update(damageReport)
.set({
repairId: null,
})
.where({ id: In(removed) })
.execute();
})
.then(() => {})
.catch((err) => {
throw new DatabaseActionException("UPDATE", "damageReport->maintenance", err);
});
}
/**
* @description update damageReport related maintenance in transaction
* @param {UpdateDamageReportCommand} updateDamageReport
* @returns {Promise<void>}
*/
static async updateRelatedMaintenanceTransaction(
manager: EntityManager,
updateDamageReport: UpdateDamageReportRelatedRepairCommand
): Promise<UpdateResult> {
return await manager
.createQueryBuilder()
.update(damageReport)
.set({
repairId: updateDamageReport.repairId,
})
.where("id = :id", { id: updateDamageReport.id })
.execute();
}
/** /**
* @description delete damageReport * @description delete damageReport
* @param {DeleteDamageReportCommand} deleteDamageReport * @param {DeleteDamageReportCommand} deleteDamageReport

View file

@ -1,25 +0,0 @@
export interface CreateRepairCommand {
title: string;
description: string;
responsible: string;
affectedId: string;
affected: "equipment" | "vehicle" | "wearable";
reports: string[];
}
export interface UpdateRepairCommand {
id: string;
title: string;
description: string;
responsible: string;
}
export interface UpdateRepairStatusCommand {
id: string;
status: string;
done: boolean;
}
export interface DeleteRepairCommand {
id: string;
}

View file

@ -1,115 +0,0 @@
import { dataSource } from "../../data-source";
import { repair } from "../../entity/unit/repair";
import DatabaseActionException from "../../exceptions/databaseActionException";
import DamageReportCommandHandler from "./damageReportCommandHandler";
import {
CreateRepairCommand,
UpdateRepairCommand,
DeleteRepairCommand,
UpdateRepairStatusCommand,
} from "./repairCommand";
export default abstract class RepairCommandHandler {
/**
* @description create repair
* @param {CreateRepairCommand} createRepair
* @returns {Promise<string>}
*/
static async create(createRepair: CreateRepairCommand): Promise<string> {
let resultId = "";
return await dataSource
.transaction(async (manager) => {
await manager
.createQueryBuilder()
.insert()
.into(repair)
.values({
status: "in Arbeit",
title: createRepair.title,
description: createRepair.description,
responsible: createRepair.responsible,
equipmentId: createRepair.affected == "equipment" ? createRepair.affectedId : null,
vehicleId: createRepair.affected == "vehicle" ? createRepair.affectedId : null,
wearableId: createRepair.affected == "wearable" ? createRepair.affectedId : null,
})
.execute()
.then((result) => {
resultId = result.identifiers[0].id;
});
for (const report of createRepair.reports) {
await DamageReportCommandHandler.updateRelatedMaintenanceTransaction(manager, {
id: report,
repairId: resultId,
});
}
})
.then(() => {
return resultId;
})
.catch((err) => {
throw new DatabaseActionException("CREATE", "repair", err);
});
}
/**
* @description update repair
* @param {UpdateRepairCommand} updateRepair
* @returns {Promise<void>}
*/
static async update(updateRepair: UpdateRepairCommand): Promise<void> {
return await dataSource
.createQueryBuilder()
.update(repair)
.set({
title: updateRepair.title,
description: updateRepair.description,
responsible: updateRepair.responsible,
})
.where("id = :id", { id: updateRepair.id })
.execute()
.then(() => {})
.catch((err) => {
throw new DatabaseActionException("UPDATE", "repair", err);
});
}
/**
* @description update repair
* @param {UpdateRepairStatusCommand} updateRepair
* @returns {Promise<void>}
*/
static async updateStatus(updateRepair: UpdateRepairStatusCommand): Promise<void> {
return await dataSource
.createQueryBuilder()
.update(repair)
.set({
status: updateRepair.status,
finishedAt: updateRepair.done ? new Date() : null,
})
.where("id = :id", { id: updateRepair.id })
.execute()
.then(() => {})
.catch((err) => {
throw new DatabaseActionException("UPDATE", "repair", err);
});
}
/**
* @description delete repair
* @param {DeleteRepairCommand} deleteRepair
* @returns {Promise<void>}
*/
static async delete(deleteRepair: DeleteRepairCommand): Promise<void> {
return await dataSource
.createQueryBuilder()
.delete()
.from(repair)
.where("id = :id", { id: deleteRepair.id })
.execute()
.then(() => {})
.catch((err) => {
throw new DatabaseActionException("DELETE", "repair", err);
});
}
}

View file

@ -18,7 +18,7 @@ export async function getAllDamageReportsByStatus(req: Request, res: Response):
let count = parseInt((req.query.count as string) ?? "25"); let count = parseInt((req.query.count as string) ?? "25");
let noLimit = req.query.noLimit === "true"; let noLimit = req.query.noLimit === "true";
let [damageReports, total] = await DamageReportService.getAllByStatus(done, { offset, count, noLimit }); let [damageReports, total] = await DamageReportService.getAll(done, { offset, count, noLimit });
res.json({ res.json({
damageReports: DamageReportFactory.mapToBase(damageReports), damageReports: DamageReportFactory.mapToBase(damageReports),
@ -72,25 +72,6 @@ export async function getDamageReportById(req: Request, res: Response): Promise<
res.json(DamageReportFactory.mapToSingle(damageReport)); res.json(DamageReportFactory.mapToSingle(damageReport));
} }
/**
* @description get reports by Ids
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getDamageReportsByIds(req: Request, res: Response): Promise<any> {
let ids = req.body.ids as Array<string>;
let [damageReports, total] = await DamageReportService.getAll({ noLimit: true, ids });
res.json({
damageReports: DamageReportFactory.mapToBase(damageReports),
total: total,
offset: 0,
count: total,
});
}
/** /**
* @description provide uploaded image for damage report * @description provide uploaded image for damage report
* @param req {Request} Express req object * @param req {Request} Express req object
@ -113,7 +94,6 @@ export async function provideDamageReportImageUpload(req: Request, res: Response
* @returns {Promise<*>} * @returns {Promise<*>}
*/ */
export async function createDamageReport(req: Request, res: Response): Promise<any> { export async function createDamageReport(req: Request, res: Response): Promise<any> {
const title = req.body.title;
const description = req.body.description; const description = req.body.description;
const location = req.body.location; const location = req.body.location;
const note = req.body.note; const note = req.body.note;
@ -126,7 +106,6 @@ export async function createDamageReport(req: Request, res: Response): Promise<a
throw new BadRequestException("set assigned to equipment or vehicle or wearable"); throw new BadRequestException("set assigned to equipment or vehicle or wearable");
let createDamageReport: CreateDamageReportCommand = { let createDamageReport: CreateDamageReportCommand = {
title,
description, description,
location, location,
noteByReporter: note, noteByReporter: note,

View file

@ -1,168 +0,0 @@
import { Request, Response } from "express";
import RepairService from "../../../service/unit/repairService";
import RepairFactory from "../../../factory/admin/unit/repair";
import {
CreateRepairCommand,
UpdateRepairCommand,
UpdateRepairStatusCommand,
} from "../../../command/unit/repairCommand";
import RepairCommandHandler from "../../../command/unit/repairCommandHandler";
import BadRequestException from "../../../exceptions/badRequestException";
import { FileSystemHelper } from "../../../helpers/fileSystemHelper";
import { UpdateDamageReportRelatedRepairCommand } from "../../../command/unit/damageReportCommand";
import DamageReportCommandHandler from "../../../command/unit/damageReportCommandHandler";
/**
* @description get all repairs by status
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getAllRepairsByStatus(req: Request, res: Response): Promise<any> {
let done = req.query.done === "true";
let offset = parseInt((req.query.offset as string) ?? "0");
let count = parseInt((req.query.count as string) ?? "25");
let noLimit = req.query.noLimit === "true";
let [repairs, total] = await RepairService.getAll(done, { offset, count, noLimit });
res.json({
repairs: RepairFactory.mapToBase(repairs),
total: total,
offset: offset,
count: count,
});
}
/**
* @description get all repairs for related id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getAllRepairsForRelated(req: Request, res: Response): Promise<any> {
let relation = req.params.related as "vehicle" | "equipment" | "wearable";
let relationId = req.params.relatedId as string;
let offset = parseInt((req.query.offset as string) ?? "0");
let count = parseInt((req.query.count as string) ?? "25");
let noLimit = req.query.noLimit === "true";
let where;
if (relation == "equipment") {
where = { equipmentId: relationId };
} else if (relation == "vehicle") {
where = { vehicleId: relationId };
} else {
where = { wearableId: relationId };
}
let [repairs, total] = await RepairService.getAllForRelated(where, { offset, count, noLimit });
res.json({
repairs: RepairFactory.mapToBase(repairs),
total: total,
offset: offset,
count: count,
});
}
/**
* @description get repair by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getRepairById(req: Request, res: Response): Promise<any> {
const repairId = req.params.id;
let repair = await RepairService.getById(repairId);
res.json(RepairFactory.mapToSingle(repair));
}
/**
* @description create repair
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function createRepair(req: Request, res: Response): Promise<any> {
const title = req.body.title;
const description = req.body.description;
const responsible = req.body.responsible;
const reports = req.body.reports;
const affectedId = req.body.affectedId;
const affected = req.body.affected;
if (affected != "equipment" && affected != "vehicle" && affected != "wearable")
throw new BadRequestException("set assigned to equipment or vehicle or wearable");
let createRepair: CreateRepairCommand = {
title,
description,
affectedId,
affected,
responsible,
reports,
};
let repairId = await RepairCommandHandler.create(createRepair);
res.status(200).send(repairId);
}
/**
* @description update repair by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function updateRepairById(req: Request, res: Response): Promise<any> {
const repairId = req.params.id;
const title = req.body.title;
const description = req.body.description;
const responsible = req.body.responsible;
let updateRepair: UpdateRepairCommand = {
id: repairId,
title,
description,
responsible,
};
await RepairCommandHandler.update(updateRepair);
res.sendStatus(204);
}
/**
* @description update repair by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function updateRepairReportsById(req: Request, res: Response): Promise<any> {
const repairId = req.params.id;
const reports = req.body.reports as Array<string>;
await DamageReportCommandHandler.updateRelatedMaintenanceMulti(repairId, reports);
res.sendStatus(204);
}
/**
* @description update repair by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function updateRepairStatusById(req: Request, res: Response): Promise<any> {
const repairId = req.params.id;
const status = req.body.status;
const done = req.body.done;
let updateRepair: UpdateRepairStatusCommand = {
id: repairId,
status,
done,
};
await RepairCommandHandler.updateStatus(updateRepair);
res.sendStatus(204);
}

View file

@ -120,7 +120,6 @@ export async function createDamageReport(req: Request, res: Response): Promise<a
| MinifiedEquipmentViewModel | MinifiedEquipmentViewModel
| MinifiedVehicleViewModel | MinifiedVehicleViewModel
| MinifiedWearableViewModel; | MinifiedWearableViewModel;
const title = req.body.title;
const description = req.body.description; const description = req.body.description;
const location = req.body.location; const location = req.body.location;
const note = req.body.note; const note = req.body.note;
@ -128,7 +127,6 @@ export async function createDamageReport(req: Request, res: Response): Promise<a
const images = req.files as Express.Multer.File[]; const images = req.files as Express.Multer.File[];
let createDamageReport: CreateDamageReportCommand = { let createDamageReport: CreateDamageReportCommand = {
title: title,
description: description, description: description,
location: location, location: location,
noteByReporter: note, noteByReporter: note,

View file

@ -65,8 +65,7 @@ import { maintenance } from "./entity/unit/maintenance";
import { BackupAndResetDatabase1749296262915 } from "./migrations/1749296262915-BackupAndResetDatabase"; import { BackupAndResetDatabase1749296262915 } from "./migrations/1749296262915-BackupAndResetDatabase";
import { CreateSchema1749296280721 } from "./migrations/1749296280721-CreateSchema"; import { CreateSchema1749296280721 } from "./migrations/1749296280721-CreateSchema";
import { UpdateNewsletterQueryRelation1752502069178 } from "./migrations/1752502069178-updateNewsletterQueryRelation"; import { UpdateNewsletterQueryRelation1752502069178 } from "./migrations/1752502069178-updateNewsletterQueryRelation";
import { UnitBase1752914551204 } from "./migrations/1752914551204-UnitBase"; import { UnitBase1749361405703 } from "./migrations/1749361405703-UnitBase";
import { repair } from "./entity/unit/repair";
configCheck(); configCheck();
@ -132,7 +131,6 @@ const dataSource = new DataSource({
wearable, wearable,
damageReport, damageReport,
maintenance, maintenance,
repair,
inspectionPlan, inspectionPlan,
inspectionVersionedPlan, inspectionVersionedPlan,
inspectionPoint, inspectionPoint,
@ -142,8 +140,8 @@ const dataSource = new DataSource({
migrations: [ migrations: [
BackupAndResetDatabase1749296262915, BackupAndResetDatabase1749296262915,
CreateSchema1749296280721, CreateSchema1749296280721,
UnitBase1752914551204,
UpdateNewsletterQueryRelation1752502069178, UpdateNewsletterQueryRelation1752502069178,
UnitBase1749361405703,
], ],
migrationsRun: true, migrationsRun: true,
migrationsTransactionMode: "each", migrationsTransactionMode: "each",

View file

@ -2,7 +2,7 @@ import { Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn } f
import { equipment } from "./equipment/equipment"; import { equipment } from "./equipment/equipment";
import { wearable } from "./wearable/wearable"; import { wearable } from "./wearable/wearable";
import { vehicle } from "./vehicle/vehicle"; import { vehicle } from "./vehicle/vehicle";
import { repair } from "./repair"; import { maintenance } from "./maintenance";
@Entity() @Entity()
export class damageReport { export class damageReport {
@ -18,9 +18,6 @@ export class damageReport {
@Column({ type: "boolean", default: false }) @Column({ type: "boolean", default: false })
done: boolean; done: boolean;
@Column({ type: "varchar", length: 255 })
title: string;
@Column({ type: "text" }) @Column({ type: "text" })
description: string; description: string;
@ -37,9 +34,9 @@ export class damageReport {
type: "text", type: "text",
transformer: { transformer: {
from(value: string): Array<string> { from(value: string): Array<string> {
return (value ?? "").split(",").filter((i) => !!i); return value.split(",").filter((i) => !!i);
}, },
to(value: Array<string> = []): string { to(value: Array<string>): string {
return value.join(","); return value.join(",");
}, },
}, },
@ -59,7 +56,7 @@ export class damageReport {
wearableId?: string; wearableId?: string;
@Column({ nullable: true, default: null }) @Column({ nullable: true, default: null })
repairId?: string; maintenanceId?: string;
@ManyToOne(() => equipment, (e) => e.reports, { @ManyToOne(() => equipment, (e) => e.reports, {
nullable: true, nullable: true,
@ -82,10 +79,10 @@ export class damageReport {
}) })
wearable?: wearable; wearable?: wearable;
@ManyToOne(() => repair, (m) => m.reports, { @ManyToOne(() => maintenance, (m) => m.reports, {
nullable: true, nullable: true,
onDelete: "SET NULL", onDelete: "SET NULL",
onUpdate: "RESTRICT", onUpdate: "RESTRICT",
}) })
repair?: repair; maintenance?: maintenance;
} }

View file

@ -4,7 +4,6 @@ import { equipmentType } from "./equipmentType";
import { damageReport } from "../damageReport"; import { damageReport } from "../damageReport";
import { inspection } from "../inspection/inspection"; import { inspection } from "../inspection/inspection";
import { maintenance } from "../maintenance"; import { maintenance } from "../maintenance";
import { repair } from "../repair";
@Entity() @Entity()
export class equipment { export class equipment {
@ -39,9 +38,6 @@ export class equipment {
@OneToMany(() => damageReport, (d) => d.equipment, { cascade: ["insert"] }) @OneToMany(() => damageReport, (d) => d.equipment, { cascade: ["insert"] })
reports: damageReport[]; reports: damageReport[];
@OneToMany(() => repair, (d) => d.equipment, { cascade: ["insert"] })
repairs: repair[];
@OneToMany(() => maintenance, (m) => m.equipment, { cascade: ["insert"] }) @OneToMany(() => maintenance, (m) => m.equipment, { cascade: ["insert"] })
maintenances: maintenance[]; maintenances: maintenance[];

View file

@ -1,9 +1,8 @@
import { Column, ColumnType, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; import { Column, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { equipment } from "./equipment/equipment"; import { equipment } from "./equipment/equipment";
import { wearable } from "./wearable/wearable"; import { wearable } from "./wearable/wearable";
import { vehicle } from "./vehicle/vehicle"; import { vehicle } from "./vehicle/vehicle";
import { damageReport } from "./damageReport"; import { damageReport } from "./damageReport";
import { getTypeByORM } from "../../migrations/ormHelper";
@Entity() @Entity()
export class maintenance { export class maintenance {
@ -13,12 +12,12 @@ export class maintenance {
@CreateDateColumn() @CreateDateColumn()
createdAt: Date; createdAt: Date;
@Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true, default: null })
finishedAt?: Date;
@Column({ type: "varchar", length: 255 }) @Column({ type: "varchar", length: 255 })
status: string; status: string;
@Column({ type: "boolean", default: false })
done: boolean;
@Column({ type: "text" }) @Column({ type: "text" })
description: string; description: string;
@ -51,4 +50,7 @@ export class maintenance {
onUpdate: "RESTRICT", onUpdate: "RESTRICT",
}) })
wearable?: wearable; wearable?: wearable;
@OneToMany(() => damageReport, (dr) => dr.maintenance)
reports: damageReport[];
} }

View file

@ -1,79 +0,0 @@
import { Column, ColumnType, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { equipment } from "./equipment/equipment";
import { wearable } from "./wearable/wearable";
import { vehicle } from "./vehicle/vehicle";
import { damageReport } from "./damageReport";
import { getTypeByORM } from "../../migrations/ormHelper";
@Entity()
export class repair {
@PrimaryGeneratedColumn("uuid")
id: string;
@CreateDateColumn()
createdAt: Date;
@Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true, default: null })
finishedAt?: Date;
@Column({ type: "varchar", length: 255 })
status: string;
@Column({ type: "varchar", length: 255 })
responsible: string;
@Column({ type: "varchar", length: 255 })
title: string;
@Column({ type: "text" })
description: string;
@Column({
type: "text",
transformer: {
from(value: string): Array<string> {
return (value ?? "").split(",").filter((i) => !!i);
},
to(value: Array<string> = []): string {
return value.join(",");
},
},
})
images: string[];
@Column({ type: "varchar", length: 255, nullable: true, default: null })
reportDocument?: string;
@Column({ nullable: true, default: null })
equipmentId?: string;
@Column({ nullable: true, default: null })
vehicleId?: string;
@Column({ nullable: true, default: null })
wearableId?: string;
@ManyToOne(() => equipment, (e) => e.maintenances, {
nullable: true,
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
equipment?: equipment;
@ManyToOne(() => vehicle, (v) => v.maintenances, {
nullable: true,
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
vehicle?: vehicle;
@ManyToOne(() => wearable, (w) => w.maintenances, {
nullable: true,
onDelete: "CASCADE",
onUpdate: "RESTRICT",
})
wearable?: wearable;
@OneToMany(() => damageReport, (dr) => dr.repair)
reports: damageReport[];
}

View file

@ -4,7 +4,6 @@ import { vehicleType } from "./vehicleType";
import { damageReport } from "../damageReport"; import { damageReport } from "../damageReport";
import { inspection } from "../inspection/inspection"; import { inspection } from "../inspection/inspection";
import { maintenance } from "../maintenance"; import { maintenance } from "../maintenance";
import { repair } from "../repair";
@Entity() @Entity()
export class vehicle { export class vehicle {
@ -39,9 +38,6 @@ export class vehicle {
@OneToMany(() => damageReport, (d) => d.vehicle, { cascade: ["insert"] }) @OneToMany(() => damageReport, (d) => d.vehicle, { cascade: ["insert"] })
reports: damageReport[]; reports: damageReport[];
@OneToMany(() => repair, (d) => d.vehicle, { cascade: ["insert"] })
repairs: repair[];
@OneToMany(() => maintenance, (m) => m.vehicle, { cascade: ["insert"] }) @OneToMany(() => maintenance, (m) => m.vehicle, { cascade: ["insert"] })
maintenances: maintenance[]; maintenances: maintenance[];

View file

@ -5,7 +5,6 @@ import { damageReport } from "../damageReport";
import { member } from "../../club/member/member"; import { member } from "../../club/member/member";
import { inspection } from "../inspection/inspection"; import { inspection } from "../inspection/inspection";
import { maintenance } from "../maintenance"; import { maintenance } from "../maintenance";
import { repair } from "../repair";
@Entity() @Entity()
export class wearable { export class wearable {
@ -50,9 +49,6 @@ export class wearable {
@OneToMany(() => damageReport, (d) => d.wearable, { cascade: ["insert"] }) @OneToMany(() => damageReport, (d) => d.wearable, { cascade: ["insert"] })
reports: damageReport[]; reports: damageReport[];
@OneToMany(() => repair, (d) => d.wearable, { cascade: ["insert"] })
repairs: repair[];
@OneToMany(() => maintenance, (m) => m.wearable, { cascade: ["insert"] }) @OneToMany(() => maintenance, (m) => m.wearable, { cascade: ["insert"] })
maintenances: maintenance[]; maintenances: maintenance[];

View file

@ -2,7 +2,6 @@ import { damageReport } from "../../../entity/unit/damageReport";
import { DamageReportAssigned, DamageReportViewModel } from "../../../viewmodel/admin/unit/damageReport.models"; import { DamageReportAssigned, DamageReportViewModel } from "../../../viewmodel/admin/unit/damageReport.models";
import EquipmentFactory from "./equipment/equipment"; import EquipmentFactory from "./equipment/equipment";
import MaintenanceFactory from "./maintenance"; import MaintenanceFactory from "./maintenance";
import RepairFactory from "./repair";
import VehicleFactory from "./vehicle/vehicle"; import VehicleFactory from "./vehicle/vehicle";
import WearableFactory from "./wearable/wearable"; import WearableFactory from "./wearable/wearable";
@ -18,19 +17,19 @@ export default abstract class DamageReportFactory {
assigned = { assigned = {
relatedId: record.equipmentId, relatedId: record.equipmentId,
assigned: "equipment", assigned: "equipment",
related: record.equipment ? EquipmentFactory.mapToSingle(record.equipment) : undefined, related: EquipmentFactory.mapToSingle(record.equipment),
}; };
} else if (record?.vehicleId) { } else if (record?.vehicleId) {
assigned = { assigned = {
relatedId: record.vehicleId, relatedId: record.vehicleId,
assigned: "vehicle", assigned: "vehicle",
related: record.vehicle ? VehicleFactory.mapToSingle(record.vehicle) : undefined, related: VehicleFactory.mapToSingle(record.vehicle),
}; };
} else if (record?.wearableId) { } else if (record?.wearableId) {
assigned = { assigned = {
relatedId: record.wearableId, relatedId: record.wearableId,
assigned: "wearable", assigned: "wearable",
related: record.wearable ? WearableFactory.mapToSingle(record.wearable) : undefined, related: WearableFactory.mapToSingle(record.wearable),
}; };
} else { } else {
assigned = { assigned = {
@ -45,7 +44,6 @@ export default abstract class DamageReportFactory {
reportedAt: record.reportedAt, reportedAt: record.reportedAt,
status: record.status, status: record.status,
done: record.done, done: record.done,
title: record.title,
description: record.description, description: record.description,
location: record.location, location: record.location,
noteByReporter: record.noteByReporter, noteByReporter: record.noteByReporter,
@ -53,7 +51,7 @@ export default abstract class DamageReportFactory {
images: record.images, images: record.images,
reportedBy: record?.reportedBy, reportedBy: record?.reportedBy,
...assigned, ...assigned,
repair: record.repair ? RepairFactory.mapToSingle(record.repair) : null, maintenance: record.maintenance ? MaintenanceFactory.mapToSingle(record.maintenance) : null,
}; };
} }

View file

@ -37,8 +37,10 @@ export default abstract class MaintenanceFactory {
id: record.id, id: record.id,
createdAt: record.createdAt, createdAt: record.createdAt,
status: record.status, status: record.status,
done: record.done,
description: record.description, description: record.description,
...assigned, ...assigned,
reports: record.reports ? DamageReportFactory.mapToBase(record.reports) : [],
}; };
} }

View file

@ -1,65 +0,0 @@
import { repair } from "../../../entity/unit/repair";
import { RepairAssigned, RepairViewModel } from "../../../viewmodel/admin/unit/repair.models";
import DamageReportFactory from "./damageReport";
import EquipmentFactory from "./equipment/equipment";
import VehicleFactory from "./vehicle/vehicle";
import WearableFactory from "./wearable/wearable";
export default abstract class RepairFactory {
/**
* @description map record to repair
* @param {repair} record
* @returns {RepairViewModel}
*/
public static mapToSingle(record: repair): RepairViewModel {
let assigned: RepairAssigned;
if (record?.equipmentId) {
assigned = {
relatedId: record.equipmentId,
assigned: "equipment",
related: record.equipment ? EquipmentFactory.mapToSingle(record.equipment) : undefined,
};
} else if (record?.vehicleId) {
assigned = {
relatedId: record.vehicleId,
assigned: "vehicle",
related: record.vehicle ? VehicleFactory.mapToSingle(record.vehicle) : undefined,
};
} else if (record?.wearableId) {
assigned = {
relatedId: record.wearableId,
assigned: "wearable",
related: record.wearable ? WearableFactory.mapToSingle(record.wearable) : undefined,
};
} else {
assigned = {
relatedId: undefined,
assigned: undefined,
related: undefined,
};
}
return {
id: record.id,
createdAt: record.createdAt,
finishedAt: record.finishedAt,
status: record.status,
responsible: record.responsible,
title: record.title,
description: record.description,
images: record.images,
reportDocument: record.reportDocument,
reports: record.reports ? DamageReportFactory.mapToBase(record.reports) : [],
...assigned,
};
}
/**
* @description map records to repair
* @param {Array<repair>} records
* @returns {Array<RepairViewModel>}
*/
public static mapToBase(records: Array<repair>): Array<RepairViewModel> {
return records.map((r) => this.mapToSingle(r));
}
}

View file

@ -516,7 +516,6 @@ export default abstract class BackupHelper {
wearable: await dataSource.getRepository("wearable").find(), wearable: await dataSource.getRepository("wearable").find(),
maintenance: await dataSource.getRepository("maintenance").find(), maintenance: await dataSource.getRepository("maintenance").find(),
damage_report: await dataSource.getRepository("damage_report").find(), damage_report: await dataSource.getRepository("damage_report").find(),
repair: await dataSource.getRepository("repair").find(),
inspection: await dataSource.getRepository("inspection").find(), inspection: await dataSource.getRepository("inspection").find(),
inspection_point_result: await dataSource.getRepository("inspection_point_result").find(), inspection_point_result: await dataSource.getRepository("inspection_point_result").find(),
}; };
@ -904,26 +903,23 @@ export default abstract class BackupHelper {
await this.transactionManager.getRepository("setting").save(data); await this.transactionManager.getRepository("setting").save(data);
} }
private static async setUnitBase(data: { [key: string]: Array<any> }): Promise<void> { private static async setUnitBase(data: { [key: string]: Array<any> }): Promise<void> {
await this.transactionManager.getRepository("equipment_type").save(data["equipment_type"] ?? []); await this.transactionManager.getRepository("equipment_type").save(data["equipment_type"]);
await this.transactionManager.getRepository("vehicle_type").save(data["vehicle_type"] ?? []); await this.transactionManager.getRepository("vehicle_type").save(data["vehicle_type"]);
await this.transactionManager.getRepository("wearable_type").save(data["wearable_type"] ?? []); await this.transactionManager.getRepository("wearable_type").save(data["wearable_type"]);
await this.transactionManager.getRepository("inspection_plan").save(data["inspection_plan"] ?? []); await this.transactionManager.getRepository("inspection_plan").save(data["inspection_plan"]);
await this.transactionManager await this.transactionManager.getRepository("inspection_versioned_plan").save(data["inspection_versioned_plan"]);
.getRepository("inspection_versioned_plan") await this.transactionManager.getRepository("inspection_point").save(data["inspection_point"]);
.save(data["inspection_versioned_plan"] ?? []);
await this.transactionManager.getRepository("inspection_point").save(data["inspection_point"] ?? []);
} }
private static async setUnitInstances(data: { [key: string]: Array<any> }): Promise<void> { private static async setUnitInstances(data: { [key: string]: Array<any> }): Promise<void> {
await this.transactionManager.getRepository("equipment").save(data["equipment"] ?? []); await this.transactionManager.getRepository("equipment").save(data["equipment"]);
await this.transactionManager.getRepository("vehicle").save(data["vehicle"] ?? []); await this.transactionManager.getRepository("vehicle").save(data["vehicle"]);
await this.transactionManager.getRepository("wearable").save(data["wearable"] ?? []); await this.transactionManager.getRepository("wearable").save(data["wearable"]);
await this.transactionManager.getRepository("repair").save(data["repair"] ?? []); await this.transactionManager.getRepository("damage_report").save(data["damage_report"]);
await this.transactionManager.getRepository("damage_report").save(data["damage_report"] ?? []); await this.transactionManager.getRepository("maintenance").save(data["maintenance"]);
await this.transactionManager.getRepository("maintenance").save(data["maintenance"] ?? []);
await this.transactionManager.getRepository("inspection").save(data["inspection"] ?? []); await this.transactionManager.getRepository("inspection").save(data["inspection"]);
await this.transactionManager.getRepository("inspection_point_result").save(data["inspection_point_result"] ?? []); await this.transactionManager.getRepository("inspection_point_result").save(data["inspection_point_result"]);
} }
} }

View file

@ -14,12 +14,12 @@ import {
wearable_type_table, wearable_type_table,
wearable_table, wearable_table,
} from "./baseSchemaTables/unit"; } from "./baseSchemaTables/unit";
import { maintenance_table, damage_report_table, repair_table } from "./baseSchemaTables/unit_extend"; import { maintenance_table, damage_report_table } from "./baseSchemaTables/unit_extend";
import { availableTemplates } from "../type/templateTypes"; import { availableTemplates } from "../type/templateTypes";
import { template_usage_table } from "./baseSchemaTables/query_template"; import { template_usage_table } from "./baseSchemaTables/query_template";
export class UnitBase1752914551204 implements MigrationInterface { export class UnitBase1749361405703 implements MigrationInterface {
name = "UnitBase1752914551204"; name = "UnitBase1749361405703";
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(equipment_type_table, true, true, true); await queryRunner.createTable(equipment_type_table, true, true, true);
@ -30,7 +30,6 @@ export class UnitBase1752914551204 implements MigrationInterface {
await queryRunner.createTable(wearable_table, true, true, true); await queryRunner.createTable(wearable_table, true, true, true);
await queryRunner.createTable(maintenance_table, true, true, true); await queryRunner.createTable(maintenance_table, true, true, true);
await queryRunner.createTable(repair_table, true, true, true);
await queryRunner.createTable(damage_report_table, true, true, true); await queryRunner.createTable(damage_report_table, true, true, true);
await queryRunner.createTable(inspection_plan_table, true, true, true); await queryRunner.createTable(inspection_plan_table, true, true, true);
@ -62,7 +61,6 @@ export class UnitBase1752914551204 implements MigrationInterface {
await queryRunner.dropTable(inspection_plan_table, true, true, true); await queryRunner.dropTable(inspection_plan_table, true, true, true);
await queryRunner.dropTable(damage_report_table, true, true, true); await queryRunner.dropTable(damage_report_table, true, true, true);
await queryRunner.dropTable(repair_table, true, true, true);
await queryRunner.dropTable(maintenance_table, true, true, true); await queryRunner.dropTable(maintenance_table, true, true, true);
await queryRunner.dropTable(wearable_table, true, true, true); await queryRunner.dropTable(wearable_table, true, true, true);

View file

@ -8,7 +8,6 @@ export const damage_report_table = new Table({
{ name: "reportedAt", ...getTypeByORM("datetime"), default: getDefaultByORM("currentTimestamp") }, { name: "reportedAt", ...getTypeByORM("datetime"), default: getDefaultByORM("currentTimestamp") },
{ name: "status", ...getTypeByORM("varchar") }, { name: "status", ...getTypeByORM("varchar") },
{ name: "done", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) }, { name: "done", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
{ name: "title", ...getTypeByORM("varchar") },
{ name: "description", ...getTypeByORM("text") }, { name: "description", ...getTypeByORM("text") },
{ name: "location", ...getTypeByORM("text") }, { name: "location", ...getTypeByORM("text") },
{ name: "noteByReporter", ...getTypeByORM("text") }, { name: "noteByReporter", ...getTypeByORM("text") },
@ -18,7 +17,7 @@ export const damage_report_table = new Table({
{ name: "equipmentId", ...getTypeByORM("uuid", true) }, { name: "equipmentId", ...getTypeByORM("uuid", true) },
{ name: "vehicleId", ...getTypeByORM("uuid", true) }, { name: "vehicleId", ...getTypeByORM("uuid", true) },
{ name: "wearableId", ...getTypeByORM("uuid", true) }, { name: "wearableId", ...getTypeByORM("uuid", true) },
{ name: "repairId", ...getTypeByORM("uuid", true) }, { name: "maintenanceId", ...getTypeByORM("uuid", true) },
], ],
foreignKeys: [ foreignKeys: [
new TableForeignKey({ new TableForeignKey({
@ -43,9 +42,9 @@ export const damage_report_table = new Table({
onUpdate: "RESTRICT", onUpdate: "RESTRICT",
}), }),
new TableForeignKey({ new TableForeignKey({
columnNames: ["repairId"], columnNames: ["maintenanceId"],
referencedColumnNames: ["id"], referencedColumnNames: ["id"],
referencedTableName: "repair", referencedTableName: "maintenance",
onDelete: "SET NULL", onDelete: "SET NULL",
onUpdate: "RESTRICT", onUpdate: "RESTRICT",
}), }),
@ -57,8 +56,8 @@ export const maintenance_table = new Table({
columns: [ columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary }, { name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "createdAt", ...getTypeByORM("datetime"), default: getDefaultByORM("currentTimestamp") }, { name: "createdAt", ...getTypeByORM("datetime"), default: getDefaultByORM("currentTimestamp") },
{ name: "finishedAt", ...getTypeByORM("datetime", true) },
{ name: "status", ...getTypeByORM("varchar") }, { name: "status", ...getTypeByORM("varchar") },
{ name: "done", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
{ name: "description", ...getTypeByORM("text") }, { name: "description", ...getTypeByORM("text") },
{ name: "equipmentId", ...getTypeByORM("uuid", true) }, { name: "equipmentId", ...getTypeByORM("uuid", true) },
{ name: "vehicleId", ...getTypeByORM("uuid", true) }, { name: "vehicleId", ...getTypeByORM("uuid", true) },
@ -88,44 +87,3 @@ export const maintenance_table = new Table({
}), }),
], ],
}); });
export const repair_table = new Table({
name: "repair",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "createdAt", ...getTypeByORM("datetime"), default: getDefaultByORM("currentTimestamp") },
{ name: "finishedAt", ...getTypeByORM("datetime", true) },
{ name: "status", ...getTypeByORM("varchar") },
{ name: "responsible", ...getTypeByORM("varchar") },
{ name: "title", ...getTypeByORM("varchar") },
{ name: "description", ...getTypeByORM("text") },
{ name: "images", ...getTypeByORM("text") },
{ name: "reportDocument", ...getTypeByORM("varchar", true) },
{ name: "equipmentId", ...getTypeByORM("uuid", true) },
{ name: "vehicleId", ...getTypeByORM("uuid", true) },
{ name: "wearableId", ...getTypeByORM("uuid", true) },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["equipmentId"],
referencedColumnNames: ["id"],
referencedTableName: "equipment",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["vehicleId"],
referencedColumnNames: ["id"],
referencedTableName: "vehicle",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["wearableId"],
referencedColumnNames: ["id"],
referencedTableName: "wearable",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
});

View file

@ -43,7 +43,6 @@ import inspection from "./unit/inspection";
import inspectionPlan from "./unit/inspectionPlan"; import inspectionPlan from "./unit/inspectionPlan";
import damageReport from "./unit/damageReport"; import damageReport from "./unit/damageReport";
import maintenance from "./unit/maintenance"; import maintenance from "./unit/maintenance";
import repair from "./unit/repair";
var router = express.Router({ mergeParams: true }); var router = express.Router({ mergeParams: true });
@ -284,15 +283,5 @@ router.use(
]), ]),
maintenance maintenance
); );
router.use(
"/repair",
PermissionHelper.passCheckSomeMiddleware([
{ requiredPermission: "read", section: "unit", module: "repair" },
{ requiredPermission: "read", section: "unit", module: "equipment" },
{ requiredPermission: "read", section: "unit", module: "vehicle" },
{ requiredPermission: "read", section: "unit", module: "wearable" },
]),
repair
);
export default router; export default router;

View file

@ -11,7 +11,6 @@ import {
getAllDamageReportsByStatus, getAllDamageReportsByStatus,
getAllDamageReportsForRelated, getAllDamageReportsForRelated,
getDamageReportById, getDamageReportById,
getDamageReportsByIds,
provideDamageReportImageUpload, provideDamageReportImageUpload,
updateDamageReportById, updateDamageReportById,
} from "../../../controller/admin/unit/damageReportController"; } from "../../../controller/admin/unit/damageReportController";
@ -41,10 +40,6 @@ router.get("/:id", async (req: Request, res: Response) => {
await getDamageReportById(req, res); await getDamageReportById(req, res);
}); });
router.post("/ids", async (req: Request, res: Response) => {
await getDamageReportsByIds(req, res);
});
router.get("/:id/:filename", async (req: Request, res: Response) => { router.get("/:id/:filename", async (req: Request, res: Response) => {
await provideDamageReportImageUpload(req, res); await provideDamageReportImageUpload(req, res);
}); });

View file

@ -1,70 +0,0 @@
import express, { Request, Response } from "express";
import PermissionHelper from "../../../helpers/permissionHelper";
import {
createRepair,
getAllRepairsByStatus,
getAllRepairsForRelated,
getRepairById,
updateRepairById,
updateRepairReportsById,
updateRepairStatusById,
} from "../../../controller/admin/unit/repairController";
var router = express.Router({ mergeParams: true });
router.get("/", async (req: Request, res: Response) => {
await getAllRepairsByStatus(req, res);
});
router.get(
["/vehicle/:relatedId", "/equipment/:relatedId", "/wearable/:relatedId"],
async (req: Request, res: Response) => {
if (req.path.startsWith("/vehicle")) {
req.params.related = "vehicle";
} else if (req.path.startsWith("/equipment")) {
req.params.related = "equipment";
} else {
req.params.related = "wearable";
}
await getAllRepairsForRelated(req, res);
}
);
router.get("/:id", async (req: Request, res: Response) => {
await getRepairById(req, res);
});
router.post(
"/",
PermissionHelper.passCheckMiddleware("update", "unit", "repair"),
async (req: Request, res: Response) => {
await createRepair(req, res);
}
);
router.patch(
"/:id",
PermissionHelper.passCheckMiddleware("update", "unit", "repair"),
async (req: Request, res: Response) => {
await updateRepairById(req, res);
}
);
router.patch(
"/:id/reports",
PermissionHelper.passCheckMiddleware("update", "unit", "repair"),
async (req: Request, res: Response) => {
await updateRepairReportsById(req, res);
}
);
router.patch(
"/:id/status",
PermissionHelper.passCheckMiddleware("update", "unit", "repair"),
async (req: Request, res: Response) => {
await updateRepairStatusById(req, res);
}
);
export default router;

View file

@ -1,4 +1,3 @@
import { In } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { damageReport } from "../../entity/unit/damageReport"; import { damageReport } from "../../entity/unit/damageReport";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -11,48 +10,13 @@ export default abstract class DamageReportService {
.leftJoinAndSelect("damageReport.equipment", "equipment") .leftJoinAndSelect("damageReport.equipment", "equipment")
.leftJoinAndSelect("damageReport.vehicle", "vehicle") .leftJoinAndSelect("damageReport.vehicle", "vehicle")
.leftJoinAndSelect("damageReport.wearable", "wearable") .leftJoinAndSelect("damageReport.wearable", "wearable")
.leftJoinAndSelect("damageReport.repair", "repair"); .leftJoinAndSelect("damageReport.maintenance", "maintenance");
/**
* @description get all damageReports By done
* @returns {Promise<[Array<damageReport>, number]>}
*/
static async getAll({
offset = 0,
count = 25,
noLimit = false,
ids = [],
}: {
offset?: number;
count?: number;
noLimit?: boolean;
ids?: Array<string>;
}): Promise<[Array<damageReport>, number]> {
let query = this.query();
if (ids.length != 0) {
query = query.where({ id: In(ids) });
}
if (!noLimit) {
query = query.offset(offset).limit(count);
}
return await query
.orderBy("damageReport.reportedAt", "ASC")
.getManyAndCount()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "damageReport", err);
});
}
/** /**
* @description get all damageReports By done * @description get all damageReports By done
* @returns {Promise<[Array<damageReport>, number]>} * @returns {Promise<[Array<damageReport>, number]>}
*/ */
static async getAllByStatus( static async getAll(
done = false, done = false,
{ {
offset = 0, offset = 0,
@ -114,39 +78,6 @@ export default abstract class DamageReportService {
}); });
} }
/**
* @description get all damageReport for repair
* @returns {Promise<[Array<damageReport>, number]>}
*/
static async getAllForRepair(
repairId: string,
{
offset = 0,
count = 25,
noLimit = false,
}: {
offset?: number;
count?: number;
noLimit?: boolean;
}
): Promise<[Array<damageReport>, number]> {
let query = this.query().where({ repairId });
if (!noLimit) {
query = query.offset(offset).limit(count);
}
return await query
.orderBy("damageReport.reportedAt", "ASC")
.getManyAndCount()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "damageReport", err);
});
}
/** /**
* @description get damageReport by id * @description get damageReport by id
* @returns {Promise<damageReport>} * @returns {Promise<damageReport>}

View file

@ -1,4 +1,3 @@
import { Not, IsNull } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { maintenance } from "../../entity/unit/maintenance"; import { maintenance } from "../../entity/unit/maintenance";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -10,7 +9,8 @@ export default abstract class MaintenanceService {
.createQueryBuilder("maintenance") .createQueryBuilder("maintenance")
.leftJoinAndSelect("maintenance.equipment", "equipment") .leftJoinAndSelect("maintenance.equipment", "equipment")
.leftJoinAndSelect("maintenance.vehicle", "vehicle") .leftJoinAndSelect("maintenance.vehicle", "vehicle")
.leftJoinAndSelect("maintenance.wearable", "wearable"); .leftJoinAndSelect("maintenance.wearable", "wearable")
.leftJoinAndSelect("maintenance.reports", "reports");
/** /**
* @description get all maintenances * @description get all maintenances
@ -28,7 +28,7 @@ export default abstract class MaintenanceService {
noLimit?: boolean; noLimit?: boolean;
} }
): Promise<[Array<maintenance>, number]> { ): Promise<[Array<maintenance>, number]> {
let query = this.query().where({ finishedAt: done ? Not(IsNull()) : IsNull() }); let query = this.query().where({ done });
if (!noLimit) { if (!noLimit) {
query = query.offset(offset).limit(count); query = query.offset(offset).limit(count);
} }

View file

@ -1,96 +0,0 @@
import { IsNull, Not } from "typeorm";
import { dataSource } from "../../data-source";
import { repair } from "../../entity/unit/repair";
import DatabaseActionException from "../../exceptions/databaseActionException";
export default abstract class RepairService {
private static query = () =>
dataSource
.getRepository(repair)
.createQueryBuilder("repair")
.leftJoinAndSelect("repair.equipment", "equipment")
.leftJoinAndSelect("repair.vehicle", "vehicle")
.leftJoinAndSelect("repair.wearable", "wearable")
.leftJoinAndSelect("repair.reports", "reports");
/**
* @description get all repairs
* @returns {Promise<[Array<repair>, number]>}
*/
static async getAll(
done = false,
{
offset = 0,
count = 25,
noLimit = false,
}: {
offset?: number;
count?: number;
noLimit?: boolean;
}
): Promise<[Array<repair>, number]> {
let query = this.query().where({ finishedAt: done ? Not(IsNull()) : IsNull() });
if (!noLimit) {
query = query.offset(offset).limit(count);
}
return await query
.orderBy("repair.createdAt", "ASC")
.getManyAndCount()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "repair", err);
});
}
/**
* @description get all repairs By related
* @returns {Promise<[Array<repair>, number]>}
*/
static async getAllForRelated(
where: { equipmentId: string } | { vehicleId: string } | { wearableId: string },
{
offset = 0,
count = 25,
noLimit = false,
}: {
offset?: number;
count?: number;
noLimit?: boolean;
}
): Promise<[Array<repair>, number]> {
let query = this.query().where(where);
if (!noLimit) {
query = query.offset(offset).limit(count);
}
return await query
.orderBy("repair.createdAt", "ASC")
.getManyAndCount()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "repair", err);
});
}
/**
* @description get repair by id
* @returns {Promise<repair>}
*/
static async getById(id: string): Promise<repair> {
return await this.query()
.where({ id })
.getOneOrFail()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "repair", err);
});
}
}

View file

@ -22,7 +22,6 @@ export type PermissionModule =
| "respiratory_mission" | "respiratory_mission"
| "damage_report" | "damage_report"
| "maintenance" | "maintenance"
| "repair"
// configuration // configuration
| "qualification" | "qualification"
| "award" | "award"
@ -98,7 +97,6 @@ export const permissionModules: Array<PermissionModule> = [
"respiratory_mission", "respiratory_mission",
"damage_report", "damage_report",
"maintenance", "maintenance",
"repair",
// configuration // configuration
"qualification", "qualification",
"award", "award",
@ -136,7 +134,6 @@ export const sectionsAndModules: SectionsAndModulesObject = {
"respiratory_mission", "respiratory_mission",
"damage_report", "damage_report",
"maintenance", "maintenance",
"repair",
], ],
configuration: [ configuration: [
"qualification", "qualification",

View file

@ -1,6 +1,5 @@
import { EquipmentViewModel } from "./equipment/equipment.models"; import { EquipmentViewModel } from "./equipment/equipment.models";
import { MaintenanceViewModel } from "./maintenance.models"; import { MaintenanceViewModel } from "./maintenance.models";
import { RepairViewModel } from "./repair.models";
import { VehicleViewModel } from "./vehicle/vehicle.models"; import { VehicleViewModel } from "./vehicle/vehicle.models";
import { WearableViewModel } from "./wearable/wearable.models"; import { WearableViewModel } from "./wearable/wearable.models";
@ -23,7 +22,6 @@ export type DamageReportAssigned = {
export type DamageReportViewModel = { export type DamageReportViewModel = {
id: string; id: string;
title: string;
reportedAt: Date; reportedAt: Date;
status: string; status: string;
done: boolean; done: boolean;
@ -33,5 +31,5 @@ export type DamageReportViewModel = {
noteByWorker: string; noteByWorker: string;
images: string[]; images: string[];
reportedBy: string; reportedBy: string;
repair?: RepairViewModel; maintenance?: MaintenanceViewModel;
} & DamageReportAssigned; } & DamageReportAssigned;

View file

@ -1,3 +1,4 @@
import { DamageReportViewModel } from "./damageReport.models";
import { EquipmentViewModel } from "./equipment/equipment.models"; import { EquipmentViewModel } from "./equipment/equipment.models";
import { VehicleViewModel } from "./vehicle/vehicle.models"; import { VehicleViewModel } from "./vehicle/vehicle.models";
import { WearableViewModel } from "./wearable/wearable.models"; import { WearableViewModel } from "./wearable/wearable.models";
@ -23,5 +24,7 @@ export type MaintenanceViewModel = {
id: string; id: string;
createdAt: Date; createdAt: Date;
status: string; status: string;
done: boolean;
description: string; description: string;
reports: DamageReportViewModel[];
} & MaintenanceAssigned; } & MaintenanceAssigned;

View file

@ -1,34 +0,0 @@
import { DamageReportViewModel } from "./damageReport.models";
import { EquipmentViewModel } from "./equipment/equipment.models";
import { VehicleViewModel } from "./vehicle/vehicle.models";
import { WearableViewModel } from "./wearable/wearable.models";
export type RepairAssigned = {
relatedId: string;
} & (
| {
assigned: "equipment";
related: EquipmentViewModel;
}
| {
assigned: "vehicle";
related: VehicleViewModel;
}
| {
assigned: "wearable";
related: WearableViewModel;
}
);
export type RepairViewModel = {
id: string;
createdAt: Date;
finishedAt?: Date;
status: string;
responsible: string;
title: string;
description: string;
images: string[];
reportDocument?: string;
reports: DamageReportViewModel[];
} & RepairAssigned;