115 lines
3.2 KiB
TypeScript
115 lines
3.2 KiB
TypeScript
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
|
import { membership } from "../entity/club/member/membership";
|
|
|
|
@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")
|
|
.addSelect("salutation.salutation", "memberSalutation")
|
|
.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")
|
|
.leftJoin("membership.status", "status")
|
|
.leftJoin("membership.member", "member")
|
|
.leftJoin("member.salutation", "salutation")
|
|
.groupBy("status.id")
|
|
.addGroupBy("member.id")
|
|
.addGroupBy("salutation.id"),
|
|
})
|
|
export class membershipView {
|
|
@ViewColumn()
|
|
durationInDays: number;
|
|
|
|
@ViewColumn()
|
|
durationInYears: number;
|
|
|
|
@ViewColumn()
|
|
exactDuration: string;
|
|
|
|
@ViewColumn()
|
|
status: string;
|
|
|
|
@ViewColumn()
|
|
statusId: number;
|
|
|
|
@ViewColumn()
|
|
memberId: string;
|
|
|
|
@ViewColumn()
|
|
memberSalutation: string;
|
|
|
|
@ViewColumn()
|
|
memberFirstname: string;
|
|
|
|
@ViewColumn()
|
|
memberLastname: string;
|
|
|
|
@ViewColumn()
|
|
memberNameaffix: string;
|
|
|
|
@ViewColumn()
|
|
memberBirthdate: Date;
|
|
}
|
|
|
|
@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")
|
|
.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")
|
|
.leftJoin("membership.status", "status")
|
|
.leftJoin("membership.member", "member")
|
|
.leftJoin("member.salutation", "salutation")
|
|
.groupBy("member.id")
|
|
.addGroupBy("salutation.id"),
|
|
})
|
|
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;
|
|
}
|