44 Commits

Author SHA1 Message Date
Your Name 07ec951c8c cambio en guardar el id del cuestionario en las
tablas de cuestionario
2025-01-27 15:17:51 -06:00
Your Name 8c992c29c4 fix en el update 2025-01-23 11:23:44 -06:00
Your Name bea8a7b266 nuevos cuestionarios de programa y alumno, sql de update, falta revisar el proceso de servicio para actualizar el get de los id cuestionarios 2025-01-22 11:24:19 -06:00
leydi 2fc5c1f5fa cambio en mensaje de correos 2024-10-03 13:30:02 -06:00
manu 53786516df Replace informe global link for servicio social into mail 2024-05-20 19:30:24 -06:00
puma99 6c7919af90 corrección de números en escolares 2023-02-09 17:11:16 -06:00
puma99 afc29c4208 ultima correción de drive 2022-11-22 19:46:02 -06:00
xXpuma99Xx 74e3c265b0 cambios en créditos 2022-11-17 19:01:51 -06:00
puma99 9cc59919f8 sin archivo de eliminar archivos no requieridos 2022-11-14 10:43:18 -06:00
puma99 620c5da07c log y eliminar archivos de mas en drive 2022-10-14 17:22:09 -05:00
puma99 6c1d967c8c ya no deberían haber duplicados 2022-10-14 12:16:24 -05:00
puma99 0aa406fb15 nuevo mensaje termino 2022-05-12 09:42:18 -05:00
puma99 62eb0dc90c dependencia validar alfa numerico 2022-04-22 11:31:23 -05:00
xXpuma99Xx 46fc456911 nuevos correos 2022-03-28 12:26:23 -06:00
puma99 efb4a7c374 carrera en cuestionarios programa 2022-03-11 11:22:40 -06:00
xXpuma99Xx a750f1f71b error carrera 2022-03-10 19:11:53 -06:00
xXpuma99Xx 3a7b2a6629 carrera en reporte cuestionario alumno 2022-03-10 19:00:18 -06:00
xXpuma99Xx 5623c90bda encriptarn no necesita validar# 2022-01-03 17:20:34 -06:00
xXpuma99Xx a07a77bd8d upgrade 2022-01-02 19:37:49 -06:00
xXpuma99Xx 6130f055b3 validar numero corregido 2022-01-02 19:34:55 -06:00
xXpuma99Xx 339001c6e6 validacion basica str 2022-01-02 18:36:46 -06:00
xXpuma99Xx 481096e851 validar número 2022-01-02 18:25:31 -06:00
xXpuma99Xx 9a982a215f validar fecha 2022-01-02 17:56:42 -06:00
xXpuma99Xx 661f4985ee alfa numérico 2022-01-02 17:45:29 -06:00
xXpuma99Xx 0b04777c0c validar texto 2022-01-02 15:27:30 -06:00
xXpuma99Xx 9b153520e8 validar correo 2022-01-02 15:13:33 -06:00
xXpuma99Xx 9fc6e4485a validar nuermo entero 2022-01-02 15:07:49 -06:00
xXpuma99Xx 9560014865 nueva libreria para validar variables 2022-01-02 14:42:39 -06:00
xXpuma99Xx 7b5e36b402 error merge 2021-12-31 19:35:03 -06:00
xXpuma99Xx c0f37baf25 drive mejorado 2021-12-31 19:31:34 -06:00
puma99 998be4bb38 nombre de responsable y correo 2021-12-08 11:16:05 -06:00
xXpuma99Xx 11e7759ae0 error mio 2021-12-07 14:32:29 -06:00
xXpuma99Xx 97dab2df96 carpetas repetidas 2021-12-07 14:26:30 -06:00
xXpuma99Xx 9ea6ad601c erore merge 2021-12-07 14:05:29 -06:00
xXpuma99Xx 841d9b06a5 erore merge 2021-12-07 14:05:09 -06:00
xXpuma99Xx d469b1cdc6 carga masiva y diario mejorado 2021-12-07 13:25:51 -06:00
xXpuma99Xx fb57ee6b93 drive un poco más clean el código 2021-12-07 11:53:22 -06:00
xXpuma99Xx e82093c967 responsable de programa en end point servicio admin 2021-09-28 18:31:33 -05:00
xXpuma99Xx 3bad72ee52 listo 2021-09-13 18:58:33 -05:00
xXpuma99Xx 4121f8d0ad Merge branch 'master' of https://repositorio.acatlan.unam.mx/CIDWA/servicio_social_api 2021-09-13 15:02:34 -05:00
Lemuel Marquez b4373c770f creditos especificos# 2021-08-04 10:20:12 -05:00
Lemuel Marquez 649aebcac9 quitar correo de marce 2021-06-07 15:40:03 -05:00
Lemuel Marquez 50d0758f65 cambio de mensaje en escolares al no cumplir con los requicitos 2021-05-25 13:09:45 -05:00
Lemuel Marquez 7de43b5daf error undefined correo responsable 2021-05-13 01:26:27 -05:00
63 changed files with 5509 additions and 3585 deletions
+25
View File
@@ -0,0 +1,25 @@
# Base image
FROM node:16-alpine
# Install build tools and Python
RUN apk add --no-cache python3 make g++ && \
python3 -m ensurepip && \
pip3 install --no-cache --upgrade pip
# Set working directory
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of the application code
COPY . .
# Expose the port the app runs on
EXPOSE 3000
# Command to run the application
CMD ["npm", "run", "dev"]
+18
View File
@@ -0,0 +1,18 @@
{
"name": "Node.js API Dev Container",
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"forwardPorts": [3000],
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
},
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
],
"postCreateCommand": "npm install",
"remoteUser": "node"
}
+37
View File
@@ -0,0 +1,37 @@
-- 1) Insertar un par de servicios
--INSERT INTO servicio VALUES ('094123123123','ferelena27@gmail.com','5538836200','Calle D #43 Colonia Modelo, Naucalpan de Juárez, Edo Mex.','2020-01-28 00:00:00','2020-07-28 00:00:00','1996-06-27 00:00:00','1zAAbHd2Gn8E7JougyynxHVLFJCHYM4U7','1ygjJyezG88X6qd-wV3i7PMDfW7yDGAbJ','1qzgUwhXqCRXPiYd0w8TADWB2Ja-0Geqy','1i-mmx-hlOVcdYHxoNM8ym96pwL2YQKxP','servicio y asesoría de cómputo','Lic. Araceli Pérez Palma',1,'2020-03-04 19:25:19','2021-04-26 19:21:57',2990,1,6,28,872,835,'2021-04-26 19:21:56');
--INSERT INTO servicio VALUES ('091234123123','ferelena27@gmail.com','5538836200','Calle D #43 Colonia Modelo, Naucalpan de Juárez, Edo Mex.','2020-01-28 00:00:00','2020-07-28 00:00:00','1996-06-27 00:00:00','1zAAbHd2Gn8E7JougyynxHVLFJCHYM4U7','1ygjJyezG88X6qd-wV3i7PMDfW7yDGAbJ','1qzgUwhXqCRXPiYd0w8TADWB2Ja-0Geqy','1i-mmx-hlOVcdYHxoNM8ym96pwL2YQKxP','servicio y asesoría de cómputo','Lic. Araceli Pérez Palma',1,'2020-03-04 19:25:19','2021-04-26 19:21:57',2990,1,6,28,872,835,'2021-04-26 19:21:56');
-- 2) Insertar cuestionarios, cada uno asociado a un servicio
INSERT INTO Cuestionario (
idServicio, version, titulo, `desc`, dirigidoA, createdAt
) VALUES
(1, 'v1.0', 'Cuestionario Inicial', 'Descripción breve', 'Alumnos', NOW()),
(2, 'v2.0', 'Cuestionario Avanzado', 'Otro cuestionario', 'Programas', '2025-01-23 10:25:00');
-- 3) Insertar en cuestionario_alumno_2
INSERT INTO cuestionario_alumno_2 (
idCuestionario,
createdAt,
p12_A_1,
p12_A_2,
p12_A_3,
p12_A_4,
p12_B_1,
p12_B_2
) VALUES
(1, NOW(), 'respuesta1', 'respuesta2', 'respuesta3', 'respuesta4', 'respuesta5', 'respuesta6'),
(1, '2025-01-23 11:00:00', 'respA', 'respB', 'respC', 'respD', 'respE', 'respF');
-- 4) Insertar en cuestionario_programa_2
INSERT INTO cuestionario_programa_2 (
idCuestionario,
createdAt,
p3_A_1,
p3_A_2,
p3_A_3,
p3_A_4,
p3_B_1
) VALUES
(2, NOW(), 'respuesta1', 'respuesta2', 'respuesta3', 'respuesta4', 'respuesta5'),
(2, '2025-01-23 12:15:00', 'respX', 'respY', 'respZ', 'respW', 'respQ');
+1953 -3112
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+494
View File
@@ -0,0 +1,494 @@
-- MariaDB dump 10.17 Distrib 10.4.10-MariaDB, for Win64 (AMD64)
--
-- Host: 132.248.180.82 Database: Iris_Produccion
-- ------------------------------------------------------
-- Server version 10.6.7-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `carrera`
--
DROP TABLE IF EXISTS `carrera`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `carrera` (
`idCarrera` int(11) NOT NULL AUTO_INCREMENT,
`carrera` varchar(50) NOT NULL,
PRIMARY KEY (`idCarrera`),
UNIQUE KEY `idCarrera` (`idCarrera`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `carrera`
--
LOCK TABLES `carrera` WRITE;
/*!40000 ALTER TABLE `carrera` DISABLE KEYS */;
/*!40000 ALTER TABLE `carrera` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `caso_especial`
--
DROP TABLE IF EXISTS `caso_especial`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `caso_especial` (
`idCasoEspecial` int(11) NOT NULL AUTO_INCREMENT,
`creditos` varchar(3) NOT NULL,
`correo` varchar(60) NOT NULL,
`telefono` varchar(15) NOT NULL,
`institucion` varchar(200) DEFAULT NULL,
`dependencia` varchar(200) DEFAULT NULL,
`motivo` varchar(1) DEFAULT NULL,
`direccion` varchar(200) NOT NULL,
`fechaInicio` datetime NOT NULL,
`fechaFin` datetime NOT NULL,
`fechaNacimiento` datetime NOT NULL,
`carpeta` varchar(60) NOT NULL,
`archivoZip` varchar(60) NOT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
`idUsuario` int(11) NOT NULL,
`idCarrera` int(11) NOT NULL,
`idStatus` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`idCasoEspecial`),
UNIQUE KEY `idCasoEspecial` (`idCasoEspecial`),
KEY `idUsuario` (`idUsuario`),
KEY `idCarrera` (`idCarrera`),
KEY `idStatus` (`idStatus`),
CONSTRAINT `caso_especial_ibfk_1` FOREIGN KEY (`idUsuario`) REFERENCES `usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `caso_especial_ibfk_2` FOREIGN KEY (`idCarrera`) REFERENCES `carrera` (`idCarrera`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `caso_especial_ibfk_3` FOREIGN KEY (`idStatus`) REFERENCES `status` (`idStatus`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=392 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `caso_especial`
--
LOCK TABLES `caso_especial` WRITE;
/*!40000 ALTER TABLE `caso_especial` DISABLE KEYS */;
/*!40000 ALTER TABLE `caso_especial` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `cuestionario_alumno`
--
DROP TABLE IF EXISTS `cuestionario_alumno`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cuestionario_alumno` (
`idCuestionarioAlumno` int(11) NOT NULL AUTO_INCREMENT,
`sexo` varchar(1) NOT NULL,
`edad` varchar(2) NOT NULL,
`servicioMedico` varchar(100) NOT NULL,
`p1` tinyint(1) NOT NULL,
`p2` tinyint(1) NOT NULL,
`p3` varchar(150) NOT NULL,
`p4` tinyint(1) NOT NULL,
`p5` varchar(7) NOT NULL,
`p6` tinyint(1) NOT NULL,
`p7` tinyint(1) NOT NULL,
`p8` varchar(5) NOT NULL,
`p9` tinyint(1) NOT NULL,
`p10` tinyint(1) NOT NULL,
`p11` tinyint(1) NOT NULL,
`p12` tinyint(1) NOT NULL,
`p13` tinyint(1) NOT NULL,
`p14` varchar(7) NOT NULL,
`p15` varchar(7) NOT NULL,
`p16` varchar(2) NOT NULL,
`p17` varchar(5) NOT NULL,
`p18` tinyint(1) NOT NULL,
`p19` tinyint(1) NOT NULL,
`p20` tinyint(1) NOT NULL,
`p21` varchar(9) NOT NULL,
`p22` varchar(23) NOT NULL,
`p23` varchar(8) NOT NULL,
`p24` varchar(8) NOT NULL,
`p25` tinyint(1) NOT NULL,
`p26` tinyint(1) NOT NULL,
`p27` varchar(400) NOT NULL,
`p28` varchar(1) NOT NULL,
`p29` varchar(1) NOT NULL,
`p30` varchar(400) NOT NULL,
`createdAt` datetime NOT NULL,
PRIMARY KEY (`idCuestionarioAlumno`),
UNIQUE KEY `idCuestionarioAlumno` (`idCuestionarioAlumno`)
) ENGINE=InnoDB AUTO_INCREMENT=13564 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `cuestionario_alumno`
--
LOCK TABLES `cuestionario_alumno` WRITE;
/*!40000 ALTER TABLE `cuestionario_alumno` DISABLE KEYS */;
/*!40000 ALTER TABLE `cuestionario_alumno` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `cuestionario_programa`
--
DROP TABLE IF EXISTS `cuestionario_programa`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cuestionario_programa` (
`idCuestionarioPrograma` int(11) NOT NULL AUTO_INCREMENT,
`actividad1` varchar(400) NOT NULL,
`actividad2` varchar(400) NOT NULL,
`actividad3` varchar(400) NOT NULL,
`actividad4` varchar(400) NOT NULL,
`actividad5` varchar(400) NOT NULL,
`retroalimentacion` varchar(9) NOT NULL,
`p6` varchar(800) DEFAULT NULL,
`p7` varchar(800) NOT NULL,
`createdAt` datetime NOT NULL,
PRIMARY KEY (`idCuestionarioPrograma`),
UNIQUE KEY `idCuestionarioPrograma` (`idCuestionarioPrograma`)
) ENGINE=InnoDB AUTO_INCREMENT=13582 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `cuestionario_programa`
--
LOCK TABLES `cuestionario_programa` WRITE;
/*!40000 ALTER TABLE `cuestionario_programa` DISABLE KEYS */;
/*!40000 ALTER TABLE `cuestionario_programa` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `programa`
--
DROP TABLE IF EXISTS `programa`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `programa` (
`idPrograma` int(11) NOT NULL AUTO_INCREMENT,
`institucion` varchar(120) NOT NULL,
`dependencia` varchar(120) NOT NULL,
`programa` varchar(280) NOT NULL,
`clavePrograma` varchar(20) NOT NULL,
`acatlan` tinyint(1) NOT NULL DEFAULT 0,
`activo` tinyint(1) NOT NULL DEFAULT 1,
`idUsuario` int(11) NOT NULL,
PRIMARY KEY (`idPrograma`),
UNIQUE KEY `idPrograma` (`idPrograma`),
KEY `idUsuario` (`idUsuario`),
CONSTRAINT `programa_ibfk_1` FOREIGN KEY (`idUsuario`) REFERENCES `usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11518 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `programa`
--
LOCK TABLES `programa` WRITE;
/*!40000 ALTER TABLE `programa` DISABLE KEYS */;
/*!40000 ALTER TABLE `programa` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `servicio`
--
DROP TABLE IF EXISTS `servicio`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `servicio` (
`idServicio` int(11) NOT NULL AUTO_INCREMENT,
`creditos` varchar(3) NOT NULL,
`correo` varchar(60) NOT NULL,
`telefono` varchar(15) DEFAULT NULL,
`direccion` varchar(200) DEFAULT NULL,
`fechaInicio` datetime NOT NULL,
`fechaFin` datetime NOT NULL,
`fechaNacimiento` datetime DEFAULT NULL,
`carpeta` varchar(60) NOT NULL,
`cartaAceptacion` varchar(60) NOT NULL,
`cartaTermino` varchar(60) DEFAULT NULL,
`informeGlobal` varchar(60) DEFAULT NULL,
`programaInterno` varchar(250) DEFAULT NULL,
`profesor` varchar(50) DEFAULT NULL,
`vistoBuenoAcatlan` tinyint(1) DEFAULT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
`idUsuario` int(11) NOT NULL,
`idCarrera` int(11) NOT NULL,
`idStatus` int(11) NOT NULL DEFAULT 1,
`idPrograma` int(11) NOT NULL,
`idCuestionarioAlumno` int(11) DEFAULT NULL,
`idCuestionarioPrograma` int(11) DEFAULT NULL,
`fechaLiberacion` datetime DEFAULT NULL,
PRIMARY KEY (`idServicio`),
UNIQUE KEY `idServicio` (`idServicio`),
KEY `idUsuario` (`idUsuario`),
KEY `idCarrera` (`idCarrera`),
KEY `idStatus` (`idStatus`),
KEY `idPrograma` (`idPrograma`),
KEY `idCuestionarioAlumno` (`idCuestionarioAlumno`),
KEY `idCuestionarioPrograma` (`idCuestionarioPrograma`),
CONSTRAINT `servicio_ibfk_1` FOREIGN KEY (`idUsuario`) REFERENCES `usuario` (`idUsuario`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `servicio_ibfk_2` FOREIGN KEY (`idCarrera`) REFERENCES `carrera` (`idCarrera`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `servicio_ibfk_3` FOREIGN KEY (`idStatus`) REFERENCES `status` (`idStatus`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `servicio_ibfk_4` FOREIGN KEY (`idPrograma`) REFERENCES `programa` (`idPrograma`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `servicio_ibfk_5` FOREIGN KEY (`idCuestionarioAlumno`) REFERENCES `cuestionario_alumno` (`idCuestionarioAlumno`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `servicio_ibfk_6` FOREIGN KEY (`idCuestionarioPrograma`) REFERENCES `cuestionario_programa` (`idCuestionarioPrograma`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=17310 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `servicio`
--
LOCK TABLES `servicio` WRITE;
/*!40000 ALTER TABLE `servicio` DISABLE KEYS */;
/*!40000 ALTER TABLE `servicio` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `status`
--
DROP TABLE IF EXISTS `status`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `status` (
`idStatus` int(11) NOT NULL AUTO_INCREMENT,
`status` varchar(30) NOT NULL,
PRIMARY KEY (`idStatus`),
UNIQUE KEY `idStatus` (`idStatus`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `status`
--
LOCK TABLES `status` WRITE;
/*!40000 ALTER TABLE `status` DISABLE KEYS */;
/*!40000 ALTER TABLE `status` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `tipo_usuario`
--
DROP TABLE IF EXISTS `tipo_usuario`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tipo_usuario` (
`idTipoUsuario` int(11) NOT NULL AUTO_INCREMENT,
`tipoUsuario` varchar(15) NOT NULL,
PRIMARY KEY (`idTipoUsuario`),
UNIQUE KEY `idTipoUsuario` (`idTipoUsuario`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `tipo_usuario`
--
LOCK TABLES `tipo_usuario` WRITE;
/*!40000 ALTER TABLE `tipo_usuario` DISABLE KEYS */;
/*!40000 ALTER TABLE `tipo_usuario` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `usuario`
--
DROP TABLE IF EXISTS `usuario`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `usuario` (
`idUsuario` int(11) NOT NULL AUTO_INCREMENT,
`usuario` varchar(100) NOT NULL,
`password` varchar(60) DEFAULT NULL,
`nombre` varchar(70) DEFAULT NULL,
`activo` tinyint(1) NOT NULL,
`idTipoUsuario` int(11) NOT NULL,
PRIMARY KEY (`idUsuario`),
UNIQUE KEY `idUsuario` (`idUsuario`),
UNIQUE KEY `usuario` (`usuario`),
KEY `idTipoUsuario` (`idTipoUsuario`),
CONSTRAINT `usuario_ibfk_1` FOREIGN KEY (`idTipoUsuario`) REFERENCES `tipo_usuario` (`idTipoUsuario`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=19930 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `usuario`
--
LOCK TABLES `usuario` WRITE;
/*!40000 ALTER TABLE `usuario` DISABLE KEYS */;
/*!40000 ALTER TABLE `usuario` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Dumping routines for database 'Iris_Produccion'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2025-01-12 23:25:49
/* CREATE TABLE `servicio` (
`idServicio` INT PRIMARY KEY
); */
DROP TABLE IF EXISTS `Cuestionario`;
CREATE TABLE `Cuestionario` (
`idCuestionario` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`idCuestionarioAlumno` INT, -- Agregado para relación con alumnos
`idCuestionarioPrograma` INT, -- Agregado para relación con programas
`idCuestionarioAlumno1` INT, -- Agregado para relación con alumnos
`idCuestionarioPrograma1` INT, -- Agregado para relación con programas
`idServicio` INT,
`version` VARCHAR(50),
`titulo` VARCHAR(50),
`desc` VARCHAR(50),
`dirigidoA` VARCHAR(50),
`createdAt` DATETIME
);
DROP TABLE IF EXISTS `cuestionario_alumno_2`;
CREATE TABLE `cuestionario_alumno_2` (
`idCuestionarioAlumno2` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`createdAt` DATETIME,
`p12_A_1` VARCHAR(50),
`p12_A_2` VARCHAR(50),
`p12_A_3` VARCHAR(50),
`p12_A_4` VARCHAR(50),
`p12_B_1` VARCHAR(50),
`p12_B_2` VARCHAR(50),
`p12_B_3` VARCHAR(50),
`p12_B_4` VARCHAR(50),
`p12_C_1` VARCHAR(50),
`p12_C_2` VARCHAR(50),
`p12_C_3` VARCHAR(50),
`p12_C_4` VARCHAR(50),
`p10_1` VARCHAR(50),
`p10_2` VARCHAR(50),
`p10_3` VARCHAR(50),
`p11_1` VARCHAR(50),
`p11_2` VARCHAR(50),
`p11_3` VARCHAR(50),
`p11_4` VARCHAR(50),
`p17_1` VARCHAR(50),
`p17_2` VARCHAR(50),
`p17_3` VARCHAR(50),
`p3_1` VARCHAR(50),
`p3_2` VARCHAR(50),
`p3_3` VARCHAR(50),
`p3_4` VARCHAR(50),
`p12_D_1` VARCHAR(50),
`p12_D_2` VARCHAR(50),
`p12_D_3` VARCHAR(50),
`p12_D_4` VARCHAR(50),
`p12_D_5` VARCHAR(50),
`p1` VARCHAR(150),
`p2` VARCHAR(50),
`p4` VARCHAR(50),
`p5` VARCHAR(50),
`p6` VARCHAR(50),
`p7` VARCHAR(50),
`p8` VARCHAR(50),
`p9` VARCHAR(50),
`p13` VARCHAR(50),
`p14` VARCHAR(50),
`p15` VARCHAR(50),
`p16` VARCHAR(50),
`p18` VARCHAR(50)
);
DROP TABLE IF EXISTS `cuestionario_programa_2`;
CREATE TABLE `cuestionario_programa_2` (
`idCuestionarioPrograma2` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`createdAt` DATETIME,
`p3_A_1` VARCHAR(50),
`p3_A_2` VARCHAR(50),
`p3_A_3` VARCHAR(50),
`p3_A_4` VARCHAR(50),
`p3_B_1` VARCHAR(50),
`p3_B_2` VARCHAR(50),
`p3_B_3` VARCHAR(50),
`p3_B_4` VARCHAR(50),
`p3_C_1` VARCHAR(50),
`p3_C_2` VARCHAR(50),
`p3_C_3` VARCHAR(50),
`p3_C_4` VARCHAR(50),
`p3_C_5` VARCHAR(50),
`p3_D_1` VARCHAR(50),
`p3_D_2` VARCHAR(50),
`p3_D_3` VARCHAR(50),
`p3_D_4` VARCHAR(50),
`p3_D_5` VARCHAR(50),
`p3_E_1` VARCHAR(50),
`p1` VARCHAR(50),
`p2` VARCHAR(50),
`p4` VARCHAR(50),
`p5` VARCHAR(50),
`p6` VARCHAR(50)
);
-- Relaciones corregidas
ALTER TABLE `Cuestionario`
ADD FOREIGN KEY (`idServicio`) REFERENCES `servicio` (`idServicio`);
ALTER TABLE `Cuestionario`
ADD FOREIGN KEY (`idCuestionarioAlumno`) REFERENCES `cuestionario_alumno_2` (`idCuestionarioAlumno2`);
ALTER TABLE `Cuestionario`
ADD FOREIGN KEY (`idCuestionarioPrograma`) REFERENCES `cuestionario_programa_2` (`idCuestionarioPrograma2`);
ALTER TABLE `Cuestionario`
ADD FOREIGN KEY (`idCuestionarioAlumno1`) REFERENCES `cuestionario_alumno` (`idCuestionarioAlumno`);
ALTER TABLE `Cuestionario`
ADD FOREIGN KEY (`idCuestionarioPrograma1`) REFERENCES `cuestionario_programa` (`idCuestionarioPrograma`);
+13
View File
@@ -1,6 +1,8 @@
require('./config');
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(
process.env.DB,
process.env.USERDB,
@@ -16,4 +18,15 @@ const sequelize = new Sequelize(
}
);
(async () => {
try {
await sequelize.authenticate();
console.log('Conexión exitosa con la Base de Datos');
} catch (error) {
console.error('No se pudo conectar a la BD:', error);
}
})();
module.exports = sequelize;
@@ -1,4 +1,4 @@
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const CasoEspecial = require(`${dbPath}/CasoEspecial`);
@@ -7,7 +7,10 @@ const TipoUsuario = require(`${dbPath}/TipoUsuario`);
const Usuario = require(`${dbPath}/Usuario`);
const admin = async (body) => {
const idCasoEspecial = validarId(body.idCasoEspecial);
const idCasoEspecial = validarNumeroEntero(
body.idCasoEspecial,
'id caso especial'
);
return CasoEspecial.findOne({
where: { idCasoEspecial },
+6 -3
View File
@@ -1,13 +1,16 @@
const helperPath = '../../helper';
const correos = require(`${helperPath}/correos`);
const gmail = require(`${helperPath}/gmail`);
const { validarId } = require(`${helperPath}/validar`);
const { validarNumeroEntero } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const CasoEspecial = require(`${dbPath}/CasoEspecial`);
const Usuario = require(`${dbPath}/Usuario`);
const liberacion = async (body) => {
const idCasoEspecial = validarId(body.idCasoEspecial);
const idCasoEspecial = validarNumeroEntero(
body.idCasoEspecial,
'id caso especial'
);
let update = {};
return CasoEspecial.findOne({
@@ -33,7 +36,7 @@ const liberacion = async (body) => {
.then((res) => CasoEspecial.update(update, { where: { idCasoEspecial } }))
.then((res) => ({
message:
'Se cambio de estatus correctamente y se envio un correo al alumno informandole de su liberación.',
'Se cambió de estatus correctamente y se envió un correo al alumno informandole de su liberación.',
}));
};
+30 -16
View File
@@ -1,5 +1,5 @@
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
// const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
@@ -7,32 +7,46 @@ const CasoEspecial = require(`${dbPath}/CasoEspecial`);
const Usuario = require(`${dbPath}/Usuario`);
const nuevo = async (body, file) => {
const idUsuario = validar.validarId(body.idUsuario);
const idCarrera = validar.validarId(body.idCarrera);
const idStatus = validar.validarId(body.idStatus);
const idUsuario = validar.validarNumeroEntero(body.idUsuario, 'id usuario');
const idCarrera = validar.validarNumeroEntero(body.idCarrera, 'id carrera');
const idStatus = validar.validarNumeroEntero(body.idStatus, 'id status');
const numeroCuenta = validar.validarNumeroCuenta(body.numeroCuenta);
const creditos = validar.validarNumero(body.creditos);
const correo = validar.validarCorreo(body.correo);
const telefono = validar.validarNumero(body.telefono, 15);
const fechaInicio = validar.validarFecha(body.fechaInicio);
const fechaFin = validar.validarFecha(body.fechaFin);
const fechaNacimiento = validar.validarFecha(body.fechaNacimiento);
const creditos = validar.validarNumero(body.creditos, 'créditos', true);
const telefono = validar.validarNumero(body.telefono, 'teléfono', true, 15);
const fechaInicio = validar.validarFecha(
body.fechaInicio,
'fecha de inicio',
false
);
const fechaFin = validar.validarFecha(body.fechaFin, 'fecha fin', false);
const fechaNacimiento = validar.validarFecha(
body.fechaNacimiento,
'fecha de nacimiento',
false
);
const direccion = validar.validarAlfanumerico(
body.direccion,
'La dirección',
'dirección',
false,
200
);
const institucion = body.institucion
? validar.validarTexto(body.institucion, 'El texto institucion.', 200)
? validar.validarTexto(body.institucion, 'institucion', false, 200)
: '';
const dependencia = body.dependencia
? validar.validarTexto(body.dependencia, 'El texto dependencia.', 200)
? validar.validarAlfanumerico(body.dependencia, 'dependencia', false, 200)
: '';
const motivo = body.motivo
? validar.validarNumero(body.motivo, 'El texto motivo.', 1)
? validar.validarNumero(body.motivo, 'motivo', true, 1)
: '';
const path = `./server/uploads/${validar.validacionBasicaStr(
file,
'archivo',
true,
1000
)}`;
let carpeta = '';
const path = `./server/uploads/${validar.validar(file, 'El archivo', 1000)}`;
return Usuario.findOne({
where: { idUsuario },
@@ -49,14 +63,14 @@ const nuevo = async (body, file) => {
where: { idUsuario },
});
})
.then(async (res) => {
/* .then(async (res) => {
if (res) throw new Error('Este alumno ya tienen un Caso Especial.');
return drive.folder(numeroCuenta);
})
.then((res) => {
carpeta = res;
return drive.uploadFile(path, `archivos.zip`, 'application/zip', carpeta);
})
}) */
.then((res) =>
CasoEspecial.create({
idUsuario,
@@ -7,12 +7,19 @@ const Status = require(`${dbPath}/Status`);
const Usuario = require(`${dbPath}/Usuario`);
const serviciosEspeciales = async (body) => {
const pagina = validar.validarNumero(body.pagina, true);
const pagina = validar.validarNumero(
body.pagina,
'página',
false,
null,
true,
true
);
const where = body.idStatus
? { idStatus: validar.validarId(body.idStatus) }
? { idStatus: validar.validarNumeroEntero(body.idStatus, 'id status') }
: { idStatus: { [Op.gt]: 10 } };
const nombre = body.nombre
? validar.validarTexto(body.nombre, 'El nombre', 60)
? validar.validarTexto(body.nombre, 'nombre', true, 60)
: '';
const numeroCuenta = body.numeroCuenta
? validar.validarNumeroCuenta(body.numeroCuenta)
+35 -13
View File
@@ -2,7 +2,10 @@ const validar = require('../../helper/validar');
const CasoEspecial = require('../../db/tablas/CasoEspecial');
const update = async (body) => {
const idCasoEspecial = validar.validarId(body.idCasoEspecial);
const idCasoEspecial = validar.validarNumeroEntero(
body.idCasoEspecial,
'id caso especial'
);
const dataUpdate = {};
return CasoEspecial.findOne({ where: { idCasoEspecial } })
@@ -10,45 +13,64 @@ const update = async (body) => {
if (!res) throw new Error('Este Caso Especial no existe en la db.');
if (body.correo) dataUpdate.correo = validar.validarCorreo(body.correo);
if (body.fechaInicio)
dataUpdate.fechaInicio = validar.validarFecha(body.fechaInicio);
dataUpdate.fechaInicio = validar.validarFecha(
body.fechaInicio,
'fecha de inicio',
false
);
if (body.fechaFin)
dataUpdate.fechaFin = validar.validarFecha(body.fechaFin);
dataUpdate.fechaFin = validar.validarFecha(
body.fechaFin,
'fecha fin',
false
);
if (body.fechaNacimiento)
dataUpdate.fechaNacimiento = validar.validarFecha(body.fechaNacimiento);
dataUpdate.fechaNacimiento = validar.validarFecha(
body.fechaNacimiento,
'fecha de nacimiento',
false
);
if (body.direccion)
dataUpdate.direccion = validar.validarAlfanumerico(
body.direccion,
'La dirección',
'dirección',
false,
200
);
if (body.telefono)
dataUpdate.telefono = validar.validarNumero(body.telefono, 15);
dataUpdate.telefono = validar.validarNumero(
body.telefono,
'teléfono',
true,
15
);
if (body.institucion)
dataUpdate.institucion = validar.validarTexto(
body.institucion,
'El texto institucion.',
'institucion',
false,
200
);
if (body.dependencia)
dataUpdate.dependencia = validar.validarTexto(
body.dependencia,
'El texto dependencia.',
'dependencia',
false,
200
);
if (body.motivo)
dataUpdate.motivo = validar.validarNumero(
body.motivo,
'El texto motivo.',
'motivo',
true,
1
);
if (validar.validarObjetoVacio(dataUpdate))
throw new Error(
'No se envio nada para actualizar este Caso Especial.'
);
throw new Error('No se envio nada para actualizar este caso especial.');
return CasoEspecial.update(dataUpdate, { where: { idCasoEspecial } });
})
.then((res) => ({
message: 'Se guardo correctamente los cambios de este servicio.',
message: 'Se guardo correctamente los cambios de este caso especial.',
}));
};
+5 -4
View File
@@ -4,13 +4,14 @@ const helperPath = '../../helper';
const helper = require(`${helperPath}/helper`);
const { validarNumero } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`);
const Programa = require(`${dbPath}/Programa`);
const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const get = async (body) => {
const year = validarNumero(body.year, 4);
const year = validarNumero(body.year, 'año', true, 4);
const path = `server/uploads/${year}_cuestionario_alumno.csv`;
const data = [];
@@ -22,6 +23,7 @@ const get = async (body) => {
},
{ model: Programa, where: { clavePrograma: { [Op.like]: `${year}%` } } },
{ model: Usuario },
{ model: Carrera },
],
order: [['createdAt']],
})
@@ -32,6 +34,7 @@ const get = async (body) => {
clavePrograma: res[i].Programa.clavePrograma,
usuario: res[i].Usuario.usuario,
nombre: res[i].Usuario.nombre,
carrera: res[i].Carrera.carrera,
idCuestionarioAlumno: res[i].CuestionarioAlumno.idCuestionarioAlumno,
sexo: res[i].CuestionarioAlumno.sexo,
edad: res[i].CuestionarioAlumno.edad,
@@ -73,9 +76,7 @@ const get = async (body) => {
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => {
return path;
});
.then((res) => path);
};
module.exports = get;
@@ -4,7 +4,10 @@ const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`);
const Servicio = require(`${dbPath}/Servicio`);
const nuevo = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const sexo = body.sexo;
const edad = body.edad;
const servicioMedico = body.servicioMedico;
@@ -0,0 +1,147 @@
const { convertArrayToCSV } = require('convert-array-to-csv');
const { Op } = require('sequelize');
const helperPath = '../../helper';
const helper = require(`${helperPath}/helper`);
const { validarNumero } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const CuestionarioAlumno2 = require(`${dbPath}/CuestionarioAlumno2`);
const Programa = require(`${dbPath}/Programa`);
const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const Carrera = require(`${dbPath}/Carrera`);
const get = async (body) => {
const year = validarNumero(body.year, 'año', true, 4);
const path = `server/uploads/${year}_cuestionario_alumno.csv`;
const data = [];
console.log(year);
/*
return Servicio.findAll({
include: [
{
model: CuestionarioAlumno2,
where: { idCuestionarioAlumno: { [Op.not]: null } },
},
{ model: Programa, where: { clavePrograma: { [Op.like]: `${year}%` } } },
{ model: Usuario },
{ model: Carrera },
],
order: [['createdAt']],
})
*/
/* return CuestionarioAlumno2.findAll({
where: {
idCuestionarioAlumno2: {
[Op.not]: null,
},
},
// order: [['createdAt', 'ASC']], // Descomentar si se requiere ordenamiento
})
.then(async (res) => {
console.log("segunda parte",res);
for (let i = 0; i < res.length; i++)
data.push({ ...res})
data.push({
idServicio: res[i].idServicio,
clavePrograma: res[i].Programa.clavePrograma,
usuario: res[i].Usuario.usuario,
nombre: res[i].Usuario.nombre,
carrera: res[i].Carrera.carrera,
idCuestionarioAlumno: res[i].CuestionarioAlumno.idCuestionarioAlumno,
sexo: res[i].CuestionarioAlumno.sexo,
edad: res[i].CuestionarioAlumno.edad,
servicioMedico: res[i].CuestionarioAlumno.servicioMedico,
p1: res[i].CuestionarioAlumno.p1,
p2: res[i].CuestionarioAlumno.p2,
p3: res[i].CuestionarioAlumno.p3,
p4: res[i].CuestionarioAlumno.p4,
p5: res[i].CuestionarioAlumno.p5,
p6: res[i].CuestionarioAlumno.p6,
p7: res[i].CuestionarioAlumno.p7,
p8: res[i].CuestionarioAlumno.p8,
p9: res[i].CuestionarioAlumno.p9,
p10: res[i].CuestionarioAlumno.p10,
p11: res[i].CuestionarioAlumno.p11,
p12: res[i].CuestionarioAlumno.p12,
p13: res[i].CuestionarioAlumno.p13,
p14: res[i].CuestionarioAlumno.p14,
p15: res[i].CuestionarioAlumno.p15,
p16: res[i].CuestionarioAlumno.p16,
p17: res[i].CuestionarioAlumno.p17,
p18: res[i].CuestionarioAlumno.p18,
p19: res[i].CuestionarioAlumno.p19,
p20: res[i].CuestionarioAlumno.p20,
p21: res[i].CuestionarioAlumno.p21,
p22: res[i].CuestionarioAlumno.p22,
p23: res[i].CuestionarioAlumno.p23,
p24: res[i].CuestionarioAlumno.p24,
p25: res[i].CuestionarioAlumno.p25,
p26: res[i].CuestionarioAlumno.p26,
p27: res[i].CuestionarioAlumno.p27,
p28: res[i].CuestionarioAlumno.p28,
p29: res[i].CuestionarioAlumno.p29,
p30: res[i].CuestionarioAlumno.p30,
createdAt: res[i].CuestionarioAlumno.createdAt,
});
await helper.eliminarArchivo(path).catch((err) => {
console.log(err);
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => path);
}; */
return CuestionarioAlumno2.findAll({
where: {
idCuestionarioAlumno2: {
[Op.not]: null,
},
},
})
.then(async (res) => {
console.log("segunda parte", res);
for (let i = 0; i < res.length; i++) {
data.push(res[i].get({ plain: true }));
}
// Alternativa manual si necesitas campos específicos
/* for (let i = 0; i < res.length; i++) {
const row = res[i].get({ plain: true });
data.push({
idCuestionarioAlumno2: row.idCuestionarioAlumno2,
p1: row.p1,
p2: row.p2,
p3: row.p3,
p4: row.p4,
p5: row.p5,
// Agrega los demás campos según sea necesario
});
} */
await helper.eliminarArchivo(path).catch((err) => {
console.log(err);
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => path);
}
module.exports = get;
@@ -0,0 +1,246 @@
const validar = require('../../helper/validar');
const dbPath = '../../db/tablas';
const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`);
const CuestionarioAlumno2 = require(`${dbPath}/CuestionarioAlumno2`);
const Cuestionario = require(`${dbPath}/Cuestionario`);
const Servicio = require(`${dbPath}/Servicio`);
const nuevo = async (body) => {
// console.log(body);
let idServicio = body.idServicio;
/*
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
); */
body = validar.validarCuestionarioAlumno2(body);
// pasar preguntas de array a string
return Servicio.findOne({ where: { idServicio } })
.then(async (res) => {
if (!res) throw new Error('No existe este Servicio Social.');
/*
if (res.idCuestionarioAlumno)
throw new Error(
'Este Servicio Social ya cuenta con cuestionario de alumno'
);
*/
console.log('el servicio social si existe');
// console.log(res);
/**
* existe el servicio social?
* tiene cuestionario alumno en la tabla cuestionario? select * from cuestionario where idServicio = 1
* si no existe, entonces se puede crear el cuestionario
* creamos el cuestionario y guardamos las respuestas
*/
const messageByStatus = {
1: 'Aun no se puede contestar el cuestionario este Servicio Social.',
2: 'Aun no se puede contestar el cuestionario este Servicio Social.',
3: 'Aun no se puede contestar el cuestionario este Servicio Social.',
5: 'Este Servicio Social ya paso la fase de contestar el cuestionario.',
6: 'Este Servicio Social ya paso la fase de contestar el cuestionario.',
7: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
8: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
9: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
10: 'Este Servicio Social fue cancelado.',
};
// if (res.idStatus === 4) return CuestionarioAlumno2.create({ ...body });
console.log('antes de create ques2');
// if (res.idStatus) return CuestionarioAlumno2.create({ ...body });
// si idStatus está en el objeto, arrojamos el mensaje
/* if (messageByStatus.hasOwnProperty(res.idStatus))
throw new Error(messageByStatus[res.idStatus]); */
// throw new Error('Id status no valido.'); // si no coincide con nada, error por defecto
// Cuestionario.findOne({});
let dataCuestionario = await Cuestionario.findOne({
where: { idServicio, dirigidoA: 'estudiantes' },
});
console.log('data cuestionario', dataCuestionario);
if (dataCuestionario) {
throw new Error('Ya existe un cuestionario para este servicio social');
}
let cuestionarioRegistro = await Cuestionario.create({
idServicio,
// idCuestionarioAlumno: respuestasRegistradas.idCuestionarioAlumno,
version: '2',
dirigidoA: 'estudiantes',
titulo: 'Cuestionario de Alumn v2',
desc: 'Cuestionario de Alumno v2',
createdAt: new Date(),
});
console.log("datos a registrar en la tabla cuestionarioAlumno2", { ...body, idCuestionario: cuestionarioRegistro.idCuestionario } );
let respuestasRegistradas = await CuestionarioAlumno2.create({ ...body, idCuestionario: cuestionarioRegistro.idCuestionario });
console.log('despues de registrar cuestionario', respuestasRegistradas);
console.log('cuestionario registrado', cuestionarioRegistro);
return cuestionarioRegistro;
})
.then((res) => ({
message: `Se guardaron tus respuestas correctamente. ${res}`,
}));
};
const convertirSTR = () => {
for (let i = 0; i < body.p3.length; i++) {
p3 += body.p3[i];
if (i < body.p3.length - 1) p3 += ',';
}
for (let i = 0; i < body.p5.length; i++) {
p5 += body.p5[i];
if (i < body.p5.length - 1) p5 += ',';
}
for (let i = 0; i < body.p8.length; i++) {
p8 += body.p8[i];
if (i < body.p8.length - 1) p8 += ',';
}
for (let i = 0; i < body.p14.length; i++) {
p14 += body.p14[i];
if (i < body.p14.length - 1) p14 += ',';
}
for (let i = 0; i < body.p15.length; i++) {
p15 += body.p15[i];
if (i < body.p15.length - 1) p15 += ',';
}
for (let i = 0; i < body.p17.length; i++) {
p17 += body.p17[i];
if (i < body.p17.length - 1) p17 += ',';
}
for (let i = 0; i < body.p21.length; i++) {
p21 += body.p21[i];
if (i < body.p21.length - 1) p21 += ',';
}
for (let i = 0; i < body.p22.length; i++) {
p22 += body.p22[i];
if (i < body.p22.length - 1) p22 += ',';
}
for (let i = 0; i < body.p23.length; i++) {
p23 += body.p23[i];
if (i < body.p23.length - 1) p23 += ',';
}
for (let i = 0; i < body.p24.length; i++) {
p24 += body.p24[i];
if (i < body.p24.length - 1) p24 += ',';
}
};
module.exports = nuevo;
/*
<!-- respuestas de cuestionario formulario2
todas las preguntas se guardan correctamente
{
"p3_A_1": "Deficiente",
"p3_A_2": "Deficiente",
"p3_A_3": "Deficiente",
"p3_A_4": "Deficiente",
"p3_B_1": "Básico",
"p3_B_2": "Básico",
"p3_B_3": "Básico",
"p3_B_4": "Básico",
"p3_C_1": "Intermedio",
"p3_C_2": "Intermedio",
"p3_C_3": "Intermedio",
"p3_C_4": "Intermedio",
"p3_C_5": "Intermedio",
"p3_D_1": "Destacado",
"p3_D_2": "Destacado",
"p3_D_3": "Destacado",
"p3_D_4": "Destacado",
"p3_D_5": "Destacado",
"p3_E_1": "Deficiente",
"p1": "respuesta1",
"p2": "Excelente",
"p4": "respuesta4",
"p5": "Sí",
"p6": "respuesta 6"
}
-->
<!-- respuestas de cuestionario formulario alumno
{
"p1": [
"Dependencia de la UNAM",
"Asesoría académica",
"Oportunidad de desarrollo de tesis"
],
"p12_A_1": "Deficiente",
"p12_A_2": "Deficiente",
"p12_A_3": "Deficiente",
"p12_A_4": "Deficiente",
"p12_B_1": "Básico",
"p12_B_2": "Básico",
"p12_B_3": "Básico",
"p12_B_4": "Básico",
"p12_C_1": "Intermedio",
"p12_C_2": "Intermedio",
"p12_C_3": "Intermedio",
"p12_C_4": "Intermedio",
"p10_1": "si",
"p10_2": "si",
"p10_3": "si",
"p11_1": "Nunca",
"p11_2": "Rara vez",
"p11_3": "Algunas veces",
"p11_4": "Siempre",
"p17_1": "si",
"p17_2": "no",
"p17_3": "si",
"p3_1": "si",
"p3_2": "si",
"p3_3": "si",
"p3_4": "si",
"p12_D_1": "Destacado",
"p12_D_2": "Destacado",
"p12_D_3": "Destacado",
"p12_D_4": "Destacado",
"p12_D_5": "Destacado",
"p2": "Deficiente",
"p4": "No",
"p5": "respuesta5",
"p6": "Sí",
"p7": "Sí",
"p8": "respuesta8",
"p9": "Sí",
"p13": "Responsable directo del programa",
"p14": "Se te otorgó de acuerdo a lo establecido",
"p15": "Sí",
"p16": "respuesta 16",
"p18": "respuesta18"
}
-->
*/
@@ -5,13 +5,14 @@ const helperPath = '../../helper';
const helper = require(`${helperPath}/helper`);
const { validarNumero } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const CuestionarioPrograma = require(`${dbPath}/CuestionarioPrograma`);
const Servicio = require(`${dbPath}/Servicio`);
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/Usuario`);
const get = async (body) => {
const year = validarNumero(body.year, 4);
const year = validarNumero(body.year, 'año', true, 4);
const path = `server/uploads/${year}_cuestionario_programa.csv`;
const data = [];
@@ -23,6 +24,7 @@ const get = async (body) => {
},
{ model: Programa, where: { clavePrograma: { [Op.like]: `${year}-%` } } },
{ model: Usuario },
{ model: Carrera },
],
order: [['createdAt']],
})
@@ -33,6 +35,7 @@ const get = async (body) => {
clavePrograma: res[i].Programa.clavePrograma,
usuario: res[i].Usuario.usuario,
nombre: res[i].Usuario.nombre,
carrera: res[i].Carrera.carrera,
idCuestionarioPrograma:
res[i].CuestionarioPrograma.idCuestionarioPrograma,
actividad1: res[i].CuestionarioPrograma.actividad1,
@@ -50,9 +53,7 @@ const get = async (body) => {
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => {
return path;
});
.then((res) => path);
};
module.exports = get;
@@ -4,7 +4,10 @@ const CuestionarioPrograma = require(`${dbPath}/CuestionarioPrograma`);
const Servicio = require(`${dbPath}/Servicio`);
const nuevo = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const actividad1 = body.actividad1;
const actividad2 = body.actividad2;
const actividad3 = body.actividad3;
@@ -0,0 +1,105 @@
const fs = require('fs');
const { convertArrayToCSV } = require('convert-array-to-csv');
const { Op } = require('sequelize');
const helperPath = '../../helper';
const helper = require(`${helperPath}/helper`);
const { validarNumero } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const CuestionarioPrograma2 = require(`${dbPath}/CuestionarioPrograma`);
const Servicio = require(`${dbPath}/Servicio`);
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/Usuario`);
const get = async (body) => {
const year = validarNumero(body.year, 'año', true, 4);
const path = `server/uploads/${year}_cuestionario_programa.csv`;
const data = [];
return CuestionarioPrograma2.findAll({
where: {
idCuestionarioPrograma2: {
[Op.not]: null,
},
},
})
.then(async (res) => {
console.log("segunda parte", res);
for (let i = 0; i < res.length; i++) {
data.push(res[i].get({ plain: true }));
}
// Alternativa manual si necesitas campos específicos
/* for (let i = 0; i < res.length; i++) {
const row = res[i].get({ plain: true });
data.push({
idCuestionarioPrograma2: row.idCuestionarioPrograma2,
p1: row.p1,
p2: row.p2,
p3: row.p3,
p4: row.p4,
p5: row.p5,
// Agrega los demás campos según sea necesario
});
} */
await helper.eliminarArchivo(path).catch((err) => {
console.log(err);
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => path);
}
/* return Servicio.findAll({
include: [
{
model: CuestionarioPrograma,
where: { idCuestionarioPrograma: { [Op.not]: null } },
},
{ model: Programa, where: { clavePrograma: { [Op.like]: `${year}-%` } } },
{ model: Usuario },
{ model: Carrera },
],
order: [['createdAt']],
})
.then(async (res) => {
for (let i = 0; i < res.length; i++)
data.push({
idServicio: res[i].idServicio,
clavePrograma: res[i].Programa.clavePrograma,
usuario: res[i].Usuario.usuario,
nombre: res[i].Usuario.nombre,
carrera: res[i].Carrera.carrera,
idCuestionarioPrograma:
res[i].CuestionarioPrograma.idCuestionarioPrograma,
actividad1: res[i].CuestionarioPrograma.actividad1,
actividad2: res[i].CuestionarioPrograma.actividad2,
actividad3: res[i].CuestionarioPrograma.actividad3,
actividad4: res[i].CuestionarioPrograma.actividad4,
actividad5: res[i].CuestionarioPrograma.actividad5,
retroalimentacion: res[i].CuestionarioPrograma.retroalimentacion,
p6: res[i].CuestionarioPrograma.p6,
p7: res[i].CuestionarioPrograma.p7,
createdAt: res[i].CuestionarioPrograma.createdAt,
});
await helper.eliminarArchivo(path).catch((err) => {
console.log(err);
});
return helper.crearArchivo(path, convertArrayToCSV(data));
})
.then((res) => path);
*/
module.exports = get;
@@ -0,0 +1,249 @@
const validar = require('../../helper/validar');
const dbPath = '../../db/tablas';
const CuestionarioAlumno = require(`${dbPath}/CuestionarioAlumno`);
const CuestionarioPrograma2 = require(`${dbPath}/CuestionarioPrograma2`);
const Cuestionario = require(`${dbPath}/Cuestionario`);
const Servicio = require(`${dbPath}/Servicio`);
const nuevo = async (body) => {
// console.log(body);
let idServicio = body.idServicio;
/*
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
); */
// pasar preguntas de array a string
return Servicio.findOne({ where: { idServicio } })
.then(async (res) => {
if (!res) throw new Error('No existe este Servicio Social.');
/* if (res.idCuestionarioAlumno)
throw new Error(
'Este Servicio Social ya cuenta con cuestionario de programa'
); */
console.log('el servicio social si existe');
// console.log(res);
/**
* existe el servicio social?
* tiene cuestionario alumno en la tabla cuestionario? select * from cuestionario where idServicio = 1
* si no existe, entonces se puede crear el cuestionario
* creamos el cuestionario y guardamos las respuestas
*/
const messageByStatus = {
1: 'Aun no se puede contestar el cuestionario este Servicio Social.',
2: 'Aun no se puede contestar el cuestionario este Servicio Social.',
3: 'Aun no se puede contestar el cuestionario este Servicio Social.',
5: 'Este Servicio Social ya paso la fase de contestar el cuestionario.',
6: 'Este Servicio Social ya paso la fase de contestar el cuestionario.',
7: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
8: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
9: 'Este Servicio Social se encuentra rechazado. No se puede avanzar hasta que se corrija lo necesario.',
10: 'Este Servicio Social fue cancelado.',
};
// if (res.idStatus === 4) return CuestionarioPrograma2.create({ ...body });
console.log('antes de create ques2');
// if (res.idStatus) return CuestionarioPrograma2.create({ ...body });
// si idStatus está en el objeto, arrojamos el mensaje
/* if (messageByStatus.hasOwnProperty(res.idStatus))
throw new Error(messageByStatus[res.idStatus]); */
// throw new Error('Id status no valido.'); // si no coincide con nada, error por defecto
let dataCuestionario = await Cuestionario.findOne({
where: { idServicio, dirigidoA: 'programas' },
});
console.log('data cuestionario', dataCuestionario);
if (dataCuestionario) {
throw new Error('Ya existe un cuestionario para este servicio social');
}
let cuestionarioRegistro = await Cuestionario.create({
idServicio,
idCuestionarioPrograma: respuestasRegistradas.idCuestionarioPrograma,
version: '2',
dirigidoA: 'programas',
titulo: 'Cuestionario de programa v2',
desc: 'Cuestionario de programa v2',
createdAt: new Date(),
});
console.log('cuestionario registrado', cuestionarioRegistro);
let respuestasRegistradas = await CuestionarioPrograma2.create({
...body,
idCuestionario: cuestionarioRegistro.idCuestionario
});
console.log('despues de registrar cuestionario', respuestasRegistradas);
// si el cuestionario ya existe solo hay que actualizar el id de cuestionarioprograma o alumno
return cuestionarioRegistro;
})
.then((res) => ({
message: `Se guardaron tus respuestas correctamente. ${res}`,
}));
};
const convertirSTR = () => {
for (let i = 0; i < body.p3.length; i++) {
p3 += body.p3[i];
if (i < body.p3.length - 1) p3 += ',';
}
for (let i = 0; i < body.p5.length; i++) {
p5 += body.p5[i];
if (i < body.p5.length - 1) p5 += ',';
}
for (let i = 0; i < body.p8.length; i++) {
p8 += body.p8[i];
if (i < body.p8.length - 1) p8 += ',';
}
for (let i = 0; i < body.p14.length; i++) {
p14 += body.p14[i];
if (i < body.p14.length - 1) p14 += ',';
}
for (let i = 0; i < body.p15.length; i++) {
p15 += body.p15[i];
if (i < body.p15.length - 1) p15 += ',';
}
for (let i = 0; i < body.p17.length; i++) {
p17 += body.p17[i];
if (i < body.p17.length - 1) p17 += ',';
}
for (let i = 0; i < body.p21.length; i++) {
p21 += body.p21[i];
if (i < body.p21.length - 1) p21 += ',';
}
for (let i = 0; i < body.p22.length; i++) {
p22 += body.p22[i];
if (i < body.p22.length - 1) p22 += ',';
}
for (let i = 0; i < body.p23.length; i++) {
p23 += body.p23[i];
if (i < body.p23.length - 1) p23 += ',';
}
for (let i = 0; i < body.p24.length; i++) {
p24 += body.p24[i];
if (i < body.p24.length - 1) p24 += ',';
}
};
module.exports = nuevo;
/*
<!-- respuestas de cuestionario formulario2
todas las preguntas se guardan correctamente
{
"p3_A_1": "Deficiente",
"p3_A_2": "Deficiente",
"p3_A_3": "Deficiente",
"p3_A_4": "Deficiente",
"p3_B_1": "Básico",
"p3_B_2": "Básico",
"p3_B_3": "Básico",
"p3_B_4": "Básico",
"p3_C_1": "Intermedio",
"p3_C_2": "Intermedio",
"p3_C_3": "Intermedio",
"p3_C_4": "Intermedio",
"p3_C_5": "Intermedio",
"p3_D_1": "Destacado",
"p3_D_2": "Destacado",
"p3_D_3": "Destacado",
"p3_D_4": "Destacado",
"p3_D_5": "Destacado",
"p3_E_1": "Deficiente",
"p1": "respuesta1",
"p2": "Excelente",
"p4": "respuesta4",
"p5": "Sí",
"p6": "respuesta 6"
}
-->
<!-- respuestas de cuestionario formulario alumno
{
"p1": [
"Dependencia de la UNAM",
"Asesoría académica",
"Oportunidad de desarrollo de tesis"
],
"p12_A_1": "Deficiente",
"p12_A_2": "Deficiente",
"p12_A_3": "Deficiente",
"p12_A_4": "Deficiente",
"p12_B_1": "Básico",
"p12_B_2": "Básico",
"p12_B_3": "Básico",
"p12_B_4": "Básico",
"p12_C_1": "Intermedio",
"p12_C_2": "Intermedio",
"p12_C_3": "Intermedio",
"p12_C_4": "Intermedio",
"p10_1": "si",
"p10_2": "si",
"p10_3": "si",
"p11_1": "Nunca",
"p11_2": "Rara vez",
"p11_3": "Algunas veces",
"p11_4": "Siempre",
"p17_1": "si",
"p17_2": "no",
"p17_3": "si",
"p3_1": "si",
"p3_2": "si",
"p3_3": "si",
"p3_4": "si",
"p12_D_1": "Destacado",
"p12_D_2": "Destacado",
"p12_D_3": "Destacado",
"p12_D_4": "Destacado",
"p12_D_5": "Destacado",
"p2": "Deficiente",
"p4": "No",
"p5": "respuesta5",
"p6": "Sí",
"p7": "Sí",
"p8": "respuesta8",
"p9": "Sí",
"p13": "Responsable directo del programa",
"p14": "Se te otorgó de acuerdo a lo establecido",
"p15": "Sí",
"p16": "respuesta 16",
"p18": "respuesta18"
}
-->
*/
+1 -9
View File
@@ -133,18 +133,10 @@ const cargaMasiva = async (file) => {
mensaje += '\n';
}
await gmail('Reporte carga masiva', 'lemuel@acatlan.unam.mx', mensaje);
// await gmail('Reporte carga masiva', 'dscad@acatlan.unam.mx', mensaje);
// await gmail(
// 'Reporte carga masiva',
// 'tramites.ss@acatlan.unam.mx',
// mensaje
// );
fs.unlinkSync(path);
});
return {
message:
'Se subio correctamente el archivo csv, se enviará un correo a tramites.ss@acatlan.unam.mx con los detalles de la carga masiva.',
message: 'Se subio correctamente el archivo csv para la carga masiva.',
};
};
+2 -2
View File
@@ -1,10 +1,10 @@
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/Usuario`);
const programasAdmin = async (body) => {
const idUsuario = validarId(body.idUsuario);
const idUsuario = validarNumeroEntero(body.idUsuario, 'id usuario');
return Usuario.findOne({
where: { idUsuario },
@@ -1,10 +1,10 @@
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/Usuario`);
const programasResponsable = async (body) => {
const idUsuario = validarId(body.idUsuario);
const idUsuario = validarNumeroEntero(body.idUsuario, 'id usuario');
return Usuario.findOne({
where: { idUsuario },
@@ -1,11 +1,13 @@
const { validarId, validarCorreo } = require('../../helper/validar');
const validar = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/Usuario`);
const reasignarProgramas = async (body) => {
const idUsuario = validarId(body.idUsuario);
const correoOtroResponsable = validarCorreo(body.correoOtroResponsable);
const idUsuario = validar.validarNumeroEntero(body.idUsuario, 'id usuario');
const correoOtroResponsable = validar.validarCorreo(
body.correoOtroResponsable
);
let otorResponsable = {};
return Usuario.findOne({
+4 -3
View File
@@ -1,4 +1,4 @@
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const Programa = require(`${dbPath}/Programa`);
@@ -8,7 +8,7 @@ const TipoUsuario = require(`${dbPath}/TipoUsuario`);
const Usuario = require(`${dbPath}/Usuario`);
const admin = async (body) => {
const idServicio = validarId(body.idServicio);
const idServicio = validarNumeroEntero(body.idServicio, 'id servicio');
return Servicio.findOne({
where: { idServicio },
@@ -16,12 +16,13 @@ const admin = async (body) => {
{ model: Usuario, include: [{ model: TipoUsuario }] },
{ model: Carrera },
{ model: Status },
{ model: Programa },
{ model: Programa, include: [{ model: Usuario }] },
],
}).then((res) => {
if (!res) throw new Error('No existe este servicio social.');
delete res.dataValues.Usuario.dataValues.password;
delete res.dataValues.Programa.dataValues.idUsuario;
delete res.dataValues.Programa.dataValues.Usuario.dataValues.password;
delete res.dataValues.idUsuario;
delete res.dataValues.idCarrera;
delete res.dataValues.idStatus;
+2 -2
View File
@@ -1,5 +1,5 @@
const { Op } = require('sequelize');
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
const Programa = require(`${dbPath}/Programa`);
@@ -8,7 +8,7 @@ const Status = require(`${dbPath}/Status`);
const Usuario = require(`${dbPath}/Usuario`);
const alumno = async (body) => {
let idUsuario = validarId(body.idUsuario);
let idUsuario = validarNumeroEntero(body.idUsuario, 'id usuario');
return Usuario.findOne({ where: { idUsuario } })
.then((res) => {
+10 -2
View File
@@ -8,8 +8,16 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const cancelar = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const mensaje = validar.validarAlfanumerico(body.mensaje, 'El mensaje', 800);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const mensaje = validar.validarAlfanumerico(
body.mensaje,
'mensaje',
true,
800
);
let correoResponsable = {};
let correoAlumno = {};
let emailResponsable = '';
+13 -5
View File
@@ -1,11 +1,19 @@
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
//const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const Servicio = require('../../db/tablas/Servicio');
const cartaTermino = async (body, file) => {
const idServicio = validar.validarId(body.idServicio);
const path = `./server/uploads/${validar.validar(file, 'El archivo', 1000)}`;
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const path = `./server/uploads/${validar.validacionBasicaStr(
file,
'archivo',
true,
1000
)}`;
return Servicio.findOne({
where: { idServicio },
@@ -15,13 +23,13 @@ const cartaTermino = async (body, file) => {
if (res.cartaAceptacion)
throw new Error('Ya se subio la Carta de Aceptación.');
switch (res.idStatus) {
case 7:
/* case 7:
return drive.uploadFile(
path,
`Carta_Aceptacion.pdf`,
'application/pdf',
res.carpeta
);
); */
case 1:
throw new Error(
'Esta linea de la API solo puede ser usada cuando es estatus del Servicio Social sea 7.'
+13 -5
View File
@@ -1,11 +1,19 @@
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
//const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const Servicio = require('../../db/tablas/Servicio');
const cartaTermino = async (body, file) => {
const idServicio = validar.validarId(body.idServicio);
const path = `./server/uploads/${validar.validar(file, 'El archivo', 1000)}`;
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const path = `./server/uploads/${validar.validacionBasicaStr(
file,
'archivo',
true,
1000
)}`;
return Servicio.findOne({
where: { idServicio },
@@ -15,13 +23,13 @@ const cartaTermino = async (body, file) => {
if (res.cartaTermino) throw new Error('Ya se subio la Carta de Termino.');
switch (res.idStatus) {
case 4:
case 8:
/* case 8:
return drive.uploadFile(
path,
`Carta_Termino.pdf`,
'application/pdf',
res.carpeta
);
); */
case 1:
case 2:
case 3:
@@ -10,7 +10,7 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const gustavoBazPrada = async (body) => {
const year = validar.validarNumero(body.year, 4);
const year = validar.validarNumero(body.year, 'año', true, 4);
const inicio = moment(`${year}-01-31`);
const fin = moment(`${parseInt(year) + 1}-01-31`);
const path = `server/uploads/${year}_gustavo_baz_prada.csv`;
+13 -5
View File
@@ -1,11 +1,19 @@
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
//const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const Servicio = require('../../db/tablas/Servicio');
const informeGlobal = async (body, file) => {
const idServicio = validar.validarId(body.idServicio);
const path = `./server/uploads/${validar.validar(file, 'El archivo', 1000)}`;
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const path = `./server/uploads/${validar.validacionBasicaStr(
file,
'archivo',
true,
1000
)}`;
return Servicio.findOne({
where: { idServicio },
@@ -15,13 +23,13 @@ const informeGlobal = async (body, file) => {
if (res.informeGlobal) throw new Error('Ya se subio el Informe Global.');
switch (res.idStatus) {
case 4:
case 9:
/* case 9:
return drive.uploadFile(
path,
`Informe_Global.pdf`,
'application/pdf',
res.carpeta
);
); */
case 1:
case 2:
case 3:
+4 -1
View File
@@ -9,7 +9,10 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const liberacion = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const update = { idStatus: 6, fechaLiberacion: moment().format() };
let correo = {};
+51 -34
View File
@@ -1,6 +1,6 @@
const { Op } = require('sequelize');
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
//const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Carrera = require(`${dbPath}/Carrera`);
@@ -9,30 +9,40 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const nuevo = async (body, file) => {
const idUsuario = validar.validarId(body.idUsuario);
const idPrograma = validar.validarId(body.idPrograma);
const idCarrera = validar.validarId(body.idCarrera);
const idUsuario = validar.validarNumeroEntero(body.idUsuario, 'id usuario');
const idPrograma = validar.validarNumeroEntero(
body.idPrograma,
'id programa'
);
const idCarrera = validar.validarNumeroEntero(body.idCarrera, 'id carrera');
const numeroCuenta = validar.validarNumeroCuenta(body.numeroCuenta);
const creditos = validar.validarNumero(body.creditos);
const creditos = validar.validarNumero(body.creditos, 'créditos', true);
const correo = validar.validarCorreo(body.correo);
const fechaInicio = validar.validarFecha(body.fechaInicio);
const fechaFin = validar.validarFecha(body.fechaFin);
const path = `./server/uploads/${validar.validar(file, 'El archivo', 1000)}`;
const fechaInicio = validar.validarFecha(
body.fechaInicio,
'fecha de inicio',
false
);
const fechaFin = validar.validarFecha(body.fechaFin, 'fecha fin', false);
const path = `./server/uploads/${validar.validacionBasicaStr(
file,
'archivo',
true,
1000
)}`;
const programaInterno = body.programaInterno
? validar.validarAlfanumerico(
body.programaInterno,
'El texto programa interno',
'programa interno',
true,
250
)
: '';
const profesor = body.profesor
? validar.validarTexto(body.profesor, 'El texto de profesor.', 50)
? validar.validarTexto(body.profesor, 'profesor', true, 50)
: '';
let carpeta = '';
return Usuario.findOne({
where: { idUsuario },
})
return Usuario.findOne({ where: { idUsuario } })
.then((res) => {
if (!res) throw new Error('Este alumno no existe en la db.');
if (res.idTipoUsuario !== 3)
@@ -52,19 +62,7 @@ const nuevo = async (body, file) => {
.then(async (res) => {
if (res)
throw new Error('Este alumno ya tienen un Servicio Social activo.');
return drive.folder(numeroCuenta);
})
.then((res) => {
carpeta = res;
return drive.uploadFile(
path,
`Carta_Aceptacion.pdf`,
'application/pdf',
carpeta
);
})
.then((res) =>
Servicio.create({
return Servicio.create({
idUsuario,
idPrograma,
idCarrera,
@@ -72,15 +70,34 @@ const nuevo = async (body, file) => {
correo,
fechaInicio: fechaInicio.format(),
fechaFin: fechaFin.format(),
carpeta,
cartaAceptacion: res,
carpeta: '',
cartaAceptacion: '',
profesor,
programaInterno,
})
)
.then((res) => ({
message: `Se Pre-Registro correctamente al alumno.`,
}));
});
})
.then((servicio) => {
let carpeta = '';
/* drive
.mkDir(numeroCuenta)
.then((res) => {
carpeta = res;
return drive.uploadFile(
path,
`Carta_Aceptacion.pdf`,
'application/pdf',
carpeta
);
})
.then((res) =>
Servicio.update(
{ carpeta, cartaAceptacion: res },
{ where: { idServicio: servicio.idServicio } }
)
); */
return { message: `Se Pre-Registro correctamente a este alumno.` };
});
};
module.exports = nuevo;
@@ -8,8 +8,16 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const cancelar = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const mensaje = validar.validarAlfanumerico(body.mensaje, 'El mensaje', 800);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const mensaje = validar.validarAlfanumerico(
body.mensaje,
'mensaje',
true,
800
);
let correoResponsable = {};
let correoAlumno = {};
let emailResponsable = '';
+10 -2
View File
@@ -8,8 +8,16 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const cancelar = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const mensaje = validar.validarAlfanumerico(body.mensaje, 'El mensaje', 800);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const mensaje = validar.validarAlfanumerico(
body.mensaje,
'mensaje',
true,
800
);
let correoResponsable = {};
let correoAlumno = {};
let emailResponsable = '';
+10 -2
View File
@@ -8,8 +8,16 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const cancelar = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const mensaje = validar.validarAlfanumerico(body.mensaje, 'El mensaje', 800);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const mensaje = validar.validarAlfanumerico(
body.mensaje,
'mensaje',
true,
800
);
let correoResponsable = {};
let correoAlumno = {};
let emailResponsable = '';
+4 -1
View File
@@ -8,7 +8,10 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const registro = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const password = encriptar.generarPassword();
let correo = {};
let idUsuario;
+12 -4
View File
@@ -8,12 +8,20 @@ const Servicio = require(`${dbPath}/Servicio`);
const Usuario = require(`${dbPath}/Usuario`);
const registroValidado = async (body) => {
const idServicio = validar.validarId(body.idServicio);
const fechaNacimiento = validar.validarFecha(body.fechaNacimiento);
const telefono = validar.validarNumero(body.telefono, 15);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const fechaNacimiento = validar.validarFecha(
body.fechaNacimiento,
'fecha de nacimiento',
false
);
const telefono = validar.validarNumero(body.telefono, 'teléfono', true, 15);
const direccion = validar.validarAlfanumerico(
body.direccion,
'La dirección',
'dirección',
false,
200
);
let correoResponsable = {};
+2 -2
View File
@@ -11,8 +11,8 @@ const Status = require(`${dbPath}/Status`);
const Usuario = require(`${dbPath}/Usuario`);
const reporte = async (body) => {
const inicio = validarFecha(body.inicio);
const fin = validarFecha(body.fin);
const inicio = validarFecha(body.inicio, 'fecha de inicio', false);
const fin = validarFecha(body.fin, 'fecha fin', false);
const path = `server/uploads/reporte.csv`;
const data = [];
+10 -3
View File
@@ -8,12 +8,19 @@ const Status = require(`${dbPath}/Status`);
const Usuario = require(`${dbPath}/Usuario`);
const serviciosAdmin = async (body) => {
const pagina = validar.validarNumero(body.pagina, true);
const pagina = validar.validarNumero(
body.pagina,
'página',
false,
null,
true,
true
);
const where = body.idStatus
? { idStatus: validar.validarId(body.idStatus) }
? { idStatus: validar.validarNumeroEntero(body.idStatus, 'id status') }
: {};
const nombre = body.nombre
? validar.validarTexto(body.nombre, 'El nombre', 60)
? validar.validarTexto(body.nombre, 'nombre', true, 60)
: '';
const numeroCuenta = body.numeroCuenta
? validar.validarNumeroCuenta(body.numeroCuenta)
@@ -9,14 +9,21 @@ const Status = require(`${dbPath}/Status`);
const Usuario = require(`${dbPath}/Usuario`);
const serviciosResponsable = async (body) => {
const pagina = validar.validarNumero(body.pagina, true);
const idUsuario = validar.validarId(body.idUsuario);
const pagina = validar.validarNumero(
body.pagina,
'página',
false,
null,
true,
true
);
const idUsuario = validar.validarNumeroEntero(body.idUsuario, 'id usuario');
const where = body.idStatus
? { idStatus: validar.validarId(body.idStatus) }
? { idStatus: validar.validarNumeroEntero(body.idStatus, 'id status') }
: { idStatus: { [Op.ne]: 10 } };
const nombre = body.nombre
? validar.validarTexto(body.nombre, 'El nombre', 60)
? validar.validarTexto(body.nombre, 'nombre', true, 60)
: '';
const numeroCuenta = body.numeroCuenta
? validar.validarNumeroCuenta(body.numeroCuenta)
+33 -7
View File
@@ -1,15 +1,20 @@
const helperPath = '../../helper';
const drive = require(`${helperPath}/drive`);
//const drive = require(`${helperPath}/drive`);
const validar = require(`${helperPath}/validar`);
const Servicio = require('../../db/tablas/Servicio');
const update = async (body, files) => {
const idServicio = validar.validarId(body.idServicio);
const idServicio = validar.validarNumeroEntero(
body.idServicio,
'id servicio'
);
const dataUpdate = {};
return Servicio.findOne({ where: { idServicio } })
.then(async (res) => {
if (!res) throw new Error('Este Servicio Social no existe en la db.');
/*
try {
if (files['cartaAceptacion'][0].filename)
dataUpdate.cartaAceptacion = await drive.uploadFile(
@@ -37,21 +42,42 @@ const update = async (body, files) => {
res.carpeta
);
} catch (err) {}
*/
if (body.correo) dataUpdate.correo = validar.validarCorreo(body.correo);
if (body.fechaInicio)
dataUpdate.fechaInicio = validar.validarFecha(body.fechaInicio);
dataUpdate.fechaInicio = validar.validarFecha(
body.fechaInicio,
'fecha de inicio',
false
);
if (body.fechaFin)
dataUpdate.fechaFin = validar.validarFecha(body.fechaFin);
dataUpdate.fechaFin = validar.validarFecha(
body.fechaFin,
'fecha fin',
false
);
if (body.fechaNacimiento)
dataUpdate.fechaNacimiento = validar.validarFecha(body.fechaNacimiento);
dataUpdate.fechaNacimiento = validar.validarFecha(
body.fechaNacimiento,
'fecha de nacimiento',
false
);
if (body.direccion)
dataUpdate.direccion = validar.validarAlfanumerico(
body.direccion,
'La dirección',
'dirección',
false,
200
);
if (body.telefono)
dataUpdate.telefono = validar.validarNumero(body.telefono, 15);
dataUpdate.telefono = validar.validarNumero(
body.telefono,
'teléfono',
true,
15
);
if (validar.validarObjetoVacio(dataUpdate))
throw new Error(
'No se envio nada para actualizar este Servicio Social'
+40 -5
View File
@@ -4,6 +4,33 @@ const { validarNumeroCuenta } = require('../../helper/validar');
const dbPath = '../../db/tablas';
const Usuario = require(`${dbPath}/Usuario`);
const Carrera = require(`${dbPath}/Carrera`);
const creditosCarreras = [
{ carrera: 'LIC. EN ACTUARIA', creditos: 64 },
{ carrera: 'LIC. EN ARQUITECTURA', creditos: 70 },
{ carrera: 'LIC. EN CIENCIAS POLITICAS Y ADMON PUB', creditos: 67 },
{ carrera: 'LIC. EN CIENCIAS POLITICAS Y ADMON.PUBL.', creditos: 67 },
{ carrera: 'LIC. EN COMUNICACION', creditos: 67 },
{ carrera: 'LIC. EN DERECHO', creditos: 68 },
{ carrera: 'LIC. EN DERECHO (SUA)', creditos: 67 },
{ carrera: 'LIC. EN DISEÑO GRAFICO', creditos: 70 },
{ carrera: 'LIC. EN ECONOMIA', creditos: 66 },
{ carrera: 'LIC. EN ENSEÑANZA DE INGLES', creditos: 69 },
{ carrera: 'LIC. EN FILOSOFIA', creditos: 70 },
{ carrera: 'LIC. EN HISTORIA', creditos: 70 },
{ carrera: 'LIC. EN INGENIERIA CIVIL', creditos: 70 },
{ carrera: 'LIC. EN LENGUA Y LITERATURA HISPANICAS', creditos: 70 },
{ carrera: 'LIC. EN MAT. APLICADAS Y COMPUTACION', creditos: 66 },
{ carrera: 'LIC. EN MATEMATICAS APLICADAS Y COMP.', creditos: 66 },
{ carrera: 'LIC. EN PEDAGOGÍA', creditos: 70 },
{ carrera: 'LIC. EN PERIODISMO Y COMUNICACION COL.', creditos: 70 },
{ carrera: 'LIC. EN RELACIONES INTERNACIONALES', creditos: 70 },
{ carrera: 'LIC. EN RELACIONES INTERNACIONALES (SUA)', creditos: 70 },
{ carrera: 'LIC. EN SOCIOLOGIA', creditos: 68 },
{ carrera: 'LIC. ENSEÑANZA DE ALEMÁN (LENG. EXTRANJS', creditos: 70 },
{ carrera: 'LIC. ENSEÑANZA DE ESPAÑOL(LENG. EXTRANJ)', creditos: 70 },
{ carrera: 'LIC. ENSEÑANZA DE INGLÉS(LENG. EXTRANJE)', creditos: 70 },
{ carrera: 'LIC. ENSEÑANZA DE ITALIANO(LENG. EXTRANJ', creditos: 70 },
];
const escolares = async (body) => {
const numeroCuenta = validarNumeroCuenta(body.numeroCuenta);
@@ -17,18 +44,26 @@ const escolares = async (body) => {
.then((res) => {
if (!res.data.nombre || !res.data.carrconst || !res.data.avance)
throw new Error(
'El alumno no cumple con los requisitos para realizar el Servicio Social. Si cree que esto es erroneo comunicate con COESI.'
'El alumno no cumple con los requisitos para realizar el Servicio Social. Si cree que esto es erróneo comunícate al Departamento de Servicio Social y Bolsa de Trabajo.'
);
alumno = {
nombre: res.data.nombre.trim(),
creditos: res.data.avance,
carrera: res.data.carrconst.trim(),
};
while (alumno.nombre.search('‘') != -1)
alumno.nombre = alumno.nombre.replace('‘', '');
while (alumno.nombre.search('Ã') != -1)
for (let i = 0; i < creditosCarreras.length; i++)
if (
alumno.carrera === creditosCarreras[i].carrera &&
Number(alumno.creditos) < creditosCarreras[i].creditos
)
throw new Error('Este alumno no cuenta con los créditos necesarios.');
while (
alumno.nombre.search('‘') != -1 &&
alumno.nombre.search('Ã') != -1
) {
alumno.nombre = alumno.nombre.replace('Ã', 'Ñ');
alumno.nombre = alumno.nombre.replace('‘', '');
}
return Carrera.findOne({ where: { carrera: alumno.carrera } });
})
.then((res) => {
+8 -2
View File
@@ -6,10 +6,16 @@ const Usuario = require(`${dbPath}/Usuario`);
const TipoUsuario = require(`${dbPath}/TipoUsuario`);
const login = async (body) => {
const usuario = validar.validar(body.usuario, 'El usuario', 60);
const usuario = validar.validacionBasicaStr(
body.usuario,
'usuario',
true,
60
);
const password = validar.validarAlfanumerico(
body.password,
'La contraseña',
'contraseña',
false,
20
);
@@ -1,5 +1,5 @@
const helperPath = '../../helper';
const { validarId } = require(`${helperPath}/validar`);
const { validarNumeroEntero } = require(`${helperPath}/validar`);
const gmail = require(`${helperPath}/gmail`);
const correos = require(`${helperPath}/correos`);
const encriptar = require(`${helperPath}/encriptar`);
@@ -8,7 +8,7 @@ const Usuario = require(`${dbPath}/Usuario`);
const Servicio = require(`${dbPath}/Servicio`);
const newPasswordAlumno = async (body) => {
const idServicio = validarId(body.idServicio);
const idServicio = validarNumeroEntero(body.idServicio, 'id servicio');
const password = encriptar.generarPassword();
let idUsuario;
let correo = {};
@@ -1,12 +1,12 @@
const helperPath = '../../helper';
const { validarId } = require(`${helperPath}/validar`);
const { validarNumeroEntero } = require(`${helperPath}/validar`);
const gmail = require(`${helperPath}/gmail`);
const correos = require(`${helperPath}/correos`);
const encriptar = require(`${helperPath}/encriptar`);
const Usuario = require('../../db/tablas/Usuario');
const newPasswordResponsable = async (body) => {
const idUsuario = await validarId(body.idUsuario);
const idUsuario = validarNumeroEntero(body.idUsuario, 'id usuario');
const password = encriptar.generarPassword();
let correo = {};
+2 -2
View File
@@ -1,8 +1,8 @@
const { validarId } = require('../../helper/validar');
const { validarNumeroEntero } = require('../../helper/validar');
const Usuario = require('../../db/tablas/Usuario');
const responsable = async (body) => {
const idUsuario = validarId(body.idUsuario);
const idUsuario = validarNumeroEntero(body.idUsuario, 'id usuario');
return Usuario.findOne({
where: { idUsuario },
@@ -3,7 +3,7 @@ const validar = require('../../helper/validar');
const Usuario = require('../../db/tablas/Usuario');
const responsableUpdate = async (body) => {
const idUsuario = validar.validarId(body.idUsuario);
const idUsuario = validar.validarNumeroEntero(body.idUsuario, 'id usuario');
const dataUpdate = {};
return Usuario.findOne({ where: { idUsuario } })
@@ -24,8 +24,12 @@ const responsableUpdate = async (body) => {
dataUpdate.usuario = validar.validarCorreo(body.correo);
}
if (body.nombre)
dataUpdate.nombre = validar.validarTexto(body.nombre, 'el nombre', 70);
dataUpdate.nombre = validar.validarTexto(
body.nombre,
'nombre',
true,
70
);
if (validar.validarObjetoVacio(dataUpdate))
throw new Error('No se a envio nada para actualizar.');
return Usuario.update(dataUpdate, { where: { idUsuario } });
+10 -3
View File
@@ -3,12 +3,19 @@ const validar = require('../../helper/validar');
const Usuario = require('../../db/tablas/Usuario');
const responsables = async (body) => {
const pagina = validar.validarNumero(body.pagina, true);
const pagina = validar.validarNumero(
body.pagina,
'página',
false,
null,
true,
true
);
const nombre = body.nombre
? validar.validarTexto(body.nombre, 'El nombre', 60)
? validar.validarTexto(body.nombre, 'nombre', true, 60)
: '';
const correo = body.correo
? validar.validar(body.correo, 'El correo', 1000)
? validar.validacionBasicaStr(body.correo, 'correo', true, 1000)
: '';
return Usuario.findAndCountAll({
+34
View File
@@ -11,6 +11,11 @@ const Status = require('./tablas/Status');
const TipoUsuario = require('./tablas/TipoUsuario');
const Usuario = require('./tablas/Usuario');
const CuestionarioAlumno2 = require('./tablas/CuestionarioAlumno');
const CuestionarioPrograma2 = require('./tablas/CuestionarioPrograma');
const drop = async () => {
console.log('\nPaso 1) Desinstalando la db.'.bold.blue);
@@ -33,6 +38,20 @@ const drop = async () => {
'La tabla CuestionarioAlumno se desinstalo correctamente.'.magenta
);
await CuestionarioPrograma2.drop();
console.log(
'La tabla CuestionarioPrograma se desinstalo correctamente.'.magenta
);
await CuestionarioAlumno2.drop();
console.log(
'La tabla CuestionarioAlumno se desinstalo correctamente.'.magenta
);
await Programa.drop();
console.log('La tabla Programa se desinstalo correctamente.'.magenta);
@@ -69,6 +88,21 @@ const sync = async () => {
'La tabla CuestionarioPrograma se instalo correctamente.'.magenta
);
await CuestionarioAlumno2.sync();
console.log('La tabla CuestionarioAlumno se instalo correctamente.'.magenta);
await CuestionarioPrograma2.sync();
console.log(
'La tabla CuestionarioPrograma se instalo correctamente.'.magenta
);
await Carrera.sync();
console.log('La tabla Carrera se instalo correctamente.'.magenta);
+123
View File
@@ -0,0 +1,123 @@
/*
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../../config/sequelize.conf');
const Usuario = require('./Usuario');
const Carrera = require('./Carrera');
const Programa = require('./Programa');
const Servicio = require('./Servicio');
const CuestionarioAlumno2 = require('./CuestionarioAlumno2');
const CuestionarioPrograma2 = require('./CuestionarioPrograma2');
class Cuestionario extends Model {}
Cuestionario.init(
{
idCuestionario: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
idServicio: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Servicio,
key: 'idServicio',
},
},
version: {
type: DataTypes.STRING(50),
allowNull: false,
},
titulo: {
type: DataTypes.STRING(50),
allowNull: false,
},
desc: {
type: DataTypes.STRING(50),
allowNull: false,
},
dirigidoA: {
type: DataTypes.STRING(50),
allowNull: false,
},
createdAt: {
type: DataTypes.DATE,
allowNull: false,
},
},
{
sequelize,
modelName: 'Cuestionario',
tableName: 'Cuestionario',
timestamps: false,
}
);
Cuestionario.belongsTo(Servicio, { foreignKey: 'idServicio' });
Servicio.hasMany(Cuestionario, { foreignKey: 'idServicio' });
Cuestionario.belongsTo(CuestionarioAlumno2, { foreignKey: 'idCuestionarioAlumno2' });
CuestionarioAlumno2.hasOne(Cuestionario, { foreignKey: 'idCuestionarioAlumno2' });
Cuestionario.belongsTo(CuestionarioPrograma2, { foreignKey: 'idCuestionarioPrograma2' });
CuestionarioPrograma2.hasOne(Cuestionario, { foreignKey: 'idCuestionarioPrograma2' });
module.exports = Cuestionario;
*/
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../../config/sequelize.conf');
const Servicio = require('./Servicio');
class Cuestionario extends Model {}
Cuestionario.init(
{
idCuestionario: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
idServicio: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Servicio,
key: 'idServicio',
},
},
version: DataTypes.STRING(50),
titulo: DataTypes.STRING(50),
desc: DataTypes.STRING(50),
dirigidoA: DataTypes.STRING(50),
createdAt: DataTypes.DATE,
},
{
sequelize,
modelName: 'Cuestionario',
tableName: 'Cuestionario',
timestamps: false,
}
);
Cuestionario.belongsTo(Servicio, { foreignKey: 'idServicio' });
Servicio.hasMany(Cuestionario, { foreignKey: 'idServicio' });
module.exports = Cuestionario;
+483
View File
@@ -0,0 +1,483 @@
/*
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../../config/sequelize.conf');
const Cuestionario = require('./Cuestionario');
class CuestionarioAlumno2 extends Model {}
CuestionarioAlumno2.init(
{
idCuestionarioAlumno2: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
unique: true,
autoIncrement: true,
},
idCuestionario: {
type: DataTypes.INTEGER,
allowNull: true,
},
p1: {
type: DataTypes.STRING(100),
allowNull: true,
},
p2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p4: {
type: DataTypes.STRING(5),
allowNull: true,
},
p5: {
type: DataTypes.STRING(50),
allowNull: true,
},
p6: {
type: DataTypes.STRING(5),
allowNull: true,
},
p7: {
type: DataTypes.STRING(5),
allowNull: true,
},
p8: {
type: DataTypes.STRING(50),
allowNull: true,
},
p9: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p3_*: se definen como string (el JSON trae si/no)
p3_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_4: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p10_* y p11_*
p10_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p10_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p10_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
p11_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
// p12_A_*, p12_B_*, p12_C_*, p12_D_*
// Ajusta el tamaño de la cadena según requieras
p12_A_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_5: {
type: DataTypes.STRING(20),
allowNull: true,
},
// p13, p14, p15, p16...
p13: {
type: DataTypes.STRING(100),
allowNull: true,
},
p14: {
type: DataTypes.STRING(100),
allowNull: true,
},
p15: {
type: DataTypes.STRING(5),
allowNull: true,
},
p16: {
type: DataTypes.STRING(50),
allowNull: true,
},
// p17_*
p17_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p17_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p17_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p18
p18: {
type: DataTypes.STRING(50),
allowNull: true,
},
},
{
sequelize,
modelName: 'CuestionarioAlumno2',
tableName: 'cuestionario_alumno_2',
timestamps: true,
createdAt: true,
updatedAt: false, // Ajusta según tus necesidades
}
);
CuestionarioAlumno2.belongsTo(Cuestionario, { foreignKey: 'idCuestionario' });
Cuestionario.hasMany(CuestionarioAlumno2, { foreignKey: 'idCuestionario' });
module.exports = CuestionarioAlumno2;
*/
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../../config/sequelize.conf');
class CuestionarioAlumno2 extends Model {}
CuestionarioAlumno2.init(
{
idCuestionarioAlumno2: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
idCuestionario: {
type: DataTypes.INTEGER,
allowNull: true,
},
p1: {
type: DataTypes.STRING(100),
allowNull: true,
},
p2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p4: {
type: DataTypes.STRING(5),
allowNull: true,
},
p5: {
type: DataTypes.STRING(50),
allowNull: true,
},
p6: {
type: DataTypes.STRING(5),
allowNull: true,
},
p7: {
type: DataTypes.STRING(5),
allowNull: true,
},
p8: {
type: DataTypes.STRING(50),
allowNull: true,
},
p9: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p3_*: se definen como string (el JSON trae si/no)
p3_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
p3_4: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p10_* y p11_*
p10_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p10_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p10_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
p11_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p11_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
// p12_A_*, p12_B_*, p12_C_*, p12_D_*
// Ajusta el tamaño de la cadena según requieras
p12_A_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_A_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_B_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_C_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_1: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_2: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_3: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_4: {
type: DataTypes.STRING(20),
allowNull: true,
},
p12_D_5: {
type: DataTypes.STRING(20),
allowNull: true,
},
// p13, p14, p15, p16...
p13: {
type: DataTypes.STRING(100),
allowNull: true,
},
p14: {
type: DataTypes.STRING(100),
allowNull: true,
},
p15: {
type: DataTypes.STRING(5),
allowNull: true,
},
p16: {
type: DataTypes.STRING(50),
allowNull: true,
},
// p17_*
p17_1: {
type: DataTypes.STRING(5),
allowNull: true,
},
p17_2: {
type: DataTypes.STRING(5),
allowNull: true,
},
p17_3: {
type: DataTypes.STRING(5),
allowNull: true,
},
// p18
p18: {
type: DataTypes.STRING(50),
allowNull: true,
},
},
{
sequelize,
modelName: 'CuestionarioAlumno2',
tableName: 'cuestionario_alumno_2',
timestamps: true,
createdAt: true,
updatedAt: false,
}
);
// Importación después de la definición para evitar dependencias circulares
const Cuestionario = require('./Cuestionario');
// Definir relaciones después de importar correctamente
CuestionarioAlumno2.belongsTo(Cuestionario, { foreignKey: 'idCuestionario' });
Cuestionario.hasMany(CuestionarioAlumno2, { foreignKey: 'idCuestionario' });
module.exports = CuestionarioAlumno2;
+154
View File
@@ -0,0 +1,154 @@
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../../config/sequelize.conf');
const Cuestionario = require('./Cuestionario');
class CuestionarioPrograma2 extends Model {}
CuestionarioPrograma2.init(
{
idCuestionarioPrograma2: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
unique: true,
autoIncrement: true,
},
idCuestionario: {
type: DataTypes.INTEGER,
allowNull: true,
},
// Sección p3_A_*
p3_A_1: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_A_2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_A_3: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_A_4: {
type: DataTypes.STRING(50),
allowNull: true,
},
// Sección p3_B_*
p3_B_1: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_B_2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_B_3: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_B_4: {
type: DataTypes.STRING(50),
allowNull: true,
},
// Sección p3_C_*
p3_C_1: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_C_2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_C_3: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_C_4: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_C_5: {
type: DataTypes.STRING(50),
allowNull: true,
},
// Sección p3_D_*
p3_D_1: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_D_2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_D_3: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_D_4: {
type: DataTypes.STRING(50),
allowNull: true,
},
p3_D_5: {
type: DataTypes.STRING(50),
allowNull: true,
},
// Sección p3_E_*
p3_E_1: {
type: DataTypes.STRING(50),
allowNull: true,
},
// p1, p2, p4, p5, p6
p1: {
type: DataTypes.STRING(100),
allowNull: true,
},
p2: {
type: DataTypes.STRING(50),
allowNull: true,
},
p4: {
type: DataTypes.STRING(100),
allowNull: true,
},
p5: {
type: DataTypes.STRING(5),
allowNull: true,
},
p6: {
type: DataTypes.STRING(100),
allowNull: true,
},
},
{
sequelize,
modelName: 'CuestionarioPrograma2',
tableName: 'cuestionario_programa_2',
timestamps: true,
createdAt: true,
updatedAt: false,
}
);
CuestionarioPrograma2.belongsTo(Cuestionario, { foreignKey: 'idCuestionario' });
Cuestionario.hasMany(CuestionarioPrograma2, { foreignKey: 'idCuestionario' });
module.exports = CuestionarioPrograma2;
+76 -35
View File
@@ -1,4 +1,10 @@
const dudas = `Cualquier duda puedes acudir al área de Registro y Control de Servicio Social en COESI de Lunes a Viernes de 10:00 a 14:00 hrs y de 16:00 a 20:00 hrs, o bien, comunicarte al 5623 1686 o al correo registross@acatlan.unam.mx`;
const dudasAlumno = `Cualquier duda puedes acudir a las ventanillas de servicio social de la Secretaría de Asuntos Académicos Estudiantiles, en la planta baja del Edificio A-8 de lunes a viernes de 09:00 a 15:00 hrs. y de 17:00 a 19:00 hrs. o bien, comunicarte al 5623 1686 o al correo tramites.ss@acatlan.unam.mx`;
const dudasResponsable = `Cualquier duda puede comunicarse al 5623 1686 o al correo tramites.ss@acatlan.unam.mx`;
const atentamente = `
Atentamente
Departamento de Servicio Social, Desarrollo Profesional e Inserción Laboral
FES Acatlán
`;
const preRegistro = (password, nombre) => {
return {
@@ -6,17 +12,23 @@ const preRegistro = (password, nombre) => {
msj: `Estimado(a) ${nombre}:
Te informamos que la dependencia en donde decidiste realizar tu servicio social ya te registró en nuestro sistema de servicio social, por lo que para completar el proceso debes ingresar en un periodo máximo de 10 días hábiles a partir de la recepción de este mensaje, a la página https://iris.acatlan.unam.mx/ con tu número de cuenta y contraseña: ${password}, para llenar un formulario con tus datos.
En caso de no realizar dicho registro, tu trámite queda inconcluso y no nos hacemos responsables por las horas de servicio social prestadas en cualquier dependencia.
En el sistema que se te indicó podrás dar seguimiento al resto de tu trámite de servicio social.
Cualquier duda puedes acudir al área de Registro y Control de Servicio Social en COESI de lunes a viernes de 10:00 a 13:00 hrs. y de 16:00 a 19:00 hrs. o bien, comunicarte al 5623 1686 o al correo tramites.ss@acatlan.unam.mx
Instrucciones al término de tu servicio social:
Al día siguiente de tu fecha de término programada, quedará habilitado en el sistema la opción para subir los documentos correspondientes, por lo que la institución deberá subir escaneada tu carta de término y llenar un cuestionario sobre tu desempeño, mientras que tú debes encargarte de subir tu informe global de actividades en el formato disponible en http://bit.ly/informeglobal-FESA, así como llenar un cuestionario sobre el programa en el que participaste.
Al día siguiente de tu fecha de término programada, quedará habilitado en el sistema la opción para subir los documentos correspondientes, por lo que la institución deberá subir escaneada tu carta de término y llenar un cuestionario sobre tu desempeño, mientras que tú debes encargarte de subir tu informe global de actividades en el formato disponible en https://bit.ly/informe-serviciosocialFESA, así como llenar un cuestionario sobre el programa en el que participaste.
Si se suben correctamente los documentos y cuestionarios mencionados, el Departamento de Servicio Social validará tu trámite de término en el sistema y en un periodo aproximado de 15 días hábiles te hará llegar por correo electrónico tu carta de liberación del servicio social.
Finalmente, te recomendamos destacar en tu bandeja de correos este mensaje para tener siempre a la mano las instrucciones recibidas, o bien, copiar en otro archivo el texto para que lo puedas ubicar fácilmente.
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -29,7 +41,10 @@ Te informamos que hay un error con tu pre-registro de servicio social por los si
${motivo}
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -37,11 +52,15 @@ const preRegistroRechazadoResponsable = (motivo, nombre) => {
return {
subject: `Notificación de rechazo de pre-registro.`,
msj: `Estimado responsable de programa:
Te informamos que hubo un error con el pre-registro de servicio social del alumno ${nombre} por los siguientes motivos:
${motivo}
${dudas}`,
${dudasResponsable}
${atentamente}
`,
};
};
@@ -56,7 +75,10 @@ A su vez, deberás responder un cuestionario de evaluación del programa de serv
Cabe mencionar que se ha enviado copia de este mensaje al responsable de programa de servicio social de tu dependencia para que esté enterado de la validación de tu registro.
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -67,7 +89,10 @@ const registroValidadoResponsable = (nombre) => {
Te informamos que el Área de Registro y Control de Servicio Social ha validado la solicitud de registro del alumno ${nombre}.
${dudas}`,
${dudasResponsable}
${atentamente}
`,
};
};
@@ -76,9 +101,12 @@ const terminoValidado = (nombre) => {
subject: 'Validación de término.',
msj: `Estimado(a) ${nombre}:
Te confirmamos que has concluido con los trámites necesarios para la liberación de tu servicio social por lo que ahora solo queda esperar máximo 15 días hábiles para que se te notifique por correo electrónico, a partir de cuándo puedes recoger la copia de tu carta de liberación en las ventanillas del Área de Registro y Control de Servicio Social.
Te confirmamos que has concluido con los trámites necesarios para la liberación de tu servicio social por lo que ahora solo queda esperar máximo 15 días hábiles para que se te envíe a tu correo, la copia de tu carta de liberación.
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -91,7 +119,10 @@ Te informamos que no fue validado tu trámite de término por el Departamento de
${motivo}
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -99,11 +130,15 @@ const terminoRechazadoResponsable = (motivo, nombre) => {
return {
subject: 'Correo de rechazo de término',
msj: `Estimado responsable de programa:
Te informamos que no fue validado el trámite de término del alumno ${nombre} por el Departamento de Servicio Social y Bolsa de Trabajo por los siguientes motivos:
${motivo}
${dudas}`,
${dudasResponsable}
${atentamente}
`,
};
};
@@ -116,7 +151,10 @@ Te informamos que fue cancelado tu trámite de servicio social, por el Departame
${motivo}
${dudas}`,
${dudasAlumno}
${atentamente}
`,
};
};
@@ -128,16 +166,19 @@ Te informamos que fue cancelado el trámite de servicio social del alumno ${nomb
${motivo}
${dudas}`,
${dudasResponsable}
${atentamente}
`,
};
};
const enviarSec = (secreto, usuariomail, nombre) => {
return {
subject: `Estimado responsable de programa de servicio social: ${nombre}`,
msj: `Como ya se les había informado, en nuestra Facultad estamos en un proceso de actualización administrativa que implica la puesta en marcha de un nuevo sistema interno de servicio social en el cual estará el expediente electrónico del alumno y su seguimiento con respecto a estos trámites. La dirección electrónica de dicho sistema es https://iris.acatlan.unam.mx y su usuario y contraseña son:
msj: `Le informamos que desde marzo de 2020 se implementó un nuevo sistema interno de servicio social en el cual estará el expediente electrónico del alumno y su seguimiento con respecto a estos trámites. La dirección electrónica de dicho sistema es https://iris.acatlan.unam.mx y su usuario y contraseña son:
Usuario: ${usuariomail}
Nombre de usuario para ingresar: ${usuariomail}
Contraseña: ${secreto}
@@ -155,32 +196,35 @@ Para el uso de dicho sistema el proceso es el siguiente:
5. Por su parte el alumno ingresará al sistema para subir escaneado su informe de actividades con firma y sello de su jefe inmediato y llenará un cuestionario de evaluación del programa de servicio social en el que participó.
6. Si todo está correcto el Departamento de servicio social validará el trámite de término del alumno y le notificará el tiempo aproximado en que puede pasar a recoger su carta de liberación de servicio social.
6. Si todo está correcto el Departamento de servicio social validará el trámite de término del alumno y le notificará el tiempo aproximado en que se le enviará por correo su carta de liberación.
Otras consideraciones:
- Le pedimos su apoyo cargando las cartas de los alumnos en un periodo de 10 días hábiles posteriores a la fecha de inicio y término, ya que a su vez los alumnos tendrán otros 10 días hábiles para completar lo que les corresponde en cada etapa. Para todos los casos de este año que ya hayan iniciado su servicio social con anterioridad, le pedimos que antes del 15 de Mayo, quede registrado en nuestro sistema.
- Le pedimos su apoyo cargando las cartas de los alumnos en un periodo de 10 días hábiles posteriores a la fecha de inicio y término, ya que a su vez los alumnos tendrán otros 10 días hábiles para completar lo que les corresponde en cada etapa.
- Para obtener los datos que el sistema le pide del alumno puede preguntárselos directamente, ya que las cartas de presentación sólo se emiten para instituciones externas.
- Para obtener los datos que el sistema le pide del alumno puede preguntárselos directamente, ya que las cartas de presentación sólo se emiten para instituciones externas.
- Los profesores de carrera con proyectos de servicio social registrados no tendrán claves de acceso a este sistema, por lo que sus áreas de adscripción deberán encargarse de hacer los trámites de servicio social de sus alumnos.
- Finalmente, cabe mencionar que el nuevo procedimiento sólo aplica a los alumnos que inicien su servicio social en 2020, por lo que aquellos que ya habían hecho su trámite de inicio desde 2019, lo terminarán con el proceso anterior entregando su carta de termino original en las ventanillas de servicio social.
- De cualquier forma para atender dudas o comentarios al respecto, podrá comunicarse con el equipo del Departamento de Servicio Social:
Lic. Lourdes Ibarra Celorio
56231686
registross@acatlan.unam.mx
tramites.ss@acatlan.unam.mx
Mtra. Adriana Roque del Angel
Lic. Marcela Martínez Rangel
56231600
jefaturassbt@acatlan.unam.mx
sesocial@acatlan.unam.mx.
Lic. Ivette Selene Hernández Rios
56231600
sesoprof@acatlan.unam.mx
Atentamente
Mtra. Adriana Roque del Angel
Jefa del Departamento de Servicio Social y Bolsa de Trabajo.`,
Lic. Ivette Selene Hernández Rios
Jefa del Departamento de Servicio Social, Desarrollo Profesional e Inserción Laboral
`,
};
};
@@ -195,15 +239,14 @@ En cuanto cumplas con las 480 horas reglamentarias, tienes 15 días hábiles par
Por su parte el responsable del programa de servicio social deberá ingresar al mismo sistema para subir escaneada tu carta de término y debe responder el Cuestionario de desempeño del alumno. Para lo anterior, también la institución tiene 15 días hábiles a partir de que concluiste las 480 horas de servicio.
En cuanto el responsable de programa de servicio social y tú suban al sistema lo que les corresponde, el Departamento de Servicio Social revisará tus documentos y en caso de estar correctos validará tu trámite para realizar la liberación de este requisito. Recibirás una notificación por correo con el periodo de tiempo aproximado que debes esperar para acudir a recoger la copia de tu carta de liberación o bien, las indicaciones de los documentos que debes corregir para poder aceptar tu trámite de término.
En cuanto el responsable de programa de servicio social y tú suban al sistema lo que les corresponde, el Departamento de Servicio Social revisará tus documentos y en caso de estar correctos validará tu trámite para realizar la liberación de este requisito. Recibirás una notificación por correo con el periodo de tiempo aproximado que debes esperar para recibir por correo electrónico tu carta de liberación o bien, las indicaciones de los documentos que debes corregir para poder aceptar tu trámite de término.
Por reglamento de la Universidad, si en máximo dos años a partir de la fecha de inicio de servicio social no se realiza el trámite de término mencionado anteriormente, debes tomar en cuenta que tu registro queda cancelado y deberás tramitarlo nuevamente en otro programa.
${dudas}
${dudasAlumno}
Atentamente
Departamento de Servicio Social y Bolsa de Trabajo
FES Acatlán`,
${atentamente}
`,
};
};
@@ -222,11 +265,9 @@ En cuanto usted y el alumno suban al sistema lo que les corresponde, el Departam
También se le ha informado al alumno que por reglamento de la Universidad, si en máximo dos años a partir de la fecha de inicio de servicio social no se realiza el trámite de término mencionado anteriormente, debe tomar en cuenta que su registro queda cancelado y deberá tramitarlo nuevamente en otro programa.
${dudas}
${dudasResponsable}
Atentamente
Departamento de Servicio Social y Bolsa de Trabajo
FES Acatlán
${atentamente}
`,
};
};
+40 -35
View File
@@ -1,53 +1,58 @@
const moment = require('moment');
const gmail = require('./gmail');
const correos = require('./correos');
const Servicio = require('../db/tablas/Servicio');
const Usuario = require('../db/tablas/Usuario');
const Programa = require('../db/tablas/Programa');
const gmail = require('./gmail');
const correos = require('./correos');
const now = moment();
const diario = async () => {
let mensaje = '';
const now = moment();
const servicios = await Servicio.findAll({
return Servicio.findAll({
where: { idStatus: 3 },
include: [
{ model: Usuario },
{ model: Programa, include: [{ model: Usuario }] },
],
});
}).then(async (servicios) => {
let mensaje = '';
for (let i = 0; i < servicios.length; i++) {
let fechaFin = moment(servicios[i].fechaFin);
let fechaFinDate = fechaFin.dayOfYear();
for (let i = 0; i < servicios.length; i++) {
let fechaFin = moment(servicios[i].fechaFin);
let fechaFinDate = fechaFin.dayOfYear();
if (fechaFin.year() > now.year())
fechaFinDate += 365 * (fechaFin.year() - now.year());
if (fechaFin.year() < now.year())
fechaFinDate -= 365 * (now.year() - fechaFin.year());
if (fechaFinDate - now.dayOfYear() === 7) {
let correoAlumno = correos.avisoTerminoAlumno(
servicios[i].Usuario.nombre
);
let correoResponsable = correos.avisoTerminoResponsable(
servicios[i].Usuario.nombre
);
if (fechaFin.year() > now.year())
fechaFinDate += 365 * (fechaFin.year() - now.year());
if (fechaFin.year() < now.year())
fechaFinDate -= 365 * (now.year() - fechaFin.year());
if (fechaFinDate - now.dayOfYear() === 7) {
let correoAlumno = correos.avisoTerminoAlumno(
servicios[i].Usuario.nombre
);
let correoResponsable = correos.avisoTerminoResponsable(
servicios[i].Usuario.nombre
);
mensaje += `Se envio correo al alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} al correo ${servicios[i].correo} y al responsable ${servicios[i].Programa.Usuario.nombre} con id ${servicios[i].Programa.Usuario.idUsuario} y correo ${servicios[i].Programa.Usuario.usuario}\n`;
await gmail(correoAlumno.subject, servicios[i].correo, correoAlumno.msj);
await gmail(
correoResponsable.subject,
servicios[i].Programa.Usuario.usuario,
correoResponsable.msj
);
} else if (fechaFinDate - now.dayOfYear() <= -1) {
mensaje += `El servicio con id ${servicios[i].idServicio} del alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} paso al status 4\n`;
await Servicio.update(
{ idStatus: 4 },
{ where: { idServicio: servicios[i].idServicio } }
);
mensaje += `Se envio correo al alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} al correo ${servicios[i].correo} y al responsable ${servicios[i].Programa.Usuario.nombre} con id ${servicios[i].Programa.Usuario.idUsuario} y correo ${servicios[i].Programa.Usuario.usuario}\n\n`;
await gmail(
correoAlumno.subject,
servicios[i].correo,
correoAlumno.msj
);
await gmail(
correoResponsable.subject,
servicios[i].Programa.Usuario.usuario,
correoResponsable.msj
);
} else if (fechaFinDate - now.dayOfYear() <= -1) {
mensaje += `El servicio con id ${servicios[i].idServicio} del alumno ${servicios[i].Usuario.usuario} con id ${servicios[i].Usuario.idUsuario} paso al status 4\n\n`;
await Servicio.update(
{ idStatus: 4 },
{ where: { idServicio: servicios[i].idServicio } }
);
}
}
}
await gmail('Reporte función diario', 'lemuel@acatlan.unam.mx', mensaje);
return gmail('Reporte función diario', 'lemuel@acatlan.unam.mx', mensaje);
});
};
diario();
+113 -112
View File
@@ -1,7 +1,7 @@
require('../config/config');
const fs = require('fs');
const { google } = require('googleapis');
const drive = google.drive('v3');
//const drive = google.drive('v3');
const credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8'));
const jwtClient = new google.auth.JWT(
credenciales.client_email,
@@ -10,89 +10,11 @@ const jwtClient = new google.auth.JWT(
['https://www.googleapis.com/auth/drive']
);
// Borrar archivo
const deleteFile = (fileId) => {
return new Promise((resolve, reject) => {
jwtClient.authorize(async (err, tokens) => {
if (err) reject(err);
drive.files.delete(
{
fileId,
auth: jwtClient,
},
(err, resp) => {
if (err) reject(err);
resolve(resp);
}
);
});
});
};
// SUBIR ARCHIVO
const uploadFile = (path, name, mimeType, parent) => {
return new Promise((resolve, reject) => {
jwtClient.authorize(function (err, tokens) {
if (err) reject('Error de autorización: ' + err);
let requestBody = {
name,
parents: [parent],
};
let media = {
mimeType: mimeType,
body: fs.createReadStream(`${path}`),
};
drive.files.create(
{
media: media,
fields: 'id',
requestBody,
auth: jwtClient,
},
(err, file) => {
if (err) reject(err);
fs.unlinkSync(path);
resolve(file.data.id);
}
);
});
});
};
// CREAR CARPETA
const mkDir = (name) => {
return new Promise((resolve, reject) => {
jwtClient.authorize((err, tokens) => {
if (err) reject('Error de autorización: ' + err);
let requestBody = {
name,
mimeType: 'application/vnd.google-apps.folder',
parents: [process.env.CARPETA],
};
drive.files.create(
{
fields: 'id',
auth: jwtClient,
requestBody,
},
(err, res) => {
if (err) reject(err);
resolve(res.data.id);
}
);
});
});
};
const list = (pageToken) => {
return new Promise((resolve, reject) => {
jwtClient.authorize((err, tokens) => {
if (err) reject('Error de autorización: ' + err);
drive.files.list(
/* drive.files.list(
{
auth: jwtClient,
corpora: 'user',
@@ -108,7 +30,85 @@ const list = (pageToken) => {
if (err) reject('Ha habido un error en la petición: ' + err);
resolve(resp.data);
}
);
); */
});
});
};
// Borrar archivo
const deleteFile = (fileId) => {
if (fileId === process.env.CARPETA)
throw new Error('No se puede eliminar este archivo/carpeta.');
return new Promise((resolve, reject) => {
jwtClient.authorize(async (err, tokens) => {
if (err) reject(err);
/* drive.files.delete(
{
fileId,
auth: jwtClient,
},
(err, resp) => {
if (err) reject(err);
resolve(resp);
}
); */
});
});
};
// SUBIR ARCHIVO
const uploadFile = (path, name, mimeType, parent) => {
return new Promise((resolve, reject) => {
const requestBody = {
name,
parents: [parent],
};
const media = {
mimeType,
body: fs.createReadStream(`${path}`),
};
jwtClient.authorize(function (err, tokens) {
if (err) reject('Error de autorización: ' + err);
/* drive.files.create(
{
media,
requestBody,
fields: 'id',
auth: jwtClient,
},
(err, file) => {
if (err) reject(err);
fs.unlinkSync(path);
resolve(file.data.id);
}
); */
});
});
};
// CREAR CARPETA
const mkDir = (name) => {
return new Promise((resolve, reject) => {
const requestBody = {
name,
mimeType: 'application/vnd.google-apps.folder',
parents: [process.env.CARPETA],
};
jwtClient.authorize((err, tokens) => {
if (err) reject('Error de autorización: ' + err);
/* drive.files.create(
{
fields: 'id',
auth: jwtClient,
requestBody,
},
(err, res) => {
if (err) reject(err);
resolve(res.data.id);
}
); */
});
});
};
@@ -118,13 +118,13 @@ const update = (fileId, addParents, removeParents) => {
return new Promise((resolve, reject) => {
jwtClient.authorize((err, tokens) => {
if (err) reject('Error de autorización: ' + err);
drive.files.update(
/* drive.files.update(
{ auth: jwtClient, fileId, addParents, removeParents },
(err, resp) => {
if (err) reject('Ha habido un error en la petición: ' + err);
resolve(resp.data);
}
);
); */
});
});
};
@@ -133,50 +133,51 @@ const folder = async (numeroCuenta) => {
let pageToken = '';
do {
let response = await list(pageToken);
let files = response.files;
let res = await list(pageToken);
for (let i = 0; i < files.length; i++)
for (let i = 0; i < res.files.length; i++)
if (
files[i].name === numeroCuenta &&
files[i].mimeType === 'application/vnd.google-apps.folder'
res.files[i].name === numeroCuenta &&
res.files[i].mimeType === 'application/vnd.google-apps.folder'
)
return files[i].id;
pageToken = '';
if (response.nextPageToken) pageToken = response.nextPageToken;
return res.files[i].id;
pageToken = res.nextPageToken ? res.nextPageToken : '';
} while (pageToken);
return mkDir(numeroCuenta);
};
const borrarTodo = () => {
return list().then(async (res) => {
console.log(res);
// for (let i = 0; i < res.files.length; i++)
// if (res.files[i].name !== 'Babyhelon') await deleteFile(res.files[i].id);
});
};
// const borrarTodo = () => {
// return list().then(async (res) => {
// for (let i = 0; i < res.files.length; i++)
// if (res.files[i].id !== process.env.CARPETA)
// await deleteFile(res.files[i].id);
// });
// };
// borrarTodo();
const archivosFicheros = async () => {
const findAll = async () => {
const folders = [];
const pdfs = [];
let pageToken = '';
const pdf = [];
const carpetas = [];
do {
let response = await list(pageToken);
console.log(response);
if (response.nextPageToken) pageToken = response.nextPageToken;
else pageToken = '';
await list(pageToken).then((res) => {
for (let i = 0; i < res.files.length; i++) {
if (res.files[i].id !== process.env.CARPETA) {
if (res.files[i].mimeType === 'application/vnd.google-apps.folder')
folders.push(res.files[i].id);
if (res.files[i].mimeType === 'application/pdf')
pdfs.push(res.files[i].id);
}
}
pageToken = res.nextPageToken ? res.nextPageToken : '';
});
} while (pageToken);
return { pdf, carpetas };
return { folders, pdfs };
};
// archivosFicheros();
module.exports = {
folder,
uploadFile,
deleteFile,
mkDir,
};
+5 -16
View File
@@ -1,28 +1,17 @@
const bcrypt = require('bcrypt');
const validar = require('./validar');
require('../config/config');
const comparar = (password, dbPassword) => {
let campo = 'password';
validar.noHay(password, campo);
if (typeof password != 'string') validar.noValido(campo);
if (!bcrypt.compareSync(password, dbPassword))
throw new Error('Usuario o contraseña no validos.');
if (!bcrypt.compareSync(password, dbPassword)) return false;
return true;
};
const encriptar = (password) => {
let campo = 'password';
validar.noHay(password, campo);
if (typeof password != 'string') validar.noValido(campo);
return bcrypt.hashSync(password, Number(process.env.SALT_ROUNDS));
};
const encriptar = (password) =>
bcrypt.hashSync(password, Number(process.env.SALT_ROUNDS));
const generarPassword = () => {
let length = 8;
let charset =
const length = 8;
const charset =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
let password = '';
+193 -104
View File
@@ -1,60 +1,27 @@
// const fs = require('fs');
const moment = require('moment');
const validator = require('validator');
const Servicio = require('../db/tablas/Servicio');
const noValido = (campo) => {
throw new Error(`${campo} no es valido.`);
};
const noHay = (variable, campo) => {
if (!variable) throw new Error(`Falta ${campo}.`);
};
const yaExiste = (campo) => {
throw new Error(`${campo} ya se encuentra en uso.`);
};
const validar = (texto, campo, length) => {
noHay(texto, campo);
if (typeof texto !== 'string' || (length && texto.length > length))
noValido(campo);
return texto;
};
const validarId = (id) => {
let campo = 'El id';
noHay(id, campo);
if (typeof id === 'number') id = id.toString();
if (typeof id !== 'string' || !validator.isNumeric(id, { no_symbols: true }))
noValido(campo);
return Number(id);
};
const validarCorreo = (correo) => {
let campo = 'El correo';
noHay(correo, campo);
if (typeof correo !== 'string' || !validator.isEmail(correo)) noValido(campo);
return correo;
};
const caracteresEspeciales = (char) => {
// Caractéres especiales permitidos en una string
const caracterEspecial = (char) => {
const charset = [
' ',
'.',
'-',
',',
'/',
'#',
'?',
'¿',
':',
';',
'?',
'¿',
'!',
'¡',
'(',
')',
'"',
"'",
'-',
'_',
'/',
'#',
'%',
'\n',
];
@@ -63,107 +30,229 @@ const caracteresEspeciales = (char) => {
return false;
};
const validarTexto = (texto, campo, length) => {
noHay(texto, campo);
if (typeof texto !== 'string' || texto.length > length) noValido(campo);
const yaExiste = (campo, m) => {
throw new Error(`Ya se encuentra en uso ${m ? 'el' : 'la'} ${campo}.`);
};
const noValido = (campo, m, razon) => {
console.log(m);
throw new Error(
`${m ? 'El' : 'La'} ${campo} no es valid${m ? 'o' : 'a'}, ${razon}.`
);
};
/*
Valida que la variable contenga un valor, de lo contrario saca un error.
*/
const noHay = (variable, campo, m) => {
if (!variable) throw new Error(`No se mando ${m ? 'el' : 'la'} ${campo}.`);
};
/*
Valida que la variable sea una string y, si se necesita, que mida igual
o menor que una longitud determinada.
*/
const validacionBasicaStr = (texto, campo, m, length) => {
noHay(texto, campo, m);
if (typeof texto !== 'string') noValido(campo, m, 'no se mando una string');
if (length && texto.length > length)
noValido(campo, m, 'tiene más carecteres de lo permitido');
return texto;
};
/*
Valida que la variable sea un numero entero, ya sea que recibe una string o
un number. Usualmente se usa para validar ids.
*/
const validarNumeroEntero = (numero, campo, m = true) => {
noHay(numero, campo, m);
if (typeof numero === 'number') numero = numero.toString();
if (typeof numero !== 'string')
noValido(campo, m, 'no se mando una string o un number');
if (!validator.isNumeric(numero, { no_symbols: true }))
noValido(campo, m, 'no es un número entero valido');
return Number(numero);
};
/*
Valida que la stirng mandada sea un correo valido.
*/
const validarCorreo = (correo, campo = 'correo', m = true, length) => {
validacionBasicaStr(correo, campo, m, length);
if (!validator.isEmail(correo)) noValido(campo, m, 'no es un correo válido');
return correo;
};
/*
Valida que la stirng mandada sea solo caracteres del abcdario.
Usualmente se usa para validar nombres, apellidos, etc.
*/
const validarTexto = (texto, campo, m, length) => {
validacionBasicaStr(texto, campo, m, length);
for (let i = 0; i < texto.length; i++)
if (
!validator.isAlpha(texto[i], 'es-ES') &&
texto[i] != ' ' &&
texto[i] != '.'
)
noValido(campo, m, 'contiene caracteres no validos');
return texto;
};
/*
Lo mismo que el de arriba pero este permite números y
caracteres especiales.
*/
const validarAlfanumerico = (texto, campo, m, length) => {
validacionBasicaStr(texto, campo, m, length);
for (let i = 0; i < texto.length; i++) {
if (caracteresEspeciales(texto[i])) continue;
if (!validator.isAlpha(texto[i], 'es-ES')) noValido(campo);
if (caracterEspecial(texto[i])) continue;
if (!validator.isAlphanumeric(texto[i], 'es-ES'))
noValido(campo, m, 'contiene caracteres no validos');
}
return texto;
};
const validarAlfanumerico = (texto, campo, length) => {
noHay(texto, campo);
if (typeof texto !== 'string' || texto.length > length) noValido(campo);
for (let i = 0; i < texto.length; i++) {
if (caracteresEspeciales(texto[i])) continue;
if (!validator.isAlphanumeric(texto[i], 'es-ES')) noValido(campo);
}
return texto;
};
const validarNumeroCuenta = (numeroCuenta) => {
let campo = 'El numero de cuenta';
noHay(numeroCuenta, campo);
if (
typeof numeroCuenta !== 'string' ||
!validator.isNumeric(numeroCuenta, { no_symbols: true }) ||
numeroCuenta.length > 9
)
noValido(campo);
/*
Valida que la string sea un número menor a 9 dígitos.
*/
const validarNumeroCuenta = (
numeroCuenta,
campo = 'numero de cuenta',
m = true
) => {
validacionBasicaStr(numeroCuenta, campo, m, 9);
if (!validator.isNumeric(numeroCuenta, { no_symbols: true }))
noValido(campo, m, 'tiene caracteres que no son números');
return numeroCuenta;
};
const validarFecha = (fecha) => {
let campo = 'La fecha';
/*
Valida que la variable sea una fecha moment valida.
*/
const validarFecha = (fecha, campo, m) => {
let fechaMoment = moment(fecha);
noHay(fecha, campo);
if (!fechaMoment.isValid()) noValido(campo);
noHay(fecha, campo, m);
if (!fechaMoment.isValid()) noValido(campo, m, 'no es una fecha válida');
return fechaMoment;
};
const validarNumero = (numero, makeNumber = false, length) => {
let campo = 'El numero';
noHay(numero, campo);
if (
typeof numero !== 'string' ||
!validator.isNumeric(numero, { no_symbols: true }) ||
(length && numero.length > length)
)
noValido(campo);
/*
Valida que una string contenga solo números
*/
const validarNumero = (
numero,
campo,
m,
length,
no_symbols = true,
makeNumber = false
) => {
validacionBasicaStr(numero, campo, m, length);
if (!validator.isNumeric(numero, { no_symbols }))
noValido(campo, m, 'tiene caracteres que no son números');
if (makeNumber) return Number(numero);
return numero;
};
// const validarAccesibilidad = (usuariosValidos = [], idTipoUsuario) => {
// for (let i = 0; i < usuariosValidos.length; i++)
// if (idTipoUsuario === usuariosValidos[i]) return;
// throw new Error('Este usuario no tiene permitido usar esta linea de la API.');
// };
/*
Te dice si un objeto esta vacio o no.
*/
const validarObjetoVacio = (obj) => {
for (let key in obj) if (obj.hasOwnProperty(key)) return false;
return true;
};
const validarPreTermino = (idServicio) => {
return Servicio.findOne({ where: { idServicio } })
.then((res) => {
if (
res.idCuestionarioPrograma &&
res.idCuestionarioAlumno &&
// se tiene que validar buscando en la tabla de cuestionarios
//res.idCuestionarioPrograma &&
//res.idCuestionarioAlumno &&
res.cartaTermino &&
res.informeGlobal
)
return Servicio.update({ idStatus: 5 }, { where: { idServicio } });
return false;
})
.then((res) => {
if (res)
return 'Este Servicio Social paso a Termino, espera a que COESI autorice tu liberación.';
return '';
});
.then((res) =>
res
? 'Este Servicio Social paso a Termino, espera a que COESI autorice tu liberación.'
: ''
);
};
const validarAccesibilidad = (usuariosValidos = [], idTipoUsuario) => {
for (let i = 0; i < usuariosValidos.length; i++)
if (idTipoUsuario === usuariosValidos[i]) return;
throw new Error('Este usuario no tiene permitido usar esta linea de la API.');
};
const validarObjetoVacio = (obj) => {
for (let key in obj) {
if (obj.hasOwnProperty(key)) return false;
const validarCuestionarioAlumno2 = (body) => {
console.log("Validando cuestionario alumno 2");
// Excluir p2 de la validación de campos nulos
const camposExcluidos = [
// 'p2'
];
// Verificar si algún campo es nulo o indefinido (excepto p2)
for (const [key, value] of Object.entries(body)) {
if (!camposExcluidos.includes(key) && (value === null || value === undefined || value === '')) {
throw new Error(`El campo ${key} no puede estar vacío.`);
}
}
return true;
console.log("Validación exitosa. Todos los campos son válidos.");
return body;
};
const validarCuestionarioPrograma2 = (body) => {
console.log("Validando cuestionario programa 2");
// Excluir p2 de la validación de campos nulos
const camposExcluidos = [
// 'p2'
];
// Verificar si algún campo es nulo o indefinido (excepto p2)
for (const [key, value] of Object.entries(body)) {
if (!camposExcluidos.includes(key) && (value === null || value === undefined || value === '')) {
throw new Error(`El campo ${key} no puede estar vacío.`);
}
}
console.log("Validación exitosa. Todos los campos son válidos.");
return body;
};
module.exports = {
validar,
noValido,
yaExiste,
noValido,
noHay,
validacionBasicaStr,
validarNumeroEntero,
validarCorreo,
validarId,
validarTexto,
validarAlfanumerico,
validarNumeroCuenta,
validarFecha,
validarNumero,
validarPreTermino,
validarAccesibilidad,
validarObjetoVacio,
validarPreTermino,
validarCuestionarioAlumno2,
validarCuestionarioPrograma2
};
+40 -3
View File
@@ -3,10 +3,12 @@ const app = express();
const { verificaToken } = require('../middleware/autentificacion');
const route = '/cuestionario_alumno';
const controllerPath = '../controller/CuestionarioAlumno';
const get = require(`${controllerPath}/get`);
const nuevo = require(`${controllerPath}/nuevo`);
// POST
const controllerPath2 = '../controller/CuestionarioAlumno2';
const get = require(`${controllerPath2}/get`);
const nuevo = require(`${controllerPath2}/nuevo`);
/* // POST
app.post(`${route}`, verificaToken, (req, res) => {
return nuevo(req.body)
.then((data) => {
@@ -24,8 +26,43 @@ app.get(`${route}`, verificaToken, (req, res) => {
res.download(data);
})
.catch((err) => {
res.status(400).json({ message: err.message });
});
}); */
// POST
app.post(`${route}/v2`, (req, res) => {
console.log(`${route}/v2`);
return nuevo(req.body)
.then((data) => {
res.status(200).json(data);
})
.catch((err) => {
console.log(err);
res.status(400).json({ message: err.message });
});
});
// GET
app.get(`${route}/v2`, (req, res) => {
console.log(`${route}/v2`);
return get(req.query)
.then((data) => {
res.download(data);
})
.catch((err) => {
res.status(400).json({ message: err.message });
});
});
module.exports = app;
+30 -1
View File
@@ -2,7 +2,7 @@ const express = require('express');
const app = express();
const { verificaToken } = require('../middleware/autentificacion');
const route = '/cuestionario_programa';
const controllerPath = '../controller/CuestionarioPrograma';
const controllerPath = '../controller/CuestionarioPrograma2';
const get = require(`${controllerPath}/get`);
const nuevo = require(`${controllerPath}/nuevo`);
@@ -28,4 +28,33 @@ app.get(`${route}`, verificaToken, (req, res) => {
});
});
app.post(`${route}/v2`, (req, res) => {
console.log(`${route}/v2`);
return nuevo(req.body)
.then((data) => {
res.status(200).json(data);
})
.catch((err) => {
console.log(err);
res.status(400).json({ message: err.message });
});
});
// GET
app.get(`${route}/v2`, (req, res) => {
console.log(`${route}/v2`);
return get(req.query)
.then((data) => {
res.download(data);
})
.catch((err) => {
res.status(400).json({ message: err.message });
});
});
module.exports = app;
+1
View File
@@ -4,6 +4,7 @@ const app = express();
app.use(require('./CasoEspecial'));
app.use(require('./CuestionarioAlumno'));
app.use(require('./CuestionarioPrograma'));
app.use(require('./Programa'));
app.use(require('./Servicio'));
app.use(require('./Status'));
+10
View File
@@ -0,0 +1,10 @@
PORT=3000
DB = servicio_test
USERDB = root
PASSWORDDB = mypass
HOSTDB = host.docker.internal
TYPEDB = mariadb
ESCOLARES = 127.0.0.1
ESCOLARES_PASS = mypass
+127
View File
@@ -0,0 +1,127 @@
/* CREATE TABLE `servicio` (
`idServicio` INT PRIMARY KEY
); */
--DROP TABLE IF EXISTS `Cuestionario`;
CREATE TABLE
`Cuestionario` (
`idCuestionario` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`idServicio` INT,
`version` VARCHAR(50),
`titulo` VARCHAR(50),
`desc` VARCHAR(50),
`dirigidoA` VARCHAR(50),
`createdAt` DATETIME
);
--`idCuestionarioAlumno` INT, -- Agregado para relación con alumnos
--`idCuestionarioPrograma` INT, -- Agregado para relación con programas
-- `idCuestionarioAlumno1` INT, -- Agregado para relación con alumnos
-- `idCuestionarioPrograma1` INT, -- Agregado para relación con programas
DROP TABLE IF EXISTS `cuestionario_alumno_2`;
CREATE TABLE
`cuestionario_alumno_2` (
`idCuestionarioAlumno2` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`idCuestionario` INT,
`createdAt` DATETIME,
`p12_A_1` VARCHAR(50),
`p12_A_2` VARCHAR(50),
`p12_A_3` VARCHAR(50),
`p12_A_4` VARCHAR(50),
`p12_B_1` VARCHAR(50),
`p12_B_2` VARCHAR(50),
`p12_B_3` VARCHAR(50),
`p12_B_4` VARCHAR(50),
`p12_C_1` VARCHAR(50),
`p12_C_2` VARCHAR(50),
`p12_C_3` VARCHAR(50),
`p12_C_4` VARCHAR(50),
`p10_1` VARCHAR(50),
`p10_2` VARCHAR(50),
`p10_3` VARCHAR(50),
`p11_1` VARCHAR(50),
`p11_2` VARCHAR(50),
`p11_3` VARCHAR(50),
`p11_4` VARCHAR(50),
`p17_1` VARCHAR(50),
`p17_2` VARCHAR(50),
`p17_3` VARCHAR(50),
`p3_1` VARCHAR(50),
`p3_2` VARCHAR(50),
`p3_3` VARCHAR(50),
`p3_4` VARCHAR(50),
`p12_D_1` VARCHAR(50),
`p12_D_2` VARCHAR(50),
`p12_D_3` VARCHAR(50),
`p12_D_4` VARCHAR(50),
`p12_D_5` VARCHAR(50),
`p1` VARCHAR(150),
`p2` VARCHAR(50),
`p4` VARCHAR(50),
`p5` VARCHAR(50),
`p6` VARCHAR(50),
`p7` VARCHAR(50),
`p8` VARCHAR(50),
`p9` VARCHAR(50),
`p13` VARCHAR(50),
`p14` VARCHAR(50),
`p15` VARCHAR(50),
`p16` VARCHAR(50),
`p18` VARCHAR(50)
);
DROP TABLE IF EXISTS `cuestionario_programa_2`;
CREATE TABLE
`cuestionario_programa_2` (
`idCuestionarioPrograma2` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
`idCuestionario` INT,
`createdAt` DATETIME,
`p3_A_1` VARCHAR(50),
`p3_A_2` VARCHAR(50),
`p3_A_3` VARCHAR(50),
`p3_A_4` VARCHAR(50),
`p3_B_1` VARCHAR(50),
`p3_B_2` VARCHAR(50),
`p3_B_3` VARCHAR(50),
`p3_B_4` VARCHAR(50),
`p3_C_1` VARCHAR(50),
`p3_C_2` VARCHAR(50),
`p3_C_3` VARCHAR(50),
`p3_C_4` VARCHAR(50),
`p3_C_5` VARCHAR(50),
`p3_D_1` VARCHAR(50),
`p3_D_2` VARCHAR(50),
`p3_D_3` VARCHAR(50),
`p3_D_4` VARCHAR(50),
`p3_D_5` VARCHAR(50),
`p3_E_1` VARCHAR(50),
`p1` VARCHAR(50),
`p2` VARCHAR(50),
`p4` VARCHAR(50),
`p5` VARCHAR(50),
`p6` VARCHAR(50),
`p7` VARCHAR(50)
);
-- Relaciones corregidas
ALTER TABLE `Cuestionario` ADD FOREIGN KEY (`idServicio`) REFERENCES `servicio` (`idServicio`);
ALTER TABLE cuestionario_alumno ADD COLUMN idCuestionario INT;
ALTER TABLE cuestionario_programa ADD COLUMN idCuestionario INT;
ALTER TABLE `cuestionario_alumno` ADD FOREIGN KEY (`idCuestionario`) REFERENCES `Cuestionario` (`idCuestionario`);
ALTER TABLE `cuestionario_alumno_2` ADD FOREIGN KEY (`idCuestionario`) REFERENCES `Cuestionario` (`idCuestionario`);
ALTER TABLE `cuestionario_programa` ADD FOREIGN KEY (`idCuestionario`) REFERENCES `Cuestionario` (`idCuestionario`);
ALTER TABLE `cuestionario_programa_2` ADD FOREIGN KEY (`idCuestionario`) REFERENCES `Cuestionario` (`idCuestionario`);
--ALTER TABLE `Cuestionario`
--ADD FOREIGN KEY (`idCuestionarioAlumno`) REFERENCES `cuestionario_alumno_2` (`idCuestionarioAlumno2`);
--ALTER TABLE `Cuestionario`
--ADD FOREIGN KEY (`idCuestionarioPrograma`) REFERENCES `cuestionario_programa_2` (`idCuestionarioPrograma2`);
--ALTER TABLE `Cuestionario`
--ADD FOREIGN KEY (`idCuestionarioAlumno1`) REFERENCES `cuestionario_alumno` (`idCuestionarioAlumno`);
--ALTER TABLE `Cuestionario`
--ADD FOREIGN KEY (`idCuestionarioPrograma1`) REFERENCES `cuestionario_programa` (`idCuestionarioPrograma`);