mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 12:11:08 -04:00
117 lines
3.3 KiB
JavaScript
117 lines
3.3 KiB
JavaScript
const { defineStore } = window.pinia
|
|
import { useNotificationStore } from '@/scripts/stores/notification'
|
|
import axios from 'axios'
|
|
import { handleError } from '@/scripts/customer/helpers/error-handling'
|
|
|
|
export const useEstimateStore = defineStore({
|
|
id: 'customerEstimateStore',
|
|
state: () => ({
|
|
estimates: [],
|
|
totalEstimates: 0,
|
|
selectedViewEstimate: [],
|
|
}),
|
|
actions: {
|
|
fetchEstimate(params, slug) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.get(`/api/v1/${slug}/customer/estimates`, { params })
|
|
.then((response) => {
|
|
this.estimates = response.data.data
|
|
this.totalEstimates = response.data.meta.estimateTotalCount
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
fetchViewEstimate(params, slug) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.get(`/api/v1/${slug}/customer/estimates/${params.id}`, {
|
|
params,
|
|
})
|
|
|
|
.then((response) => {
|
|
this.selectedViewEstimate = response.data.data
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
searchEstimate(params, slug) {
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.get(`/api/v1/${slug}/customer/estimates`, { params })
|
|
.then((response) => {
|
|
this.estimates = response.data
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
acceptEstimate({ slug, id, status }) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.post(`/api/v1/${slug}/customer/estimate/${id}/status`, { status })
|
|
.then((response) => {
|
|
let pos = this.estimates.findIndex(
|
|
(estimate) => estimate.id === id
|
|
)
|
|
if (this.estimates[pos]) {
|
|
this.estimates[pos].status = 'ACCEPTED'
|
|
|
|
const notificationStore = useNotificationStore(true)
|
|
notificationStore.showNotification({
|
|
type: 'success',
|
|
message: global.t('estimates.marked_as_accepted_message'),
|
|
})
|
|
}
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
|
|
rejectEstimate({ slug, id, status }) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
axios
|
|
.post(`/api/v1/${slug}/customer/estimate/${id}/status`, { status })
|
|
.then((response) => {
|
|
let pos = this.estimates.findIndex(
|
|
(estimate) => estimate.id === id
|
|
)
|
|
if (this.estimates[pos]) {
|
|
this.estimates[pos].status = 'REJECTED'
|
|
|
|
const notificationStore = useNotificationStore(true)
|
|
notificationStore.showNotification({
|
|
type: 'success',
|
|
message: global.t('estimates.marked_as_rejected_message'),
|
|
})
|
|
}
|
|
resolve(response)
|
|
})
|
|
.catch((err) => {
|
|
handleError(err)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
},
|
|
})
|