Added statistics tools

This commit is contained in:
Maximilian Giller 2021-07-28 00:00:29 +02:00
parent d435d5db04
commit cee0139e06
2 changed files with 106 additions and 1 deletions

View file

@ -0,0 +1,71 @@
<template>
<b-table
:items="statistics"
primary-key="project_id"
hover
:busy="isLoading"
:fields="statistic_fields"
sort-by="name"
>
<template #table-busy>
<div class="text-center">
<b-spinner></b-spinner>
</div>
</template>
<!-- Custom data -->
<template #cell(project)="data">
<JugglProjectName :project="data.item" />
</template>
<template #cell(duration)="data">
{{ getDurationTimestamp(data.item.duration) }}
</template>
</b-table>
</template>
<script>
import JugglProjectName from "@/components/juggl/JugglProjectName";
import { helperService } from "@/services/helper.service.js";
export default {
name: "JugglProjectStatisticsList",
components: {
JugglProjectName
},
props: {
statistics: {
required: true,
type: Array
}
},
data: () => {
return {
statistic_fields: [
{
key: "project",
label: "Project"
},
{
key: "duration",
label: "Duration"
},
{
key: "record_count",
label: "Records"
}
]
};
},
computed: {
isLoading: function() {
return this.statistics === undefined;
}
},
methods: {
getDurationTimestamp: helperService.getDurationTimestamp
}
};
</script>
<style lang="sass"></style>

View file

@ -6,6 +6,7 @@ export const juggl = {
projects: [],
records: [],
tags: [],
statistics: [],
user: undefined,
auth: undefined,
recordsLimit: 0
@ -20,6 +21,9 @@ export const juggl = {
setTags(state, tags) {
state.tags = tags;
},
setStatistics(state, statistics) {
state.statistics = statistics;
},
setRecordsLimit(state, limit) {
state.recordsLimit = limit;
},
@ -66,7 +70,23 @@ export const juggl = {
return false;
}
var recProjectVisible = visibleIds.includes(rec.project_id);
if (projectVisible !== undefined && projectVisible !== recProjectVisible) {
if (
projectVisible !== undefined &&
projectVisible !== recProjectVisible
) {
return false;
}
return true;
});
},
getFilteredStatistics: (state, getters) => ({
projectVisible = undefined
}) => {
return Object.values(getters.statistics).filter(statistic => {
if (
projectVisible !== undefined &&
statistic.visible !== projectVisible
) {
return false;
}
return true;
@ -76,6 +96,7 @@ export const juggl = {
apiUrl: state => state.apiUrl,
user: state => state.user,
isLoggedIn: state => !!state.auth,
statistics: state => state.statistics,
records: state => state.records,
projects: state => state.projects,
tags: state => state.tags,
@ -223,6 +244,19 @@ export const juggl = {
commit("setRecords", allRecords);
});
},
loadTodaysStatistics({ dispatch }) {
dispatch("loadStatistics", { from: new Date(), until: new Date() });
},
loadStatistics({ commit }, { from, until }) {
var options = {
from: from,
until: until
};
return jugglService.getStatistics(options).then(r => {
commit("setStatistics", r.data.statistics);
});
},
loadRunningRecords({ commit, getters }) {
return jugglService.getRunningRecords().then(r => {
var allRecords = {