captura correcta de errores para crear asistencia
This commit is contained in:
@@ -32,40 +32,57 @@ router.get('/:id', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// POST create new asistencia
|
// POST /api/asistencias ➜ crear asistencia
|
||||||
router.post('/', async (req, res) => {
|
router.post('/', async (req, res) => {
|
||||||
const { empleado_id, entrada, salida, historial, observacion, estado, fecha_anulado, creador_id, modificado_id, anulador_id } = req.body;
|
const {
|
||||||
try {
|
empleado_id,
|
||||||
// Basic validation: empleado_id is required
|
entrada,
|
||||||
if (!empleado_id) {
|
salida,
|
||||||
return res.status(400).json({ error: 'El campo empleado_id es obligatorio.' });
|
historial,
|
||||||
}
|
observacion,
|
||||||
|
estado = 'pendiente',
|
||||||
|
fecha_anulado,
|
||||||
|
creador_id,
|
||||||
|
modificado_id,
|
||||||
|
anulador_id,
|
||||||
|
} = req.body
|
||||||
|
|
||||||
|
if (!empleado_id)
|
||||||
|
return res.status(400).json({ error: 'El campo empleado_id es obligatorio.' })
|
||||||
|
|
||||||
|
try {
|
||||||
const nuevaAsistencia = await prisma.asistencia.create({
|
const nuevaAsistencia = await prisma.asistencia.create({
|
||||||
data: {
|
data: {
|
||||||
empleado_id: parseInt(empleado_id),
|
empleado: { connect: { id: BigInt(empleado_id) } }, // FK con validación implícita
|
||||||
entrada: entrada ? new Date(entrada) : null,
|
entrada: entrada ? new Date(entrada) : null,
|
||||||
salida: salida ? new Date(salida) : null,
|
salida: salida ? new Date(salida) : null,
|
||||||
historial, // Assuming historial is already in JSON format or Prisma handles it
|
historial, // tipo Json en el schema
|
||||||
observacion,
|
observacion,
|
||||||
estado,
|
estado,
|
||||||
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
|
fecha_anulado: fecha_anulado ? new Date(fecha_anulado) : null,
|
||||||
creador_id, // Should ideally be taken from authenticated user
|
creador_id,
|
||||||
modificado_id, // Should ideally be taken from authenticated user
|
modificado_id,
|
||||||
anulador_id
|
anulador_id,
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
res.status(201).json(nuevaAsistencia);
|
|
||||||
|
res.status(201).json(nuevaAsistencia)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error)
|
||||||
if (error.code === 'P2003') { // Foreign key constraint failed
|
|
||||||
if (error.meta?.field_name?.includes('empleado_id')) {
|
// FK inválida
|
||||||
return res.status(400).json({ error: 'El empleado_id proporcionado no existe.' });
|
if (
|
||||||
}
|
error.code === 'P2003' &&
|
||||||
}
|
error.meta?.constraint === 'Asistencia_empleado_id_fkey'
|
||||||
res.status(500).json({ error: 'Error al crear asistencia.' });
|
)
|
||||||
|
return res
|
||||||
|
.status(400)
|
||||||
|
.json({ error: 'El empleado_id proporcionado no existe.' })
|
||||||
|
|
||||||
|
res.status(500).json({ error: 'Error al crear asistencia.' })
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
|
|
||||||
|
|
||||||
// PUT update asistencia by ID
|
// PUT update asistencia by ID
|
||||||
router.put('/:id', async (req, res) => {
|
router.put('/:id', async (req, res) => {
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ const handleSubmit = async () => {
|
|||||||
} else {
|
} else {
|
||||||
await asistenciasStore.createAsistencia(payload);
|
await asistenciasStore.createAsistencia(payload);
|
||||||
}
|
}
|
||||||
router.push({ name: 'AsistenciasIndex' });
|
router.push({ name: 'asistencias-index' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error saving asistencia:', error);
|
console.error('Error saving asistencia:', error);
|
||||||
const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
|
const errorMsg = error.response?.data?.message || error.message || 'Ocurrió un error.';
|
||||||
|
|||||||
Reference in New Issue
Block a user