This commit is contained in:
xXpuma99Xx 2022-05-14 12:31:30 -05:00
commit efde602a0b
7 changed files with 109 additions and 44 deletions

View File

@ -4,7 +4,7 @@ import {
NotFoundException, NotFoundException,
} from '@nestjs/common'; } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { FindOperator, Like, Repository } from 'typeorm';
import { Carrito } from './entity/carrito.entity'; import { Carrito } from './entity/carrito.entity';
import { Modulo } from '../modulo/entity/modulo.entity'; import { Modulo } from '../modulo/entity/modulo.entity';
import { InstitucionTipoCarrito } from '../institucion-tipo-carrito/entity/institucion-tipo-carrito.entity'; import { InstitucionTipoCarrito } from '../institucion-tipo-carrito/entity/institucion-tipo-carrito.entity';
@ -25,6 +25,7 @@ export class CarritoService {
await this.institucionTipoCarritoService.findByIdTipoCarito( await this.institucionTipoCarritoService.findByIdTipoCarito(
id_tipo_carrito, id_tipo_carrito,
); );
let carrito = "" let carrito = ""
await this.repository.findAndCount({ modulo, tipoCarrito }) await this.repository.findAndCount({ modulo, tipoCarrito })
.then((carritos) => { .then((carritos) => {
@ -60,18 +61,23 @@ export class CarritoService {
}); });
} }
// Toma de ejemplo la funcion que esta en /src/usuario/usuario.service.ts
async findByIdModulo(filtros: { async findByIdModulo(filtros: {
pagina?: string, pagina: string,
id_modulo?: string, id_modulo?: string,
id_tipo_carrito?: string, id_tipo_carrito?: string,
activo?: boolean, activo?: boolean,
}) { }) {
const busqueda: { const busqueda: {
where: {
modulo?: Modulo; modulo?: Modulo;
institucionTipoCarrito?: InstitucionTipoCarrito; institucionTipoCarrito?: InstitucionTipoCarrito;
activo?: boolean; activo?: FindOperator<string>;
} = {} }
skip
take
} = {
where: {}, skip: (parseInt(filtros.pagina) - 1) * 25, take: 25
};
const modulo = filtros.id_modulo const modulo = filtros.id_modulo
? await this.moduloService.findById(parseInt(filtros.id_modulo)) ? await this.moduloService.findById(parseInt(filtros.id_modulo))
@ -80,28 +86,32 @@ export class CarritoService {
? await this.institucionTipoCarritoService.findById(parseInt(filtros.id_tipo_carrito)) ? await this.institucionTipoCarritoService.findById(parseInt(filtros.id_tipo_carrito))
: null : null
if (filtros.activo) busqueda.activo = filtros.activo; if (filtros.activo) busqueda.where.activo = Like(`${filtros.activo}`);
if (modulo) busqueda.modulo = modulo; if (modulo) busqueda.where.modulo = modulo;
if (institucionTipoCarrito) busqueda.institucionTipoCarrito = institucionTipoCarrito; if (institucionTipoCarrito) busqueda.where.institucionTipoCarrito = institucionTipoCarrito;
//falta página
return this.repository.find(busqueda); return this.repository.find(busqueda);
} }
// re hacer async existeCarrito(id_modulo: number | Modulo, carrito: string) {
async update(attrs: Partial<Carrito>) { const modulo = typeof id_modulo === 'number' ? await this.moduloService.findById(id_modulo) : id_modulo
const carrito = await this.findById(attrs.id_carrito);
return this.repository return this.repository.findOne({ modulo, carrito })
.findOne({ carrito: attrs.carrito, modulo: carrito.modulo })
.then((existeCarrito) => { .then((existeCarrito) => {
if (existeCarrito) if(existeCarrito) throw new ConflictException('Ya existe un carrito con este nombre, intenta con otro.')
throw new ConflictException('Ya existe un carrito con este número.'); })
}
async update(attrs: Partial<Carrito>) {
return this.findById(attrs.id_carrito)
.then(async (carrito) => {
if (attrs.carrito)
await this.existeCarrito(carrito.modulo, attrs.carrito)
Object.assign(carrito, attrs); Object.assign(carrito, attrs);
return this.repository.save(carrito); return this.repository.save(carrito)
}) })
.then((_) => ({ .then((_) => ({
message: 'Se actualizo correctamente la información del carrito.', message: 'Se actualizo correctamente la información del carrito.'
})); }))
} }
} }

View File

@ -1,7 +1,6 @@
import { IsString } from 'class-validator'; import { IsString } from 'class-validator';
export class EquipoDto { export class EquipoDto {
// Cambiar por IsString
@IsString() @IsString()
id_equipo: string; id_equipo: string;
} }

View File

@ -30,4 +30,12 @@ export class ProgramaService {
return programa 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;
});
}
} }

View File

@ -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
}

View File

@ -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;
}

View File

@ -10,6 +10,7 @@ import {
import { FileInterceptor } from '@nestjs/platform-express'; import { FileInterceptor } from '@nestjs/platform-express';
import { UploadFileService } from './upload-file.service'; import { UploadFileService } from './upload-file.service';
import { IdInstitucionDto } from '../dto/id-institucion.dto'; import { IdInstitucionDto } from '../dto/id-institucion.dto';
import { UploadFileEquipo } from './dto/upload-file-equipo'
import { ApiTags } from '@nestjs/swagger'; import { ApiTags } from '@nestjs/swagger';
@Controller('upload-file') @Controller('upload-file')
@ -21,11 +22,11 @@ export class UploadFileController {
@UseInterceptors(FileInterceptor('csv')) @UseInterceptors(FileInterceptor('csv'))
cargaMasivaEquipos( cargaMasivaEquipos(
@UploadedFile() file: Express.Multer.File, @UploadedFile() file: Express.Multer.File,
@Query() query: IdInstitucionDto, @Query() query: UploadFileEquipo,
) { ) {
return this.uploadFileService.createEquipos( return this.uploadFileService.createEquipos(
file, file,
parseInt(query.id_institucion), parseInt(query.id_carrito), parseInt(query.id_programa), parseInt(query.id_status)
); );
} }

View File

@ -8,9 +8,12 @@ import { CarreraService } from '../carrera/carrera.service';
import { EquipoService } from '../equipo/equipo.service'; import { EquipoService } from '../equipo/equipo.service';
import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionService } from '../institucion/institucion.service';
import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service'; import { InstitucionCarreraService } from '../institucion-carrera/institucion-carrera.service';
import { CarritoService } from '../carrito/carrito.service'
import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service';
import { UsuarioService } from '../usuario/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 { UploadFileCargaMasivaUsuarioDto } from './dto/upload-file-carga-masiva-usuario.dto';
import { UploadFileCargaMasivaEquipoDto } from './dto/upload-file-carga-masiva-equipo.dto'
@Injectable() @Injectable()
export class UploadFileService { export class UploadFileService {
@ -19,32 +22,54 @@ export class UploadFileService {
private equipoService: EquipoService, private equipoService: EquipoService,
private institucionService: InstitucionService, private institucionService: InstitucionService,
private institucionCarreraService: InstitucionCarreraService, private institucionCarreraService: InstitucionCarreraService,
private carritoService: CarritoService,
private tipoUsuarioService: TipoUsuarioService, private tipoUsuarioService: TipoUsuarioService,
private usuarioService: UsuarioService, 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) { if (!file) throw new BadRequestException('No se mando el archivo de equipos.')
const path = `${file.destination}/${file.filename}`; return csvtojson()
const institucion = await this.institucionService.findById(id_institucion);
const errores: string[] = [];
if (!file) throw new BadRequestException('No se mando un archivo.');
csvtojson()
.fromFile(path) .fromFile(path)
.then(async (equipos) => { .then(async (equipos: [UploadFileCargaMasivaEquipoDto]) => {
for (let i = 0; i < equipos.length; i++) { for (let i = 0; i < equipos.length; i++) {
if(!equipos[i].modulo) errores.push(`${this.errorBase(i)} falta el campo modulo en el archivo`) let error = this.errorBase(i)
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].modulo ||
if(!equipos[i].equipo) errores.push(`${this.errorBase(i)} falta el campo equipo en el archivo`) !equipos[i].carrito ||
if(!equipos[i].numero_inventario) errores.push(`${this.errorBase(i)} falta el campo numero_inventario en el archivo`) !equipos[i].tipo ||
if(!equipos[i].numero_serie) errores.push(`${this.errorBase(i)} falta el campo numero_serie en el archivo`) !equipos[i].equipo ||
if(!equipos[i].modulo) errores.push(`${this.errorBase(i)} falta el campo modulo en el archivo`) !equipos[i].numero_inventario ||
if(!equipos[i].entradas) errores.push(`${this.errorBase(i)} falta el campo entradas en el archivo`) !equipos[i].numero_serie ||
// faltan los programas !equipos[i].entradas ||
if(!equipos[i].programas) errores.push(`${this.errorBase(i)} falta el campo programas en el archivo`) !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) { async createUsuarios(file: Express.Multer.File, id_institucion: number) {