enhance: add membership total view in member

This commit is contained in:
Julian Krauser 2025-05-30 15:13:50 +02:00
parent 0defc9b0ba
commit ec0222ff2f
3 changed files with 37 additions and 4 deletions

View file

@ -7,6 +7,7 @@ import { useMemberStore } from "./member";
import type {
CreateMembershipViewModel,
MembershipStatisticsViewModel,
MembershipTotalStatisticsViewModel,
MembershipViewModel,
UpdateMembershipViewModel,
} from "@/viewmodels/admin/club/member/membership.models";
@ -16,6 +17,7 @@ export const useMembershipStore = defineStore("membership", {
return {
memberships: [] as Array<MembershipViewModel>,
membershipStatistics: [] as Array<MembershipStatisticsViewModel>,
totalMembershipStatistics: undefined as undefined | MembershipTotalStatisticsViewModel,
loading: "loading" as "loading" | "fetched" | "failed",
};
},
@ -42,6 +44,15 @@ export const useMembershipStore = defineStore("membership", {
})
.catch((err) => {});
},
fetchMembershipTotalStatisticsForMember() {
const memberId = useMemberStore().activeMember;
http
.get(`/admin/member/${memberId}/memberships/totalstatistics`)
.then((result) => {
this.totalMembershipStatistics = result.data;
})
.catch((err) => {});
},
fetchMembershipById(id: number) {
const memberId = useMemberStore().activeMember;
return http.get(`/admin/member/${memberId}/membership/${id}`);

View file

@ -21,6 +21,18 @@ export interface MembershipStatisticsViewModel {
memberBirthdate: Date;
}
export interface MembershipTotalStatisticsViewModel {
durationInDays: number;
durationInYears: number;
exactDuration: string;
memberId: string;
memberSalutation: string;
memberFirstname: string;
memberLastname: string;
memberNameaffix: string;
memberBirthdate: Date;
}
export interface CreateMembershipViewModel {
start: Date;
statusId: number;

View file

@ -25,9 +25,15 @@
<label for="birthdate">Geburtsdatum</label>
<input type="date" id="birthdate" :value="activeMemberObj.birthdate" readonly />
</div>
<div v-if="membershipStatistics.length != 0">
<div v-if="membershipStatistics.length != 0 || totalMembershipStatistics != undefined">
<p>Statistiken zur Mitgliedschaft</p>
<div class="flex flex-col h-fit w-full border border-primary rounded-md">
<div class="flex flex-col h-fit w-full rounded-md overflow-hidden">
<div class="bg-primary p-2 text-white flex flex-row justify-between items-center">
<p>
gesamt {{ totalMembershipStatistics.durationInDays }} Tage
<span class="whitespace-nowrap"> ~> {{ totalMembershipStatistics.exactDuration }}</span>
</p>
</div>
<div
v-for="stat in membershipStatistics"
class="bg-primary p-2 text-white flex flex-row justify-between items-center"
@ -149,16 +155,20 @@ export default defineComponent({
},
computed: {
...mapState(useMemberStore, ["activeMemberObj", "activeMemberStatistics", "loadingActive"]),
...mapState(useMembershipStore, ["membershipStatistics"]),
...mapState(useMembershipStore, ["membershipStatistics", "totalMembershipStatistics"]),
},
mounted() {
this.fetchMemberByActiveId();
this.fetchMemberStatisticsByActiveId();
this.fetchMembershipStatisticsForMember();
this.fetchMembershipTotalStatisticsForMember();
},
methods: {
...mapActions(useMemberStore, ["fetchMemberByActiveId", "fetchMemberStatisticsByActiveId"]),
...mapActions(useMembershipStore, ["fetchMembershipStatisticsForMember"]),
...mapActions(useMembershipStore, [
"fetchMembershipStatisticsForMember",
"fetchMembershipTotalStatisticsForMember",
]),
},
});
</script>