Compare commits
2 commits
ff651b7d8f
...
b55d0554e4
Author | SHA1 | Date | |
---|---|---|---|
b55d0554e4 | |||
21cf811a56 |
21 changed files with 581 additions and 256 deletions
|
@ -1,7 +1,5 @@
|
|||
import { Salutation } from "../../../enums/salutation";
|
||||
|
||||
export interface CreateMemberCommand {
|
||||
salutation: Salutation;
|
||||
salutationId: number;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
|
@ -11,7 +9,7 @@ export interface CreateMemberCommand {
|
|||
|
||||
export interface UpdateMemberCommand {
|
||||
id: number;
|
||||
salutation: Salutation;
|
||||
salutationId: number;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
|
|
|
@ -21,7 +21,7 @@ export default abstract class MemberCommandHandler {
|
|||
.insert()
|
||||
.into(member)
|
||||
.values({
|
||||
salutation: createMember.salutation,
|
||||
salutationId: createMember.salutationId,
|
||||
firstname: createMember.firstname,
|
||||
lastname: createMember.lastname,
|
||||
nameaffix: createMember.nameaffix,
|
||||
|
@ -50,7 +50,7 @@ export default abstract class MemberCommandHandler {
|
|||
.createQueryBuilder()
|
||||
.update(member)
|
||||
.set({
|
||||
salutation: updateMember.salutation,
|
||||
salutationId: updateMember.salutationId,
|
||||
firstname: updateMember.firstname,
|
||||
lastname: updateMember.lastname,
|
||||
nameaffix: updateMember.nameaffix,
|
||||
|
|
|
@ -285,7 +285,7 @@ export async function createMemberPrintoutList(req: Request, res: Response): Pro
|
|||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function createMember(req: Request, res: Response): Promise<any> {
|
||||
const salutation = req.body.salutation;
|
||||
const salutationId = req.body.salutationId;
|
||||
const firstname = req.body.firstname;
|
||||
const lastname = req.body.lastname;
|
||||
const nameaffix = req.body.nameaffix;
|
||||
|
@ -293,7 +293,7 @@ export async function createMember(req: Request, res: Response): Promise<any> {
|
|||
const internalId = req.body.internalId;
|
||||
|
||||
let createMember: CreateMemberCommand = {
|
||||
salutation,
|
||||
salutationId,
|
||||
firstname,
|
||||
lastname,
|
||||
nameaffix,
|
||||
|
@ -453,7 +453,7 @@ export async function addCommunicationToMember(req: Request, res: Response): Pro
|
|||
*/
|
||||
export async function updateMemberById(req: Request, res: Response): Promise<any> {
|
||||
const memberId = parseInt(req.params.id);
|
||||
const salutation = req.body.salutation;
|
||||
const salutationId = req.body.salutationId;
|
||||
const firstname = req.body.firstname;
|
||||
const lastname = req.body.lastname;
|
||||
const nameaffix = req.body.nameaffix;
|
||||
|
@ -462,7 +462,7 @@ export async function updateMemberById(req: Request, res: Response): Promise<any
|
|||
|
||||
let updateMember: UpdateMemberCommand = {
|
||||
id: memberId,
|
||||
salutation,
|
||||
salutationId,
|
||||
firstname,
|
||||
lastname,
|
||||
nameaffix,
|
||||
|
|
|
@ -21,7 +21,6 @@ import UserService from "../../../service/user/userService";
|
|||
import { TemplateHelper } from "../../../helpers/templateHelper";
|
||||
import MailHelper from "../../../helpers/mailHelper";
|
||||
import { NewsletterEventType, NewsletterHelper } from "../../../helpers/newsletterHelper";
|
||||
import { Salutation } from "../../../enums/salutation";
|
||||
|
||||
/**
|
||||
* @description get all newsletters
|
||||
|
@ -142,7 +141,7 @@ export async function createNewsletterPrintoutPreviewById(req: Request, res: Res
|
|||
data.recipient = {
|
||||
firstname: recipient.firstname,
|
||||
lastname: recipient.lastname,
|
||||
salutation: Salutation.none,
|
||||
salutation: "Anrede",
|
||||
nameaffix: "",
|
||||
street: "Straße",
|
||||
streetNumber: "Hausnummer",
|
||||
|
@ -248,7 +247,7 @@ export async function createNewsletterMailPreviewById(req: Request, res: Respons
|
|||
data.recipient = {
|
||||
firstname: recipient.firstname,
|
||||
lastname: recipient.lastname,
|
||||
salutation: Salutation.none,
|
||||
salutation: "Anrede",
|
||||
nameaffix: "",
|
||||
street: "Straße",
|
||||
streetNumber: "Hausnummer",
|
||||
|
|
|
@ -71,6 +71,9 @@ import { ProtocolPresenceExcuse1737287798828 } from "./migrations/1737287798828-
|
|||
import { webapi } from "./entity/user/webapi";
|
||||
import { webapiPermission } from "./entity/user/webapi_permission";
|
||||
import { AddWebapiTokens1737453096674 } from "./migrations/1737453096674-addwebapiTokens";
|
||||
import { salutation } from "./entity/settings/salutation";
|
||||
import { SalutationAsTable1737796878058 } from "./migrations/1737796878058-salutationAsTable";
|
||||
import { UpdateViews1737800468938 } from "./migrations/1737800468938-updateViews";
|
||||
|
||||
const dataSource = new DataSource({
|
||||
type: DB_TYPE as any,
|
||||
|
@ -96,6 +99,7 @@ const dataSource = new DataSource({
|
|||
executivePosition,
|
||||
membershipStatus,
|
||||
qualification,
|
||||
salutation,
|
||||
member,
|
||||
memberAwards,
|
||||
memberExecutivePositions,
|
||||
|
@ -152,6 +156,8 @@ const dataSource = new DataSource({
|
|||
FinishInternalIdTransfer1736505324488,
|
||||
ProtocolPresenceExcuse1737287798828,
|
||||
AddWebapiTokens1737453096674,
|
||||
SalutationAsTable1737796878058,
|
||||
UpdateViews1737800468938,
|
||||
],
|
||||
migrationsRun: true,
|
||||
migrationsTransactionMode: "each",
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { calendar } from "../entity/club/calendar";
|
||||
import { member } from "../entity/club/member/member";
|
||||
import { Salutation } from "../enums/salutation";
|
||||
|
||||
export const newsletterDemoData: {
|
||||
title: string;
|
||||
|
@ -18,7 +17,9 @@ export const newsletterDemoData: {
|
|||
}
|
||||
>
|
||||
>;
|
||||
recipient: Partial<member & { street: string; streetNumber: string; streetNumberAdd: string }>;
|
||||
recipient: Partial<
|
||||
Omit<member, "salutation"> & { salutation: string; street: string; streetNumber: string; streetNumberAdd: string }
|
||||
>;
|
||||
} = {
|
||||
title: "Beispiel Newsletter Daten",
|
||||
description: "Zusammenfassung der Demodaten.",
|
||||
|
@ -63,7 +64,7 @@ export const newsletterDemoData: {
|
|||
recipient: {
|
||||
firstname: "Julian",
|
||||
lastname: "Krauser",
|
||||
salutation: Salutation.sir,
|
||||
salutation: "Herr",
|
||||
nameaffix: "",
|
||||
street: "Straße",
|
||||
streetNumber: "Hausnummer",
|
||||
|
|
|
@ -1,32 +1,16 @@
|
|||
import { Column, Entity, JoinColumn, ManyToOne, OneToMany, OneToOne, PrimaryColumn } from "typeorm";
|
||||
import { Salutation } from "../../../enums/salutation";
|
||||
import { membership } from "./membership";
|
||||
import { memberAwards } from "./memberAwards";
|
||||
import { memberQualifications } from "./memberQualifications";
|
||||
import { memberExecutivePositions } from "./memberExecutivePositions";
|
||||
import { communication } from "./communication";
|
||||
import { CommunicationViewModel } from "../../../viewmodel/admin/club/member/communication.models";
|
||||
import { salutation } from "../../settings/salutation";
|
||||
|
||||
@Entity()
|
||||
export class member {
|
||||
@PrimaryColumn({ generated: "increment", type: "int" })
|
||||
id: number;
|
||||
|
||||
@Column({
|
||||
type: "varchar",
|
||||
length: "255",
|
||||
default: Salutation.none.toString(),
|
||||
transformer: {
|
||||
to(value: Salutation) {
|
||||
return value.toString();
|
||||
},
|
||||
from(value: string) {
|
||||
return Salutation[value as keyof typeof Salutation];
|
||||
},
|
||||
},
|
||||
})
|
||||
salutation: Salutation;
|
||||
|
||||
@Column({ type: "varchar", length: 255 })
|
||||
firstname: string;
|
||||
|
||||
|
@ -42,6 +26,9 @@ export class member {
|
|||
@Column({ type: "varchar", length: 255, unique: true, nullable: true })
|
||||
internalId?: string;
|
||||
|
||||
@Column()
|
||||
salutationId: number;
|
||||
|
||||
@OneToMany(() => communication, (communications) => communications.member)
|
||||
communications: communication[];
|
||||
|
||||
|
@ -53,6 +40,9 @@ export class member {
|
|||
@JoinColumn()
|
||||
sendNewsletter?: communication;
|
||||
|
||||
@ManyToOne(() => salutation, (salutation) => salutation.members)
|
||||
salutation: salutation;
|
||||
|
||||
@OneToMany(() => membership, (membership) => membership.member)
|
||||
memberships: membership[];
|
||||
|
||||
|
|
15
src/entity/settings/salutation.ts
Normal file
15
src/entity/settings/salutation.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm";
|
||||
import { memberAwards } from "../club/member/memberAwards";
|
||||
import { member } from "../club/member/member";
|
||||
|
||||
@Entity()
|
||||
export class salutation {
|
||||
@PrimaryColumn({ generated: "increment", type: "int" })
|
||||
id: number;
|
||||
|
||||
@Column({ type: "varchar", length: 255, unique: true })
|
||||
salutation: string;
|
||||
|
||||
@OneToMany(() => member, (member) => member.salutation)
|
||||
members: member[];
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
export enum Salutation {
|
||||
sir = "sir",
|
||||
madam = "madam",
|
||||
other = "other",
|
||||
none = "none",
|
||||
}
|
|
@ -100,7 +100,7 @@ export abstract class NewsletterHelper {
|
|||
recipient: {
|
||||
firstname: recipient.firstname,
|
||||
lastname: recipient.lastname,
|
||||
salutation: recipient.salutation,
|
||||
salutation: recipient.salutation.salutation,
|
||||
nameaffix: recipient.nameaffix,
|
||||
...(showAdress
|
||||
? {
|
||||
|
|
|
@ -8,105 +8,105 @@ export class MemberDataViews1734520998539 implements MigrationInterface {
|
|||
name = "MemberDataViews1734520998539";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.salutation", "salutation")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_executive_positions_view",
|
||||
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"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_qualifications_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(memberQualifications)
|
||||
.createQueryBuilder("memberQualifications")
|
||||
.select("qualification.id", "qualificationId")
|
||||
.addSelect("qualification.qualification", "qualification")
|
||||
.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, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberQualifications.qualification", "qualification")
|
||||
.leftJoin("memberQualifications.member", "member")
|
||||
.groupBy("qualification.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "membership_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(membership)
|
||||
.createQueryBuilder("membership")
|
||||
.select("status.id", "statusId")
|
||||
.addSelect("status.status", "status")
|
||||
.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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.groupBy("status.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "member_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(member)
|
||||
// .createQueryBuilder("member")
|
||||
// .select("member.id", "id")
|
||||
// .addSelect("member.salutation", "salutation")
|
||||
// .addSelect("member.firstname", "firstname")
|
||||
// .addSelect("member.lastname", "lastname")
|
||||
// .addSelect("member.nameaffix", "nameaffix")
|
||||
// .addSelect("member.birthdate", "birthdate")
|
||||
// .addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
// .addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "member_executive_positions_view",
|
||||
// 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"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "member_qualifications_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(memberQualifications)
|
||||
// .createQueryBuilder("memberQualifications")
|
||||
// .select("qualification.id", "qualificationId")
|
||||
// .addSelect("qualification.qualification", "qualification")
|
||||
// .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, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||
// "durationInDays"
|
||||
// )
|
||||
// .leftJoin("memberQualifications.qualification", "qualification")
|
||||
// .leftJoin("memberQualifications.member", "member")
|
||||
// .groupBy("qualification.id"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "membership_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(membership)
|
||||
// .createQueryBuilder("membership")
|
||||
// .select("status.id", "statusId")
|
||||
// .addSelect("status.status", "status")
|
||||
// .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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
// "durationInDays"
|
||||
// )
|
||||
// .leftJoin("membership.status", "status")
|
||||
// .leftJoin("membership.member", "member")
|
||||
// .groupBy("status.id"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.dropView("membership_view");
|
||||
await queryRunner.dropView("member_qualifications_view");
|
||||
await queryRunner.dropView("member_executive_positions_view");
|
||||
await queryRunner.dropView("member_view");
|
||||
// await queryRunner.dropView("membership_view");
|
||||
// await queryRunner.dropView("member_qualifications_view");
|
||||
// await queryRunner.dropView("member_executive_positions_view");
|
||||
// await queryRunner.dropView("member_view");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,106 +8,104 @@ export class ExtendViewValues1736084198860 implements MigrationInterface {
|
|||
name = "ExtendViewValues1736084198860";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.dropView("membership_view");
|
||||
await queryRunner.dropView("member_view");
|
||||
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.salutation", "salutation")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "membership_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(membership)
|
||||
.createQueryBuilder("membership")
|
||||
.select("status.id", "statusId")
|
||||
.addSelect("status.status", "status")
|
||||
.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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.addSelect(
|
||||
"CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||
"durationInYears"
|
||||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.groupBy("status.id")
|
||||
.addGroupBy("member.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
// await queryRunner.dropView("membership_view");
|
||||
// await queryRunner.dropView("member_view");
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "member_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(member)
|
||||
// .createQueryBuilder("member")
|
||||
// .select("member.id", "id")
|
||||
// .addSelect("member.salutation", "salutation")
|
||||
// .addSelect("member.firstname", "firstname")
|
||||
// .addSelect("member.lastname", "lastname")
|
||||
// .addSelect("member.nameaffix", "nameaffix")
|
||||
// .addSelect("member.birthdate", "birthdate")
|
||||
// .addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
// .addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
||||
// .addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "membership_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(membership)
|
||||
// .createQueryBuilder("membership")
|
||||
// .select("status.id", "statusId")
|
||||
// .addSelect("status.status", "status")
|
||||
// .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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
// "durationInDays"
|
||||
// )
|
||||
// .addSelect(
|
||||
// "CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||
// "durationInYears"
|
||||
// )
|
||||
// .leftJoin("membership.status", "status")
|
||||
// .leftJoin("membership.member", "member")
|
||||
// .groupBy("status.id")
|
||||
// .addGroupBy("member.id"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.dropView("membership_view");
|
||||
await queryRunner.dropView("member_view");
|
||||
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.salutation", "salutation")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "membership_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(membership)
|
||||
.createQueryBuilder("membership")
|
||||
.select("status.id", "statusId")
|
||||
.addSelect("status.status", "status")
|
||||
.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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.groupBy("status.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
// await queryRunner.dropView("membership_view");
|
||||
// await queryRunner.dropView("member_view");
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "member_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(member)
|
||||
// .createQueryBuilder("member")
|
||||
// .select("member.id", "id")
|
||||
// .addSelect("member.salutation", "salutation")
|
||||
// .addSelect("member.firstname", "firstname")
|
||||
// .addSelect("member.lastname", "lastname")
|
||||
// .addSelect("member.nameaffix", "nameaffix")
|
||||
// .addSelect("member.birthdate", "birthdate")
|
||||
// .addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
// .addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
// await queryRunner.createView(
|
||||
// new View({
|
||||
// name: "membership_view",
|
||||
// expression: (datasource: DataSource) =>
|
||||
// datasource
|
||||
// .getRepository(membership)
|
||||
// .createQueryBuilder("membership")
|
||||
// .select("status.id", "statusId")
|
||||
// .addSelect("status.status", "status")
|
||||
// .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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
// "durationInDays"
|
||||
// )
|
||||
// .leftJoin("membership.status", "status")
|
||||
// .leftJoin("membership.member", "member")
|
||||
// .groupBy("status.id"),
|
||||
// }),
|
||||
// true
|
||||
// );
|
||||
}
|
||||
}
|
||||
|
|
91
src/migrations/1737796878058-salutationAsTable.ts
Normal file
91
src/migrations/1737796878058-salutationAsTable.ts
Normal file
|
@ -0,0 +1,91 @@
|
|||
import { MigrationInterface, QueryRunner, Table, TableForeignKey } from "typeorm";
|
||||
import { DB_TYPE } from "../env.defaults";
|
||||
import { member } from "../entity/club/member/member";
|
||||
import { salutation } from "../entity/settings/salutation";
|
||||
|
||||
export class SalutationAsTable1737796878058 implements MigrationInterface {
|
||||
name = "SalutationAsTable1737796878058";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
const variableType_int = DB_TYPE == "mysql" ? "int" : "integer";
|
||||
|
||||
await queryRunner.createTable(
|
||||
new Table({
|
||||
name: "salutation",
|
||||
columns: [
|
||||
{ name: "id", type: variableType_int, isPrimary: true, isGenerated: true, generationStrategy: "increment" },
|
||||
{ name: "salutation", type: "varchar", length: "255", isUnique: true, isNullable: false },
|
||||
],
|
||||
}),
|
||||
true
|
||||
);
|
||||
|
||||
// ! has to be sql. Else the column would be dropped and created - resulting in data loss.
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE \`member\` CHANGE \`salutation\` \`salutationId\` varchar(255) NOT NULL DEFAULT ''`
|
||||
);
|
||||
|
||||
// ! has to be sql. Else no data is returned.
|
||||
const existing_salutations = await queryRunner.query(
|
||||
"SELECT DISTINCT salutationId FROM `member` `member` GROUP BY salutationId"
|
||||
);
|
||||
|
||||
for (let s of existing_salutations.map((s: any) => s.salutationId) as Array<string>) {
|
||||
await queryRunner.manager.getRepository(salutation).save({ salutation: s });
|
||||
}
|
||||
|
||||
const salutations = await queryRunner.manager.getRepository(salutation).find();
|
||||
|
||||
for (let salutation of salutations) {
|
||||
await queryRunner.manager
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.update({ salutationId: salutation.id })
|
||||
.where({ salutationId: salutation.salutation })
|
||||
.execute();
|
||||
}
|
||||
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE \`member\` CHANGE \`salutationId\` \`salutationId\` ${variableType_int} NOT NULL`
|
||||
);
|
||||
|
||||
await queryRunner.createForeignKey(
|
||||
"member",
|
||||
new TableForeignKey({
|
||||
columnNames: ["salutationId"],
|
||||
referencedColumnNames: ["id"],
|
||||
referencedTableName: "salutation",
|
||||
onDelete: "RESTRICT",
|
||||
onUpdate: "RESTRICT",
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
const table = await queryRunner.getTable("member");
|
||||
const foreignKey = table.foreignKeys.find((fk) => fk.columnNames.indexOf("salutationId") !== -1);
|
||||
await queryRunner.dropForeignKey("member", foreignKey);
|
||||
|
||||
// ! has to be sql. Else the column would be dropped and created - resulting in data loss.
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE \`member\` CHANGE \`salutationId\` \`salutationId\` varchar(255) NOT NULL DEFAULT ''`
|
||||
);
|
||||
|
||||
const salutations = await queryRunner.manager.getRepository(salutation).find();
|
||||
|
||||
for (let salutation of salutations) {
|
||||
await queryRunner.manager
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.update({ salutationId: salutation.salutation as unknown as number })
|
||||
.where({ salutationId: salutation.id })
|
||||
.execute();
|
||||
}
|
||||
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE \`member\` CHANGE \`salutationId\` \`salutation\` varchar(255) NOT NULL DEFAULT 'none'`
|
||||
);
|
||||
|
||||
await queryRunner.dropTable("webapi");
|
||||
}
|
||||
}
|
229
src/migrations/1737800468938-updateViews.ts
Normal file
229
src/migrations/1737800468938-updateViews.ts
Normal file
|
@ -0,0 +1,229 @@
|
|||
import { DataSource, MigrationInterface, QueryRunner, View } from "typeorm";
|
||||
import { member } from "../entity/club/member/member";
|
||||
import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions";
|
||||
import { memberQualifications } from "../entity/club/member/memberQualifications";
|
||||
import { membership } from "../entity/club/member/membership";
|
||||
|
||||
export class UpdateViews1737800468938 implements MigrationInterface {
|
||||
name = "UpdateViews1737800468938";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
// await queryRunner.dropView("membership_view");
|
||||
// await queryRunner.dropView("member_executive_positions_view");
|
||||
// await queryRunner.dropView("member_qualifications_view");
|
||||
// await queryRunner.dropView("member_view");
|
||||
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("salutation.salutation", "salutation")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge")
|
||||
.leftJoin("member.salutation", "salutation"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_executive_positions_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(memberExecutivePositions)
|
||||
.createQueryBuilder("memberExecutivePositions")
|
||||
.select("executivePosition.id", "positionId")
|
||||
.addSelect("executivePosition.position", "position")
|
||||
.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(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
||||
.leftJoin("memberExecutivePositions.member", "member")
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("executivePosition.id")
|
||||
.addGroupBy("member.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_qualifications_view",
|
||||
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")
|
||||
.addSelect("salutation.salutation", "memberSalutation")
|
||||
.addSelect(
|
||||
"SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberQualifications.qualification", "qualification")
|
||||
.leftJoin("memberQualifications.member", "member")
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("qualification.id")
|
||||
.addGroupBy("member.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "membership_view",
|
||||
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(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.addSelect(
|
||||
"CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||
"durationInYears"
|
||||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("status.id")
|
||||
.addGroupBy("member.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.dropView("membership_view");
|
||||
await queryRunner.dropView("member_executive_positions_view");
|
||||
await queryRunner.dropView("member_qualifications_view");
|
||||
await queryRunner.dropView("member_view");
|
||||
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.salutation", "salutation")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_executive_positions_view",
|
||||
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"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "member_qualifications_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(memberQualifications)
|
||||
.createQueryBuilder("memberQualifications")
|
||||
.select("qualification.id", "qualificationId")
|
||||
.addSelect("qualification.qualification", "qualification")
|
||||
.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, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberQualifications.qualification", "qualification")
|
||||
.leftJoin("memberQualifications.member", "member")
|
||||
.groupBy("qualification.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
await queryRunner.createView(
|
||||
new View({
|
||||
name: "membership_view",
|
||||
expression: (datasource: DataSource) =>
|
||||
datasource
|
||||
.getRepository(membership)
|
||||
.createQueryBuilder("membership")
|
||||
.select("status.id", "statusId")
|
||||
.addSelect("status.status", "status")
|
||||
.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, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.addSelect(
|
||||
"CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||
"durationInYears"
|
||||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.groupBy("status.id")
|
||||
.addGroupBy("member.id"),
|
||||
}),
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
import { Salutation } from "../../../../enums/salutation";
|
||||
import { SalutationViewModel } from "../../settings/salutation.models";
|
||||
import { CommunicationViewModel } from "./communication.models";
|
||||
import { MembershipViewModel } from "./membership.models";
|
||||
|
||||
export interface MemberViewModel {
|
||||
id: number;
|
||||
salutation: Salutation;
|
||||
salutation: SalutationViewModel;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
|
@ -19,7 +19,7 @@ export interface MemberViewModel {
|
|||
|
||||
export interface MemberStatisticsViewModel {
|
||||
id: number;
|
||||
salutation: Salutation;
|
||||
salutation: string;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import { Salutation } from "../../../../enums/salutation";
|
||||
|
||||
export interface MembershipViewModel {
|
||||
id: number;
|
||||
start: Date;
|
||||
|
@ -15,7 +13,7 @@ export interface MembershipStatisticsViewModel {
|
|||
status: string;
|
||||
statusId: number;
|
||||
memberId: number;
|
||||
memberSalutation: Salutation;
|
||||
memberSalutation: string;
|
||||
memberFirstname: string;
|
||||
memberLastname: string;
|
||||
memberNameaffix: string;
|
||||
|
|
4
src/viewmodel/admin/settings/salutation.models.ts
Normal file
4
src/viewmodel/admin/settings/salutation.models.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export interface SalutationViewModel {
|
||||
id: number;
|
||||
salutation: string;
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||
import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions";
|
||||
import { Salutation } from "../enums/salutation";
|
||||
|
||||
@ViewEntity({
|
||||
expression: (datasource: DataSource) =>
|
||||
|
@ -10,18 +9,20 @@ import { Salutation } from "../enums/salutation";
|
|||
.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("salutation.salutation", "memberSalutation")
|
||||
.addSelect(
|
||||
"SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
||||
.leftJoin("memberExecutivePositions.member", "member")
|
||||
.groupBy("executivePosition.id"),
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("executivePosition.id")
|
||||
.addGroupBy("member.id"),
|
||||
})
|
||||
export class memberExecutivePositionsView {
|
||||
@ViewColumn()
|
||||
|
@ -37,7 +38,7 @@ export class memberExecutivePositionsView {
|
|||
memberId: number;
|
||||
|
||||
@ViewColumn()
|
||||
memberSalutation: Salutation;
|
||||
memberSalutation: string;
|
||||
|
||||
@ViewColumn()
|
||||
memberFirstname: string;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||
import { memberQualifications } from "../entity/club/member/memberQualifications";
|
||||
import { Salutation } from "../enums/salutation";
|
||||
|
||||
@ViewEntity({
|
||||
expression: (datasource: DataSource) =>
|
||||
|
@ -10,18 +9,20 @@ import { Salutation } from "../enums/salutation";
|
|||
.select("qualification.id", "qualificationId")
|
||||
.addSelect("qualification.qualification", "qualification")
|
||||
.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("salutation.salutation", "memberSalutation")
|
||||
.addSelect(
|
||||
"SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
||||
"durationInDays"
|
||||
)
|
||||
.leftJoin("memberQualifications.qualification", "qualification")
|
||||
.leftJoin("memberQualifications.member", "member")
|
||||
.groupBy("qualification.id"),
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("qualification.id")
|
||||
.addGroupBy("member.id"),
|
||||
})
|
||||
export class memberQualificationsView {
|
||||
@ViewColumn()
|
||||
|
@ -37,7 +38,7 @@ export class memberQualificationsView {
|
|||
memberId: number;
|
||||
|
||||
@ViewColumn()
|
||||
memberSalutation: Salutation;
|
||||
memberSalutation: string;
|
||||
|
||||
@ViewColumn()
|
||||
memberFirstname: string;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||
import { member } from "../entity/club/member/member";
|
||||
import { Salutation } from "../enums/salutation";
|
||||
|
||||
@ViewEntity({
|
||||
expression: (datasource: DataSource) =>
|
||||
|
@ -8,21 +7,22 @@ import { Salutation } from "../enums/salutation";
|
|||
.getRepository(member)
|
||||
.createQueryBuilder("member")
|
||||
.select("member.id", "id")
|
||||
.addSelect("member.salutation", "salutation")
|
||||
.addSelect("member.firstname", "firstname")
|
||||
.addSelect("member.lastname", "lastname")
|
||||
.addSelect("member.nameaffix", "nameaffix")
|
||||
.addSelect("member.birthdate", "birthdate")
|
||||
.addSelect("salutation.salutation", "salutation")
|
||||
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
||||
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear")
|
||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge"),
|
||||
.addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge")
|
||||
.leftJoin("member.salutation", "salutation"),
|
||||
})
|
||||
export class memberView {
|
||||
@ViewColumn()
|
||||
id: number;
|
||||
|
||||
@ViewColumn()
|
||||
salutation: Salutation;
|
||||
salutation: string;
|
||||
|
||||
@ViewColumn()
|
||||
firstname: string;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
||||
import { membership } from "../entity/club/member/membership";
|
||||
import { Salutation } from "../enums/salutation";
|
||||
|
||||
@ViewEntity({
|
||||
expression: (datasource: DataSource) =>
|
||||
|
@ -10,11 +9,11 @@ import { Salutation } from "../enums/salutation";
|
|||
.select("status.id", "statusId")
|
||||
.addSelect("status.status", "status")
|
||||
.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("salutation.salutation", "memberSalutation")
|
||||
.addSelect("SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))", "durationInDays")
|
||||
.addSelect(
|
||||
"CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))",
|
||||
|
@ -22,6 +21,7 @@ import { Salutation } from "../enums/salutation";
|
|||
)
|
||||
.leftJoin("membership.status", "status")
|
||||
.leftJoin("membership.member", "member")
|
||||
.leftJoin("member.salutation", "salutation")
|
||||
.groupBy("status.id")
|
||||
.addGroupBy("member.id"),
|
||||
})
|
||||
|
@ -42,7 +42,7 @@ export class membershipView {
|
|||
memberId: number;
|
||||
|
||||
@ViewColumn()
|
||||
memberSalutation: Salutation;
|
||||
memberSalutation: string;
|
||||
|
||||
@ViewColumn()
|
||||
memberFirstname: string;
|
||||
|
|
Loading…
Add table
Reference in a new issue