import axios from 'axios' import url from '@/plugins/routes' const state = { month: [], disabled: false } const mutations = { createMonth: (state, date) => { let month = [] let id = 0 const year = date.getFullYear() const mon = date.getMonth() let a = new Date(year, mon + 1, 0) let days = a.getDate() let startDate = 1 for (let intDay = 1; intDay <= days; intDay++) { if (new Date(year, mon, intDay).getDay() === 3) { startDate = intDay break } } let end = false let week = { id: id, days: {} } for (let intDay = startDate; intDay <= days + 7; intDay++) { if (end) break let currentDate = new Date(year, mon, intDay) switch (currentDate.getDay()) { case 1: mutations.setStartEndDate(week) month.push(week) id++ week = { id: id, days: {} } week.days.monday = { id: currentDate.getDay(), date: currentDate, name: 'Montag', worker: [], loading: false } break case 2: week.days.tuesday = { id: currentDate.getDay(), date: currentDate, name: 'Dienstag', worker: [], loading: false } break case 3: if (currentDate.getMonth() === mon + 1) { end = true mutations.setStartEndDate(week) month.push(week) } else { week.days.wednesday = { id: currentDate.getDay(), date: currentDate, name: 'Mittwoch', worker: [], loading: false } } break case 4: week.days.thursday = { id: currentDate.getDay(), date: currentDate, name: 'Donnerstag', worker: [], loading: false } break case 5: week.days.friday = { id: currentDate.getDay(), date: currentDate, name: 'Freitag', worker: [], loading: false } break case 6: week.days.satturday = { id: currentDate.getDay(), date: currentDate, name: 'Samstag', worker: [], loading: false } break case 0: week.days.sunday = { id: currentDate.getDay(), date: currentDate, name: 'Sontag', worker: [], loading: false } break } } state.month = month }, updateMonth: (state, data) => { const date = new Date(data.start.year, data.start.month - 1, data.start.day) const user = data.user for (let week = 0; week < state.month.length; week++) { for (let day in state.month[week].days) { if (state.month[week].days[day].date - date === 0) { let worker = state.month[week].days[day].worker.find(a => { return a.username === user.username }) if (!worker && data.com === 'add') { state.month[week].days[day].worker.push({ firstname: user.firstname, lastname: user.lastname, username: user.username, fullName: user.firstname + ' ' + user.lastname }) } } } } }, setDayLoading: (state, { date, getters }) => { let day = getters.getDay(date) day.loading = true }, setDayNotLoading: (state, { date, getters }) => { let day = getters.getDay(date) day.loading = false }, setDisabled: (state, data) => { state.disabled = data }, setStartEndDate: week => { if (week.days.monday) { week.startDate = week.days.monday.date } else if (week.days.tuesday) { week.startDate = week.days.tuesday.date } else if (week.days.wednesday) { week.startDate = week.days.wednesday.date } else if (week.days.thursday) { week.startDate = week.days.thursday.date } else if (week.days.friday) { week.startDate = week.days.friday.date } else if (week.days.satturday) { week.startDate = week.days.satturday.date } else if (week.days.sunday) { week.startDate = week.days.sunday.date } if (week.days.sunday) { week.endDate = week.days.sunday.date } else if (week.days.satturday) { week.endDate = week.days.satturday.date } else if (week.days.friday) { week.endDate = week.days.friday.date } else if (week.days.thursday) { week.endDate = week.days.thursday.date } else if (week.days.wednesday) { week.endDate = week.days.wednesday.date } else if (week.days.tuesday) { week.endDate = week.days.tuesday.date } else if (week.days.monday) { week.endDate = week.days.monday.date } } } const actions = { createMonth({ commit }, date) { commit('setDisabled', true) commit('createMonth', date) commit('setDisabled', false) }, setDayLoading({ commit, getters }, date) { commit('setDayLoading', { date, getters }) }, setDayNotLoading({ commit, getters }, date) { commit('setDayNotLoading', { date, getters }) }, async getUser({ commit, rootState, dispatch, getters }, data) { commit('setDayLoading', { date: data.startdatetime, getters }) try { const response = await axios.post( url.user.job, { ...data }, { headers: { Token: rootState.login.user.accessToken } } ) for (let item = 0; item < response.data.length; item++) { commit('updateMonth', { ...response.data[item], com: 'add' }) } commit('setDayNotLoading', { date: data.startdatetime, getters }) } catch (e) { if (e.response) if (e.response.status === 401) dispatch('logout', null, { root: true }) } } } const getters = { month: state => { return state.month }, getDay: state => date => { for (let week = 0; week < state.month.length; week++) { for (let day in state.month[week].days) { if (state.month[week].days[day].date - date === 0) { return state.month[week].days[day] } } } }, disabled: state => { return state.disabled } } export default { namespaced: true, state, mutations, actions, getters }