repos
/ timestrap-django master

timestrap-django

mirror archived upstream

Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.

djangodockerhandcodedpythonself-hostedtime-trackingtimetracker

2.8 KB · 101 lines · JavaScript Raw History
  1import fetch from '../../fetch';
  2
  3
  4export default {
  5  namespaced: true,
  6  state: {
  7    all: [],
  8    subtotal: 0,
  9    total: 0,
 10
 11    orderBy: null,
 12    orderDir: null,
 13
 14    minDate: null,
 15    maxDate: null,
 16    user: null,
 17    client: null,
 18    project: null,
 19    task: null,
 20  },
 21  getters: {
 22    getSelectEntries: state => {
 23      return state.all.map(entry => {
 24        return {id: entry.url, text: entry.name};
 25      });
 26    },
 27    isFiltered: state => {
 28      return state.minDate != null || state.maxDate != null || state.task != null
 29      || state.user != null || state.client != null || state.project != null
 30    }
 31  },
 32  mutations: {
 33    reset: state => {
 34      state.orderBy = null;
 35      state.orderDir = null;
 36      state.minDate = null;
 37      state.maxDate = null;
 38      state.user = null;
 39      state.client = null;
 40      state.project = null;
 41      state.task = null;
 42    },
 43
 44    setEntries: (state, entries) => state.all = entries,
 45    setSubtotal: (state, subtotal) => state.subtotal = subtotal,
 46    setTotal: (state, total) => state.total = total,
 47
 48    setOrderBy: (state, orderBy) => state.orderBy = orderBy,
 49    setOrderDir: (state, orderDir) => state.orderDir = orderDir,
 50
 51    setMinDate: (state, minDate) => state.minDate = minDate,
 52    setMaxDate: (state, maxDate) => state.maxDate = maxDate,
 53    setUser: (state, user) => state.user = user,
 54    setClient: (state, client) => state.client = client,
 55    setProject: (state, project) => state.project = project,
 56    setTask: (state, task) => state.task = task,
 57  },
 58  actions: {
 59    getReport({commit, state}) {
 60      commit('addLoading', 'reports', {root: true});
 61
 62      let ordering = (state.orderDir == 'desc' ? '-' : '') + state.orderBy;
 63      if (state.orderBy != 'date') ordering += ',-date';
 64
 65      function urlToId(url) {
 66        if (url !== null) {
 67          let splitUrl = url.split('/');
 68          return splitUrl[splitUrl.length - 2];
 69        } else {
 70          return "";
 71        }
 72      }
 73
 74      let getOptions = {
 75        params: {
 76          ordering: ordering,
 77          min_date: state.minDate,
 78          max_date:state.maxDate,
 79          user: urlToId(state.user),
 80          project: urlToId(state.project),
 81          project__client: urlToId(state.client),
 82          task: urlToId(state.task),
 83        },
 84      };
 85
 86      fetch.get(timestrapConfig.API_URLS.ENTRIES, getOptions).then(response => {
 87        commit('setEntries', response.data.results);
 88        commit('setTotal', response.data.total_duration);
 89        commit('setSubtotal', response.data.subtotal_duration);
 90        commit('removeLoading', 'reports', {root: true});
 91      }).catch(error => {
 92        console.log(error);
 93        commit('setEntries', []);
 94        commit('setTotal', 0);
 95        commit('setSubtotal', 0);
 96        commit('removeLoading', 'reports', {root: true});
 97      });
 98    },
 99  },
100};