From d66f4dd084dc1960566053a7462a7953b5fea268 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 14 Aug 2022 17:22:45 -0500 Subject: [PATCH 1/6] mensajes en nodemailer service --- src/nodemailer/nodemailer.service.ts | 104 +++++++++++++++++++++++++++ src/operador/operador.service.ts | 88 +++++------------------ src/usuario/usuario.service.ts | 41 +---------- 3 files changed, 122 insertions(+), 111 deletions(-) diff --git a/src/nodemailer/nodemailer.service.ts b/src/nodemailer/nodemailer.service.ts index 38ede92..e7c02a7 100644 --- a/src/nodemailer/nodemailer.service.ts +++ b/src/nodemailer/nodemailer.service.ts @@ -7,6 +7,110 @@ import { NodemailerMessageDto } from './dto/nodemailer-message.dto'; export class NodemailerService { constructor(private configService: ConfigService) {} + correoPasswordAdmin(operador, password: string) { + return `

Estimad@ Responsable del programa PC Puma:

+

Su registro se ha realizado exitosamente, para acceder al servicio del sistema de préstamo deberá hacerlo con los siguientes datos:

+ +

• Usuario: ${operador}

+ +

• Contraseña: ${password}

+ +

+ El presente registro le permite tener un uso administrativo del sistema de préstamo de + dispositivos PC Puma para su entidad. Para acceder al sistema de préstamo es obligatorio y su + responsabilidad leer y conocer los lineamientos “PC Puma” de la entidad que administra el + servicio, dichos lineamientos deberán estar ubicados en el módulo de préstamo y en la página de + su entidad. +

+ +

Para más información o dudas, puede contactarnos por este medio.

+ +

Atte.

+ +

PC Puma

+ +

+ + Hacemos de su conocimiento que la presente información es confidencial y será + tratada como tal, es de uso exclusivo para el usuario al que fue asignada y se encuentra protegida + por la normatividad de la Universidad Nacional Autónoma de México en la materia, cualquier uso + no autorizado o indebido se hará del conocimiento de la autoridad universitaria. Puede consultar + nuestro aviso de privacidad en: https://sdi.unam.mx/avisospriv.php + +

+ `; + } + + correoPasswordOperador(operador, password: string) { + return `

Estimad@ operador del servicio de préstamo PC Puma, su registro se realizó con éxito.

+

Para acceder al servicio debe hacerlo con los siguientes datos:

+ +

• Usuario: ${operador}

+ +

• Contraseña: ${password}

+ +

+ El presente registro le permite hacer uso del sistema de préstamo de dispositivos PC Puma. + Para acceder al servicio es obligatorio y su responsabilidad leer y conocer los “lineamientos + PC Puma” de la entidad en la que es solicitado el préstamo, ubicados en el módulo de + préstamo o la página de su entidad. +

+ +

Para más información o dudas, puede contactarnos por este medio.

+ +

Atte.

+ +

PC Puma

+ +

+ + Hacemos de su conocimiento que la presente + información es confidencial y será tratada como tal, es de uso exclusivo para el usuario al que + fue asignada y se encuentra protegida por la normatividad de la Universidad Nacional + Autónoma de México en la materia, cualquier uso no autorizado o indebido se hará del + conocimiento de la autoridad universitaria. Puede consultar nuestro aviso de privacidad en: + https://sdi.unam.mx/avisospriv.php + +

+`; + } + + correoPasswordUsuario(password: string) { + return `

Estimad@ usuari@ del servicio de préstamo PC Puma, su registro se realizó con éxito

+

Para acceder al servicio debe hacerlo con los siguientes datos:

+ +

• Usuario: Número de cuenta o número de trabajador

+ +

• Contraseña: ${password}

+ +

+ El presente registro le permite hacer uso del servicio de préstamo de dispositivos PC Puma + seleccionados, el cual puede ser utilizado únicamente al interior de la entidad donde se solicita el + servicio. Para acceder al servicio de préstamo es obligatorio y es su responsabilidad leer los + “lineamientos PC- Puma” de la entidad en la que es solicitado el préstamo, ubicados en el módulo + de préstamo y en la página de su entidad. El desconocimiento de dichos lineamientos no le exime + de su responsabilidad y aplicación efectiva de los mismos. +

+ +

Para mayor información o duda contáctenos por este medio.

+ +

Atte.

+ +

Pc Puma Solicita

+ +

+ + Hacemos de su conocimiento que la + presente información es confidencial y será tratada como tal, es de uso exclusivo para el usuario al + que fue asignada y se encuentra protegida por la normatividad de la Universidad Nacional + Autónoma de México en la materia, cualquier uso no autorizado o indebido se hará del + conocimiento de la autoridad universitaria. Puede consultar nuestro aviso de privacidad en: + https://sdi.unam.mx/avisospriv.php + +

+`; + } + sendEmail(message: NodemailerMessageDto) { const transporter = nodemailer.createTransport({ service: this.configService.get('NODEMAILER_SERVICE'), diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 25580ca..13d1f29 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -22,74 +22,6 @@ export class OperadorService { private tipoUsuarioService: TipoUsuarioService, ) {} - private correoPasswordAdmin(operador, password: string) { - return `

Estimad@ Responsable del programa PC Puma:

-

Su registro se ha realizado exitosamente, para acceder al servicio del sistema de préstamo deberá hacerlo con los siguientes datos:

- -

• Usuario: ${operador}

- -

• Contraseña: ${password}

- -

- El presente registro le permite tener un uso administrativo del sistema de préstamo de - dispositivos PC Puma para su entidad. Para acceder al sistema de préstamo es obligatorio y su - responsabilidad leer y conocer los lineamientos “PC Puma” de la entidad que administra el - servicio, dichos lineamientos deberán estar ubicados en el módulo de préstamo y en la página de - su entidad. -

- -

Para más información o dudas, puede contactarnos por este medio.

- -

Atte.

- -

PC Puma

- -

- - Hacemos de su conocimiento que la presente información es confidencial y será - tratada como tal, es de uso exclusivo para el usuario al que fue asignada y se encuentra protegida - por la normatividad de la Universidad Nacional Autónoma de México en la materia, cualquier uso - no autorizado o indebido se hará del conocimiento de la autoridad universitaria. Puede consultar - nuestro aviso de privacidad en: https://sdi.unam.mx/avisospriv.php - -

- `; - } - - private correoPasswordOperador(operador, password: string) { - return `

Estimad@ operador del servicio de préstamo PC Puma, su registro se realizó con éxito.

-

Para acceder al servicio debe hacerlo con los siguientes datos:

- -

• Usuario: ${operador}

- -

• Contraseña: ${password}

- -

- El presente registro le permite hacer uso del sistema de préstamo de dispositivos PC Puma. - Para acceder al servicio es obligatorio y su responsabilidad leer y conocer los “lineamientos - PC Puma” de la entidad en la que es solicitado el préstamo, ubicados en el módulo de - préstamo o la página de su entidad. -

- -

Para más información o dudas, puede contactarnos por este medio.

- -

Atte.

- -

PC Puma

- -

- - Hacemos de su conocimiento que la presente - información es confidencial y será tratada como tal, es de uso exclusivo para el usuario al que - fue asignada y se encuentra protegida por la normatividad de la Universidad Nacional - Autónoma de México en la materia, cualquier uso no autorizado o indebido se hará del - conocimiento de la autoridad universitaria. Puede consultar nuestro aviso de privacidad en: - https://sdi.unam.mx/avisospriv.php - -

-`; - } - async create( id_institucion: number | Institucion, id_tipo_usuario: number, @@ -139,8 +71,14 @@ export class OperadorService { subject: 'Credenciales Pc Puma', html: tipoUsuario.id_tipo_usuario === 3 - ? this.correoPasswordAdmin(operador.operador, password) - : this.correoPasswordOperador(operador.operador, password), + ? this.nodemailerService.correoPasswordAdmin( + operador.operador, + password, + ) + : this.nodemailerService.correoPasswordOperador( + operador.operador, + password, + ), }), ) .then((_) => ({ @@ -241,8 +179,14 @@ export class OperadorService { subject: 'Credenciales PC Puma', html: operador.tipoUsuario.id_tipo_usuario === 3 - ? this.correoPasswordAdmin(operador.operador, password) - : this.correoPasswordOperador(operador.operador, password), + ? this.nodemailerService.correoPasswordAdmin( + operador.operador, + password, + ) + : this.nodemailerService.correoPasswordOperador( + operador.operador, + password, + ), }), ) .then((_) => ({ diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index 75fdbc9..6942ccc 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -15,7 +15,6 @@ import { InstitucionUsuarioService } from '../institucion-usuario/institucion-us import { NodemailerService } from '../nodemailer/nodemailer.service'; import { SoapClientService } from '../soap-client/soap-client.service'; import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; -import { query } from 'express'; @Injectable() export class UsuarioService { @@ -53,42 +52,6 @@ export class UsuarioService { ); } - correoPassword(password: string) { - return `

Estimad@ usuari@ del servicio de préstamo PC Puma, su registro se realizó con éxito

-

Para acceder al servicio debe hacerlo con los siguientes datos:

- -

• Usuario: Número de cuenta o número de trabajador

- -

• Contraseña: ${password}

- -

- El presente registro le permite hacer uso del servicio de préstamo de dispositivos PC Puma - seleccionados, el cual puede ser utilizado únicamente al interior de la entidad donde se solicita el - servicio. Para acceder al servicio de préstamo es obligatorio y es su responsabilidad leer los - “lineamientos PC- Puma” de la entidad en la que es solicitado el préstamo, ubicados en el módulo - de préstamo y en la página de su entidad. El desconocimiento de dichos lineamientos no le exime - de su responsabilidad y aplicación efectiva de los mismos. -

- -

Para mayor información o duda contáctenos por este medio.

- -

Atte.

- -

Pc Puma Solicita

- -

- - Hacemos de su conocimiento que la - presente información es confidencial y será tratada como tal, es de uso exclusivo para el usuario al - que fue asignada y se encuentra protegida por la normatividad de la Universidad Nacional - Autónoma de México en la materia, cualquier uso no autorizado o indebido se hará del - conocimiento de la autoridad universitaria. Puede consultar nuestro aviso de privacidad en: - https://sdi.unam.mx/avisospriv.php - -

-`; - } - async DGAE(usuario: string, id_institucion_carrera: number) { const institucionCarrera = await this.institucionCarreraService.findById( id_institucion_carrera, @@ -250,7 +213,7 @@ export class UsuarioService { this.nodemailerService.sendEmail({ email: `${usuario.usuario}@pcpuma.acatlan.unam.mx`, subject: 'Credenciales Pc Puma', - html: this.correoPassword(password), + html: this.nodemailerService.correoPasswordUsuario(password), }), ) .then((_) => ({ @@ -290,7 +253,7 @@ export class UsuarioService { this.nodemailerService.sendEmail({ email: usuario.correo, subject: 'Credenciales Pc Puma', - html: this.correoPassword(password), + html: this.nodemailerService.correoPasswordUsuario(password), }), ) .then((_) => ({ message })); From b0ce24dc4f085985783a90e4ffad643fdb3df6f9 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 14 Aug 2022 18:50:49 -0500 Subject: [PATCH 2/6] listo carga masiva equipos --- src/app.gateway.ts | 8 ++++---- src/app.module.ts | 2 +- src/institucion-dia/entity/institucion-dia.entity.ts | 6 +++--- src/upload-file/upload-file.service.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 5388e21..8f73505 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,10 +10,10 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - // 'http://localhost:3176', - // 'http://localhost:3186', - 'http://132.248.80.196:3155', - 'http://132.248.80.196:3185', + 'http://localhost:3176', + 'http://localhost:3186', + // 'http://132.248.80.196:3155', + // 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'http://pmodulospcpuma.unam.mx:3015', // 'https://modulospcpuma.unam.mx', diff --git a/src/app.module.ts b/src/app.module.ts index 079ee81..a441863 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -93,7 +93,7 @@ import { Usuario } from './usuario/entity/usuario.entity'; username: configService.get('DB_USER'), password: configService.get('DB_PASSWORD'), port: parseInt(configService.get('DB_PORT')), - synchronize: false, + synchronize: configService.get('STATE') !== 'produccion', entities: [ Carrera, CarreraPrograma, diff --git a/src/institucion-dia/entity/institucion-dia.entity.ts b/src/institucion-dia/entity/institucion-dia.entity.ts index 88e22d9..fa67177 100644 --- a/src/institucion-dia/entity/institucion-dia.entity.ts +++ b/src/institucion-dia/entity/institucion-dia.entity.ts @@ -18,16 +18,16 @@ export class InstitucionDia { @Column({ type: Boolean, nullable: false, default: false }) activo: boolean; - @Column({ type: String, nullable: false, default: '18:45', length: 5 }) + @Column({ type: String, nullable: false, default: '18:35', length: 5 }) hora_extra: string; - @Column({ type: String, nullable: false, default: '17:45', length: 5 }) + @Column({ type: String, nullable: false, default: '17:35', length: 5 }) hora_fin: string; @Column({ type: String, nullable: false, default: '08:50', length: 5 }) hora_inicio: string; - @Column({ type: String, nullable: false, default: '20:00', length: 5 }) + @Column({ type: String, nullable: false, default: '19:45', length: 5 }) hora_tope: string; @ManyToOne(() => Dia, (dia) => dia.institucionesDias, { eager: true }) diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index c1d8b0f..dd1dfed 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -269,7 +269,7 @@ export class UploadFileService { errores, equiposNuevos, ); - if ((i + 1) % 100 === 0) { + if ((i + 1) % 100 === 0 || i + 1 === equipos.length) { this.appGateway.equiposNuevos(institucion.id_institucion, { errores, mensajes, From 69d880be849e07c80dc3b7592eb4b1f777384f1c Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 14 Aug 2022 19:24:58 -0500 Subject: [PATCH 3/6] listo carga masiva usuarios --- src/upload-file/upload-file.service.ts | 360 +++++++++++++------------ 1 file changed, 183 insertions(+), 177 deletions(-) diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index dd1dfed..0b80272 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -3,6 +3,7 @@ import * as csvtojson from 'csvtojson'; import { BadRequestException, Injectable } from '@nestjs/common'; import { AppGateway } from '../app.gateway'; import { Equipo } from '../equipo/entity/equipo.entity'; +import { Institucion } from '../institucion/entity/institucion.entity'; import { InstitucionUsuario } from '../institucion-usuario/entity/institucion-usuario.entity'; import { CarritoService } from '../carrito/carrito.service'; import { EquipoService } from '../equipo/equipo.service'; @@ -21,7 +22,6 @@ import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; import { UsuarioService } from '../usuario/usuario.service'; import { UploadFileCargaMasivaUsuarioDto } from './dto/upload-file-carga-masiva-usuario.dto'; import { UploadFileCargaMasivaEquipoDto } from './dto/upload-file-carga-masiva-equipo.dto'; -import { Institucion } from 'src/institucion/entity/institucion.entity'; @Injectable() export class UploadFileService { @@ -44,6 +44,85 @@ export class UploadFileService { private usuarioService: UsuarioService, ) {} + async createEquipos(path: string, id_institucion: number) { + const institucion = await this.institucionService.findById(id_institucion); + let errores: string[] = []; + let mensajes: string[] = []; + let equiposNuevos: Equipo[] = []; + + csvtojson() + .fromFile(path) + .then(async (equipos: UploadFileCargaMasivaEquipoDto[]) => { + for (let i = 0; i < equipos.length; i++) { + await this.evaluarEquipo( + institucion, + i, + equipos[i], + mensajes, + errores, + equiposNuevos, + ); + if ((i + 1) % 90 === 0 || i + 1 === equipos.length) { + this.appGateway.equiposNuevos(institucion.id_institucion, { + errores, + mensajes, + equiposNuevos, + }); + errores = []; + mensajes = []; + equiposNuevos = []; + } + } + fs.unlink(path, (err) => {}); + }); + return { message: 'Se subió y cargó correctamente su archivo csv.' }; + } + + async createUsuarios(path: string, id_institucion: number) { + const institucion = await this.institucionService.findById(id_institucion); + let errores: string[] = []; + let mensajes: string[] = []; + let usuariosNuevos: InstitucionUsuario[] = []; + + csvtojson() + .fromFile(path) + .then(async (usuarios: UploadFileCargaMasivaUsuarioDto[]) => { + for (let i = 0; i < usuarios.length; i++) { + await this.evaluarUsuario( + institucion, + i, + usuarios[i], + mensajes, + errores, + usuariosNuevos, + ); + if ((i + 1) % 100 === 0 || i + 1 === usuarios.length) { + this.appGateway.usuariosNuevos(institucion.id_institucion, { + errores, + mensajes, + usuariosNuevos, + }); + errores = []; + mensajes = []; + usuariosNuevos = []; + } + } + }); + return { message: 'Se subió y cargó correctamente tu archivo csv.' }; + } + + downloadLogo(id_institucion: number) { + return this.institucionService + .findById(id_institucion) + .then((institucion) => institucion.logo); + } + + errorBase(index) { + return `Se saltó la linea ${ + index + 2 + } por el siguiente/los siguientes motivo(s):`; + } + async evaluarEquipo( institucion: Institucion, index: number, @@ -251,188 +330,115 @@ export class UploadFileService { } } - async createEquipos(path: string, id_institucion: number) { - const institucion = await this.institucionService.findById(id_institucion); - let errores: string[] = []; - let mensajes: string[] = []; - let equiposNuevos: Equipo[] = []; + async evaluarUsuario( + institucion: Institucion, + index: number, + dataUsuario: UploadFileCargaMasivaUsuarioDto, + mensajes: string[], + errores: string[], + usuariosNuevos: InstitucionUsuario[], + ) { + let error = this.errorBase(index); - csvtojson() - .fromFile(path) - .then(async (equipos: UploadFileCargaMasivaEquipoDto[]) => { - for (let i = 0; i < equipos.length; i++) { - await this.evaluarEquipo( - institucion, - i, - equipos[i], - mensajes, - errores, - equiposNuevos, - ); - if ((i + 1) % 100 === 0 || i + 1 === equipos.length) { - this.appGateway.equiposNuevos(institucion.id_institucion, { - errores, - mensajes, - equiposNuevos, - }); - errores = []; - mensajes = []; - equiposNuevos = []; - } - } - fs.unlink(path, (err) => {}); - }); - return { message: 'Se subió y cargó correctamente su archivo csv.' }; - } + if (!dataUsuario.numero_cuenta || !dataUsuario.tipo_usuario) { + if (!dataUsuario.numero_cuenta) error += ' falta del campo numero_cuenta'; + if (error != this.errorBase(index)) error += ','; + if (!dataUsuario.tipo_usuario) error += ' falta del campo tipo_usuario'; + errores.push(`${error}.`); + return; + } - async createUsuarios(path: string, id_institucion: number) { - const institucion = await this.institucionService.findById(id_institucion); - const errores: string[] = []; - const mensajes: string[] = []; - const usuariosActualizados: InstitucionUsuario[] = []; - const usuariosNuevos: InstitucionUsuario[] = []; - - return csvtojson() - .fromFile(path) - .then(async (usuarios: UploadFileCargaMasivaUsuarioDto[]) => { - for (let i = 0; i < usuarios.length; i++) { - let error = this.errorBase(i); - - if (!usuarios[i].numero_cuenta || !usuarios[i].tipo_usuario) { - if (!usuarios[i].numero_cuenta) - error += ' falta del campo numero_cuenta'; - if (error != this.errorBase(i)) error += ','; - if (!usuarios[i].tipo_usuario) - error += ' falta del campo tipo_usuario'; - errores.push(`${error}.`); - continue; - } - - const tipoUsuario = await this.tipoUsuarioService.findByTipoUsuario( - usuarios[i].tipo_usuario, + const tipoUsuario = await this.tipoUsuarioService.findByTipoUsuario( + dataUsuario.tipo_usuario, + false, + ); + const usuario = await this.usuarioService.findByUsuario( + dataUsuario.numero_cuenta, + false, + ); + const carrera = + tipoUsuario && (tipoUsuario.id_tipo_usuario === 5 || dataUsuario.carrera) + ? await this.institucionCarreraService.findCarreraByCarrera( + tipoUsuario.id_tipo_usuario === 5 + ? 'PROFESOR' + : dataUsuario.carrera, false, - ); - const usuario = await this.usuarioService.findByUsuario( - usuarios[i].numero_cuenta, - false, - ); - const carrera = - tipoUsuario && - (tipoUsuario.id_tipo_usuario === 5 || usuarios[i].carrera) - ? await this.institucionCarreraService.findCarreraByCarrera( - tipoUsuario.id_tipo_usuario === 5 - ? 'PROFESOR' - : usuarios[i].carrera, - false, - ) - : null; - const institucionCarrera = carrera - ? await this.institucionCarreraService.findByIdInstitucionIdCarrera( - institucion, - carrera, - ) - : null; + ) + : null; + const institucionCarrera = carrera + ? await this.institucionCarreraService.findByIdInstitucionIdCarrera( + institucion, + carrera, + ) + : null; - if ( - !tipoUsuario || - tipoUsuario.id_tipo_usuario < 5 || - !carrera || - (carrera && !institucionCarrera) - ) { - if (!tipoUsuario) error += ' no existe este tipo de usuario.'; - else if (tipoUsuario.id_tipo_usuario < 5) - ' no se puede asignar este tipo de usuario a este usuario.'; - if (!carrera) error += ' falta del campo carrera para el alumno.'; - if (carrera && !institucionCarrera) - error += ' la carrera no pertenece a la institución.'; - errores.push(error); - continue; - } - if (usuario) { - let existeInstitucionUsuario: InstitucionUsuario = null; + if ( + !tipoUsuario || + tipoUsuario.id_tipo_usuario < 5 || + !carrera || + (carrera && !institucionCarrera) + ) { + if (!tipoUsuario) error += ' no existe este tipo de usuario.'; + else if (tipoUsuario.id_tipo_usuario < 5) + ' no se puede asignar este tipo de usuario a este usuario.'; + if (!carrera) error += ' falta del campo carrera para el alumno.'; + if (carrera && !institucionCarrera) + error += ' la carrera no pertenece a la institución.'; + errores.push(error); + return; + } + if (usuario) { + let existeInstitucionUsuario: InstitucionUsuario = null; - for (let i = 0; i < usuario.instituciones.length; i++) - if ( - usuario.instituciones[i].institucionCarrera - .id_institucion_carrera === - institucionCarrera.id_institucion_carrera - ) { - existeInstitucionUsuario = usuario.instituciones[i]; - break; - } - if (existeInstitucionUsuario && !existeInstitucionUsuario.activo) { - existeInstitucionUsuario.activo = true; - await this.institucionUsuarioService.update( - existeInstitucionUsuario, - ); - } else if (!existeInstitucionUsuario) - await this.institucionUsuarioService - .create(institucionCarrera, usuario) - .then(({ message, institucionUsuario }) => { - usuariosActualizados.push(institucionUsuario); - mensajes.push(message); - }); - if ( - usuario.tipoUsuario.id_tipo_usuario != tipoUsuario.id_tipo_usuario - ) { - usuario.tipoUsuario = tipoUsuario; - await this.usuarioService - .update(usuario, false) - .then(({ message }) => mensajes.push(message)); - } - } else { - if ( - !usuarios[i].nombres || - !usuarios[i].apellido_m || - !usuarios[i].apellido_p - ) { - if (error != this.errorBase(i)) error += ','; - if (!usuarios[i].nombres) error += ' falta del campo nombres'; - if (error != this.errorBase(i)) error += ','; - if (!usuarios[i].apellido_m) - error += ' falta del campo apellido_m'; - if (error != this.errorBase(i)) error += ','; - if (!usuarios[i].apellido_p) - error += ' falta del campo apellido_p'; - errores.push(`${error}.`); - continue; - } - await this.usuarioService - .create( - usuarios[i].numero_cuenta, - `${usuarios[i].apellido_p.trim()} ${usuarios[ - i - ].apellido_m.trim()} ${usuarios[i].nombres.trim()}`, - tipoUsuario, - institucionCarrera, - usuarios[i].correo ? usuarios[i].correo : '', - usuarios[i].rfc ? usuarios[i].rfc : '', - ) - .then(({ message, institucionUsuario }) => { - usuariosNuevos.push(institucionUsuario); - mensajes.push(message); - }); - } + for (let i = 0; i < usuario.instituciones.length; i++) + if ( + usuario.instituciones[i].institucionCarrera.id_institucion_carrera === + institucionCarrera.id_institucion_carrera + ) { + existeInstitucionUsuario = usuario.instituciones[i]; + break; } - return { - message: 'Se subió y cargó correctamente tu archivo csv.', - mensajes, - usuariosNuevos, - errores, - }; - }); - } - - downloadLogo(id_institucion: number) { - return this.institucionService - .findById(id_institucion) - .then((institucion) => institucion.logo); - } - - errorBase(index) { - return `Se saltó la linea ${ - index + 2 - } por el siguiente/los siguientes motivo(s):`; + if (existeInstitucionUsuario && !existeInstitucionUsuario.activo) { + existeInstitucionUsuario.activo = true; + await this.institucionUsuarioService.update(existeInstitucionUsuario); + } else if (!existeInstitucionUsuario) + await this.institucionUsuarioService + .create(institucionCarrera, usuario) + .then(({ message }) => mensajes.push(message)); + if (usuario.tipoUsuario.id_tipo_usuario != tipoUsuario.id_tipo_usuario) { + usuario.tipoUsuario = tipoUsuario; + await this.usuarioService + .update(usuario, false) + .then(({ message }) => mensajes.push(message)); + } + } else { + if ( + !dataUsuario.nombres || + !dataUsuario.apellido_m || + !dataUsuario.apellido_p + ) { + if (!dataUsuario.nombres) error += ' falta del campo nombres'; + if (error != this.errorBase(index)) error += ','; + if (!dataUsuario.apellido_m) error += ' falta del campo apellido_m'; + if (error != this.errorBase(index)) error += ','; + if (!dataUsuario.apellido_p) error += ' falta del campo apellido_p'; + errores.push(`${error}.`); + return; + } + await this.usuarioService + .create( + dataUsuario.numero_cuenta, + `${dataUsuario.apellido_p.trim()} ${dataUsuario.apellido_m.trim()} ${dataUsuario.nombres.trim()}`, + tipoUsuario, + institucionCarrera, + dataUsuario.correo ? dataUsuario.correo : '', + dataUsuario.rfc ? dataUsuario.rfc : '', + ) + .then(({ message, institucionUsuario }) => { + usuariosNuevos.push(institucionUsuario); + mensajes.push(message); + }); + } } async uploadLogo(file: Express.Multer.File, id_institucion: number) { From 38aafecdf1394752b0e6b123a7fad744e5eed422 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sun, 14 Aug 2022 22:11:44 -0500 Subject: [PATCH 4/6] listo motivos carrito --- src/app.module.ts | 12 ++-- .../carrito-motivo.controller.spec.ts | 18 ++++++ .../carrito-motivo.controller.ts | 64 +++++++++++++++++++ src/carrito-motivo/carrito-motivo.module.ts | 23 +++++++ .../carrito-motivo.service.spec.ts | 18 ++++++ src/carrito-motivo/carrito-motivo.service.ts | 49 ++++++++++++++ src/carrito-motivo/dto/input/get.dto.ts | 9 +++ .../dto/output/carrito-motivo.dto.ts | 20 ++++++ .../entity/carrito-motivo.entity.ts | 32 ++++++++++ src/carrito/carrito.module.ts | 4 +- src/carrito/dto/input/update.dto.ts | 2 +- src/carrito/entity/carrito.entity.ts | 4 ++ .../dto/output/equipo-motivo.dto.ts} | 2 +- .../entity/equipo-motivo.entity.ts} | 2 +- .../equipo-motivo.controller.spec.ts | 18 ++++++ .../equipo-motivo.controller.ts} | 16 ++--- .../equipo-motivo.module.ts} | 16 ++--- .../equipo-motivo.service.spec.ts} | 10 +-- .../equipo-motivo.service.ts} | 7 +- src/equipo/entity/equipo.entity.ts | 6 +- src/equipo/equipo.module.ts | 4 +- src/equipo/equipo.service.ts | 13 ++-- src/motivo/motivo.controller.spec.ts | 18 ------ src/operador/entity/operador.entity.ts | 6 +- src/status/entity/status.entity.ts | 6 +- src/upload-file/upload-file.controller.ts | 11 ++-- 26 files changed, 318 insertions(+), 72 deletions(-) create mode 100644 src/carrito-motivo/carrito-motivo.controller.spec.ts create mode 100644 src/carrito-motivo/carrito-motivo.controller.ts create mode 100644 src/carrito-motivo/carrito-motivo.module.ts create mode 100644 src/carrito-motivo/carrito-motivo.service.spec.ts create mode 100644 src/carrito-motivo/carrito-motivo.service.ts create mode 100644 src/carrito-motivo/dto/input/get.dto.ts create mode 100644 src/carrito-motivo/dto/output/carrito-motivo.dto.ts create mode 100644 src/carrito-motivo/entity/carrito-motivo.entity.ts rename src/{motivo/dto/output/motivo.dto.ts => equipo-motivo/dto/output/equipo-motivo.dto.ts} (91%) rename src/{motivo/entity/motivo.entity.ts => equipo-motivo/entity/equipo-motivo.entity.ts} (96%) create mode 100644 src/equipo-motivo/equipo-motivo.controller.spec.ts rename src/{motivo/motivo.controller.ts => equipo-motivo/equipo-motivo.controller.ts} (78%) rename src/{motivo/motivo.module.ts => equipo-motivo/equipo-motivo.module.ts} (55%) rename src/{motivo/motivo.service.spec.ts => equipo-motivo/equipo-motivo.service.spec.ts} (50%) rename src/{motivo/motivo.service.ts => equipo-motivo/equipo-motivo.service.ts} (89%) delete mode 100644 src/motivo/motivo.controller.spec.ts diff --git a/src/app.module.ts b/src/app.module.ts index a441863..a52af89 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -10,8 +10,10 @@ import { AuthModule } from './auth/auth.module'; import { BcryptModule } from './bcrypt/bcrypt.module'; import { CarreraProgramaModule } from './carrera-programa/carrera-programa.module'; import { CarritoModule } from './carrito/carrito.module'; +import { CarritoMotivoModule } from './carrito-motivo/carrito-motivo.module'; import { CronModule } from './cron/cron.module'; import { EquipoModule } from './equipo/equipo.module'; +import { EquipoMotivoModule } from './equipo-motivo/equipo-motivo.module'; import { EquipoProgramaModule } from './equipo-programa/equipo-programa.module'; import { EquipoTipoEntradaModule } from './equipo-tipo-entrada/equipo-tipo-entrada.module'; import { HoraExcepcionModule } from './hora-excepcion/hora-excepcion.module'; @@ -26,7 +28,6 @@ import { InstitucionUsuarioModule } from './institucion-usuario/institucion-usua import { MarcaModule } from './marca/marca.module'; import { ModeloModule } from './modelo/modelo.module'; import { ModuloModule } from './modulo/modulo.module'; -import { MotivoModule } from './motivo/motivo.module'; import { MultaModule } from './multa/multa.module'; import { NodemailerModule } from './nodemailer/nodemailer.module'; import { OperadorModule } from './operador/operador.module'; @@ -40,8 +41,10 @@ import { UsuarioModule } from './usuario/usuario.module'; import { Carrera } from './institucion-carrera/entity/carrera.entity'; import { CarreraPrograma } from './carrera-programa/entity/carrera-programa.entity'; import { Carrito } from './carrito/entity/carrito.entity'; +import { CarritoMotivo } from './carrito-motivo/entity/carrito-motivo.entity'; import { Dia } from './institucion-dia/entity/dia.entity'; import { Equipo } from './equipo/entity/equipo.entity'; +import { EquipoMotivo } from './equipo-motivo/entity/equipo-motivo.entity'; import { EquipoPrograma } from './equipo-programa/entity/equipo-programa.entity'; import { EquipoTipoEntrada } from './equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; import { HoraExcepcion } from './hora-excepcion/entity/hora-excepcion.entity'; @@ -57,7 +60,6 @@ import { InstitucionUsuario } from './institucion-usuario/entity/institucion-usu import { Marca } from './marca/entity/marca.entity'; import { Modelo } from './modelo/entity/modelo.entity'; import { Modulo } from './modulo/entity/modulo.entity'; -import { Motivo } from './motivo/entity/motivo.entity'; import { Multa } from './multa/entity/multa.entity'; import { Nivel } from './institucion-carrera/entity/nivel.entity'; import { Operador } from './operador/entity/operador.entity'; @@ -98,8 +100,10 @@ import { Usuario } from './usuario/entity/usuario.entity'; Carrera, CarreraPrograma, Carrito, + CarritoMotivo, Dia, Equipo, + EquipoMotivo, EquipoPrograma, EquipoTipoEntrada, HoraExcepcion, @@ -115,7 +119,6 @@ import { Usuario } from './usuario/entity/usuario.entity'; Marca, Modelo, Modulo, - Motivo, Multa, Nivel, Operador, @@ -134,6 +137,7 @@ import { Usuario } from './usuario/entity/usuario.entity'; BcryptModule, CarreraProgramaModule, CarritoModule, + CarritoMotivoModule, CronModule, EquipoProgramaModule, EquipoTipoEntradaModule, @@ -150,7 +154,7 @@ import { Usuario } from './usuario/entity/usuario.entity'; MarcaModule, ModeloModule, ModuloModule, - MotivoModule, + EquipoMotivoModule, MultaModule, NodemailerModule, OperadorModule, diff --git a/src/carrito-motivo/carrito-motivo.controller.spec.ts b/src/carrito-motivo/carrito-motivo.controller.spec.ts new file mode 100644 index 0000000..8248364 --- /dev/null +++ b/src/carrito-motivo/carrito-motivo.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CarritoMotivoController } from './carrito-motivo.controller'; + +describe('CarritoMotivoController', () => { + let controller: CarritoMotivoController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CarritoMotivoController], + }).compile(); + + controller = module.get(CarritoMotivoController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/carrito-motivo/carrito-motivo.controller.ts b/src/carrito-motivo/carrito-motivo.controller.ts new file mode 100644 index 0000000..6041383 --- /dev/null +++ b/src/carrito-motivo/carrito-motivo.controller.ts @@ -0,0 +1,64 @@ +import { + Controller, + ForbiddenException, + Get, + Query, + Request, + UseGuards, +} from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { + ApiBearerAuth, + ApiOperation, + ApiQuery, + ApiTags, +} from '@nestjs/swagger'; +import { Serealize } from '../interceptors/serialize.interceptor'; +import { CaritoMotivoService } from './carrito-motivo.service'; +import { Operador } from '../operador/entity/operador.entity'; +import { GetDto } from './dto/input/get.dto'; +import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto'; + +@Controller('carrito-motivo') +@ApiTags('carrito-motivo') +export class CarritoMotivoController { + constructor(private carritoMotivoService: CaritoMotivoService) {} + + @Serealize(CarritoMotivoOutputDto) + @Get() + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: + 'Endpoint que retorna 25 cambios de status que ha tenido un carrito dependiendo de la página en la que se encuentra el alumno.', + }) + @ApiBearerAuth('jwt') + @ApiQuery({ + description: 'Id del carrito.', + name: 'id_carrito', + type: 'string', + }) + @ApiQuery({ + description: 'Página en la que se encuentra el usuario.', + name: 'pagina', + type: 'string', + }) + get(@Request() req, @Query() query: GetDto) { + const operador: Operador = req.user.operador; + + if ( + !operador || + (operador.tipoUsuario.id_tipo_usuario != 3 && + operador.tipoUsuario.id_tipo_usuario != 4) + ) + throw new ForbiddenException( + 'No tienes los permisos necesarios para acceder a esta información.', + ); + return this.carritoMotivoService.findAllByIdCarrito( + parseInt(query.id_carrito), + parseInt(query.pagina), + ); + } + + // @Get('reporte') + // reporte() {} +} diff --git a/src/carrito-motivo/carrito-motivo.module.ts b/src/carrito-motivo/carrito-motivo.module.ts new file mode 100644 index 0000000..420ca39 --- /dev/null +++ b/src/carrito-motivo/carrito-motivo.module.ts @@ -0,0 +1,23 @@ +import { forwardRef, Module } from '@nestjs/common'; +import { PassportModule } from '@nestjs/passport'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { CarritoMotivoController } from './carrito-motivo.controller'; +import { CaritoMotivoService } from './carrito-motivo.service'; +import { CarritoMotivo } from './entity/carrito-motivo.entity'; +import { CarritoModule } from '../carrito/carrito.module'; +import { OperadorModule } from '../operador/operador.module'; +import { StatusModule } from '../status/status.module'; + +@Module({ + imports: [ + forwardRef(() => CarritoModule), + OperadorModule, + StatusModule, + PassportModule.register({ defaultStrategy: 'jwt' }), + TypeOrmModule.forFeature([CarritoMotivo]), + ], + controllers: [CarritoMotivoController], + providers: [CaritoMotivoService], + exports: [CaritoMotivoService], +}) +export class CarritoMotivoModule {} diff --git a/src/carrito-motivo/carrito-motivo.service.spec.ts b/src/carrito-motivo/carrito-motivo.service.spec.ts new file mode 100644 index 0000000..2b48b0c --- /dev/null +++ b/src/carrito-motivo/carrito-motivo.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CaritoMotivoService } from './carrito-motivo.service'; + +describe('CaritoMotivoService', () => { + let service: CaritoMotivoService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CaritoMotivoService], + }).compile(); + + service = module.get(CaritoMotivoService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/carrito-motivo/carrito-motivo.service.ts b/src/carrito-motivo/carrito-motivo.service.ts new file mode 100644 index 0000000..e737522 --- /dev/null +++ b/src/carrito-motivo/carrito-motivo.service.ts @@ -0,0 +1,49 @@ +import * as moment from 'moment'; +import { forwardRef, Inject, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Carrito } from 'src/carrito/entity/carrito.entity'; +import { CarritoMotivo } from './entity/carrito-motivo.entity'; +import { Operador } from '../operador/entity/operador.entity'; +import { CarritoService } from '../carrito/carrito.service'; +import { OperadorService } from '../operador/operador.service'; + +@Injectable() +export class CaritoMotivoService { + constructor( + @InjectRepository(CarritoMotivo) + private repository: Repository, + @Inject(forwardRef(() => CarritoService)) + private carritoService: CarritoService, + private operadorService: OperadorService, + ) {} + + async create( + carrito: Carrito, + operador: Operador, + status: boolean, + motivo: string, + ) { + const ahora = moment(); + + return this.repository.save( + this.repository.create({ + carrito, + fecha_creacion: ahora.toDate(), + motivo, + operador, + status, + }), + ); + } + + findAllByIdCarrito(id_carrito: number, pagina: number) { + return this.carritoService.findById(id_carrito).then((carrito) => + this.repository.findAndCount({ + where: { carrito }, + skip: (pagina - 1) * 25, + take: 25, + }), + ); + } +} diff --git a/src/carrito-motivo/dto/input/get.dto.ts b/src/carrito-motivo/dto/input/get.dto.ts new file mode 100644 index 0000000..eb41517 --- /dev/null +++ b/src/carrito-motivo/dto/input/get.dto.ts @@ -0,0 +1,9 @@ +import { IsNumberString } from 'class-validator'; + +export class GetDto { + @IsNumberString() + id_carrito: string; + + @IsNumberString() + pagina: string; +} diff --git a/src/carrito-motivo/dto/output/carrito-motivo.dto.ts b/src/carrito-motivo/dto/output/carrito-motivo.dto.ts new file mode 100644 index 0000000..629d731 --- /dev/null +++ b/src/carrito-motivo/dto/output/carrito-motivo.dto.ts @@ -0,0 +1,20 @@ +import { Expose, Type } from 'class-transformer'; +import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto'; + +export class CarritoMotivoOutputDto { + @Expose() + id_motivo; + + @Expose() + fecha_creacion; + + @Expose() + motivo; + + @Expose() + status; + + @Expose() + @Type(() => OperadorMinOutputDto) + operador; +} diff --git a/src/carrito-motivo/entity/carrito-motivo.entity.ts b/src/carrito-motivo/entity/carrito-motivo.entity.ts new file mode 100644 index 0000000..2ddfb19 --- /dev/null +++ b/src/carrito-motivo/entity/carrito-motivo.entity.ts @@ -0,0 +1,32 @@ +import { + Column, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from 'typeorm'; +import { Carrito } from '../../carrito/entity/carrito.entity'; +import { Operador } from '../../operador/entity/operador.entity'; + +@Entity() +export class CarritoMotivo { + @PrimaryGeneratedColumn() + id_motivo: number; + + @Column({ type: Date, nullable: false }) + fecha_creacion: Date; + + @Column({ type: String, nullable: false, length: 250 }) + motivo: string; + + @Column({ type: Boolean, nullable: false }) + status: boolean; + + @ManyToOne(() => Carrito, (carrito) => carrito.motivos) + @JoinColumn({ name: 'id_carrito' }) + carrito: Carrito; + + @ManyToOne(() => Operador, (operador) => operador.motivos, { eager: true }) + @JoinColumn({ name: 'id_operador' }) + operador: Operador; +} diff --git a/src/carrito/carrito.module.ts b/src/carrito/carrito.module.ts index e73cced..3a983e8 100644 --- a/src/carrito/carrito.module.ts +++ b/src/carrito/carrito.module.ts @@ -1,9 +1,10 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CarritoController } from './carrito.controller'; import { CarritoService } from './carrito.service'; import { Carrito } from './entity/carrito.entity'; +import { CarritoMotivoModule } from '../carrito-motivo/carrito-motivo.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module'; import { MarcaModule } from '../marca/marca.module'; @@ -12,6 +13,7 @@ import { ModuloModule } from '../modulo/modulo.module'; @Module({ imports: [ + forwardRef(() => CarritoMotivoModule), InstitucionModule, InstitucionTipoCarritoModule, MarcaModule, diff --git a/src/carrito/dto/input/update.dto.ts b/src/carrito/dto/input/update.dto.ts index 26e5986..fcba3e2 100644 --- a/src/carrito/dto/input/update.dto.ts +++ b/src/carrito/dto/input/update.dto.ts @@ -1,4 +1,4 @@ -import { IsBoolean, IsInt, IsOptional, IsString } from 'class-validator'; +import { IsBoolean, IsInt, IsOptional } from 'class-validator'; export class UpdateCarritoDto { @IsInt() diff --git a/src/carrito/entity/carrito.entity.ts b/src/carrito/entity/carrito.entity.ts index 6d34a7e..57c8f61 100644 --- a/src/carrito/entity/carrito.entity.ts +++ b/src/carrito/entity/carrito.entity.ts @@ -6,6 +6,7 @@ import { OneToMany, PrimaryGeneratedColumn, } from 'typeorm'; +import { CarritoMotivo } from '../../carrito-motivo/entity/carrito-motivo.entity'; import { Equipo } from '../../equipo/entity/equipo.entity'; import { Marca } from '../../marca/entity/marca.entity'; import { Modelo } from '../../modelo/entity/modelo.entity'; @@ -41,6 +42,9 @@ export class Carrito { @JoinColumn({ name: 'id_tipo_carrito' }) tipoCarrito: TipoCarrito; + @OneToMany(() => CarritoMotivo, (motivo) => motivo.carrito) + motivos: CarritoMotivo[]; + @OneToMany(() => Equipo, (equipo) => equipo.carrito) equipos: Equipo[]; } diff --git a/src/motivo/dto/output/motivo.dto.ts b/src/equipo-motivo/dto/output/equipo-motivo.dto.ts similarity index 91% rename from src/motivo/dto/output/motivo.dto.ts rename to src/equipo-motivo/dto/output/equipo-motivo.dto.ts index 53a4c6d..c0ce582 100644 --- a/src/motivo/dto/output/motivo.dto.ts +++ b/src/equipo-motivo/dto/output/equipo-motivo.dto.ts @@ -2,7 +2,7 @@ import { Expose, Type } from 'class-transformer'; import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto'; import { StatusOutputDto } from '../../../status/dto/output/status.dto'; -export class MotivoOutputDto { +export class EquipoMotivoOutputDto { @Expose() id_motivo; diff --git a/src/motivo/entity/motivo.entity.ts b/src/equipo-motivo/entity/equipo-motivo.entity.ts similarity index 96% rename from src/motivo/entity/motivo.entity.ts rename to src/equipo-motivo/entity/equipo-motivo.entity.ts index e56c481..64e1906 100644 --- a/src/motivo/entity/motivo.entity.ts +++ b/src/equipo-motivo/entity/equipo-motivo.entity.ts @@ -10,7 +10,7 @@ import { Operador } from '../../operador/entity/operador.entity'; import { Status } from '../../status/entity/status.entity'; @Entity() -export class Motivo { +export class EquipoMotivo { @PrimaryGeneratedColumn() id_motivo: number; diff --git a/src/equipo-motivo/equipo-motivo.controller.spec.ts b/src/equipo-motivo/equipo-motivo.controller.spec.ts new file mode 100644 index 0000000..09a973a --- /dev/null +++ b/src/equipo-motivo/equipo-motivo.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EquipoMotivoController } from './equipo-motivo.controller'; + +describe('EquipoMotivoController', () => { + let controller: EquipoMotivoController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [EquipoMotivoController], + }).compile(); + + controller = module.get(EquipoMotivoController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/motivo/motivo.controller.ts b/src/equipo-motivo/equipo-motivo.controller.ts similarity index 78% rename from src/motivo/motivo.controller.ts rename to src/equipo-motivo/equipo-motivo.controller.ts index 872e111..3906665 100644 --- a/src/motivo/motivo.controller.ts +++ b/src/equipo-motivo/equipo-motivo.controller.ts @@ -14,17 +14,17 @@ import { ApiTags, } from '@nestjs/swagger'; import { Serealize } from '../interceptors/serialize.interceptor'; -import { MotivoService } from './motivo.service'; +import { EquipoMotivoService } from './equipo-motivo.service'; import { Operador } from 'src/operador/entity/operador.entity'; import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto'; -import { MotivoOutputDto } from './dto/output/motivo.dto'; +import { EquipoMotivoOutputDto } from './dto/output/equipo-motivo.dto'; -@Controller('motivo') -@ApiTags('motivo') -export class MotivoController { - constructor(private motivoService: MotivoService) {} +@Controller('equipo-motivo') +@ApiTags('equipo-motivo') +export class EquipoMotivoController { + constructor(private equipoMotivoService: EquipoMotivoService) {} - @Serealize(MotivoOutputDto) + @Serealize(EquipoMotivoOutputDto) @Get() @UseGuards(AuthGuard('jwt')) @ApiOperation({ @@ -53,7 +53,7 @@ export class MotivoController { throw new ForbiddenException( 'No tienes los permisos necesarios para acceder a esta información.', ); - return this.motivoService.findAllByIdEquipo( + return this.equipoMotivoService.findAllByIdEquipo( parseInt(query.id_equipo), parseInt(query.pagina), ); diff --git a/src/motivo/motivo.module.ts b/src/equipo-motivo/equipo-motivo.module.ts similarity index 55% rename from src/motivo/motivo.module.ts rename to src/equipo-motivo/equipo-motivo.module.ts index 1e83f86..99a3b19 100644 --- a/src/motivo/motivo.module.ts +++ b/src/equipo-motivo/equipo-motivo.module.ts @@ -1,9 +1,9 @@ import { forwardRef, Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { MotivoController } from './motivo.controller'; -import { MotivoService } from './motivo.service'; -import { Motivo } from './entity/motivo.entity'; +import { EquipoMotivoController } from './equipo-motivo.controller'; +import { EquipoMotivoService } from './equipo-motivo.service'; +import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { EquipoModule } from '../equipo/equipo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; @@ -14,10 +14,10 @@ import { StatusModule } from '../status/status.module'; OperadorModule, StatusModule, PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([Motivo]), + TypeOrmModule.forFeature([EquipoMotivo]), ], - controllers: [MotivoController], - providers: [MotivoService], - exports: [MotivoService], + controllers: [EquipoMotivoController], + providers: [EquipoMotivoService], + exports: [EquipoMotivoService], }) -export class MotivoModule {} +export class EquipoMotivoModule {} diff --git a/src/motivo/motivo.service.spec.ts b/src/equipo-motivo/equipo-motivo.service.spec.ts similarity index 50% rename from src/motivo/motivo.service.spec.ts rename to src/equipo-motivo/equipo-motivo.service.spec.ts index d927d7d..829eaf9 100644 --- a/src/motivo/motivo.service.spec.ts +++ b/src/equipo-motivo/equipo-motivo.service.spec.ts @@ -1,15 +1,15 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { MotivoService } from './motivo.service'; +import { EquipoMotivoService } from './equipo-motivo.service'; -describe('MotivoService', () => { - let service: MotivoService; +describe('EquipoMotivoService', () => { + let service: EquipoMotivoService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [MotivoService], + providers: [EquipoMotivoService], }).compile(); - service = module.get(MotivoService); + service = module.get(EquipoMotivoService); }); it('should be defined', () => { diff --git a/src/motivo/motivo.service.ts b/src/equipo-motivo/equipo-motivo.service.ts similarity index 89% rename from src/motivo/motivo.service.ts rename to src/equipo-motivo/equipo-motivo.service.ts index 261ee61..3ef3d5c 100644 --- a/src/motivo/motivo.service.ts +++ b/src/equipo-motivo/equipo-motivo.service.ts @@ -3,7 +3,7 @@ import { forwardRef, Inject, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; -import { Motivo } from './entity/motivo.entity'; +import { EquipoMotivo } from './entity/equipo-motivo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { Status } from '../status/entity/status.entity'; import { EquipoService } from '../equipo/equipo.service'; @@ -11,9 +11,10 @@ import { OperadorService } from '../operador/operador.service'; import { StatusService } from '../status/status.service'; @Injectable() -export class MotivoService { +export class EquipoMotivoService { constructor( - @InjectRepository(Motivo) private repository: Repository, + @InjectRepository(EquipoMotivo) + private repository: Repository, @Inject(forwardRef(() => EquipoService)) private equipoService: EquipoService, private operadorService: OperadorService, diff --git a/src/equipo/entity/equipo.entity.ts b/src/equipo/entity/equipo.entity.ts index eb348ad..ed08742 100644 --- a/src/equipo/entity/equipo.entity.ts +++ b/src/equipo/entity/equipo.entity.ts @@ -11,7 +11,7 @@ import { EquipoPrograma } from '../../equipo-programa/entity/equipo-programa.ent import { EquipoTipoEntrada } from '../../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; import { Marca } from '../../marca/entity/marca.entity'; import { Modelo } from '../../modelo/entity/modelo.entity'; -import { Motivo } from '../../motivo/entity/motivo.entity'; +import { EquipoMotivo } from '../../equipo-motivo/entity/equipo-motivo.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { Status } from '../../status/entity/status.entity'; @@ -48,8 +48,8 @@ export class Equipo { @JoinColumn({ name: 'id_status' }) status: Status; - @OneToMany(() => Motivo, (motivo) => motivo.equipo) - motivos: Motivo[]; + @OneToMany(() => EquipoMotivo, (motivo) => motivo.equipo) + motivos: EquipoMotivo[]; @OneToMany(() => Prestamo, (prestamo) => prestamo.equipo) prestamos: Prestamo[]; diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index a9fcc15..144bea6 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -13,7 +13,7 @@ import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/instit import { MarcaModule } from '../marca/marca.module'; import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; -import { MotivoModule } from '../motivo/motivo.module'; +import { EquipoMotivoModule } from '../equipo-motivo/equipo-motivo.module'; import { OperadorModule } from '../operador/operador.module'; import { StatusModule } from '../status/status.module'; @@ -28,7 +28,7 @@ import { StatusModule } from '../status/status.module'; MarcaModule, ModeloModule, ModuloModule, - forwardRef(() => MotivoModule), + forwardRef(() => EquipoMotivoModule), OperadorModule, PassportModule.register({ defaultStrategy: 'jwt' }), StatusModule, diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 5ba3a8e..860f1de 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -27,7 +27,7 @@ import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/insti import { MarcaService } from '../marca/marca.service'; import { ModeloService } from '../modelo/modelo.service'; import { ModuloService } from '../modulo/modulo.service'; -import { MotivoService } from '../motivo/motivo.service'; +import { EquipoMotivoService } from '../equipo-motivo/equipo-motivo.service'; import { OperadorService } from '../operador/operador.service'; import { StatusService } from '../status/status.service'; @@ -45,8 +45,8 @@ export class EquipoService { private marcaService: MarcaService, private modeloService: ModeloService, private moduloService: ModuloService, - @Inject(forwardRef(() => MotivoService)) - private motivoService: MotivoService, + @Inject(forwardRef(() => EquipoMotivoService)) + private equipoMotivoService: EquipoMotivoService, private operadorService: OperadorService, private statusService: StatusService, ) {} @@ -408,7 +408,12 @@ export class EquipoService { status.id_status >= 4 || (equipo.status.id_status >= 4 && status.id_status === 1) ) - await this.motivoService.create(equipo, operador, status, motivo); + await this.equipoMotivoService.create( + equipo, + operador, + status, + motivo, + ); equipo.status = status; } if (carrito) equipo.carrito = carrito; diff --git a/src/motivo/motivo.controller.spec.ts b/src/motivo/motivo.controller.spec.ts deleted file mode 100644 index 0c5f46d..0000000 --- a/src/motivo/motivo.controller.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { MotivoController } from './motivo.controller'; - -describe('MotivoController', () => { - let controller: MotivoController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [MotivoController], - }).compile(); - - controller = module.get(MotivoController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/operador/entity/operador.entity.ts b/src/operador/entity/operador.entity.ts index 1213269..7451c91 100644 --- a/src/operador/entity/operador.entity.ts +++ b/src/operador/entity/operador.entity.ts @@ -7,7 +7,7 @@ import { PrimaryGeneratedColumn, } from 'typeorm'; import { Institucion } from '../../institucion/entity/institucion.entity'; -import { Motivo } from '../../motivo/entity/motivo.entity'; +import { EquipoMotivo } from '../../equipo-motivo/entity/equipo-motivo.entity'; import { Multa } from '../../multa/entity/multa.entity'; import { Prestamo } from '../../prestamo/entity/prestamo.entity'; import { TipoUsuario } from '../../tipo-usuario/entity/tipo-usuario.entity'; @@ -44,8 +44,8 @@ export class Operador { @JoinColumn({ name: 'id_tipo_usuario' }) tipoUsuario: TipoUsuario; - @OneToMany(() => Motivo, (motivo) => motivo.operador) - motivos: Motivo[]; + @OneToMany(() => EquipoMotivo, (motivo) => motivo.operador) + motivos: EquipoMotivo[]; @OneToMany(() => Multa, (multa) => multa.opeardorMulta) multas: Multa[]; diff --git a/src/status/entity/status.entity.ts b/src/status/entity/status.entity.ts index dc6807b..5c4a2a9 100644 --- a/src/status/entity/status.entity.ts +++ b/src/status/entity/status.entity.ts @@ -1,6 +1,6 @@ import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; import { Equipo } from '../../equipo/entity/equipo.entity'; -import { Motivo } from '../../motivo/entity/motivo.entity'; +import { EquipoMotivo } from '../../equipo-motivo/entity/equipo-motivo.entity'; @Entity() export class Status { @@ -13,6 +13,6 @@ export class Status { @OneToMany(() => Equipo, (equipo) => equipo.status) equipos: Equipo[]; - @OneToMany(() => Motivo, (motivo) => motivo.status) - motivos: Motivo[]; + @OneToMany(() => EquipoMotivo, (motivo) => motivo.status) + motivos: EquipoMotivo[]; } diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index d2a2f26..9e76274 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -1,4 +1,3 @@ -import * as fs from 'fs'; import { BadRequestException, Controller, @@ -43,12 +42,10 @@ export class UploadFileController { const path = file ? `${file.destination}/${file.filename}` : null; if (!file) throw new BadRequestException('No se mandó ningún archivo.'); - return this.uploadFileService - .createUsuarios(path, parseInt(query.id_institucion)) - .then((res) => { - fs.unlink(path, (err) => {}); - return res; - }); + return this.uploadFileService.createUsuarios( + path, + parseInt(query.id_institucion), + ); } @Get('download-logo') From b812fca8035463b610600784ff3827839425d7ae Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 15 Aug 2022 13:17:23 -0500 Subject: [PATCH 5/6] carrera clave mayor carecateres --- src/institucion-carrera/entity/carrera.entity.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/institucion-carrera/entity/carrera.entity.ts b/src/institucion-carrera/entity/carrera.entity.ts index 74142f5..f1f5353 100644 --- a/src/institucion-carrera/entity/carrera.entity.ts +++ b/src/institucion-carrera/entity/carrera.entity.ts @@ -17,7 +17,7 @@ export class Carrera { @Column({ type: String, nullable: false, length: 150 }) carrera: string; - @Column({ type: String, nullable: false, length: 3 }) + @Column({ type: String, nullable: false, length: 10 }) clave: string; @ManyToOne(() => Nivel, (nivel) => nivel.carreras, { eager: true }) From 4ae1fa1b3694adfcbe48e34e20e9f74e0301587f Mon Sep 17 00:00:00 2001 From: lemuel Date: Mon, 15 Aug 2022 13:18:33 -0500 Subject: [PATCH 6/6] pruebas acatlan --- src/app.gateway.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app.gateway.ts b/src/app.gateway.ts index 8f73505..5388e21 100644 --- a/src/app.gateway.ts +++ b/src/app.gateway.ts @@ -10,10 +10,10 @@ import { Socket, Server } from 'socket.io'; @WebSocketGateway({ cors: { origin: [ - 'http://localhost:3176', - 'http://localhost:3186', - // 'http://132.248.80.196:3155', - // 'http://132.248.80.196:3185', + // 'http://localhost:3176', + // 'http://localhost:3186', + 'http://132.248.80.196:3155', + 'http://132.248.80.196:3185', // 'https://pmodulospcpuma.unam.mx', // 'http://pmodulospcpuma.unam.mx:3015', // 'https://modulospcpuma.unam.mx',