131 lines
4.9 KiB
JavaScript
131 lines
4.9 KiB
JavaScript
const express = require('express');
|
|
const Database = require('better-sqlite3');
|
|
const path = require('path');
|
|
|
|
const app = express();
|
|
const PORT = 3000;
|
|
const DATA_DIR = '/app/data';
|
|
|
|
app.use(express.json());
|
|
|
|
const dbTrabajadores = new Database(path.join(DATA_DIR, 'trabajadores.db'));
|
|
const dbDatos = new Database(path.join(DATA_DIR, 'datos.db'));
|
|
const dbHistorial = new Database(path.join(DATA_DIR, 'historial.db'));
|
|
|
|
// ==================== TRABAJADORES ====================
|
|
|
|
app.get('/api/trabajadores', (req, res) => {
|
|
try {
|
|
const rows = dbTrabajadores.prepare('SELECT * FROM trabajadores ORDER BY nombre').all();
|
|
res.json(rows);
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.post('/api/trabajadores', (req, res) => {
|
|
try {
|
|
const { id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo } = req.body;
|
|
dbTrabajadores.prepare(
|
|
'INSERT INTO trabajadores (id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
|
|
).run(id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo);
|
|
res.json({ message: 'Trabajador creado' });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.put('/api/trabajadores/:id', (req, res) => {
|
|
try {
|
|
const idOriginal = req.params.id;
|
|
const { id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo } = req.body;
|
|
dbTrabajadores.prepare(
|
|
'UPDATE trabajadores SET id = ?, nombre = ?, apellidos = ?, puesto = ?, salario_mensual = ?, fecha_ingreso = ?, seguridad_social = ?, activo = ? WHERE id = ?'
|
|
).run(id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo, idOriginal);
|
|
res.json({ message: 'Trabajador actualizado' });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.delete('/api/trabajadores/:id', (req, res) => {
|
|
try {
|
|
dbTrabajadores.prepare('DELETE FROM trabajadores WHERE id = ?').run(req.params.id);
|
|
res.json({ message: 'Trabajador eliminado' });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
// ==================== CONFIGURACIONES ====================
|
|
|
|
app.get('/api/configuracion', (req, res) => {
|
|
try {
|
|
const row = dbDatos.prepare('SELECT * FROM parametros_nomina ORDER BY id DESC LIMIT 1').get();
|
|
res.json(row || {});
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.post('/api/configuracion', (req, res) => {
|
|
try {
|
|
const {
|
|
nombre_empresa,
|
|
salario_minimo,
|
|
auxilio_transporte,
|
|
horas_semanales,
|
|
horas_mensuales,
|
|
dia_inicio_mes,
|
|
dia_fin_mes,
|
|
tiempo_almuerzo,
|
|
valor_hora_ordinaria,
|
|
valor_hora_extra,
|
|
valor_hora_extra_nocturna
|
|
} = req.body;
|
|
|
|
const count = dbDatos.prepare('SELECT COUNT(*) as total FROM parametros_nomina').get().total;
|
|
|
|
if (count === 0) {
|
|
dbDatos.prepare(
|
|
'INSERT INTO parametros_nomina (nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
|
).run(nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna);
|
|
} else {
|
|
dbDatos.prepare(
|
|
'UPDATE parametros_nomina SET nombre_empresa = ?, salario_minimo = ?, auxilio_transporte = ?, horas_semanales = ?, horas_mensuales = ?, dia_inicio_mes = ?, dia_fin_mes = ?, tiempo_almuerzo = ?, valor_hora_ordinaria = ?, valor_hora_extra = ?, valor_hora_extra_nocturna = ?'
|
|
).run(nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna);
|
|
}
|
|
|
|
res.json({ message: 'Configuración guardada' });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
// ==================== HISTORIAL ====================
|
|
|
|
app.get('/api/historial', (req, res) => {
|
|
try {
|
|
const rows = dbHistorial.prepare('SELECT * FROM registros_historial ORDER BY fecha DESC').all();
|
|
res.json(rows);
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.post('/api/historial', (req, res) => {
|
|
try {
|
|
const { fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo } = req.body;
|
|
dbHistorial.prepare(
|
|
'INSERT INTO registros_historial (fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo) VALUES (?, ?, ?, ?, ?)'
|
|
).run(fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo);
|
|
res.json({ message: 'Registro guardado' });
|
|
} catch (err) {
|
|
res.status(500).json({ error: err.message });
|
|
}
|
|
});
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Backend corriendo en http://localhost:${PORT}`);
|
|
});
|