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 getNumberOfClients: state => {
13 return state.all.length;
14 },
15 getSelectClients: state => {
16 return state.all.map(client => {
17 return {id: client.url, text: client.name};
18 });
19 },
20 getSearchClients: state => search => {
21 return state.all.filter(client => {
22 return client.name.toLowerCase().includes(search);
23 });
24 },
25 getClient: state => url => {
26 const client = state.all.find(client => {
27 return client.url == url;
28 });
29 if (typeof(client) === 'undefined') return {};
30 else return client;
31 },
32 },
33 mutations: {
34 setClients: (state, clients) => state.all = clients,
35 addClient: (state, client) => state.all.unshift(client),
36 updateClient: (state, opts) => Vue.set(state.all, opts.index, opts.client),
37 removeClient: (state, index) => Vue.delete(state.all, index),
38 },
39 actions: {
40 fetchClients({commit}) {
41 commit('addLoading', 'clients', {root: true});
42 fetch.get(timestrapConfig.API_URLS.CLIENTS).then(response => {
43 commit('setClients', response.data);
44 commit('removeLoading', 'clients', {root: true});
45 }).catch(error => console.log(error));
46 },
47 createClient({commit}, client) {
48 fetch.post(timestrapConfig.API_URLS.CLIENTS, client).then(response => {
49 commit('addClient', response.data);
50 }).catch(error => console.log(error));
51 },
52 editClient({commit, state}, client) {
53 fetch.put(client.url, client).then(response => {
54 const index = state.all.findIndex(item => {
55 return item.id === response.data.id;
56 });
57 commit('updateClient', {index: index, client: response.data});
58 }).catch(error => console.log(error));
59 },
60 deleteClient({commit, state}, client) {
61 const index = state.all.findIndex(item => {
62 return item.id === client.id;
63 });
64 fetch.delete(state.all[index].url).then(() => {
65 commit('removeClient', index);
66 }).catch(error => console.log(error));
67 },
68 },
69};