From 1c09d5c8afcee1c5a39ee6d5a81029d7df3eb4d1 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 11 May 2022 21:55:43 -0500 Subject: [PATCH] carga masiva incompleta 2} --- .../institucion-carrera.module.ts | 2 + .../institucion-carrera.service.ts | 20 ++++++ src/upload-file/upload-file.module.ts | 2 + src/upload-file/upload-file.service.ts | 62 +++++++++++-------- 4 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/institucion-carrera/institucion-carrera.module.ts b/src/institucion-carrera/institucion-carrera.module.ts index 5b8beac..0c50b87 100644 --- a/src/institucion-carrera/institucion-carrera.module.ts +++ b/src/institucion-carrera/institucion-carrera.module.ts @@ -5,9 +5,11 @@ import { InstitucionCarreraService } from './institucion-carrera.service'; import { InstitucionCarrera } from './entity/institucion-carrera.entity'; import { Nivel } from '../carrera/entity/nivel.entity'; import { InstitucionModule } from '../institucion/institucion.module'; +import { CarreraModule } from '../carrera/carrera.module'; @Module({ imports: [ + CarreraModule, InstitucionModule, TypeOrmModule.forFeature([InstitucionCarrera, Nivel]), ], diff --git a/src/institucion-carrera/institucion-carrera.service.ts b/src/institucion-carrera/institucion-carrera.service.ts index 1ff8408..6a16890 100644 --- a/src/institucion-carrera/institucion-carrera.service.ts +++ b/src/institucion-carrera/institucion-carrera.service.ts @@ -1,7 +1,10 @@ import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { Carrera } from 'src/carrera/entity/carrera.entity'; +import { Institucion } from 'src/institucion/entity/institucion.entity'; import { InstitucionCarrera } from './entity/institucion-carrera.entity'; +import { CarreraService } from '../carrera/carrera.service'; import { InstitucionService } from '../institucion/institucion.service'; @Injectable() @@ -9,6 +12,7 @@ export class InstitucionCarreraService { constructor( @InjectRepository(InstitucionCarrera) private repository: Repository, + private carreraService: CarreraService, private institucionService: InstitucionService, ) {} @@ -27,4 +31,20 @@ export class InstitucionCarreraService { return institucionCarrera; }); } + + async findByIdInstitucionIdCarrera( + id_institucion: number | Institucion, + id_carrera: number | Carrera, + ) { + const institucion = + typeof id_institucion === 'number' + ? await this.institucionService.findById(id_institucion) + : id_institucion; + const carrera = + typeof id_carrera === 'number' + ? await this.institucionService.findById(id_carrera) + : id_carrera; + + return this.repository.findOne({ carrera, institucion }); + } } diff --git a/src/upload-file/upload-file.module.ts b/src/upload-file/upload-file.module.ts index 34ec06e..330e85c 100644 --- a/src/upload-file/upload-file.module.ts +++ b/src/upload-file/upload-file.module.ts @@ -5,6 +5,7 @@ import { UploadFileService } from './upload-file.service'; import { CarreraModule } from '../carrera/carrera.module'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionModule } from '../institucion/institucion.module'; +import { InstitucionCarreraModule } from '../institucion-carrera/institucion-carrera.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; @@ -13,6 +14,7 @@ import { UsuarioModule } from '../usuario/usuario.module'; CarreraModule, EquipoModule, InstitucionModule, + InstitucionCarreraModule, MulterModule.register({ dest: './upload', fileFilter: (req, file, cb) => { diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index f977b30..85e0565 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -1,14 +1,15 @@ import * as fs from 'fs'; import * as csvtojson from 'csvtojson'; import { BadRequestException, Injectable } from '@nestjs/common'; +import { Institucion } from '../institucion/entity/institucion.entity'; +import { InstitucionCarrera } from 'src/institucion-carrera/entity/institucion-carrera.entity'; +import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity'; import { CarreraService } from '../carrera/carrera.service'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionService } from '../institucion/institucion.service'; +import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service'; import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; import { UsuarioService } from '../usuario/usuario.service'; -import { Carrera } from '../carrera/entity/carrera.entity'; -import { Institucion } from '../institucion/entity/institucion.entity'; -import { TipoUsuario } from '../tipo-usuario/entity/tipo-usuario.entity'; import { UploadFileCargaMasivaUsuarioDto } from './dto/upload-file-carga-masiva-usuario.dto'; @Injectable() @@ -17,6 +18,7 @@ export class UploadFileService { private carreraService: CarreraService, private equipoService: EquipoService, private institucionService: InstitucionService, + private institucionCarreraService: InstitucionCarreraService, private tipoUsuarioService: TipoUsuarioService, private usuarioService: UsuarioService, ) {} @@ -37,8 +39,9 @@ export class UploadFileService { const path = `${file.destination}/${file.filename}`; const institucion = await this.institucionService.findById(id_institucion); const errores: string[] = []; + const mensajes: string[] = []; - // if (!file) throw new BadRequestException('No se mando un archivo.'); + if (!file) throw new BadRequestException('No se mando un archivo.'); return csvtojson() .fromFile(path) .then(async (usuarios: [UploadFileCargaMasivaUsuarioDto]) => { @@ -63,8 +66,7 @@ export class UploadFileService { 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'; - error += '.'; - errores.push(error); + errores.push(`${error}.`); continue; } @@ -77,37 +79,43 @@ export class UploadFileService { false, ); const carrera = - usuarios[i].carrera && tipoUsuario.id_tipo_usuario > 5 + tipoUsuario && + usuarios[i].carrera && + tipoUsuario.id_tipo_usuario > 5 ? await this.carreraService.findByCarrera( usuarios[i].carrera, false, ) : null; + const institucionCarrera = carrera + ? await this.institucionCarreraService.findByIdInstitucionIdCarrera( + institucion, + carrera, + ) + : null; - console.log(usuario); - if (!tipoUsuario || (tipoUsuario.id_tipo_usuario > 5 && !carrera)) { - if (tipoUsuario.id_tipo_usuario !== 5 && !carrera) - error += ' falta del campo carrera para el alumno'; - if (error != this.errorBase(i)) error += ','; - if (!tipoUsuario) error += ' no existe este tipo de usuario'; - error += '.'; + if ( + !tipoUsuario || + tipoUsuario.id_tipo_usuario < 5 || + (!carrera && tipoUsuario.id_tipo_usuario < 6) || + (carrera && !institucionCarrera) + ) { + if (!tipoUsuario) error += ' no existe este tipo de usuario.'; + if (tipoUsuario.id_tipo_usuario < 5) + ' no se puede asignar este tipo de usuario a este usuario.'; + if (!carrera && tipoUsuario.id_tipo_usuario < 6) + 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) { - const data: { - carrera?: Carrera; - id_usuario: number; - institucion: Institucion; - tipoUsuario: TipoUsuario; - } = { - id_usuario: usuario.id_usuario, - institucion, - tipoUsuario, - }; - - if (carrera) data.carrera = carrera; - // await this.usuarioService.update(data).then((usuarioUpdated) => {}); + usuario.institucion = institucion; + usuario.tipoUsuario = tipoUsuario; + usuario.activo = true; + if (institucionCarrera) usuario.carrera = institucionCarrera; + await this.usuarioService.update(usuario).then((usuarioUpdated) => {}); } else await this.usuarioService .create(