54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
|
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||
|
import { memberExecutivePositions } from "../entity/memberExecutivePositions";
|
||
|
import { Salutation } from "../enums/salutation";
|
||
|
|
||
|
@ViewEntity({
|
||
|
expression: (datasource: DataSource) =>
|
||
|
datasource
|
||
|
.getRepository(memberExecutivePositions)
|
||
|
.createQueryBuilder("memberExecutivePositions")
|
||
|
.select("executivePosition.id", "positionId")
|
||
|
.addSelect("executivePosition.position", "position")
|
||
|
.addSelect("member.id", "memberId")
|
||
|
.addSelect("member.salutation", "memberSalutation")
|
||
|
.addSelect("member.firstname", "memberFirstname")
|
||
|
.addSelect("member.lastname", "memberLastname")
|
||
|
.addSelect("member.nameaffix", "memberNameaffix")
|
||
|
.addSelect("member.birthdate", "memberBirthdate")
|
||
|
.addSelect(
|
||
|
"SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
||
|
"durationInDays"
|
||
|
)
|
||
|
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
||
|
.leftJoin("memberExecutivePositions.member", "member")
|
||
|
.groupBy("executivePosition.id"),
|
||
|
})
|
||
|
export class memberExecutivePositionsView {
|
||
|
@ViewColumn()
|
||
|
durationInDays: number;
|
||
|
|
||
|
@ViewColumn()
|
||
|
position: string;
|
||
|
|
||
|
@ViewColumn()
|
||
|
positionId: number;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberId: number;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberSalutation: Salutation;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberFirstname: string;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberLastname: string;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberNameaffix: string;
|
||
|
|
||
|
@ViewColumn()
|
||
|
memberBirthdate: Date;
|
||
|
}
|