Merge branch 'saavedra' of https://repositorio.acatlan.unam.mx/CIDWA/pcpuma_unam_api into lemuel
This commit is contained in:
commit
efde602a0b
@ -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,19 +61,24 @@ 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))
|
||||||
: null;
|
: null;
|
||||||
@ -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.findOne({ modulo, carrito })
|
||||||
return this.repository
|
|
||||||
.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.'
|
||||||
}));
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
10
src/upload-file/dto/upload-file-carga-masiva-equipo.dto.ts
Normal file
10
src/upload-file/dto/upload-file-carga-masiva-equipo.dto.ts
Normal 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
|
||||||
|
}
|
12
src/upload-file/dto/upload-file-equipo.ts
Normal file
12
src/upload-file/dto/upload-file-equipo.ts
Normal 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;
|
||||||
|
}
|
@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user