Files
PROYECTO_NOMINAS/backend/server.js
T
2026-08-05 09:26:53 -05:00

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}`);
});