enhance: add membership total view in member
This commit is contained in:
parent
0defc9b0ba
commit
ec0222ff2f
3 changed files with 37 additions and 4 deletions
|
@ -7,6 +7,7 @@ import { useMemberStore } from "./member";
|
||||||
import type {
|
import type {
|
||||||
CreateMembershipViewModel,
|
CreateMembershipViewModel,
|
||||||
MembershipStatisticsViewModel,
|
MembershipStatisticsViewModel,
|
||||||
|
MembershipTotalStatisticsViewModel,
|
||||||
MembershipViewModel,
|
MembershipViewModel,
|
||||||
UpdateMembershipViewModel,
|
UpdateMembershipViewModel,
|
||||||
} from "@/viewmodels/admin/club/member/membership.models";
|
} from "@/viewmodels/admin/club/member/membership.models";
|
||||||
|
@ -16,6 +17,7 @@ export const useMembershipStore = defineStore("membership", {
|
||||||
return {
|
return {
|
||||||
memberships: [] as Array<MembershipViewModel>,
|
memberships: [] as Array<MembershipViewModel>,
|
||||||
membershipStatistics: [] as Array<MembershipStatisticsViewModel>,
|
membershipStatistics: [] as Array<MembershipStatisticsViewModel>,
|
||||||
|
totalMembershipStatistics: undefined as undefined | MembershipTotalStatisticsViewModel,
|
||||||
loading: "loading" as "loading" | "fetched" | "failed",
|
loading: "loading" as "loading" | "fetched" | "failed",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -42,6 +44,15 @@ export const useMembershipStore = defineStore("membership", {
|
||||||
})
|
})
|
||||||
.catch((err) => {});
|
.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) {
|
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}`);
|
||||||
|
|
|
@ -21,6 +21,18 @@ export interface MembershipStatisticsViewModel {
|
||||||
memberBirthdate: Date;
|
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 {
|
export interface CreateMembershipViewModel {
|
||||||
start: Date;
|
start: Date;
|
||||||
statusId: number;
|
statusId: number;
|
||||||
|
|
|
@ -25,9 +25,15 @@
|
||||||
<label for="birthdate">Geburtsdatum</label>
|
<label for="birthdate">Geburtsdatum</label>
|
||||||
<input type="date" id="birthdate" :value="activeMemberObj.birthdate" readonly />
|
<input type="date" id="birthdate" :value="activeMemberObj.birthdate" readonly />
|
||||||
</div>
|
</div>
|
||||||
<div v-if="membershipStatistics.length != 0">
|
<div v-if="membershipStatistics.length != 0 || totalMembershipStatistics != undefined">
|
||||||
<p>Statistiken zur Mitgliedschaft</p>
|
<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
|
<div
|
||||||
v-for="stat in membershipStatistics"
|
v-for="stat in membershipStatistics"
|
||||||
class="bg-primary p-2 text-white flex flex-row justify-between items-center"
|
class="bg-primary p-2 text-white flex flex-row justify-between items-center"
|
||||||
|
@ -149,16 +155,20 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(useMemberStore, ["activeMemberObj", "activeMemberStatistics", "loadingActive"]),
|
...mapState(useMemberStore, ["activeMemberObj", "activeMemberStatistics", "loadingActive"]),
|
||||||
...mapState(useMembershipStore, ["membershipStatistics"]),
|
...mapState(useMembershipStore, ["membershipStatistics", "totalMembershipStatistics"]),
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchMemberByActiveId();
|
this.fetchMemberByActiveId();
|
||||||
this.fetchMemberStatisticsByActiveId();
|
this.fetchMemberStatisticsByActiveId();
|
||||||
this.fetchMembershipStatisticsForMember();
|
this.fetchMembershipStatisticsForMember();
|
||||||
|
this.fetchMembershipTotalStatisticsForMember();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions(useMemberStore, ["fetchMemberByActiveId", "fetchMemberStatisticsByActiveId"]),
|
...mapActions(useMemberStore, ["fetchMemberByActiveId", "fetchMemberStatisticsByActiveId"]),
|
||||||
...mapActions(useMembershipStore, ["fetchMembershipStatisticsForMember"]),
|
...mapActions(useMembershipStore, [
|
||||||
|
"fetchMembershipStatisticsForMember",
|
||||||
|
"fetchMembershipTotalStatisticsForMember",
|
||||||
|
]),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Add table
Reference in a new issue