diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index 8563a62..03fa3da 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -4,7 +4,7 @@ import { NotFoundException, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; +import { FindOperator, Like, Repository } from 'typeorm'; import { Carrito } from './entity/carrito.entity'; import { Modulo } from '../modulo/entity/modulo.entity'; import { InstitucionTipoCarrito } from '../institucion-tipo-carrito/entity/institucion-tipo-carrito.entity'; @@ -25,6 +25,7 @@ export class CarritoService { await this.institucionTipoCarritoService.findByIdTipoCarito( id_tipo_carrito, ); + let carrito = "" await this.repository.findAndCount({ modulo, tipoCarrito }) .then((carritos) => { @@ -60,19 +61,24 @@ export class CarritoService { }); } - // Toma de ejemplo la funcion que esta en /src/usuario/usuario.service.ts async findByIdModulo(filtros: { - pagina?: string, + pagina: string, id_modulo?: string, id_tipo_carrito?: string, activo?: boolean, }) { - const busqueda: { + const busqueda: { + where: { modulo?: Modulo; institucionTipoCarrito?: InstitucionTipoCarrito; - activo?: boolean; - } = {} - + activo?: FindOperator; + } + skip + take + } = { + where: {}, skip: (parseInt(filtros.pagina) - 1) * 25, take: 25 + }; + const modulo = filtros.id_modulo ? await this.moduloService.findById(parseInt(filtros.id_modulo)) : null; @@ -80,28 +86,32 @@ export class CarritoService { ? await this.institucionTipoCarritoService.findById(parseInt(filtros.id_tipo_carrito)) : null - if (filtros.activo) busqueda.activo = filtros.activo; - if (modulo) busqueda.modulo = modulo; - if (institucionTipoCarrito) busqueda.institucionTipoCarrito = institucionTipoCarrito; - //falta página + if (filtros.activo) busqueda.where.activo = Like(`${filtros.activo}`); + if (modulo) busqueda.where.modulo = modulo; + if (institucionTipoCarrito) busqueda.where.institucionTipoCarrito = institucionTipoCarrito; return this.repository.find(busqueda); } - // re hacer - async update(attrs: Partial) { - const carrito = await this.findById(attrs.id_carrito); - - return this.repository - .findOne({ carrito: attrs.carrito, modulo: carrito.modulo }) + async existeCarrito(id_modulo: number | Modulo, carrito: string) { + const modulo = typeof id_modulo === 'number' ? await this.moduloService.findById(id_modulo) : id_modulo + + return this.repository.findOne({ modulo, carrito }) .then((existeCarrito) => { - if (existeCarrito) - throw new ConflictException('Ya existe un carrito con este número.'); + if(existeCarrito) throw new ConflictException('Ya existe un carrito con este nombre, intenta con otro.') + }) + } + + async update(attrs: Partial) { + return this.findById(attrs.id_carrito) + .then(async (carrito) => { + if (attrs.carrito) + await this.existeCarrito(carrito.modulo, attrs.carrito) Object.assign(carrito, attrs); - return this.repository.save(carrito); + return this.repository.save(carrito) }) .then((_) => ({ - message: 'Se actualizo correctamente la información del carrito.', - })); + message: 'Se actualizo correctamente la información del carrito.' + })) } } diff --git a/src/equipo/dto/equipo.dto.ts b/src/equipo/dto/equipo.dto.ts index 44fec3f..cee744a 100644 --- a/src/equipo/dto/equipo.dto.ts +++ b/src/equipo/dto/equipo.dto.ts @@ -1,7 +1,6 @@ import { IsString } from 'class-validator'; export class EquipoDto { - // Cambiar por IsString @IsString() id_equipo: string; } diff --git a/src/programa/programa.service.ts b/src/programa/programa.service.ts index 8bfb62c..86259fe 100644 --- a/src/programa/programa.service.ts +++ b/src/programa/programa.service.ts @@ -30,4 +30,12 @@ export class ProgramaService { return programa }) } + + findByPrograma(programa: string, validarNoExiste = true) { + return this.repository.findOne({ programa }).then((programa) => { + if (validarNoExiste && !programa) + throw new NotFoundException('No existe este usuario.'); + return programa; + }); + } } diff --git a/src/upload-file/dto/upload-file-carga-masiva-equipo.dto.ts b/src/upload-file/dto/upload-file-carga-masiva-equipo.dto.ts new file mode 100644 index 0000000..34f768b --- /dev/null +++ b/src/upload-file/dto/upload-file-carga-masiva-equipo.dto.ts @@ -0,0 +1,10 @@ +export class UploadFileCargaMasivaEquipoDto { + modulo: number; + carrito: number; + tipo: string; + equipo: string; + numero_inventario: string; + numero_serie: string; + entradas: string; + programas?: string +} diff --git a/src/upload-file/dto/upload-file-equipo.ts b/src/upload-file/dto/upload-file-equipo.ts new file mode 100644 index 0000000..5fd494d --- /dev/null +++ b/src/upload-file/dto/upload-file-equipo.ts @@ -0,0 +1,12 @@ +import { IsNumber, IsNumberString } from 'class-validator'; + +export class UploadFileEquipo { + @IsNumberString() + id_carrito: string; + + @IsNumberString() + id_programa: string; + + @IsNumberString() + id_status: string; +} diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index f5a4ff4..52fd6af 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -10,6 +10,7 @@ import { import { FileInterceptor } from '@nestjs/platform-express'; import { UploadFileService } from './upload-file.service'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; +import { UploadFileEquipo } from './dto/upload-file-equipo' import { ApiTags } from '@nestjs/swagger'; @Controller('upload-file') @@ -21,11 +22,11 @@ export class UploadFileController { @UseInterceptors(FileInterceptor('csv')) cargaMasivaEquipos( @UploadedFile() file: Express.Multer.File, - @Query() query: IdInstitucionDto, + @Query() query: UploadFileEquipo, ) { return this.uploadFileService.createEquipos( file, - parseInt(query.id_institucion), + parseInt(query.id_carrito), parseInt(query.id_programa), parseInt(query.id_status) ); } diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index 1576f63..00735fa 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -8,9 +8,12 @@ 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 { CarritoService } from '../carrito/carrito.service' import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; import { UsuarioService } from '../usuario/usuario.service'; +import { ProgramaService } from '../programa/programa.service' import { UploadFileCargaMasivaUsuarioDto } from './dto/upload-file-carga-masiva-usuario.dto'; +import { UploadFileCargaMasivaEquipoDto } from './dto/upload-file-carga-masiva-equipo.dto' @Injectable() export class UploadFileService { @@ -19,32 +22,54 @@ export class UploadFileService { private equipoService: EquipoService, private institucionService: InstitucionService, private institucionCarreraService: InstitucionCarreraService, + private carritoService: CarritoService, private tipoUsuarioService: TipoUsuarioService, private usuarioService: UsuarioService, + private programaService: ProgramaService ) {} + //programa y status + async createEquipos(file: Express.Multer.File, id_carrito: number, id_programa: number, id_status: number) { + const path = `${file.destination}/${file.fieldname}` + const carrito = await this.carreraService.findById(id_carrito) + const errores: string[] = [] - async createEquipos(file: Express.Multer.File, id_institucion: number) { - const path = `${file.destination}/${file.filename}`; - const institucion = await this.institucionService.findById(id_institucion); - const errores: string[] = []; - - if (!file) throw new BadRequestException('No se mando un archivo.'); - csvtojson() + if (!file) throw new BadRequestException('No se mando el archivo de equipos.') + return csvtojson() .fromFile(path) - .then(async (equipos) => { + .then(async (equipos: [UploadFileCargaMasivaEquipoDto]) => { for (let i = 0; i < equipos.length; i++) { - if(!equipos[i].modulo) errores.push(`${this.errorBase(i)} falta el campo modulo en el archivo`) - if(!equipos[i].carrito) errores.push(`${this.errorBase(i)} falta el campo carrito en el archivo`) - if(!equipos[i].tipo) errores.push(`${this.errorBase(i)} falta el campo tipo en el archivo`) - if(!equipos[i].equipo) errores.push(`${this.errorBase(i)} falta el campo equipo en el archivo`) - if(!equipos[i].numero_inventario) errores.push(`${this.errorBase(i)} falta el campo numero_inventario en el archivo`) - if(!equipos[i].numero_serie) errores.push(`${this.errorBase(i)} falta el campo numero_serie en el archivo`) - if(!equipos[i].modulo) errores.push(`${this.errorBase(i)} falta el campo modulo en el archivo`) - if(!equipos[i].entradas) errores.push(`${this.errorBase(i)} falta el campo entradas en el archivo`) - // faltan los programas - if(!equipos[i].programas) errores.push(`${this.errorBase(i)} falta el campo programas en el archivo`) + let error = this.errorBase(i) + + if(!equipos[i].modulo || + !equipos[i].carrito || + !equipos[i].tipo || + !equipos[i].equipo || + !equipos[i].numero_inventario || + !equipos[i].numero_serie || + !equipos[i].entradas || + !equipos[i].programas) { + if (!equipos[i].modulo) + error += 'falta el campo de modulo' + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].carrito) + error += ' falta del campo carrito'; + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].tipo) error += ' falta del campo tipo (tipo de equipo)'; + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].equipo) error += ' falta del campo equipo'; + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].numero_inventario) error += ' falta del campo número de inventario'; + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].numero_serie) error += ' falta del campo número de serie'; + if (error != this.errorBase(i)) error += ','; + if (!equipos[i].entradas) error += ' falta del campo entradas'; + errores.push(`${error}.`); + continue; + } + + const programa = await this.programaService.findByPrograma(equipos[i].programas) } - }); + }) } async createUsuarios(file: Express.Multer.File, id_institucion: number) {