2024-12-18 12:55:03 +01:00
|
|
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
2025-01-05 14:14:00 +01:00
|
|
|
import { memberQualifications } from "../entity/club/member/memberQualifications";
|
2025-02-01 13:11:10 +01:00
|
|
|
import { DB_TYPE } from "../env.defaults";
|
2024-12-18 12:55:03 +01:00
|
|
|
|
2025-02-01 18:09:58 +01:00
|
|
|
let durationInDays: string;
|
|
|
|
let durationInYears: string;
|
|
|
|
let exactDuration: string;
|
|
|
|
if (DB_TYPE == "postgres") {
|
|
|
|
durationInDays = `SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") `;
|
|
|
|
durationInYears = `SUM(EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate))`;
|
|
|
|
exactDuration = `SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))`;
|
|
|
|
} else if (DB_TYPE == "mysql") {
|
|
|
|
durationInDays = `SUM(DATEDIFF(COALESCE(memberQualifications.end, CURDATE()), memberQualifications.start))`;
|
|
|
|
durationInYears = `SUM(TIMESTAMPDIFF(YEAR, memberQualifications.start, COALESCE(memberQualifications.end, CURDATE())))`;
|
|
|
|
exactDuration = `
|
|
|
|
CONCAT(
|
|
|
|
SUM(FLOOR(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURDATE())) / 365.25)),
|
|
|
|
' years ',
|
|
|
|
SUM(FLOOR(MOD(TIMESTAMPDIFF(MONTH, memberQualifications.start, COALESCE(memberQualifications.end, CURDATE())), 12))),
|
|
|
|
' months ',
|
|
|
|
SUM(FLOOR(MOD(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURDATE())), 30))),
|
|
|
|
' days'
|
|
|
|
)
|
|
|
|
`;
|
|
|
|
} else if (DB_TYPE == "sqlite") {
|
|
|
|
durationInDays = `SUM(JULIANDAY(COALESCE(memberQualifications.end, DATE('now'))) - JULIANDAY(memberQualifications.start))`;
|
|
|
|
durationInYears = `SUM(FLOOR((JULIANDAY(COALESCE(memberQualifications.end, DATE('now'))) - JULIANDAY(memberQualifications.start)) / 365.25))`;
|
|
|
|
exactDuration = `
|
|
|
|
SUM((strftime('%Y', COALESCE(memberQualifications.end, DATE('now'))) - strftime('%Y', memberQualifications.start))) || ' years ' ||
|
|
|
|
SUM((strftime('%m', COALESCE(memberQualifications.end, DATE('now'))) - strftime('%m', memberQualifications.start))) || ' months ' ||
|
|
|
|
SUM((strftime('%d', COALESCE(memberQualifications.end, DATE('now'))) - strftime('%d', memberQualifications.start))) || ' days'
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
2024-12-18 12:55:03 +01:00
|
|
|
@ViewEntity({
|
|
|
|
expression: (datasource: DataSource) =>
|
|
|
|
datasource
|
|
|
|
.getRepository(memberQualifications)
|
|
|
|
.createQueryBuilder("memberQualifications")
|
|
|
|
.select("qualification.id", "qualificationId")
|
|
|
|
.addSelect("qualification.qualification", "qualification")
|
|
|
|
.addSelect("member.id", "memberId")
|
|
|
|
.addSelect("member.firstname", "memberFirstname")
|
|
|
|
.addSelect("member.lastname", "memberLastname")
|
|
|
|
.addSelect("member.nameaffix", "memberNameaffix")
|
|
|
|
.addSelect("member.birthdate", "memberBirthdate")
|
2025-01-25 10:20:57 +01:00
|
|
|
.addSelect("salutation.salutation", "memberSalutation")
|
2025-02-01 18:09:58 +01:00
|
|
|
.addSelect(durationInDays, "durationInDays")
|
|
|
|
.addSelect(durationInYears, "durationInYears")
|
|
|
|
.addSelect(exactDuration, "exactDuration")
|
2024-12-18 12:55:03 +01:00
|
|
|
.leftJoin("memberQualifications.qualification", "qualification")
|
|
|
|
.leftJoin("memberQualifications.member", "member")
|
2025-01-25 10:20:57 +01:00
|
|
|
.leftJoin("member.salutation", "salutation")
|
|
|
|
.groupBy("qualification.id")
|
2025-02-01 13:11:10 +01:00
|
|
|
.addGroupBy("member.id")
|
|
|
|
.addGroupBy("salutation.id"),
|
2024-12-18 12:55:03 +01:00
|
|
|
})
|
|
|
|
export class memberQualificationsView {
|
|
|
|
@ViewColumn()
|
|
|
|
durationInDays: number;
|
|
|
|
|
2025-02-01 13:11:10 +01:00
|
|
|
@ViewColumn()
|
2025-02-01 18:09:58 +01:00
|
|
|
durationInYears: number;
|
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
exactDuration: string;
|
2025-02-01 13:11:10 +01:00
|
|
|
|
2024-12-18 12:55:03 +01:00
|
|
|
@ViewColumn()
|
|
|
|
qualification: string;
|
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
qualificationId: number;
|
|
|
|
|
|
|
|
@ViewColumn()
|
2025-01-29 08:53:49 +01:00
|
|
|
memberId: string;
|
2024-12-18 12:55:03 +01:00
|
|
|
|
|
|
|
@ViewColumn()
|
2025-01-25 10:20:57 +01:00
|
|
|
memberSalutation: string;
|
2024-12-18 12:55:03 +01:00
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
memberFirstname: string;
|
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
memberLastname: string;
|
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
memberNameaffix: string;
|
|
|
|
|
|
|
|
@ViewColumn()
|
|
|
|
memberBirthdate: Date;
|
|
|
|
}
|