ff-admin-server/src/views/membershipsView.ts

116 lines
3.2 KiB
TypeScript
Raw Normal View History

2024-12-18 12:55:03 +01:00
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
2025-01-05 14:14:00 +01:00
import { membership } from "../entity/club/member/membership";
2024-12-18 12:55:03 +01:00
@ViewEntity({
expression: (datasource: DataSource) =>
datasource
.getRepository(membership)
.createQueryBuilder("membership")
.select("status.id", "statusId")
.addSelect("status.status", "status")
.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-06-07 15:20:20 +02:00
.addSelect(`SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `, "durationInDays")
.addSelect(
`SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")))`,
"durationInYears"
)
.addSelect(`SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`, "exactDuration")
2024-12-18 12:55:03 +01:00
.leftJoin("membership.status", "status")
.leftJoin("membership.member", "member")
2025-01-25 10:20:57 +01:00
.leftJoin("member.salutation", "salutation")
2025-01-05 18:32:41 +01:00
.groupBy("status.id")
.addGroupBy("member.id")
.addGroupBy("salutation.id"),
2024-12-18 12:55:03 +01:00
})
export class membershipView {
@ViewColumn()
durationInDays: number;
2025-01-05 16:09:39 +01:00
@ViewColumn()
durationInYears: number;
@ViewColumn()
exactDuration: string;
2025-01-05 16:09:39 +01:00
2024-12-18 12:55:03 +01:00
@ViewColumn()
status: string;
@ViewColumn()
statusId: 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;
}
2025-05-30 15:13:38 +02:00
@ViewEntity({
expression: (datasource: DataSource) =>
datasource
.getRepository(membership)
.createQueryBuilder("membership")
.select("member.id", "memberId")
.addSelect("member.firstname", "memberFirstname")
.addSelect("member.lastname", "memberLastname")
.addSelect("member.nameaffix", "memberNameaffix")
.addSelect("member.birthdate", "memberBirthdate")
.addSelect("salutation.salutation", "memberSalutation")
2025-06-07 15:20:20 +02:00
.addSelect(`SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `, "durationInDays")
.addSelect(
`SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")))`,
"durationInYears"
)
.addSelect(`SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`, "exactDuration")
2025-05-30 15:13:38 +02:00
.leftJoin("membership.status", "status")
.leftJoin("membership.member", "member")
.leftJoin("member.salutation", "salutation")
2025-06-07 15:20:20 +02:00
.groupBy("member.id")
.addGroupBy("salutation.id"),
2025-05-30 15:13:38 +02:00
})
export class membershipTotalView {
@ViewColumn()
durationInDays: number;
@ViewColumn()
durationInYears: number;
@ViewColumn()
exactDuration: string;
@ViewColumn()
memberId: string;
@ViewColumn()
memberSalutation: string;
@ViewColumn()
memberFirstname: string;
@ViewColumn()
memberLastname: string;
@ViewColumn()
memberNameaffix: string;
@ViewColumn()
memberBirthdate: Date;
}