Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.
djangodockerhandcodedpythonself-hostedtime-trackingtimetracker
1import Vue from 'vue';
2
3import fetch from '../../fetch';
4
5
6export default {
7 namespaced: true,
8 state: {
9 all: [],
10 },
11 getters: {
12 getSelectUsers: state => {
13 return state.all.map(user => {
14 return {id: user.url, text: user.username};
15 });
16 },
17 getUser: state => url => {
18 const user = state.all.find(user => {
19 return user.url == url;
20 });
21 if (typeof(user) === 'undefined') return {};
22 else return user;
23 },
24 },
25 mutations: {
26 setUsers: (state, users) => state.all = users,
27 addUser: (state, user) => state.all.unshift(user),
28 updateUser: (state, opts) => Vue.set(state.all, opts.index, opts.user),
29 removeUser: (state, index) => Vue.delete(state.all, index),
30 },
31 actions: {
32 fetchUsers({commit}) {
33 commit('addLoading', 'users', {root: true});
34 fetch.get(timestrapConfig.API_URLS.USERS).then(response => {
35 commit('setUsers', response.data);
36 commit('removeLoading', 'users', {root: true});
37 }).catch(error => console.log(error));
38 },
39 createUser({commit}, user) {
40 fetch.post(timestrapConfig.API_URLS.USERS, user).then(response => {
41 commit('addUser', response.data);
42 }).catch(error => console.log(error));
43 },
44 editUser({commit, state}, user) {
45 fetch.put(user.url, user).then(response => {
46 const index = state.all.findIndex(item => {
47 return item.id === response.data.id;
48 });
49 commit('updateUser', {index: index, user: response.data});
50 }).catch(error => console.log(error));
51 },
52 deleteUser({commit, state}, user) {
53 const index = state.all.findIndex(item => {
54 return item.id === user.id;
55 });
56 fetch.delete(state.all[index].url).then(() => {
57 commit('removeUser', index);
58 }).catch(error => console.log(error));
59 },
60 },
61};