Files
hammond/ui/src/state/modules/vehicles.js
2021-08-13 13:04:00 +05:30

176 lines
5.6 KiB
JavaScript

import axios from 'axios'
import { filter } from 'lodash'
import parseISO from 'date-fns/parseISO'
export const state = {
vehicles: [],
roleMasters: [],
fuelUnitMasters: [],
distanceUnitMasters: [],
currencyMasters: [],
fuelTypeMasters: [],
quickEntries: [],
vehicleStats: new Map(),
}
export const getters = {
unprocessedQuickEntries: (state) => {
return filter(state.quickEntries, (o) => o.processDate == null)
},
processedQuickEntries: (state) => {
return filter(state.quickEntries, (o) => o.processDate != null)
},
}
export const mutations = {
CACHE_VEHICLE(state, newVehicles) {
state.vehicles = newVehicles
},
CACHE_VEHICLE_STATS(state, stats) {
state.vehicleStats.set(stats.vehicleId, stats)
},
CACHE_FUEL_UNIT_MASTERS(state, masters) {
state.fuelUnitMasters = masters
},
CACHE_DISTANCE_UNIT_MASTERS(state, masters) {
state.distanceUnitMasters = masters
},
CACHE_FUEL_TYPE_MASTERS(state, masters) {
state.fuelTypeMasters = masters
},
CACHE_CURRENCY_MASTERS(state, masters) {
state.currencyMasters = masters
},
CACHE_QUICK_ENTRIES(state, entries) {
state.quickEntries = entries
},
CACHE_ROLE_MASTERS(state, roles) {
state.roleMasters = roles
},
}
export const actions = {
init({ dispatch, rootState }) {
const { currentUser } = rootState.auth
if (currentUser) {
dispatch('fetchVehicles')
dispatch('fetchMasters')
dispatch('fetchQuickEntries', { force: true })
}
},
fetchMasters({ commit, state, rootState }) {
return axios.get('/api/masters').then((response) => {
const fuelUnitMasters = response.data.fuelUnits
const fuelTypeMasters = response.data.fuelTypes
commit('CACHE_FUEL_UNIT_MASTERS', fuelUnitMasters)
commit('CACHE_FUEL_TYPE_MASTERS', fuelTypeMasters)
commit('CACHE_CURRENCY_MASTERS', response.data.currencies)
commit('CACHE_DISTANCE_UNIT_MASTERS', response.data.distanceUnits)
commit('CACHE_ROLE_MASTERS', response.data.roles)
return response.data
})
},
fetchVehicles({ commit, state, rootState }) {
return axios.get('/api/me/vehicles').then((response) => {
const data = response.data
commit('CACHE_VEHICLE', data)
return data
})
},
fetchQuickEntries({ commit, state, rootState }, { force }) {
if (state.quickEntries && !force) {
return Promise.resolve(state.quickEntries)
}
return axios.get('/api/me/quickEntries').then((response) => {
const data = response.data
commit('CACHE_QUICK_ENTRIES', data)
return data
})
},
fetchVehicleById({ commit, state, rootState }, { vehicleId }) {
const matchedVehicle = state.vehicles.find((vehicle) => vehicle.id === vehicleId)
if (matchedVehicle) {
return Promise.resolve(matchedVehicle)
}
return axios.get('/api/vehicles/' + vehicleId).then((response) => {
const data = response.data
// commit('CACHE_VEHICLE', data)
return data
})
},
fetchFillupById({ commit, state, rootState }, { vehicleId, fillupId }) {
return axios.get(`/api/vehicles/${vehicleId}/fillups/${fillupId}`).then((response) => {
const data = response.data
data.date = parseISO(data.date)
return data
})
},
deleteFillupById({ commit, state, rootState }, { vehicleId, fillupId }) {
return axios.delete(`/api/vehicles/${vehicleId}/fillups/${fillupId}`).then((response) => {
const data = response.data
return data
})
},
fetchExpenseById({ commit, state, rootState }, { vehicleId, expenseId }) {
return axios.get(`/api/vehicles/${vehicleId}/expenses/${expenseId}`).then((response) => {
const data = response.data
data.date = parseISO(data.date)
return data
})
},
deleteExpenseById({ commit, state, rootState }, { vehicleId, expenseId }) {
return axios.delete(`/api/vehicles/${vehicleId}/expenses/${expenseId}`).then((response) => {
const data = response.data
return data
})
},
fetchAttachmentsByVehicleId({ commit, state, rootState }, { vehicleId }) {
return axios.get(`/api/vehicles/${vehicleId}/attachments`).then((response) => {
const data = response.data
return data
})
},
fetchUsersByVehicleId({ commit, state, rootState }, { vehicleId, force }) {
return axios.get(`/api/vehicles/${vehicleId}/users`).then((response) => {
const data = response.data
// data.vehicleId = vehicleId
// commit('CACHE_VEHICLE_STATS', data)
return data
})
},
fetchFuelSubtypesByVehicleId({ commit, state, rootState }, { vehicleId, force }) {
return axios.get(`/api/vehicles/${vehicleId}/fuelSubTypes`).then((response) => {
const data = response.data
return data
})
},
fetchStatsByVehicleId({ commit, state, rootState }, { vehicleId, force }) {
if (state.vehicleStats.has(vehicleId) && !force) {
return Promise.resolve(state.vehicleStats.get(vehicleId))
}
return axios.get(`/api/vehicles/${vehicleId}/stats`).then((response) => {
const data = response.data
data.vehicleId = vehicleId
commit('CACHE_VEHICLE_STATS', data)
return data
})
},
setQuickEntryAsProcessed({ commit, state, rootState, dispatch }, { id }) {
return axios.post(`/api/quickEntries/${id}/process`, {}).then((response) => {
const data = response.data
dispatch('fetchQuickEntries', { force: true })
return data
})
},
deleteQuickEntry({ commit, state, rootState, dispatch }, { id }) {
return axios.delete(`/api/quickEntries/${id}`).then((response) => {
const data = response.data
dispatch('fetchQuickEntries', { force: true })
return data
})
},
}