unit/#102-base-management #121
13 changed files with 229 additions and 11 deletions
|
@ -1,11 +1,13 @@
|
||||||
import { InspectionPointEnum } from "../../../enums/inspectionEnum";
|
import { InspectionPointEnum } from "../../../enums/inspectionEnum";
|
||||||
|
|
||||||
export interface CreateInspectionPointCommand {
|
export interface CreateInspectionPointCommand {
|
||||||
|
id?: string;
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
type: InspectionPointEnum;
|
type: InspectionPointEnum;
|
||||||
min?: number;
|
min?: number;
|
||||||
max?: number;
|
max?: number;
|
||||||
|
others?: string;
|
||||||
sort: number;
|
sort: number;
|
||||||
versionedPointId: string;
|
versionedPointId?: string;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { dataSource } from "../../../data-source";
|
import { dataSource } from "../../../data-source";
|
||||||
import { inspectionPoint } from "../../../entity/unit/inspection/inspectionPoint";
|
import { inspectionPoint } from "../../../entity/unit/inspection/inspectionPoint";
|
||||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
|
import InspectionPointService from "../../../service/unit/inspection/inspectionPointService";
|
||||||
import { CreateInspectionPointCommand } from "./inspectionPointCommand";
|
import { CreateInspectionPointCommand } from "./inspectionPointCommand";
|
||||||
|
|
||||||
export default abstract class InspectionPointCommandHandler {
|
export default abstract class InspectionPointCommandHandler {
|
||||||
|
@ -31,4 +32,42 @@ export default abstract class InspectionPointCommandHandler {
|
||||||
throw new DatabaseActionException("CREATE", "inspectionPoint", err);
|
throw new DatabaseActionException("CREATE", "inspectionPoint", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description sync points
|
||||||
|
* @param {string} versionedPlanId
|
||||||
|
* @param {Array<CreateInspectionPointCommand>} sync
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
static async sync(versionedPlanId: string, sync: Array<CreateInspectionPointCommand>): Promise<void> {
|
||||||
|
let points = await InspectionPointService.getAllForVersionedPlan(versionedPlanId);
|
||||||
|
await dataSource
|
||||||
|
.transaction(async (manager) => {
|
||||||
|
let remove = points.filter((r) => !sync.some((cp) => cp.id == r.id));
|
||||||
|
await manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(inspectionPoint)
|
||||||
|
.values(
|
||||||
|
sync.map((s) => ({
|
||||||
|
...s,
|
||||||
|
versionedPlanId,
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
.orUpdate(["title", "description", "min", "max", "others", "sort"], ["id"])
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
if (remove.length != 0)
|
||||||
|
await manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.delete()
|
||||||
|
.from(inspectionPoint)
|
||||||
|
.where("id IN (:...ids)", { ids: remove.map((r) => r.id) })
|
||||||
|
.andWhere({ versionedPlanId })
|
||||||
|
.execute();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("SYNC", "inspectionPoint", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,53 @@
|
||||||
import { dataSource } from "../../../data-source";
|
import { dataSource } from "../../../data-source";
|
||||||
|
import { inspectionPoint } from "../../../entity/unit/inspection/inspectionPoint";
|
||||||
import { inspectionVersionedPlan } from "../../../entity/unit/inspection/inspectionVersionedPlan";
|
import { inspectionVersionedPlan } from "../../../entity/unit/inspection/inspectionVersionedPlan";
|
||||||
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
import DatabaseActionException from "../../../exceptions/databaseActionException";
|
||||||
|
import InspectionVersionedPlanService from "../../../service/unit/inspection/inspectionVersionedPlanService";
|
||||||
|
import { CreateInspectionPointCommand } from "./inspectionPointCommand";
|
||||||
import { CreateInspectionVersionedPlanCommand } from "./inspectionVersionedPlanCommand";
|
import { CreateInspectionVersionedPlanCommand } from "./inspectionVersionedPlanCommand";
|
||||||
|
|
||||||
export default abstract class InspectionVersionedPlanCommandHandler {
|
export default abstract class InspectionVersionedPlanCommandHandler {
|
||||||
/**
|
/**
|
||||||
* @description create inspectionVersionedPlan
|
* @description create inspectionVersionedPlan
|
||||||
* @param {CreateInspectionVersionedPlanCommand} createInspectionVersionedPlan
|
* @param {CreateInspectionVersionedPlanCommand} createInspectionVersionedPlan
|
||||||
* @returns {Promise<number>}
|
* @returns {Promise<string>}
|
||||||
*/
|
*/
|
||||||
static async create(createInspectionVersionedPlan: CreateInspectionVersionedPlanCommand): Promise<number> {
|
static async create(
|
||||||
|
createInspectionVersionedPlan: CreateInspectionVersionedPlanCommand,
|
||||||
|
inspectionPoints: Array<CreateInspectionPointCommand>
|
||||||
|
): Promise<string> {
|
||||||
|
let count = await InspectionVersionedPlanService.countForPlanId(createInspectionVersionedPlan.inspectionPlanId);
|
||||||
|
let returnId = "";
|
||||||
|
|
||||||
return await dataSource
|
return await dataSource
|
||||||
.createQueryBuilder()
|
.transaction(async (manager) => {
|
||||||
.insert()
|
await manager
|
||||||
.into(inspectionVersionedPlan)
|
.createQueryBuilder()
|
||||||
.values({
|
.insert()
|
||||||
inspectionPlanId: createInspectionVersionedPlan.inspectionPlanId,
|
.into(inspectionVersionedPlan)
|
||||||
|
.values({
|
||||||
|
inspectionPlanId: createInspectionVersionedPlan.inspectionPlanId,
|
||||||
|
version: count,
|
||||||
|
})
|
||||||
|
.execute()
|
||||||
|
.then((result) => {
|
||||||
|
returnId = result.identifiers[0].id;
|
||||||
|
});
|
||||||
|
|
||||||
|
await manager
|
||||||
|
.createQueryBuilder()
|
||||||
|
.insert()
|
||||||
|
.into(inspectionPoint)
|
||||||
|
.values(
|
||||||
|
inspectionPoints.map((ip) => ({
|
||||||
|
...ip,
|
||||||
|
versionedPlanId: returnId,
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
.execute();
|
||||||
})
|
})
|
||||||
.execute()
|
.then(() => {
|
||||||
.then((result) => {
|
return returnId;
|
||||||
return result.identifiers[0].id;
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
throw new DatabaseActionException("CREATE", "inspectionVersionedPlan", err);
|
throw new DatabaseActionException("CREATE", "inspectionVersionedPlan", err);
|
||||||
|
|
|
@ -9,6 +9,11 @@ import {
|
||||||
import InspectionPlanCommandHandler from "../../../command/unit/inspection/inspectionPlanCommandHandler";
|
import InspectionPlanCommandHandler from "../../../command/unit/inspection/inspectionPlanCommandHandler";
|
||||||
import BadRequestException from "../../../exceptions/badRequestException";
|
import BadRequestException from "../../../exceptions/badRequestException";
|
||||||
import TypeTester from "../../../helpers/typeTester";
|
import TypeTester from "../../../helpers/typeTester";
|
||||||
|
import InspectionPointService from "../../../service/unit/inspection/inspectionPointService";
|
||||||
|
import InspectionPointFactory from "../../../factory/admin/unit/inspection/inspectionPoint";
|
||||||
|
import InspectionService from "../../../service/unit/inspection/inspectionService";
|
||||||
|
import InspectionVersionedPlanCommandHandler from "../../../command/unit/inspection/inspectionVersionedPlanCommandHandler";
|
||||||
|
import InspectionPointCommandHandler from "../../../command/unit/inspection/inspectionPointCommandHandler";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description get all inspectionPlans
|
* @description get all inspectionPlans
|
||||||
|
@ -78,6 +83,25 @@ export async function getAllInspectionPlansForRelated(req: Request, res: Respons
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get inspectionPoints by planid
|
||||||
|
* @param req {Request} Express req object
|
||||||
|
* @param res {Response} Express res object
|
||||||
|
* @returns {Promise<*>}
|
||||||
|
*/
|
||||||
|
export async function getInspectionPointsByPlanId(req: Request, res: Response): Promise<any> {
|
||||||
|
const inspectionPlanId = req.params.id;
|
||||||
|
let inspectionPlan = await InspectionPlanService.getById(inspectionPlanId);
|
||||||
|
|
||||||
|
if (!inspectionPlan.latestVersionedPlan) {
|
||||||
|
res.json([]);
|
||||||
|
} else {
|
||||||
|
let inspectionPoints = await InspectionPointService.getAllForVersionedPlan(inspectionPlan.latestVersionedPlan.id);
|
||||||
|
|
||||||
|
res.json(InspectionPointFactory.mapToBase(inspectionPoints));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description get inspectionPlan by id
|
* @description get inspectionPlan by id
|
||||||
* @param req {Request} Express req object
|
* @param req {Request} Express req object
|
||||||
|
@ -148,6 +172,30 @@ export async function updateInspectionPlanById(req: Request, res: Response): Pro
|
||||||
res.sendStatus(204);
|
res.sendStatus(204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get inspectionPoints by planid
|
||||||
|
* @param req {Request} Express req object
|
||||||
|
* @param res {Response} Express res object
|
||||||
|
* @returns {Promise<*>}
|
||||||
|
*/
|
||||||
|
export async function updateInspectionPointsByPlanId(req: Request, res: Response): Promise<any> {
|
||||||
|
const inspectionPlanId = req.params.id;
|
||||||
|
const inspectionPoints = req.body;
|
||||||
|
let inspectionPlan = await InspectionPlanService.getById(inspectionPlanId);
|
||||||
|
|
||||||
|
let usedVersionedPlan = inspectionPlan?.latestVersionedPlan?.id
|
||||||
|
? await InspectionService.usesVersionedInspectionPlan(inspectionPlan.latestVersionedPlan.id)
|
||||||
|
: true;
|
||||||
|
|
||||||
|
if (usedVersionedPlan) {
|
||||||
|
await InspectionVersionedPlanCommandHandler.create({ inspectionPlanId }, inspectionPoints);
|
||||||
|
} else {
|
||||||
|
await InspectionPointCommandHandler.sync(inspectionPlan.latestVersionedPlan.id, inspectionPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
res.sendStatus(204);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description delete inspectionPlan by id
|
* @description delete inspectionPlan by id
|
||||||
* @param req {Request} Express req object
|
* @param req {Request} Express req object
|
||||||
|
|
|
@ -33,6 +33,9 @@ export class inspectionPoint {
|
||||||
@Column({ type: "int", nullable: true, default: null })
|
@Column({ type: "int", nullable: true, default: null })
|
||||||
max?: number;
|
max?: number;
|
||||||
|
|
||||||
|
@Column({ type: "varchar", length: 255, default: null })
|
||||||
|
others?: string;
|
||||||
|
|
||||||
@Column({ type: "int", default: 0 })
|
@Column({ type: "int", default: 0 })
|
||||||
sort: number;
|
sort: number;
|
||||||
|
|
||||||
|
|
|
@ -2,4 +2,5 @@ export enum InspectionPointEnum {
|
||||||
oknok = "oknok",
|
oknok = "oknok",
|
||||||
text = "text",
|
text = "text",
|
||||||
number = "number",
|
number = "number",
|
||||||
|
file = "file",
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ export default abstract class InspectionPointFactory {
|
||||||
sort: record.sort,
|
sort: record.sort,
|
||||||
min: record?.min,
|
min: record?.min,
|
||||||
max: record?.max,
|
max: record?.max,
|
||||||
|
others: record?.others,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
44
src/migrations/1752063536385-test.ts
Normal file
44
src/migrations/1752063536385-test.ts
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||||
|
|
||||||
|
export class Test1752063536385 implements MigrationInterface {
|
||||||
|
name = 'Test1752063536385'
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","membership_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "membership_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","membership_total_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "membership_total_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","member_qualifications_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "member_qualifications_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","member_executive_positions_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "member_executive_positions_view"`);
|
||||||
|
await queryRunner.query(`CREATE VIEW "member_executive_positions_view" AS SELECT "executivePosition"."id" AS "positionId", "executivePosition"."position" AS "position", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start"))) AS "durationInYears", SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start")) AS "exactDuration" FROM "member_executive_positions" "memberExecutivePositions" LEFT JOIN "executive_position" "executivePosition" ON "executivePosition"."id"="memberExecutivePositions"."executivePositionId" LEFT JOIN "member" "member" ON "member"."id"="memberExecutivePositions"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "executivePosition"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","member_executive_positions_view","SELECT \"executivePosition\".\"id\" AS \"positionId\", \"executivePosition\".\"position\" AS \"position\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE) - \"memberExecutivePositions\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE), \"memberExecutivePositions\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE), \"memberExecutivePositions\".\"start\")) AS \"exactDuration\" FROM \"member_executive_positions\" \"memberExecutivePositions\" LEFT JOIN \"executive_position\" \"executivePosition\" ON \"executivePosition\".\"id\"=\"memberExecutivePositions\".\"executivePositionId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"memberExecutivePositions\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"executivePosition\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "member_qualifications_view" AS SELECT "qualification"."id" AS "qualificationId", "qualification"."qualification" AS "qualification", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))) AS "durationInYears", SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")) AS "exactDuration" FROM "member_qualifications" "memberQualifications" LEFT JOIN "qualification" "qualification" ON "qualification"."id"="memberQualifications"."qualificationId" LEFT JOIN "member" "member" ON "member"."id"="memberQualifications"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "qualification"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","member_qualifications_view","SELECT \"qualification\".\"id\" AS \"qualificationId\", \"qualification\".\"qualification\" AS \"qualification\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE) - \"memberQualifications\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE), \"memberQualifications\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE), \"memberQualifications\".\"start\")) AS \"exactDuration\" FROM \"member_qualifications\" \"memberQualifications\" LEFT JOIN \"qualification\" \"qualification\" ON \"qualification\".\"id\"=\"memberQualifications\".\"qualificationId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"memberQualifications\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"qualification\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "membership_view" AS SELECT "status"."id" AS "statusId", "status"."status" AS "status", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))) AS "durationInYears", SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "exactDuration" FROM "membership" "membership" LEFT JOIN "membership_status" "status" ON "status"."id"="membership"."statusId" LEFT JOIN "member" "member" ON "member"."id"="membership"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "status"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","membership_view","SELECT \"status\".\"id\" AS \"statusId\", \"status\".\"status\" AS \"status\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"membership\".\"end\", CURRENT_DATE) - \"membership\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\")) AS \"exactDuration\" FROM \"membership\" \"membership\" LEFT JOIN \"membership_status\" \"status\" ON \"status\".\"id\"=\"membership\".\"statusId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"membership\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"status\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "membership_total_view" AS SELECT "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))) AS "durationInYears", SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "exactDuration" FROM "membership" "membership" LEFT JOIN "membership_status" "status" ON "status"."id"="membership"."statusId" LEFT JOIN "member" "member" ON "member"."id"="membership"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","membership_total_view","SELECT \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"membership\".\"end\", CURRENT_DATE) - \"membership\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\")) AS \"exactDuration\" FROM \"membership\" \"membership\" LEFT JOIN \"membership_status\" \"status\" ON \"status\".\"id\"=\"membership\".\"statusId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"membership\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","membership_total_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "membership_total_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","membership_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "membership_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","member_qualifications_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "member_qualifications_view"`);
|
||||||
|
await queryRunner.query(`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`, ["VIEW","member_executive_positions_view","public"]);
|
||||||
|
await queryRunner.query(`DROP VIEW "member_executive_positions_view"`);
|
||||||
|
await queryRunner.query(`CREATE VIEW "member_executive_positions_view" AS SELECT "executivePosition"."id" AS "positionId", "executivePosition"."position" AS "position", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start"))) AS "durationInYears", SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start")) AS "exactDuration" FROM "member_executive_positions" "memberExecutivePositions" LEFT JOIN "executive_position" "executivePosition" ON "executivePosition"."id"="memberExecutivePositions"."executivePositionId" LEFT JOIN "member" "member" ON "member"."id"="memberExecutivePositions"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "executivePosition"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","member_executive_positions_view","SELECT \"executivePosition\".\"id\" AS \"positionId\", \"executivePosition\".\"position\" AS \"position\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE) - \"memberExecutivePositions\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE), \"memberExecutivePositions\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"memberExecutivePositions\".\"end\", CURRENT_DATE), \"memberExecutivePositions\".\"start\")) AS \"exactDuration\" FROM \"member_executive_positions\" \"memberExecutivePositions\" LEFT JOIN \"executive_position\" \"executivePosition\" ON \"executivePosition\".\"id\"=\"memberExecutivePositions\".\"executivePositionId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"memberExecutivePositions\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"executivePosition\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "member_qualifications_view" AS SELECT "qualification"."id" AS "qualificationId", "qualification"."qualification" AS "qualification", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))) AS "durationInYears", SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")) AS "exactDuration" FROM "member_qualifications" "memberQualifications" LEFT JOIN "qualification" "qualification" ON "qualification"."id"="memberQualifications"."qualificationId" LEFT JOIN "member" "member" ON "member"."id"="memberQualifications"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "qualification"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","member_qualifications_view","SELECT \"qualification\".\"id\" AS \"qualificationId\", \"qualification\".\"qualification\" AS \"qualification\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE) - \"memberQualifications\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE), \"memberQualifications\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"memberQualifications\".\"end\", CURRENT_DATE), \"memberQualifications\".\"start\")) AS \"exactDuration\" FROM \"member_qualifications\" \"memberQualifications\" LEFT JOIN \"qualification\" \"qualification\" ON \"qualification\".\"id\"=\"memberQualifications\".\"qualificationId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"memberQualifications\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"qualification\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "membership_total_view" AS SELECT "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))) AS "durationInYears", SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "exactDuration" FROM "membership" "membership" LEFT JOIN "membership_status" "status" ON "status"."id"="membership"."statusId" LEFT JOIN "member" "member" ON "member"."id"="membership"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","membership_total_view","SELECT \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"membership\".\"end\", CURRENT_DATE) - \"membership\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\")) AS \"exactDuration\" FROM \"membership\" \"membership\" LEFT JOIN \"membership_status\" \"status\" ON \"status\".\"id\"=\"membership\".\"statusId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"membership\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
await queryRunner.query(`CREATE VIEW "membership_view" AS SELECT "status"."id" AS "statusId", "status"."status" AS "status", "member"."id" AS "memberId", "member"."firstname" AS "memberFirstname", "member"."lastname" AS "memberLastname", "member"."nameaffix" AS "memberNameaffix", "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays", SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))) AS "durationInYears", SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "exactDuration" FROM "membership" "membership" LEFT JOIN "membership_status" "status" ON "status"."id"="membership"."statusId" LEFT JOIN "member" "member" ON "member"."id"="membership"."memberId" LEFT JOIN "salutation" "salutation" ON "salutation"."id"="member"."salutationId" GROUP BY "status"."id", "member"."id", "salutation"."id"`);
|
||||||
|
await queryRunner.query(`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`, ["public","VIEW","membership_view","SELECT \"status\".\"id\" AS \"statusId\", \"status\".\"status\" AS \"status\", \"member\".\"id\" AS \"memberId\", \"member\".\"firstname\" AS \"memberFirstname\", \"member\".\"lastname\" AS \"memberLastname\", \"member\".\"nameaffix\" AS \"memberNameaffix\", \"member\".\"birthdate\" AS \"memberBirthdate\", \"salutation\".\"salutation\" AS \"memberSalutation\", SUM(COALESCE(\"membership\".\"end\", CURRENT_DATE) - \"membership\".\"start\") AS \"durationInDays\", SUM(EXTRACT(YEAR FROM AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\"))) AS \"durationInYears\", SUM(AGE(COALESCE(\"membership\".\"end\", CURRENT_DATE), \"membership\".\"start\")) AS \"exactDuration\" FROM \"membership\" \"membership\" LEFT JOIN \"membership_status\" \"status\" ON \"status\".\"id\"=\"membership\".\"statusId\" LEFT JOIN \"member\" \"member\" ON \"member\".\"id\"=\"membership\".\"memberId\" LEFT JOIN \"salutation\" \"salutation\" ON \"salutation\".\"id\"=\"member\".\"salutationId\" GROUP BY \"status\".\"id\", \"member\".\"id\", \"salutation\".\"id\""]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -72,6 +72,7 @@ export const inspection_point_table = new Table({
|
||||||
{ name: "type", ...getTypeByORM("varchar") },
|
{ name: "type", ...getTypeByORM("varchar") },
|
||||||
{ name: "min", ...getTypeByORM("int", true) },
|
{ name: "min", ...getTypeByORM("int", true) },
|
||||||
{ name: "max", ...getTypeByORM("int", true) },
|
{ name: "max", ...getTypeByORM("int", true) },
|
||||||
|
{ name: "others", ...getTypeByORM("varchar", true) },
|
||||||
{ name: "sort", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
|
{ name: "sort", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
|
||||||
{ name: "versionedPlanId", ...getTypeByORM("uuid") },
|
{ name: "versionedPlanId", ...getTypeByORM("uuid") },
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,7 +6,9 @@ import {
|
||||||
getAllInspectionPlans,
|
getAllInspectionPlans,
|
||||||
getAllInspectionPlansForRelated,
|
getAllInspectionPlansForRelated,
|
||||||
getInspectionPlanById,
|
getInspectionPlanById,
|
||||||
|
getInspectionPointsByPlanId,
|
||||||
updateInspectionPlanById,
|
updateInspectionPlanById,
|
||||||
|
updateInspectionPointsByPlanId,
|
||||||
} from "../../../controller/admin/unit/inspectionPlanController";
|
} from "../../../controller/admin/unit/inspectionPlanController";
|
||||||
|
|
||||||
var router = express.Router({ mergeParams: true });
|
var router = express.Router({ mergeParams: true });
|
||||||
|
@ -15,6 +17,10 @@ router.get("/", async (req: Request, res: Response) => {
|
||||||
await getAllInspectionPlans(req, res);
|
await getAllInspectionPlans(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/:id/points", async (req: Request, res: Response) => {
|
||||||
|
await getInspectionPointsByPlanId(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
["/vehicle/:relatedId", "/equipment/:relatedId", "/wearable/:relatedId"],
|
["/vehicle/:relatedId", "/equipment/:relatedId", "/wearable/:relatedId"],
|
||||||
async (req: Request, res: Response) => {
|
async (req: Request, res: Response) => {
|
||||||
|
@ -50,6 +56,14 @@ router.patch(
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
router.patch(
|
||||||
|
"/:id/points",
|
||||||
|
PermissionHelper.passCheckMiddleware("update", "unit", "inspection_plan"),
|
||||||
|
async (req: Request, res: Response) => {
|
||||||
|
await updateInspectionPointsByPlanId(req, res);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
router.delete(
|
router.delete(
|
||||||
"/:id",
|
"/:id",
|
||||||
PermissionHelper.passCheckMiddleware("delete", "unit", "inspection_plan"),
|
PermissionHelper.passCheckMiddleware("delete", "unit", "inspection_plan"),
|
||||||
|
|
|
@ -125,4 +125,22 @@ export default abstract class InspectionService {
|
||||||
throw new DatabaseActionException("SELECT", "inspection", err);
|
throw new DatabaseActionException("SELECT", "inspection", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description uses versionedPlan
|
||||||
|
* @returns {Promise<boolean>}
|
||||||
|
*/
|
||||||
|
static async usesVersionedInspectionPlan(inspectionVersionedPlanId: string): Promise<boolean> {
|
||||||
|
return await dataSource
|
||||||
|
.getRepository(inspection)
|
||||||
|
.createQueryBuilder("inspection")
|
||||||
|
.where({ inspectionVersionedPlanId })
|
||||||
|
.getExists()
|
||||||
|
.then((res) => {
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("SELECT", "used inspection", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,4 +62,22 @@ export default abstract class InspectionVersionedPlanService {
|
||||||
throw new DatabaseActionException("SELECT", "inspectionVersionedPlan", err);
|
throw new DatabaseActionException("SELECT", "inspectionVersionedPlan", err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description count for plan id
|
||||||
|
* @returns {Promise<number>}
|
||||||
|
*/
|
||||||
|
static async countForPlanId(planId: string): Promise<number> {
|
||||||
|
return await dataSource
|
||||||
|
.getRepository(inspectionVersionedPlan)
|
||||||
|
.createQueryBuilder("inspectionVersionedPlan")
|
||||||
|
.where({ inspectionPlanId: planId })
|
||||||
|
.getCount()
|
||||||
|
.then((res) => {
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new DatabaseActionException("SELECT", "inspectionVersionedPlan", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,5 +48,6 @@ export interface InspectionPointViewModel {
|
||||||
type: InspectionPointEnum;
|
type: InspectionPointEnum;
|
||||||
min?: number;
|
min?: number;
|
||||||
max?: number;
|
max?: number;
|
||||||
|
others?: string;
|
||||||
sort: number;
|
sort: number;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue