flaschengeist-frontend/src/store/modules/serviceManagement.js

461 lines
13 KiB
JavaScript
Raw Normal View History

2020-01-18 11:49:49 +00:00
import axios from 'axios'
import url from '@/plugins/routes'
const timeout = 20000
2020-01-18 11:49:49 +00:00
const state = {
month: [],
allUsers: [],
disabled: false
2020-01-18 11:49:49 +00:00
}
const mutations = {
setAllUsers: (state, users) => {
state.allUsers = []
state.allUsers = users
for (let i = 0; i < state.allUsers.length; i++) {
state.allUsers[i].fullName =
state.allUsers[i].firstname + ' ' + state.allUsers[i].lastname
}
},
createMonth: (state, date) => {
let month = []
let id = 0
const year = date.getFullYear()
const mon = date.getMonth()
2020-01-19 20:31:48 +00:00
let a = new Date(year, mon + 1, 0)
2020-01-18 11:49:49 +00:00
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
}
}
2020-01-19 20:31:48 +00:00
let end = false
2020-01-18 11:49:49 +00:00
let week = { id: id, days: {} }
2020-01-19 20:31:48 +00:00
for (let intDay = startDate; intDay <= days + 7; intDay++) {
if (end) break
let currentDate = new Date(year, mon, intDay)
2020-01-18 11:49:49 +00:00
switch (currentDate.getDay()) {
case 1:
2020-01-19 20:31:48 +00:00
mutations.setStartEndDate(week)
2020-01-18 11:49:49 +00:00
month.push(week)
id++
week = { id: id, days: {} }
week.days.monday = {
id: currentDate.getDay(),
date: currentDate,
name: 'Montag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
case 2:
week.days.tuesday = {
id: currentDate.getDay(),
date: currentDate,
name: 'Dienstag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
case 3:
2020-01-19 20:31:48 +00:00
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: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-19 20:31:48 +00:00
}
2020-01-18 11:49:49 +00:00
}
break
case 4:
week.days.thursday = {
id: currentDate.getDay(),
date: currentDate,
name: 'Donnerstag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
case 5:
week.days.friday = {
id: currentDate.getDay(),
date: currentDate,
name: 'Freitag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
case 6:
week.days.satturday = {
id: currentDate.getDay(),
date: currentDate,
name: 'Samstag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
case 0:
week.days.sunday = {
id: currentDate.getDay(),
date: currentDate,
2020-06-05 21:24:53 +00:00
name: 'Sonntag',
worker: [],
2020-02-24 11:19:13 +00:00
loading: false,
locked: false,
jobkinddate: []
2020-01-18 11:49:49 +00:00
}
break
}
}
2020-01-19 20:31:48 +00:00
state.month = month
},
setStartEndDate: week => {
2020-01-18 11:49:49 +00:00
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
}
},
// eslint-disable-next-line no-unused-vars
updateMonthWorker: (state, { workers, date, getters }) => {
var day = getters.getDay(date)
day.jobkinddate.forEach(item => {
var filtered = workers.filter(worker => {
return item.job_kind.id === (worker.job_kind ? worker.job_kind.id : 1)
})
var filteredWorkers = []
filtered.forEach(item => {
filteredWorkers.push(item.user)
})
filteredWorkers.forEach(worker => {
2020-06-05 20:50:10 +00:00
if (
!item.worker.find(a => {
return a.id === worker.id
})
) {
item.worker.push(worker)
item.backupWorker.push(worker)
}
})
item.worker.forEach(worker => {
2020-06-05 20:50:10 +00:00
if (
!filteredWorkers.find(a => {
return a.id === worker.id
})
) {
item.worker.splice(item.worker.indexOf(worker), 1)
}
})
})
},
updateMonthLocked: (state, { locked, date, getters }) => {
var day = getters.getDay(date)
day.locked = !!locked
},
updateMonthJobkind: (state, { data, date, getters }) => {
let day = getters.getDay(date)
var backup = []
for (let jobkind in day.jobkinddate) {
if (day.jobkinddate[jobkind].worker !== undefined) {
backup.push({
id: day.jobkinddate[jobkind].job_kind.id,
worker: day.jobkinddate[jobkind].worker,
backupWorker: day.jobkinddate[jobkind].backupWorker
})
} else {
backup.push({
id: day.jobkinddate[jobkind].job_kind.id,
worker: [],
backupWorker: []
})
}
}
day.jobkinddate = [...data]
var test = day.jobkinddate.find(jobkind => {
return jobkind.job_kind.id === 1
})
if (!test) {
day.jobkinddate.push({
id: -1,
job_kind: { id: 1, name: 'Bardienst' },
maxpersons: 2,
daydate: {
year: date.getFullYear(),
month: date.getMonth() + 1,
day: date.getDate()
},
worker: [],
backupWorker: []
})
}
for (var jobkind in day.jobkinddate) {
var worker = backup.find(item => {
return item.id === day.jobkinddate[jobkind].job_kind.id
})
day.jobkinddate[jobkind].worker = worker ? worker.worker : []
day.jobkinddate[jobkind].backupWorker = worker ? worker.backupWorker : []
}
},
2020-03-13 17:07:57 +00:00
setAllDayLoading: state => {
for (let week = 0; week < state.month.length; week++) {
for (let day in state.month[week].days) {
state.month[week].days[day].loading = true
}
}
},
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
2020-01-18 11:49:49 +00:00
}
}
const actions = {
createMonth({ commit }, date) {
commit('setDisabled', true)
2020-01-18 11:49:49 +00:00
commit('createMonth', date)
commit('setDisabled', false)
2020-01-18 11:49:49 +00:00
},
async getAllUsers({ commit, rootState, dispatch }) {
try {
2020-03-05 20:16:47 +00:00
const response = await axios.get(url.vorstand.sm.searchUser, {
headers: { Token: rootState.login.user.accessToken },
timeout
2020-03-05 20:16:47 +00:00
})
2020-01-18 11:49:49 +00:00
commit('setAllUsers', response.data)
2020-08-25 02:27:27 +00:00
dispatch('getLifetime', null, { root: true })
2020-01-18 11:49:49 +00:00
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
2020-01-18 11:49:49 +00:00
if (e.response)
if (e.response.data === 401) dispatch('logout', null, { root: true })
}
},
2020-01-19 20:31:48 +00:00
// eslint-disable-next-line no-unused-vars
async addUser({ commit, rootState, dispatch }, data) {
try {
// eslint-disable-next-line no-unused-vars
2020-01-19 20:31:48 +00:00
const response = await axios.post(
url.vorstand.sm.addUser,
{ ...data },
{
headers: { Token: rootState.login.user.accessToken },
timeout
2020-01-19 20:31:48 +00:00
}
)
//commit('updateMonth', { ...response.data[0], com: 'add' })
2020-08-25 02:27:27 +00:00
dispatch('getLifetime', null, { root: true })
2020-01-19 20:31:48 +00:00
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
2020-01-19 20:31:48 +00:00
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
2020-03-13 17:07:57 +00:00
// eslint-disable-next-line no-unused-vars
async getUsers({ commit, rootState, dispatch, getters }, data) {
commit('setAllDayLoading')
try {
const response = await axios.post(
url.vorstand.sm.getUsers,
{ ...data },
{ headers: { Token: rootState.login.user.accessToken }, timeout }
2020-03-13 17:07:57 +00:00
)
for (var day in response.data) {
2020-03-13 17:07:57 +00:00
var date = new Date(
response.data[day].day.date.year,
response.data[day].day.date.month - 1,
response.data[day].day.date.day
)
commit('updateMonthJobkind', {
data: [...response.data[day].jobkinddate],
date,
getters
})
commit('updateMonthWorker', {
workers: [...response.data[day].worker],
date,
getters
})
commit('updateMonthLocked', {
locked: response.data[day].day.locked,
date,
getters
})
commit('setDayNotLoading', { date, getters })
2020-03-13 17:07:57 +00:00
}
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
2020-03-13 17:07:57 +00:00
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
2020-01-19 20:31:48 +00:00
// eslint-disable-next-line no-unused-vars
async deleteUser({ commit, rootState, dispatch }, data) {
try {
// eslint-disable-next-line no-unused-vars
const response = await axios.post(
url.vorstand.sm.deleteUser,
{ ...data },
{ headers: { Token: rootState.login.user.accessToken }, timeout }
2020-01-19 20:31:48 +00:00
)
//commit('updateMonth', { ...data, com: 'delete' })
2020-08-25 02:27:27 +00:00
dispatch('getLifetime', null, { root: true })
2020-01-19 20:31:48 +00:00
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
2020-01-19 20:31:48 +00:00
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
async lockDay({ commit, rootState, dispatch, getters }, data) {
2020-02-24 11:19:13 +00:00
try {
const response = await axios.post(
url.vorstand.sm.lockDay,
{ ...data },
{ headers: { Token: rootState.login.user.accessToken }, timeout }
2020-02-24 11:19:13 +00:00
)
console.log(response.data)
2020-06-05 20:50:10 +00:00
let date = new Date(
response.data.date.year,
response.data.date.month - 1,
response.data.date.day
)
commit('updateMonthLocked', {
locked: response.data.locked,
date,
getters
})
2020-08-25 02:27:27 +00:00
dispatch('getLifetime', null, { root: true })
2020-02-24 11:19:13 +00:00
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
2020-02-24 11:19:13 +00:00
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
async updateJobKindDate(
{ commit, rootState, dispatch, getters },
{ data, date }
) {
try {
commit('setDayLoading', { date, getters })
const response = await axios.post(
url.vorstand.sm.updateJobKindDates,
[...data],
{ headers: { Token: rootState.login.user.accessToken }, timeout }
)
commit('updateMonthJobkind', { data: response.data, date, getters })
commit('setDayNotLoading', { date, getters })
2020-08-25 02:27:27 +00:00
dispatch('getLifetime', null, { root: true })
} catch (e) {
if (e.message == 'Network Error') {
dispatch('connectionError/addError', null, { root: true })
}
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
2020-02-24 11:19:13 +00:00
}
},
setDayLoading({ commit, getters }, date) {
2020-01-26 11:55:39 +00:00
commit('setDayLoading', { date, getters })
},
2020-01-26 11:55:39 +00:00
setDayNotLoading({ commit, getters }, date) {
commit('setDayNotLoading', { date, getters })
2020-01-18 11:49:49 +00:00
}
}
const getters = {
month: state => {
return state.month
},
allUsers: state => {
return state.allUsers
},
getDayLoading: (state, getters) => date => {
let day = getters.getDay(date)
return day.loading
},
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
2020-03-13 17:07:57 +00:00
},
getStartDate: state => {
return state.month[0].startDate
},
getEndDate: state => {
return state.month[state.month.length - 1].endDate
2020-01-18 11:49:49 +00:00
}
}
export default {
namespaced: true,
state,
mutations,
actions,
getters
}