- Backend Node.js/Express con PostgreSQL - Frontend React 19 con Vite - Docker Compose para orquestacion - Documentacion completa en README.md - Scripts SQL para base de datos - Configuracion de ejemplo (.env.example)
269 lines
6.8 KiB
JavaScript
269 lines
6.8 KiB
JavaScript
const pool = require('../db/connection');
|
|
|
|
const getEmployees = async (req, res) => {
|
|
try {
|
|
// Leer query params con valores por defecto
|
|
const page = parseInt(req.query.page) || 1; // Página actual
|
|
const limit = parseInt(req.query.limit) || 500; // Cantidad por página
|
|
const offset = (page - 1) * limit; // Desde dónde empezar
|
|
|
|
// Llamamos a la función con LIMIT y OFFSET
|
|
const result = await pool.query(
|
|
`SELECT * FROM getemployees() LIMIT $1 OFFSET $2`,
|
|
[limit, offset]
|
|
);
|
|
|
|
// Obtener total para calcular páginas
|
|
const totalResult = await pool.query('SELECT COUNT(*) FROM employees');
|
|
const total = parseInt(totalResult.rows[0].count);
|
|
const totalPages = Math.ceil(total / limit);
|
|
|
|
const employees = result.rows.map(emp => ({
|
|
employee_rfc: emp.employee_rfc,
|
|
name_employee: emp.name_employee,
|
|
nss_employe: emp.nss_employe,
|
|
position_employee: emp.position_employee,
|
|
area_employee: emp.area_employee,
|
|
phone_employee: emp.phone_employee,
|
|
end_contract: emp.end_contract,
|
|
daily_pay: emp.daily_pay,
|
|
uniforms: emp.uniforms,
|
|
status: emp.status,
|
|
birthday: emp.birthday,
|
|
curp: emp.curp
|
|
}));
|
|
|
|
res.json({
|
|
page,
|
|
limit,
|
|
total,
|
|
totalPages,
|
|
data: employees
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener empleados' });
|
|
}
|
|
};
|
|
|
|
//TOTAL DE EMPLEADOS CON CONTRATO ACTIVO
|
|
const getTotalActiveEmployees = async (req, res) => {
|
|
try {
|
|
|
|
const result = await pool.query(
|
|
'SELECT * FROM activeemployeesnumber() as activenumber',
|
|
);
|
|
const activeEmployees = result.rows[0].activenumber;
|
|
|
|
res.json({
|
|
message: 'Total de empleados activos',
|
|
data: activeEmployees
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener el total de empleados ' });
|
|
}
|
|
};
|
|
|
|
//OBTENER UN SOLO EMPLEADO
|
|
const getEmployee = async (req, res) => {
|
|
try {
|
|
const { rfcEmployee} = req.body;
|
|
const result = await pool.query(
|
|
'SELECT * FROM getoneemployee($1)',
|
|
[rfcEmployee]
|
|
);
|
|
|
|
const employee = result.rows.map(emp => ({
|
|
name_emp: emp.name_emp,
|
|
rfc_emp: emp.rfc_emp,
|
|
nss_emp: emp.nss_emp,
|
|
id_position_emp: emp.id_position_emp,
|
|
id_area_emp: emp.id_area_emp,
|
|
addres_emp:emp.addres_emp,
|
|
phone_emp: emp.phone_emp,
|
|
email_emp: emp.email_emp,
|
|
daily_pay: emp.daily_pay,
|
|
uniforms: emp.uniforms,
|
|
birthday: emp.birthday,
|
|
curp: emp.curp
|
|
}));
|
|
|
|
if (result.rows.length > 0) {
|
|
res.json({
|
|
message: 'Empleado existio previamente',
|
|
data: employee
|
|
});
|
|
}
|
|
else
|
|
{
|
|
res.json({
|
|
message: 'El pleneado no existe.',
|
|
data: 0 // Devuelve la primera fila (o todas si quieres)
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener empleado' });
|
|
}
|
|
}
|
|
|
|
const newEmployee = async(req,res)=>{
|
|
try{
|
|
const {
|
|
name_emp,
|
|
rfc_emp,
|
|
nss_emp,
|
|
addres_emp,
|
|
phone_emp,
|
|
email_emp,
|
|
birthday_emp,
|
|
curp_emp,
|
|
study_emp ,
|
|
emergency_name ,
|
|
emergency_tel,
|
|
relationship_id
|
|
} = req.body;
|
|
const result = await pool.query('SELECT newemployee($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) AS STATUS',
|
|
[name_emp,rfc_emp,nss_emp,addres_emp,phone_emp,email_emp,birthday_emp,curp_emp, study_emp, emergency_name, emergency_tel,relationship_id]
|
|
);
|
|
const status = result.rows[0].status;
|
|
if(status == 1)
|
|
message = "Empleado añadido correctamente";
|
|
else
|
|
message = "Empleado no se pudo agregar"
|
|
res.json({
|
|
message,
|
|
status: status
|
|
});
|
|
}catch(error){
|
|
console.error(error);
|
|
res.status(500).json({ error });
|
|
}
|
|
|
|
}
|
|
const updateEmployee = async(req,res)=>{
|
|
try{
|
|
const {
|
|
name_emp,
|
|
rfc_emp,
|
|
nss_emp,
|
|
addres_emp,
|
|
phone_emp,
|
|
email_emp,
|
|
birthday_emp,
|
|
curp_emp,
|
|
study_emp ,
|
|
emergency_name ,
|
|
emergency_tel,
|
|
relationship_id
|
|
} = req.body;
|
|
const result = await pool.query('SELECT updateemployee($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) AS STATUS',
|
|
[name_emp,rfc_emp,nss_emp,addres_emp,phone_emp,email_emp,birthday_emp,curp_emp, study_emp,
|
|
emergency_name, emergency_tel, relationship_id]
|
|
);
|
|
const status = result.rows[0].status;
|
|
if(status == 1)
|
|
message = "Empleado actualizado correctamente";
|
|
else
|
|
message = "No se pudo agregar el empleado"
|
|
res.json({
|
|
message,
|
|
status: status
|
|
});
|
|
}catch(error){
|
|
console.error(error);
|
|
res.status(500).json({ error });
|
|
}
|
|
|
|
}
|
|
const getattendance = async (req, res) => {
|
|
try {
|
|
const result = await pool.query(
|
|
'SELECT * FROM getattendance()',
|
|
);
|
|
|
|
const attendance = result.rows.map(emp => ({
|
|
aid_attendance: emp.aid_attendance,
|
|
aname_emp: emp.aname_emp,
|
|
alast_name: emp.alast_name,
|
|
aID_tran: emp.aID_tran,
|
|
arol: emp.arol,
|
|
adate_atten:emp.adate_atten,
|
|
atime_atten: emp.atime_atten,
|
|
alaboral_day: emp.alaboral_day,
|
|
adata_origin: emp.adata_origin,
|
|
aname_device: emp.aname_device,
|
|
aserie_device: emp.aserie_device,
|
|
aperforation: emp.aperforation,
|
|
aubication: emp.aubication,
|
|
aobservations: emp.aobservations
|
|
}));
|
|
|
|
res.json({
|
|
message: 'attendance',
|
|
data: attendance
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener checador' });
|
|
}
|
|
};
|
|
|
|
const getGradeOfStudy = async (req, res) => {
|
|
try {
|
|
const result = await pool.query(
|
|
'SELECT * FROM degreeofstudy',
|
|
);
|
|
|
|
const study = result.rows.map(emp => ({
|
|
id_study: emp.id_study,
|
|
name_study: emp.name_study
|
|
}));
|
|
|
|
res.json({
|
|
message: 'grados de estudio',
|
|
data: study
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener los grados de estudio' });
|
|
}
|
|
};
|
|
const getRelationshipEmployee = async (req, res) => {
|
|
try {
|
|
const result = await pool.query(
|
|
'SELECT * FROM relationship_employee',
|
|
);
|
|
|
|
const relationship = result.rows.map(emp => ({
|
|
id_relationship: emp.id_relationship,
|
|
name_relationship: emp.name_relationship
|
|
}));
|
|
|
|
res.json({
|
|
message: 'Parentesco',
|
|
data: relationship
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener los parentescos' });
|
|
}
|
|
}
|
|
|
|
module.exports =
|
|
{ getEmployees,
|
|
getTotalActiveEmployees,
|
|
getEmployee,
|
|
newEmployee,
|
|
updateEmployee,
|
|
getattendance,
|
|
getGradeOfStudy,
|
|
getRelationshipEmployee
|
|
}; |