get statistics

This commit is contained in:
Julian Krauser 2025-01-22 08:56:52 +01:00
parent 131b3747de
commit 924a6bf647
4 changed files with 55 additions and 1 deletions

View file

@ -1,5 +1,9 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models"; import type {
CreateMemberViewModel,
MemberStatisticsViewModel,
UpdateMemberViewModel,
} from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
@ -12,6 +16,7 @@ export const useMemberStore = defineStore("member", {
loading: "loading" as "loading" | "fetched" | "failed", loading: "loading" as "loading" | "fetched" | "failed",
activeMember: null as number | null, activeMember: null as number | null,
activeMemberObj: null as MemberViewModel | null, activeMemberObj: null as MemberViewModel | null,
activeMemberStatistics: null as MemberStatisticsViewModel | null,
loadingActive: "loading" as "loading" | "fetched" | "failed", loadingActive: "loading" as "loading" | "fetched" | "failed",
}; };
}, },
@ -70,6 +75,17 @@ export const useMemberStore = defineStore("member", {
fetchMemberById(id: number) { fetchMemberById(id: number) {
return http.get(`/admin/member/${id}`); return http.get(`/admin/member/${id}`);
}, },
fetchMemberStatisticsByActiveId() {
http
.get(`/admin/member/${this.activeMember}/statistics`)
.then((res) => {
this.activeMemberStatistics = res.data;
})
.catch((err) => {});
},
fetchMemberStatisticsById(id: number) {
return http.get(`/admin/member/${id}/statistics`);
},
async createMember(member: CreateMemberViewModel): Promise<AxiosResponse<any, any>> { async createMember(member: CreateMemberViewModel): Promise<AxiosResponse<any, any>> {
const result = await http.post(`/admin/member`, { const result = await http.post(`/admin/member`, {
salutation: member.salutation, salutation: member.salutation,

View file

@ -6,6 +6,7 @@ import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.mode
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateMembershipViewModel, CreateMembershipViewModel,
MembershipStatisticsViewModel,
MembershipViewModel, MembershipViewModel,
UpdateMembershipViewModel, UpdateMembershipViewModel,
} from "@/viewmodels/admin/club/member/membership.models"; } from "@/viewmodels/admin/club/member/membership.models";
@ -14,6 +15,7 @@ export const useMembershipStore = defineStore("membership", {
state: () => { state: () => {
return { return {
memberships: [] as Array<MembershipViewModel>, memberships: [] as Array<MembershipViewModel>,
membershipStatistics: [] as Array<MembershipStatisticsViewModel>,
loading: "loading" as "loading" | "fetched" | "failed", loading: "loading" as "loading" | "fetched" | "failed",
}; };
}, },
@ -31,6 +33,15 @@ export const useMembershipStore = defineStore("membership", {
this.loading = "failed"; this.loading = "failed";
}); });
}, },
fetchMembershipStatisticsForMember() {
const memberId = useMemberStore().activeMember;
http
.get(`/admin/member/${memberId}/memberships/statistics`)
.then((result) => {
this.membershipStatistics = result.data;
})
.catch((err) => {});
},
fetchMembershipById(id: number) { fetchMembershipById(id: number) {
const memberId = useMemberStore().activeMember; const memberId = useMemberStore().activeMember;
return http.get(`/admin/member/${memberId}/membership/${id}`); return http.get(`/admin/member/${memberId}/membership/${id}`);

View file

@ -17,6 +17,18 @@ export interface MemberViewModel {
preferredCommunication?: Array<CommunicationViewModel>; preferredCommunication?: Array<CommunicationViewModel>;
} }
export interface MemberStatisticsViewModel {
id: number;
salutation: Salutation;
firstname: string;
lastname: string;
nameaffix: string;
birthdate: Date;
todayAge: number;
ageThisYear: number;
exactAge: string;
}
export interface CreateMemberViewModel { export interface CreateMemberViewModel {
salutation: Salutation; salutation: Salutation;
firstname: string; firstname: string;

View file

@ -1,3 +1,5 @@
import type { Salutation } from "../../../../enums/salutation";
export interface MembershipViewModel { export interface MembershipViewModel {
id: number; id: number;
start: Date; start: Date;
@ -7,6 +9,19 @@ export interface MembershipViewModel {
statusId: number; statusId: number;
} }
export interface MembershipStatisticsViewModel {
durationInDays: number;
durationInYears: string;
status: string;
statusId: number;
memberId: number;
memberSalutation: Salutation;
memberFirstname: string;
memberLastname: string;
memberNameaffix: string;
memberBirthdate: Date;
}
export interface CreateMembershipViewModel { export interface CreateMembershipViewModel {
start: Date; start: Date;
statusId: number; statusId: number;