You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
7.2 KiB
JavaScript
277 lines
7.2 KiB
JavaScript
|
2 months ago
|
// src/store/procesoAdmision.store.js
|
||
|
|
import { defineStore } from 'pinia'
|
||
|
|
import api from '../axios'
|
||
|
|
|
||
|
|
export const useProcesoAdmisionStore = defineStore('procesoAdmision', {
|
||
|
|
state: () => ({
|
||
|
|
loading: false,
|
||
|
|
error: null,
|
||
|
|
|
||
|
|
// listado
|
||
|
|
procesos: [],
|
||
|
|
pagination: {
|
||
|
|
current_page: 1,
|
||
|
|
per_page: 15,
|
||
|
|
total: 0,
|
||
|
|
last_page: 1
|
||
|
|
},
|
||
|
|
|
||
|
|
// detalle
|
||
|
|
procesoActual: null,
|
||
|
|
|
||
|
|
// detalles del proceso actual
|
||
|
|
detalles: []
|
||
|
|
}),
|
||
|
|
|
||
|
|
actions: {
|
||
|
|
_setError(err) {
|
||
|
|
this.error =
|
||
|
|
err?.response?.data?.message ||
|
||
|
|
err?.response?.data?.error ||
|
||
|
|
err?.message ||
|
||
|
|
'Ocurrió un error'
|
||
|
|
},
|
||
|
|
|
||
|
|
// =========================
|
||
|
|
// PROCESOS
|
||
|
|
// =========================
|
||
|
|
|
||
|
|
// GET /api/admin/procesos-admision
|
||
|
|
async fetchProcesos(params = {}) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const { data } = await api.get('/admin/procesos-admision', {
|
||
|
|
params: {
|
||
|
|
per_page: this.pagination.per_page,
|
||
|
|
...params
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
// Laravel paginate
|
||
|
|
this.procesos = data.data ?? []
|
||
|
|
this.pagination.current_page = data.current_page ?? 1
|
||
|
|
this.pagination.per_page = data.per_page ?? this.pagination.per_page
|
||
|
|
this.pagination.total = data.total ?? this.procesos.length
|
||
|
|
this.pagination.last_page = data.last_page ?? 1
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// GET /api/admin/procesos-admision/{id}?include_detalles=1
|
||
|
|
async fetchProceso(id, { include_detalles = true } = {}) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const { data } = await api.get(`/admin/procesos-admision/${id}`, {
|
||
|
|
params: { include_detalles: include_detalles ? 1 : 0 }
|
||
|
|
})
|
||
|
|
|
||
|
|
this.procesoActual = data
|
||
|
|
this.detalles = Array.isArray(data.detalles) ? data.detalles : []
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// POST /api/admin/procesos-admision (multipart/form-data)
|
||
|
|
async createProceso(payload) {
|
||
|
|
// payload puede ser objeto normal o FormData
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const isFormData = payload instanceof FormData
|
||
|
|
|
||
|
|
await api.post('/admin/procesos-admision', payload, {
|
||
|
|
headers: isFormData ? { 'Content-Type': 'multipart/form-data' } : undefined
|
||
|
|
})
|
||
|
|
|
||
|
|
// refrescar lista
|
||
|
|
await this.fetchProcesos({ page: 1 })
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// PATCH /api/admin/procesos-admision/{id} (multipart/form-data)
|
||
|
|
async updateProceso(id, payload, { method = 'patch' } = {}) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const isFormData = payload instanceof FormData
|
||
|
|
|
||
|
|
const { data } = await api.request({
|
||
|
|
url: `/admin/procesos-admision/${id}`,
|
||
|
|
method,
|
||
|
|
data: payload,
|
||
|
|
headers: isFormData ? { 'Content-Type': 'multipart/form-data' } : undefined
|
||
|
|
})
|
||
|
|
|
||
|
|
// actualizar cache local
|
||
|
|
if (this.procesoActual?.id === id) {
|
||
|
|
this.procesoActual = data
|
||
|
|
}
|
||
|
|
|
||
|
|
// refrescar listado (opcional, pero recomendado)
|
||
|
|
await this.fetchProcesos({
|
||
|
|
page: this.pagination.current_page,
|
||
|
|
per_page: this.pagination.per_page
|
||
|
|
})
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// DELETE /api/admin/procesos-admision/{id}
|
||
|
|
async deleteProceso(id) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
await api.delete(`/admin/procesos-admision/${id}`)
|
||
|
|
|
||
|
|
// limpiar caches
|
||
|
|
this.procesos = this.procesos.filter(p => p.id !== id)
|
||
|
|
if (this.procesoActual?.id === id) {
|
||
|
|
this.procesoActual = null
|
||
|
|
this.detalles = []
|
||
|
|
}
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// =========================
|
||
|
|
// DETALLES (POR PROCESO)
|
||
|
|
// =========================
|
||
|
|
|
||
|
|
// GET /api/admin/procesos-admision/{procesoId}/detalles?tipo=requisitos
|
||
|
|
async fetchDetalles(procesoId, params = {}) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const { data } = await api.get(`/admin/procesos-admision/${procesoId}/detalles`, {
|
||
|
|
params
|
||
|
|
})
|
||
|
|
|
||
|
|
this.detalles = Array.isArray(data) ? data : []
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// POST /api/admin/procesos-admision/{procesoId}/detalles (multipart/form-data)
|
||
|
|
async createDetalle(procesoId, payload) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const isFormData = payload instanceof FormData
|
||
|
|
|
||
|
|
await api.post(`/admin/procesos-admision/${procesoId}/detalles`, payload, {
|
||
|
|
headers: isFormData ? { 'Content-Type': 'multipart/form-data' } : undefined
|
||
|
|
})
|
||
|
|
|
||
|
|
await this.fetchDetalles(procesoId)
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// GET /api/admin/detalles-admision/{id}
|
||
|
|
async fetchDetalleById(detalleId) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const { data } = await api.get(`/admin/detalles-admision/${detalleId}`)
|
||
|
|
return data
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return null
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// PATCH /api/admin/detalles-admision/{id} (multipart/form-data)
|
||
|
|
async updateDetalle(detalleId, payload, { method = 'patch' } = {}) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
const isFormData = payload instanceof FormData
|
||
|
|
|
||
|
|
const { data } = await api.request({
|
||
|
|
url: `/admin/detalles-admision/${detalleId}`,
|
||
|
|
method,
|
||
|
|
data: payload,
|
||
|
|
headers: isFormData ? { 'Content-Type': 'multipart/form-data' } : undefined
|
||
|
|
})
|
||
|
|
|
||
|
|
// actualizar cache local si existe
|
||
|
|
const idx = this.detalles.findIndex(d => d.id === data.id)
|
||
|
|
if (idx >= 0) this.detalles[idx] = data
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// DELETE /api/admin/detalles-admision/{id}
|
||
|
|
async deleteDetalle(detalleId, procesoId = null) {
|
||
|
|
this.loading = true
|
||
|
|
this.error = null
|
||
|
|
try {
|
||
|
|
await api.delete(`/admin/detalles-admision/${detalleId}`)
|
||
|
|
|
||
|
|
this.detalles = this.detalles.filter(d => d.id !== detalleId)
|
||
|
|
|
||
|
|
// si me pasas procesoId, refresca desde backend
|
||
|
|
if (procesoId) await this.fetchDetalles(procesoId)
|
||
|
|
|
||
|
|
return true
|
||
|
|
} catch (err) {
|
||
|
|
this._setError(err)
|
||
|
|
return false
|
||
|
|
} finally {
|
||
|
|
this.loading = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|