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',