mejoras
This commit is contained in:
parent
755db28c93
commit
ae98fde192
@ -43,9 +43,9 @@ export class AuthController {
|
|||||||
examples: {
|
examples: {
|
||||||
ejemplo: {
|
ejemplo: {
|
||||||
value: {
|
value: {
|
||||||
|
id_modulo: 1,
|
||||||
operador: '',
|
operador: '',
|
||||||
password: '',
|
password: '',
|
||||||
id_modulo: 1,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -44,9 +44,9 @@ export class AuthService {
|
|||||||
this.validarLogin(operador, password);
|
this.validarLogin(operador, password);
|
||||||
|
|
||||||
const payload: JwtPayload = {
|
const payload: JwtPayload = {
|
||||||
|
id_modulo: modulo.id_modulo,
|
||||||
id_operador: operador.id_operador,
|
id_operador: operador.id_operador,
|
||||||
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
|
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
|
||||||
id_modulo: modulo.id_modulo,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return { operador, token: this.jwtService.sign(payload) };
|
return { operador, token: this.jwtService.sign(payload) };
|
||||||
@ -62,7 +62,7 @@ export class AuthService {
|
|||||||
id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario,
|
id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario,
|
||||||
};
|
};
|
||||||
|
|
||||||
return { usuario, token: this.jwtService.sign(payload) };
|
return { token: this.jwtService.sign(payload), usuario };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,10 @@ import { ConfigService } from '@nestjs/config';
|
|||||||
export class BcryptService {
|
export class BcryptService {
|
||||||
constructor(private configService: ConfigService) {}
|
constructor(private configService: ConfigService) {}
|
||||||
|
|
||||||
|
comparar(password: string, passwordDb: string) {
|
||||||
|
return bcrypt.compareSync(password, passwordDb);
|
||||||
|
}
|
||||||
|
|
||||||
encriptar(password: string) {
|
encriptar(password: string) {
|
||||||
const salt = bcrypt.genSaltSync(
|
const salt = bcrypt.genSaltSync(
|
||||||
parseInt(this.configService.get<string>('SALT_ROUNDS')),
|
parseInt(this.configService.get<string>('SALT_ROUNDS')),
|
||||||
@ -13,8 +17,4 @@ export class BcryptService {
|
|||||||
|
|
||||||
return bcrypt.hashSync(password, salt);
|
return bcrypt.hashSync(password, salt);
|
||||||
}
|
}
|
||||||
|
|
||||||
comparar(password: string, passwordDb: string) {
|
|
||||||
return bcrypt.compareSync(password, passwordDb);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
import { Body, Controller, Delete, Get, Post, Query } from '@nestjs/common';
|
import {
|
||||||
|
Body,
|
||||||
|
Controller,
|
||||||
|
Delete,
|
||||||
|
Get,
|
||||||
|
Post,
|
||||||
|
Query,
|
||||||
|
UseGuards,
|
||||||
|
} from '@nestjs/common';
|
||||||
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
||||||
import { Serealize } from '../interceptors/serialize.interceptor';
|
import { Serealize } from '../interceptors/serialize.interceptor';
|
||||||
import { CarreraProgramaService } from './carrera-programa.service';
|
import { CarreraProgramaService } from './carrera-programa.service';
|
||||||
@ -13,9 +22,10 @@ export class CarreraProgramaController {
|
|||||||
constructor(private carreraProgramaService: CarreraProgramaService) {}
|
constructor(private carreraProgramaService: CarreraProgramaService) {}
|
||||||
|
|
||||||
@Post()
|
@Post()
|
||||||
|
// @UseGuards(AuthGuard('jwt'))
|
||||||
@ApiOperation({
|
@ApiOperation({
|
||||||
description:
|
description:
|
||||||
'Endpoint que crea una asociación entra una carrera y un programa.',
|
'Endpoint que crea una asociación entre una carrera y un programa.',
|
||||||
})
|
})
|
||||||
@ApiBody({
|
@ApiBody({
|
||||||
description: 'Ambas variables son obligatorios.',
|
description: 'Ambas variables son obligatorios.',
|
||||||
@ -31,6 +41,7 @@ export class CarreraProgramaController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Delete()
|
@Delete()
|
||||||
|
// @UseGuards(AuthGuard('jwt'))
|
||||||
@ApiOperation({
|
@ApiOperation({
|
||||||
description:
|
description:
|
||||||
'Endpoint que borra la asociación entre una carrera y un programa.',
|
'Endpoint que borra la asociación entre una carrera y un programa.',
|
||||||
|
@ -50,6 +50,18 @@ export class CarritoController {
|
|||||||
name: 'pagina',
|
name: 'pagina',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
})
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Booleano en forma de string que se usará como filtro.',
|
||||||
|
name: 'activo',
|
||||||
|
type: 'string',
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Carrito que se esta buscando.',
|
||||||
|
name: 'carrito',
|
||||||
|
type: 'string',
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Id de la institución.',
|
description: 'Id de la institución.',
|
||||||
name: 'id_institucion',
|
name: 'id_institucion',
|
||||||
@ -68,18 +80,6 @@ export class CarritoController {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
required: false,
|
required: false,
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
|
||||||
description: 'Booleano en forma de string que se usará como filtro.',
|
|
||||||
name: 'activo',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
})
|
|
||||||
@ApiQuery({
|
|
||||||
description: 'Carrito que se esta buscando.',
|
|
||||||
name: 'carrito',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
})
|
|
||||||
carritos(@Query() query: CarritosDto) {
|
carritos(@Query() query: CarritosDto) {
|
||||||
return this.carritoService.findAll(query);
|
return this.carritoService.findAll(query);
|
||||||
}
|
}
|
||||||
@ -93,7 +93,7 @@ export class CarritoController {
|
|||||||
description: 'Todas las variables son obligatorias.',
|
description: 'Todas las variables son obligatorias.',
|
||||||
examples: {
|
examples: {
|
||||||
ejemplo: {
|
ejemplo: {
|
||||||
value: { id_tipo_carrito: 1, id_modulo: 1, marca: '', modelo: '' },
|
value: { id_modulo: 1, id_tipo_carrito: 1, marca: '', modelo: '' },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -119,9 +119,9 @@ export class CarritoController {
|
|||||||
value: {
|
value: {
|
||||||
id_carrito: 1,
|
id_carrito: 1,
|
||||||
_activo: true,
|
_activo: true,
|
||||||
|
_carrito: '',
|
||||||
_id_modulo: 1,
|
_id_modulo: 1,
|
||||||
_id_tipo_carrito: 1,
|
_id_tipo_carrito: 1,
|
||||||
_carrito: '',
|
|
||||||
_marca: '',
|
_marca: '',
|
||||||
_modelo: '',
|
_modelo: '',
|
||||||
},
|
},
|
||||||
@ -129,8 +129,12 @@ export class CarritoController {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
update(@Body() body: UpdateCarritoDto) {
|
update(@Body() body: UpdateCarritoDto) {
|
||||||
|
const data = { ...body };
|
||||||
|
|
||||||
|
delete data.id_modulo;
|
||||||
|
delete data.id_tipo_carrito;
|
||||||
return this.carritoService.update(
|
return this.carritoService.update(
|
||||||
body,
|
data,
|
||||||
body.id_modulo,
|
body.id_modulo,
|
||||||
body.id_tipo_carrito,
|
body.id_tipo_carrito,
|
||||||
);
|
);
|
||||||
|
@ -6,6 +6,7 @@ import { Carrito } from './entity/carrito.entity';
|
|||||||
import { InstitucionModule } from '../institucion/institucion.module';
|
import { InstitucionModule } from '../institucion/institucion.module';
|
||||||
import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module';
|
import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module';
|
||||||
import { ModuloModule } from '../modulo/modulo.module';
|
import { ModuloModule } from '../modulo/modulo.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
InstitucionModule,
|
InstitucionModule,
|
||||||
|
@ -4,9 +4,8 @@ import {
|
|||||||
NotFoundException,
|
NotFoundException,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { FindOperator, Like, Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { Carrito } from './entity/carrito.entity';
|
import { Carrito } from './entity/carrito.entity';
|
||||||
import { Institucion } from '../institucion/entity/institucion.entity';
|
|
||||||
import { Modulo } from '../modulo/entity/modulo.entity';
|
import { Modulo } from '../modulo/entity/modulo.entity';
|
||||||
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
|
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
|
||||||
import { InstitucionService } from '../institucion/institucion.service';
|
import { InstitucionService } from '../institucion/institucion.service';
|
||||||
@ -120,10 +119,6 @@ export class CarritoService {
|
|||||||
query.andWhere('c.carrito LIKE :carrito', {
|
query.andWhere('c.carrito LIKE :carrito', {
|
||||||
carrito: `%${filtros.carrito}%`,
|
carrito: `%${filtros.carrito}%`,
|
||||||
});
|
});
|
||||||
if (tipoCarrito)
|
|
||||||
query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', {
|
|
||||||
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
|
|
||||||
});
|
|
||||||
if (institucion)
|
if (institucion)
|
||||||
query.andWhere('i.id_institucion = :id_institucion', {
|
query.andWhere('i.id_institucion = :id_institucion', {
|
||||||
id_institucion: institucion.id_institucion,
|
id_institucion: institucion.id_institucion,
|
||||||
@ -132,6 +127,10 @@ export class CarritoService {
|
|||||||
query.andWhere('m.id_modulo = :id_modulo', {
|
query.andWhere('m.id_modulo = :id_modulo', {
|
||||||
id_modulo: modulo.id_modulo,
|
id_modulo: modulo.id_modulo,
|
||||||
});
|
});
|
||||||
|
if (tipoCarrito)
|
||||||
|
query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', {
|
||||||
|
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
|
||||||
|
});
|
||||||
return query.getManyAndCount();
|
return query.getManyAndCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,17 +172,17 @@ export class CarritoService {
|
|||||||
id_modulo?: number,
|
id_modulo?: number,
|
||||||
id_tipo_carrito?: number,
|
id_tipo_carrito?: number,
|
||||||
) {
|
) {
|
||||||
|
const modulo = id_modulo
|
||||||
|
? await this.moduloService.findById(id_modulo)
|
||||||
|
: null;
|
||||||
|
const tipoCarrito = id_modulo
|
||||||
|
? await this.institucionTipoCarritoService.findTipoCarritoById(
|
||||||
|
id_tipo_carrito,
|
||||||
|
)
|
||||||
|
: null;
|
||||||
|
|
||||||
return this.findById(attrs.id_carrito)
|
return this.findById(attrs.id_carrito)
|
||||||
.then(async (carrito) => {
|
.then(async (carrito) => {
|
||||||
const modulo = id_modulo
|
|
||||||
? await this.moduloService.findById(id_modulo)
|
|
||||||
: null;
|
|
||||||
const tipoCarrito = id_modulo
|
|
||||||
? await this.institucionTipoCarritoService.findTipoCarritoById(
|
|
||||||
id_tipo_carrito,
|
|
||||||
)
|
|
||||||
: null;
|
|
||||||
|
|
||||||
if (attrs.carrito || modulo || tipoCarrito)
|
if (attrs.carrito || modulo || tipoCarrito)
|
||||||
await this.existeCarrito(
|
await this.existeCarrito(
|
||||||
modulo ? modulo : carrito.modulo,
|
modulo ? modulo : carrito.modulo,
|
||||||
|
@ -4,6 +4,7 @@ import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|||||||
import { EquipoProgramaService } from './equipo-programa.service';
|
import { EquipoProgramaService } from './equipo-programa.service';
|
||||||
import { CreateEquipoProgramaDto } from './dto/input/create.dto';
|
import { CreateEquipoProgramaDto } from './dto/input/create.dto';
|
||||||
import { DeleteEquipoProgramaDto } from './dto/input/delete.dto';
|
import { DeleteEquipoProgramaDto } from './dto/input/delete.dto';
|
||||||
|
|
||||||
@Controller('equipo-programa')
|
@Controller('equipo-programa')
|
||||||
@ApiTags('equipo-programa')
|
@ApiTags('equipo-programa')
|
||||||
export class EquipoProgramaController {
|
export class EquipoProgramaController {
|
||||||
|
@ -3,9 +3,9 @@ import { InjectRepository } from '@nestjs/typeorm';
|
|||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { Equipo } from 'src/equipo/entity/equipo.entity';
|
import { Equipo } from 'src/equipo/entity/equipo.entity';
|
||||||
import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity';
|
import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity';
|
||||||
|
import { TipoEntrada } from 'src/institucion-tipo-entrada/entity/tipo-entrada.entity';
|
||||||
import { EquipoService } from '../equipo/equipo.service';
|
import { EquipoService } from '../equipo/equipo.service';
|
||||||
import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service';
|
import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service';
|
||||||
import { TipoEntrada } from 'src/institucion-tipo-entrada/entity/tipo-entrada.entity';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class EquipoTipoEntradaService {
|
export class EquipoTipoEntradaService {
|
||||||
|
@ -1,39 +1,38 @@
|
|||||||
import { Optional } from '@nestjs/common';
|
import { IsInt, IsOptional, IsString } from 'class-validator';
|
||||||
import { IsInt, IsString } from 'class-validator';
|
|
||||||
|
|
||||||
export class UpdateEquipoDto {
|
export class UpdateEquipoDto {
|
||||||
@IsInt()
|
@IsInt()
|
||||||
id_equipo: number;
|
id_equipo: number;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
equipo?: string;
|
equipo?: string;
|
||||||
|
|
||||||
@IsInt()
|
@IsInt()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
id_carrito?: number;
|
id_carrito?: number;
|
||||||
|
|
||||||
@IsInt()
|
@IsInt()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
id_operador?: number;
|
id_operador?: number;
|
||||||
|
|
||||||
@IsInt()
|
@IsInt()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
id_status?: number;
|
id_status?: number;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
marca?: string;
|
marca?: string;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
modelo?: string;
|
modelo?: string;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
motivo?: string;
|
motivo?: string;
|
||||||
|
|
||||||
@IsString()
|
@IsString()
|
||||||
@Optional()
|
@IsOptional()
|
||||||
numero_serie?: string;
|
numero_serie?: string;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Body, Controller, Get, Put, Query, UseGuards } from '@nestjs/common';
|
import { Body, Controller, Get, Put, Query, UseGuards } from '@nestjs/common';
|
||||||
import { AuthGuard } from '@nestjs/passport';
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
||||||
import { Serealize } from '../interceptors/serialize.interceptor';
|
import { Serealize } from '../interceptors/serialize.interceptor';
|
||||||
import { EquipoService } from './equipo.service';
|
import { EquipoService } from './equipo.service';
|
||||||
import { EquipoDto } from './dto/input/equipo.dto';
|
import { EquipoDto } from './dto/input/equipo.dto';
|
||||||
@ -54,41 +54,49 @@ export class EquipoController {
|
|||||||
description: 'Carrito que se quiere usar como filtro.',
|
description: 'Carrito que se quiere usar como filtro.',
|
||||||
name: 'carrito',
|
name: 'carrito',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
required: false,
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Equipo que se quiere usar como filtro.',
|
description: 'Equipo que se quiere usar como filtro.',
|
||||||
name: 'equipo',
|
name: 'equipo',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
required: false,
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Id de la institución que se quiere usar como filtro.',
|
description: 'Id de la institución que se quiere usar como filtro.',
|
||||||
name: 'id_institucion',
|
name: 'id_institucion',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
})
|
required: false,
|
||||||
@ApiQuery({
|
|
||||||
description: 'Id del tipo de carrito que se quiere usar como filtro.',
|
|
||||||
name: 'id_tipo_carrito',
|
|
||||||
type: 'string',
|
|
||||||
})
|
|
||||||
@ApiQuery({
|
|
||||||
description: 'Id del status que se quiere usar como filtro.',
|
|
||||||
name: 'id_status',
|
|
||||||
type: 'string',
|
|
||||||
})
|
|
||||||
@ApiQuery({
|
|
||||||
description: 'Id del programa que se quiere usar como filtro.',
|
|
||||||
name: 'id_programa',
|
|
||||||
type: 'string',
|
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Id del módulo que se quiere usar como filtro.',
|
description: 'Id del módulo que se quiere usar como filtro.',
|
||||||
name: 'id_modulo',
|
name: 'id_modulo',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Id del programa que se quiere usar como filtro.',
|
||||||
|
name: 'id_programa',
|
||||||
|
type: 'string',
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Id del status que se quiere usar como filtro.',
|
||||||
|
name: 'id_status',
|
||||||
|
type: 'string',
|
||||||
|
required: false,
|
||||||
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Id del tipo de carrito que se quiere usar como filtro.',
|
||||||
|
name: 'id_tipo_carrito',
|
||||||
|
type: 'string',
|
||||||
|
required: false,
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Id del tipo de entrada que se quiere usar como filtro.',
|
description: 'Id del tipo de entrada que se quiere usar como filtro.',
|
||||||
name: 'id_tipo_entrada',
|
name: 'id_tipo_entrada',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
required: false,
|
||||||
})
|
})
|
||||||
equipos(@Query() query: EquiposDto) {
|
equipos(@Query() query: EquiposDto) {
|
||||||
return this.equipoService.findAll(query);
|
return this.equipoService.findAll(query);
|
||||||
@ -96,6 +104,28 @@ export class EquipoController {
|
|||||||
|
|
||||||
@Put()
|
@Put()
|
||||||
// @UseGuards(AuthGuard('jwt'))
|
// @UseGuards(AuthGuard('jwt'))
|
||||||
|
@ApiOperation({
|
||||||
|
description: 'Endpoint que actualiza lan información de un equipo.',
|
||||||
|
})
|
||||||
|
@ApiBody({
|
||||||
|
description:
|
||||||
|
'Todas las variables a excepción de id_carrito son opcionales.',
|
||||||
|
examples: {
|
||||||
|
ejemplo: {
|
||||||
|
value: {
|
||||||
|
id_equipo: 1,
|
||||||
|
_equipo: true,
|
||||||
|
_id_carrito: '',
|
||||||
|
_id_operador: 1,
|
||||||
|
_id_status: 1,
|
||||||
|
_marca: '',
|
||||||
|
_modelo: '',
|
||||||
|
_motivo: '',
|
||||||
|
_numero_serie: '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
update(@Body() body: UpdateEquipoDto) {
|
update(@Body() body: UpdateEquipoDto) {
|
||||||
const data = { ...body };
|
const data = { ...body };
|
||||||
|
|
||||||
|
@ -92,9 +92,9 @@ export class EquipoService {
|
|||||||
id_institucion?: string;
|
id_institucion?: string;
|
||||||
id_modulo?: string;
|
id_modulo?: string;
|
||||||
id_programa?: string;
|
id_programa?: string;
|
||||||
|
id_status?: string;
|
||||||
id_tipo_carrito?: string;
|
id_tipo_carrito?: string;
|
||||||
id_tipo_entrada?: string;
|
id_tipo_entrada?: string;
|
||||||
id_status?: string;
|
|
||||||
}) {
|
}) {
|
||||||
const carrito = filtros.id_carrito
|
const carrito = filtros.id_carrito
|
||||||
? await this.carritoService.findById(parseInt(filtros.id_carrito))
|
? await this.carritoService.findById(parseInt(filtros.id_carrito))
|
||||||
@ -115,24 +115,24 @@ export class EquipoService {
|
|||||||
parseInt(filtros.id_tipo_carrito),
|
parseInt(filtros.id_tipo_carrito),
|
||||||
)
|
)
|
||||||
: null;
|
: null;
|
||||||
|
const status = filtros.id_status
|
||||||
|
? await this.statusService.findById(parseInt(filtros.id_status))
|
||||||
|
: null;
|
||||||
const tipoEntrada = filtros.id_tipo_entrada
|
const tipoEntrada = filtros.id_tipo_entrada
|
||||||
? await this.institucionTipoEntradaService.findTipoEntradaById(
|
? await this.institucionTipoEntradaService.findTipoEntradaById(
|
||||||
parseInt(filtros.id_tipo_entrada),
|
parseInt(filtros.id_tipo_entrada),
|
||||||
)
|
)
|
||||||
: null;
|
: null;
|
||||||
const status = filtros.id_status
|
|
||||||
? await this.statusService.findById(parseInt(filtros.id_status))
|
|
||||||
: null;
|
|
||||||
const query = this.repository
|
const query = this.repository
|
||||||
.createQueryBuilder('e')
|
.createQueryBuilder('e')
|
||||||
.innerJoinAndSelect('e.carrito', 'c')
|
.innerJoinAndSelect('e.carrito', 'c')
|
||||||
|
.innerJoinAndSelect('e.programas', 'ps')
|
||||||
.innerJoinAndSelect('e.status', 's')
|
.innerJoinAndSelect('e.status', 's')
|
||||||
|
.innerJoinAndSelect('e.tiposEntradas', 'tes')
|
||||||
.innerJoinAndSelect('c.modulo', 'm')
|
.innerJoinAndSelect('c.modulo', 'm')
|
||||||
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
||||||
.innerJoinAndSelect('e.tiposEntradas', 'tes')
|
|
||||||
.innerJoinAndSelect('tes.tipoEntrada', 'te')
|
|
||||||
.innerJoinAndSelect('e.programas', 'ps')
|
|
||||||
.innerJoinAndSelect('ps.programa', 'p')
|
.innerJoinAndSelect('ps.programa', 'p')
|
||||||
|
.innerJoinAndSelect('tes.tipoEntrada', 'te')
|
||||||
.innerJoinAndSelect('m.institucion', 'i')
|
.innerJoinAndSelect('m.institucion', 'i')
|
||||||
.orderBy('i.institucion')
|
.orderBy('i.institucion')
|
||||||
.addOrderBy('m.modulo')
|
.addOrderBy('m.modulo')
|
||||||
@ -183,7 +183,7 @@ export class EquipoService {
|
|||||||
|
|
||||||
findById(id_equipo: number) {
|
findById(id_equipo: number) {
|
||||||
return this.repository.findOne({ id_equipo }).then((equipo) => {
|
return this.repository.findOne({ id_equipo }).then((equipo) => {
|
||||||
if (!equipo) throw new NotFoundException('No existe este equipo.');
|
if (!equipo) throw new NotFoundException('No existe este id equipo.');
|
||||||
return equipo;
|
return equipo;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -212,7 +212,9 @@ export class EquipoService {
|
|||||||
})
|
})
|
||||||
.then((equipo) => {
|
.then((equipo) => {
|
||||||
if (validarNoExiste && !equipo)
|
if (validarNoExiste && !equipo)
|
||||||
throw new NotFoundException('No existe este equipo.');
|
throw new NotFoundException(
|
||||||
|
'No existe este un equipo de cómputo con este número de inventario.',
|
||||||
|
);
|
||||||
return equipo;
|
return equipo;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -226,24 +228,25 @@ export class EquipoService {
|
|||||||
const queryReseteo = this.repository
|
const queryReseteo = this.repository
|
||||||
.createQueryBuilder('e')
|
.createQueryBuilder('e')
|
||||||
.innerJoin('e.carrito', 'c', 'c.activo = 1')
|
.innerJoin('e.carrito', 'c', 'c.activo = 1')
|
||||||
|
.innerJoin('e.programas', 'ps')
|
||||||
|
.innerJoin('e.tiposEntradas', 'tes')
|
||||||
.innerJoin('c.modulo', 'm', 'm.id_modulo = :id_modulo AND m.activo = 1', {
|
.innerJoin('c.modulo', 'm', 'm.id_modulo = :id_modulo AND m.activo = 1', {
|
||||||
id_modulo: modulo.id_modulo,
|
id_modulo: modulo.id_modulo,
|
||||||
})
|
})
|
||||||
.innerJoin('m.institucion', 'i', 'i.activo = 1')
|
|
||||||
.innerJoin(
|
.innerJoin(
|
||||||
'c.tipoCarrito',
|
'c.tipoCarrito',
|
||||||
'tc',
|
'tc',
|
||||||
'tc.id_tipo_carrito = :id_tipo_carrito',
|
'tc.id_tipo_carrito = :id_tipo_carrito',
|
||||||
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
|
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
|
||||||
)
|
)
|
||||||
.innerJoin('e.programas', 'ps')
|
.innerJoin('m.institucion', 'i', 'i.activo = 1')
|
||||||
.innerJoin('e.tiposEntradas', 'tes')
|
.andWhere('e.prestado = 1 AND e.id_status = 1');
|
||||||
.andWhere('e.prestado = 1 AND e.id_status = 1')
|
|
||||||
.update()
|
|
||||||
.set({ prestado: false });
|
|
||||||
const query = this.repository
|
const query = this.repository
|
||||||
.createQueryBuilder('e')
|
.createQueryBuilder('e')
|
||||||
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
|
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
|
||||||
|
.innerJoinAndSelect('e.programas', 'ps')
|
||||||
|
.innerJoinAndSelect('e.status', 's', 's.id_status = 1')
|
||||||
|
.innerJoinAndSelect('e.tiposEntradas', 'tes')
|
||||||
.innerJoinAndSelect(
|
.innerJoinAndSelect(
|
||||||
'c.modulo',
|
'c.modulo',
|
||||||
'm',
|
'm',
|
||||||
@ -252,19 +255,16 @@ export class EquipoService {
|
|||||||
id_modulo: modulo.id_modulo,
|
id_modulo: modulo.id_modulo,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.innerJoinAndSelect('m.institucion', 'i', 'i.activo = 1')
|
|
||||||
.innerJoinAndSelect(
|
.innerJoinAndSelect(
|
||||||
'c.tipoCarrito',
|
'c.tipoCarrito',
|
||||||
'tc',
|
'tc',
|
||||||
'tc.id_tipo_carrito = :id_tipo_carrito',
|
'tc.id_tipo_carrito = :id_tipo_carrito',
|
||||||
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
|
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
|
||||||
)
|
)
|
||||||
.innerJoinAndSelect('e.status', 's')
|
.innerJoinAndSelect('m.institucion', 'i', 'i.activo = 1')
|
||||||
.innerJoinAndSelect('e.tiposEntradas', 'tes')
|
|
||||||
.innerJoinAndSelect('tes.tipoEntrada', 'te')
|
|
||||||
.innerJoinAndSelect('e.programas', 'ps')
|
|
||||||
.innerJoinAndSelect('ps.programa', 'p')
|
.innerJoinAndSelect('ps.programa', 'p')
|
||||||
.where('e.prestado = 0 AND e.id_status = 1')
|
.innerJoinAndSelect('tes.tipoEntrada', 'te')
|
||||||
|
.where('e.prestado = 0')
|
||||||
.orderBy('c.carrito')
|
.orderBy('c.carrito')
|
||||||
.addOrderBy('e.equipo');
|
.addOrderBy('e.equipo');
|
||||||
|
|
||||||
@ -288,7 +288,8 @@ export class EquipoService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
return query.getCount().then(async (n) => {
|
return query.getCount().then(async (n) => {
|
||||||
if (n === 0) await queryReseteo.execute();
|
if (n === 0)
|
||||||
|
await queryReseteo.update().set({ prestado: false }).execute();
|
||||||
return query.getOne();
|
return query.getOne();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -318,27 +319,27 @@ export class EquipoService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
update(
|
async update(
|
||||||
attrs: Partial<Equipo>,
|
attrs: Partial<Equipo>,
|
||||||
id_carrito?: number,
|
id_carrito?: number,
|
||||||
id_status?: number,
|
id_status?: number,
|
||||||
id_operador?: number | Operador,
|
id_operador?: number | Operador,
|
||||||
motivo?: string,
|
motivo?: string,
|
||||||
) {
|
) {
|
||||||
|
const carrito = id_carrito
|
||||||
|
? await this.carritoService.findById(id_carrito)
|
||||||
|
: null;
|
||||||
|
const operador = id_operador
|
||||||
|
? typeof id_operador === 'number'
|
||||||
|
? await this.operadorService.findById(id_operador)
|
||||||
|
: id_operador
|
||||||
|
: null;
|
||||||
|
const status = id_status
|
||||||
|
? await this.statusService.findById(id_status)
|
||||||
|
: null;
|
||||||
|
|
||||||
return this.findById(attrs.id_equipo)
|
return this.findById(attrs.id_equipo)
|
||||||
.then(async (equipo) => {
|
.then(async (equipo) => {
|
||||||
const carrito = id_carrito
|
|
||||||
? await this.carritoService.findById(id_carrito)
|
|
||||||
: null;
|
|
||||||
const status = id_status
|
|
||||||
? await this.statusService.findById(id_status)
|
|
||||||
: null;
|
|
||||||
const operador = id_operador
|
|
||||||
? typeof id_operador === 'number'
|
|
||||||
? await this.operadorService.findById(id_operador)
|
|
||||||
: id_operador
|
|
||||||
: null;
|
|
||||||
|
|
||||||
if ((attrs.equipo && attrs.equipo != equipo.equipo) || carrito)
|
if ((attrs.equipo && attrs.equipo != equipo.equipo) || carrito)
|
||||||
await this.existeEquipo(
|
await this.existeEquipo(
|
||||||
carrito ? carrito : equipo.carrito,
|
carrito ? carrito : equipo.carrito,
|
||||||
@ -353,7 +354,7 @@ export class EquipoService {
|
|||||||
throw new ConflictException('No se mandó el id operador.');
|
throw new ConflictException('No se mandó el id operador.');
|
||||||
if (!motivo)
|
if (!motivo)
|
||||||
throw new ConflictException(
|
throw new ConflictException(
|
||||||
'No se mandó el motivo por el cambio de status',
|
'No se mandó el motivo para el cambio de status.',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Object.assign(equipo, attrs);
|
Object.assign(equipo, attrs);
|
||||||
|
@ -9,7 +9,7 @@ import {
|
|||||||
UseGuards,
|
UseGuards,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { AuthGuard } from '@nestjs/passport';
|
import { AuthGuard } from '@nestjs/passport';
|
||||||
import { ApiBody, ApiOperation, ApiTags } from '@nestjs/swagger';
|
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
||||||
import { Serealize } from '../interceptors/serialize.interceptor';
|
import { Serealize } from '../interceptors/serialize.interceptor';
|
||||||
import { HoraExcepcionService } from './hora-excepcion.service';
|
import { HoraExcepcionService } from './hora-excepcion.service';
|
||||||
import { CreateHoraExcepcionDto } from './dto/input/create.dto';
|
import { CreateHoraExcepcionDto } from './dto/input/create.dto';
|
||||||
@ -68,6 +68,10 @@ export class HoraExcepcionController {
|
|||||||
description:
|
description:
|
||||||
'Endpoint que retorna las horas excepcion de un día de una institución.',
|
'Endpoint que retorna las horas excepcion de un día de una institución.',
|
||||||
})
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Id de la institucion día',
|
||||||
|
name: 'id_institucion_dia',
|
||||||
|
})
|
||||||
get(@Query() query: GetHoraExcepcionDto) {
|
get(@Query() query: GetHoraExcepcionDto) {
|
||||||
return this.horaExcepcionService.findAllByIdInstitucionDia(
|
return this.horaExcepcionService.findAllByIdInstitucionDia(
|
||||||
parseInt(query.id_institucion_dia),
|
parseInt(query.id_institucion_dia),
|
||||||
@ -85,7 +89,7 @@ export class HoraExcepcionController {
|
|||||||
'Todoas las variables a excepción de id_hora_excepcion son opcionales pero se tiene que mandar forzosamente una hora.',
|
'Todoas las variables a excepción de id_hora_excepcion son opcionales pero se tiene que mandar forzosamente una hora.',
|
||||||
examples: {
|
examples: {
|
||||||
ejemplo: {
|
ejemplo: {
|
||||||
value: { id_hora_excepcion: 1, hora_inicio: '', hora_fin: '' },
|
value: { id_hora_excepcion: 1, _hora_fin: '', _hora_inicio: '' },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -69,8 +69,6 @@ export class HoraExcepcionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update(attrs: Partial<HoraExcepcion>) {
|
update(attrs: Partial<HoraExcepcion>) {
|
||||||
if (!attrs.hora_inicio && !attrs.hora_fin)
|
|
||||||
throw new ConflictException('No se mandó nada para actualizar.');
|
|
||||||
return this.findById(attrs.id_hora_excepcion)
|
return this.findById(attrs.id_hora_excepcion)
|
||||||
.then(async (horaExecpcion) => {
|
.then(async (horaExecpcion) => {
|
||||||
if (
|
if (
|
||||||
|
@ -43,14 +43,14 @@ export class InstitucionCarreraService {
|
|||||||
id_institucion: number | Institucion,
|
id_institucion: number | Institucion,
|
||||||
id_carrera: number | Carrera,
|
id_carrera: number | Carrera,
|
||||||
) {
|
) {
|
||||||
const institucion =
|
|
||||||
typeof id_institucion === 'number'
|
|
||||||
? await this.institucionService.findById(id_institucion)
|
|
||||||
: id_institucion;
|
|
||||||
const carrera =
|
const carrera =
|
||||||
typeof id_carrera === 'number'
|
typeof id_carrera === 'number'
|
||||||
? await this.findCarreraByIdCarrera(id_carrera)
|
? await this.findCarreraByIdCarrera(id_carrera)
|
||||||
: id_carrera;
|
: id_carrera;
|
||||||
|
const institucion =
|
||||||
|
typeof id_institucion === 'number'
|
||||||
|
? await this.institucionService.findById(id_institucion)
|
||||||
|
: id_institucion;
|
||||||
|
|
||||||
return this.institucionCarreraRepository.findOne({ carrera, institucion });
|
return this.institucionCarreraRepository.findOne({ carrera, institucion });
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import { Repository } from 'typeorm';
|
|||||||
import { Institucion } from '../institucion/entity/institucion.entity';
|
import { Institucion } from '../institucion/entity/institucion.entity';
|
||||||
import { InstitucionDia } from './entity/institucion-dia.entity';
|
import { InstitucionDia } from './entity/institucion-dia.entity';
|
||||||
import { InstitucionService } from '../institucion/institucion.service';
|
import { InstitucionService } from '../institucion/institucion.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class InstitucionDiaService {
|
export class InstitucionDiaService {
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -53,8 +53,8 @@ export class InstitucionInfraccionService {
|
|||||||
.then((institucion) =>
|
.then((institucion) =>
|
||||||
this.institucionInfraccionRepository
|
this.institucionInfraccionRepository
|
||||||
.createQueryBuilder('ii')
|
.createQueryBuilder('ii')
|
||||||
.innerJoinAndSelect('ii.institucion', 'in')
|
|
||||||
.innerJoinAndSelect('ii.infraccion', 'i')
|
.innerJoinAndSelect('ii.infraccion', 'i')
|
||||||
|
.innerJoinAndSelect('ii.institucion', 'in')
|
||||||
.where('in.id_institucion = :id_institucion', {
|
.where('in.id_institucion = :id_institucion', {
|
||||||
id_institucion: institucion.id_institucion,
|
id_institucion: institucion.id_institucion,
|
||||||
})
|
})
|
||||||
|
@ -68,14 +68,9 @@ export class InstitucionTipoCarritoService {
|
|||||||
)
|
)
|
||||||
.innerJoinAndSelect('itc.tipoCarrito', 'tc')
|
.innerJoinAndSelect('itc.tipoCarrito', 'tc')
|
||||||
.orderBy('tc.tipo_carrito');
|
.orderBy('tc.tipo_carrito');
|
||||||
const busqueda: { institucion: Institucion; mostrar?: boolean } = {
|
|
||||||
institucion,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (mostrar) busqueda.mostrar = mostrar;
|
|
||||||
if (mostrar) query.andWhere('itc.mostrar = 1');
|
if (mostrar) query.andWhere('itc.mostrar = 1');
|
||||||
return query.getMany();
|
return query.getMany();
|
||||||
return this.institucionTipoCarritoRepository.find(busqueda);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
findInstitucionTipoCarritoById(id_institucion_tipo_carrito) {
|
findInstitucionTipoCarritoById(id_institucion_tipo_carrito) {
|
||||||
|
@ -16,13 +16,13 @@ export class InstitucionTipoEntrada {
|
|||||||
@Column({ type: Boolean, nullable: false, default: false })
|
@Column({ type: Boolean, nullable: false, default: false })
|
||||||
mostrar: boolean;
|
mostrar: boolean;
|
||||||
|
|
||||||
|
@ManyToOne(() => Institucion, (institucion) => institucion.tiposEntrada)
|
||||||
|
@JoinColumn({ name: 'id_institucion' })
|
||||||
|
institucion: Institucion;
|
||||||
|
|
||||||
@ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.instituciones, {
|
@ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.instituciones, {
|
||||||
eager: true,
|
eager: true,
|
||||||
})
|
})
|
||||||
@JoinColumn({ name: 'id_tipo_entrada' })
|
@JoinColumn({ name: 'id_tipo_entrada' })
|
||||||
tipoEntrada: TipoEntrada;
|
tipoEntrada: TipoEntrada;
|
||||||
|
|
||||||
@ManyToOne(() => Institucion, (institucion) => institucion.tiposEntrada)
|
|
||||||
@JoinColumn({ name: 'id_institucion' })
|
|
||||||
institucion: Institucion;
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import {
|
import {
|
||||||
UseInterceptors,
|
|
||||||
NestInterceptor,
|
|
||||||
ExecutionContext,
|
|
||||||
CallHandler,
|
CallHandler,
|
||||||
|
ExecutionContext,
|
||||||
|
NestInterceptor,
|
||||||
|
UseInterceptors,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
@ -72,7 +72,7 @@ export class ModuloController {
|
|||||||
@ApiBody({
|
@ApiBody({
|
||||||
description: 'Todas las variables a excepción de id_modulo son opcionales.',
|
description: 'Todas las variables a excepción de id_modulo son opcionales.',
|
||||||
examples: {
|
examples: {
|
||||||
ejemplo: { value: { id_modulo: 1, activo: true, modulo: '' } },
|
ejemplo: { value: { id_modulo: 1, _activo: true, _modulo: '' } },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
update(@Body() body: UpdateModuloDto) {
|
update(@Body() body: UpdateModuloDto) {
|
||||||
|
@ -23,6 +23,11 @@ export class MotivoController {
|
|||||||
name: 'id_equipo',
|
name: 'id_equipo',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
})
|
})
|
||||||
|
@ApiQuery({
|
||||||
|
description: 'Página en la que se encuentra el usuario.',
|
||||||
|
name: 'pagina',
|
||||||
|
type: 'string',
|
||||||
|
})
|
||||||
get(@Query() query: IdEquipoPaginaDto) {
|
get(@Query() query: IdEquipoPaginaDto) {
|
||||||
return this.motivoService.findAllByIdEquipo(
|
return this.motivoService.findAllByIdEquipo(
|
||||||
parseInt(query.id_equipo),
|
parseInt(query.id_equipo),
|
||||||
|
15
src/multa/dto/input/multar.dto.ts
Normal file
15
src/multa/dto/input/multar.dto.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { IsInt, IsString } from 'class-validator';
|
||||||
|
|
||||||
|
export class MultarDto {
|
||||||
|
@IsString()
|
||||||
|
descripcion: string;
|
||||||
|
|
||||||
|
@IsInt()
|
||||||
|
id_institucion_infraccion: number;
|
||||||
|
|
||||||
|
@IsInt()
|
||||||
|
id_operador: number;
|
||||||
|
|
||||||
|
@IsInt()
|
||||||
|
id_prestamo: number;
|
||||||
|
}
|
6
src/multa/dto/input/quitar.dto.ts
Normal file
6
src/multa/dto/input/quitar.dto.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { IsInt } from 'class-validator';
|
||||||
|
|
||||||
|
export class QuitarMultarDto {
|
||||||
|
@IsInt()
|
||||||
|
id_institucion_usuario: number;
|
||||||
|
}
|
@ -22,6 +22,10 @@ export class MultasEquipoOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
retraso;
|
retraso;
|
||||||
|
|
||||||
|
@Expose()
|
||||||
|
@Type(() => InstitucionInfraccionOutputDto)
|
||||||
|
institucionInfraccion;
|
||||||
|
|
||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => OperadorMinOutputDto)
|
@Type(() => OperadorMinOutputDto)
|
||||||
opeardorMulta;
|
opeardorMulta;
|
||||||
@ -29,8 +33,4 @@ export class MultasEquipoOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => PrestamoEquipoMinOutputDto)
|
@Type(() => PrestamoEquipoMinOutputDto)
|
||||||
prestamo;
|
prestamo;
|
||||||
|
|
||||||
@Expose()
|
|
||||||
@Type(() => InstitucionInfraccionOutputDto)
|
|
||||||
institucionInfraccion;
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,10 @@ export class MultasUsuarioOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
retraso;
|
retraso;
|
||||||
|
|
||||||
|
@Expose()
|
||||||
|
@Type(() => InstitucionInfraccionOutputDto)
|
||||||
|
institucionInfraccion;
|
||||||
|
|
||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => OperadorMinOutputDto)
|
@Type(() => OperadorMinOutputDto)
|
||||||
opeardorMulta;
|
opeardorMulta;
|
||||||
@ -29,8 +33,4 @@ export class MultasUsuarioOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => PrestamoUsuarioMinOutputDto)
|
@Type(() => PrestamoUsuarioMinOutputDto)
|
||||||
prestamo;
|
prestamo;
|
||||||
|
|
||||||
@Expose()
|
|
||||||
@Type(() => InstitucionInfraccionOutputDto)
|
|
||||||
institucionInfraccion;
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,10 @@ export class MultasOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
retraso;
|
retraso;
|
||||||
|
|
||||||
|
@Expose()
|
||||||
|
@Type(() => InstitucionInfraccionOutputDto)
|
||||||
|
institucionInfraccion;
|
||||||
|
|
||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => OperadorMinOutputDto)
|
@Type(() => OperadorMinOutputDto)
|
||||||
opeardorMulta;
|
opeardorMulta;
|
||||||
@ -29,8 +33,4 @@ export class MultasOutputDto {
|
|||||||
@Expose()
|
@Expose()
|
||||||
@Type(() => PrestamoMinOutputDto)
|
@Type(() => PrestamoMinOutputDto)
|
||||||
prestamo;
|
prestamo;
|
||||||
|
|
||||||
@Expose()
|
|
||||||
@Type(() => InstitucionInfraccionOutputDto)
|
|
||||||
institucionInfraccion;
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
import { Controller, Get, Query } from '@nestjs/common';
|
import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common';
|
||||||
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
||||||
import { Serealize } from '../interceptors/serialize.interceptor';
|
import { Serealize } from '../interceptors/serialize.interceptor';
|
||||||
import { MultaService } from './multa.service';
|
import { MultaService } from './multa.service';
|
||||||
import { IdUsuarioDto } from '../dto/id-usuario.dto';
|
import { IdUsuarioDto } from '../dto/id-usuario.dto';
|
||||||
import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto';
|
import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto';
|
||||||
|
import { MultarDto } from './dto/input/multar.dto';
|
||||||
import { MultasDto } from './dto/input/multas.dto';
|
import { MultasDto } from './dto/input/multas.dto';
|
||||||
|
import { QuitarMultarDto } from './dto/input/quitar.dto';
|
||||||
import { MultasUsuarioDto } from './dto/input/multas-usuario.dto';
|
import { MultasUsuarioDto } from './dto/input/multas-usuario.dto';
|
||||||
import { MultasOutputDto } from './dto/output/multas.dto';
|
import { MultasOutputDto } from './dto/output/multas.dto';
|
||||||
import { MultasEquipoOutputDto } from './dto/output/multas-equipo.dto';
|
import { MultasEquipoOutputDto } from './dto/output/multas-equipo.dto';
|
||||||
@ -16,6 +18,31 @@ import { MultasUsuarioOutputDto } from './dto/output/multas-usuario.dto';
|
|||||||
export class MultaController {
|
export class MultaController {
|
||||||
constructor(private multaService: MultaService) {}
|
constructor(private multaService: MultaService) {}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
@ApiOperation({ description: 'Endpoint utilizado para multar a un usuario.' })
|
||||||
|
@ApiBody({
|
||||||
|
description: 'Todas las vairales son obligatorias.',
|
||||||
|
examples: {
|
||||||
|
ejemplo: {
|
||||||
|
value: {
|
||||||
|
id_institucion_infraccion: 1,
|
||||||
|
id_operador: 1,
|
||||||
|
id_prestamo: 1,
|
||||||
|
descripcion: '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
multar(@Body() body: MultarDto) {
|
||||||
|
return this.multaService.create(
|
||||||
|
body.id_prestamo,
|
||||||
|
body.id_operador,
|
||||||
|
body.descripcion,
|
||||||
|
null,
|
||||||
|
body.id_institucion_infraccion,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Serealize(MultasOutputDto)
|
@Serealize(MultasOutputDto)
|
||||||
@Get()
|
@Get()
|
||||||
@ApiOperation({
|
@ApiOperation({
|
||||||
@ -90,7 +117,8 @@ export class MultaController {
|
|||||||
@Serealize(MultasMinOutputDto)
|
@Serealize(MultasMinOutputDto)
|
||||||
@Get('multas-usuario-activas')
|
@Get('multas-usuario-activas')
|
||||||
@ApiOperation({
|
@ApiOperation({
|
||||||
description: 'Endpoint que retorna todas las multas de un usuario que esten activas.',
|
description:
|
||||||
|
'Endpoint que retorna todas las multas de un usuario que esten activas.',
|
||||||
})
|
})
|
||||||
@ApiQuery({
|
@ApiQuery({
|
||||||
description: 'Id del usuario.',
|
description: 'Id del usuario.',
|
||||||
@ -101,6 +129,19 @@ export class MultaController {
|
|||||||
return this.multaService.findMultasActivas(parseInt(query.id_usuario));
|
return this.multaService.findMultasActivas(parseInt(query.id_usuario));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Put()
|
||||||
|
@ApiOperation({
|
||||||
|
description:
|
||||||
|
'Endpoint que se encarga de quitar la multa de un alumno de cierta una.',
|
||||||
|
})
|
||||||
|
@ApiBody({
|
||||||
|
description: 'La variable id_institucion_usuario es obligatoria.',
|
||||||
|
examples: { example: { value: { id_institucion_usuario: 1 } } },
|
||||||
|
})
|
||||||
|
quitarMulta(@Body() body: QuitarMultarDto) {
|
||||||
|
return this.multaService.quitarMulta(body.id_institucion_usuario);
|
||||||
|
}
|
||||||
|
|
||||||
// @Get('reporte')
|
// @Get('reporte')
|
||||||
// reporte() {}
|
// reporte() {}
|
||||||
}
|
}
|
||||||
|
@ -138,20 +138,20 @@ export class MultaService {
|
|||||||
const query = this.repository
|
const query = this.repository
|
||||||
.createQueryBuilder('mu')
|
.createQueryBuilder('mu')
|
||||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
||||||
.innerJoinAndSelect('ii.infraccion', 'inf')
|
|
||||||
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
||||||
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
|
||||||
.innerJoinAndSelect('mu.prestamo', 'p')
|
.innerJoinAndSelect('mu.prestamo', 'p')
|
||||||
|
.innerJoinAndSelect('ii.infraccion', 'inf')
|
||||||
|
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
||||||
.innerJoinAndSelect('p.equipo', 'e')
|
.innerJoinAndSelect('p.equipo', 'e')
|
||||||
.innerJoinAndSelect('e.carrito', 'c')
|
|
||||||
.innerJoinAndSelect('c.modulo', 'm')
|
|
||||||
.innerJoinAndSelect('m.institucion', 'i')
|
|
||||||
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
|
||||||
.innerJoinAndSelect('p.usuario', 'u')
|
.innerJoinAndSelect('p.usuario', 'u')
|
||||||
|
.innerJoinAndSelect('e.carrito', 'c')
|
||||||
.innerJoinAndSelect('u.instituciones', 'is')
|
.innerJoinAndSelect('u.instituciones', 'is')
|
||||||
|
.innerJoinAndSelect('c.modulo', 'm')
|
||||||
|
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
||||||
.innerJoinAndSelect('is.institucionCarrera', 'ic')
|
.innerJoinAndSelect('is.institucionCarrera', 'ic')
|
||||||
.innerJoinAndSelect('ic.institucion', 'in')
|
.innerJoinAndSelect('m.institucion', 'i')
|
||||||
.innerJoinAndSelect('ic.carrera', 'ca')
|
.innerJoinAndSelect('ic.carrera', 'ca')
|
||||||
|
.innerJoinAndSelect('ic.institucion', 'in')
|
||||||
.innerJoinAndSelect('ca.nivel', 'n')
|
.innerJoinAndSelect('ca.nivel', 'n')
|
||||||
.orderBy('i.institucion')
|
.orderBy('i.institucion')
|
||||||
.addOrderBy('u.usuario')
|
.addOrderBy('u.usuario')
|
||||||
@ -178,19 +178,19 @@ export class MultaService {
|
|||||||
this.repository
|
this.repository
|
||||||
.createQueryBuilder('mu')
|
.createQueryBuilder('mu')
|
||||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
||||||
|
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
||||||
|
.innerJoinAndSelect('mu.prestamo', 'p')
|
||||||
.innerJoinAndSelect('ii.infraccion', 'inf')
|
.innerJoinAndSelect('ii.infraccion', 'inf')
|
||||||
.innerJoinAndSelect('ii.institucion', 'i')
|
.innerJoinAndSelect('ii.institucion', 'i')
|
||||||
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
|
||||||
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
||||||
.innerJoinAndSelect('mu.prestamo', 'p')
|
|
||||||
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
|
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
|
||||||
id_equipo: equipo.id_equipo,
|
id_equipo: equipo.id_equipo,
|
||||||
})
|
})
|
||||||
.innerJoinAndSelect('p.usuario', 'u')
|
.innerJoinAndSelect('p.usuario', 'u')
|
||||||
.innerJoinAndSelect('u.instituciones', 'is')
|
.innerJoinAndSelect('u.instituciones', 'is')
|
||||||
.innerJoinAndSelect('is.institucionCarrera', 'ic')
|
.innerJoinAndSelect('is.institucionCarrera', 'ic')
|
||||||
.innerJoinAndSelect('ic.institucion', 'in')
|
|
||||||
.innerJoinAndSelect('ic.carrera', 'ca')
|
.innerJoinAndSelect('ic.carrera', 'ca')
|
||||||
|
.innerJoinAndSelect('ic.institucion', 'in')
|
||||||
.innerJoinAndSelect('ca.nivel', 'n')
|
.innerJoinAndSelect('ca.nivel', 'n')
|
||||||
.orderBy('mu.id_multa', 'DESC')
|
.orderBy('mu.id_multa', 'DESC')
|
||||||
.skip((pagina - 1) * 25)
|
.skip((pagina - 1) * 25)
|
||||||
@ -204,19 +204,19 @@ export class MultaService {
|
|||||||
this.repository
|
this.repository
|
||||||
.createQueryBuilder('mu')
|
.createQueryBuilder('mu')
|
||||||
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
|
||||||
|
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
||||||
|
.innerJoinAndSelect('mu.prestamo', 'p')
|
||||||
.innerJoinAndSelect('ii.infraccion', 'inf')
|
.innerJoinAndSelect('ii.infraccion', 'inf')
|
||||||
.innerJoinAndSelect('ii.institucion', 'i')
|
.innerJoinAndSelect('ii.institucion', 'i')
|
||||||
.innerJoinAndSelect('mu.opeardorMulta', 'om')
|
|
||||||
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
.innerJoinAndSelect('om.tipoUsuario', 'tu')
|
||||||
.innerJoinAndSelect('mu.prestamo', 'p')
|
|
||||||
.innerJoinAndSelect('p.equipo', 'e')
|
.innerJoinAndSelect('p.equipo', 'e')
|
||||||
.innerJoinAndSelect('e.carrito', 'c')
|
|
||||||
.innerJoinAndSelect('c.modulo', 'm')
|
|
||||||
.innerJoinAndSelect('m.institucion', 'in')
|
|
||||||
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
|
||||||
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
|
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
|
||||||
id_usuario: usuario.id_usuario,
|
id_usuario: usuario.id_usuario,
|
||||||
})
|
})
|
||||||
|
.innerJoinAndSelect('e.carrito', 'c')
|
||||||
|
.innerJoinAndSelect('c.modulo', 'm')
|
||||||
|
.innerJoinAndSelect('c.tipoCarrito', 'tc')
|
||||||
|
.innerJoinAndSelect('m.institucion', 'in')
|
||||||
.orderBy('mu.id_multa', 'DESC')
|
.orderBy('mu.id_multa', 'DESC')
|
||||||
.skip((pagina - 1) * 25)
|
.skip((pagina - 1) * 25)
|
||||||
.take(25)
|
.take(25)
|
||||||
@ -238,4 +238,36 @@ export class MultaService {
|
|||||||
.getMany(),
|
.getMany(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async quitarMulta(id_institucion_usuario: number) {
|
||||||
|
const institucionUsuario = await this.institucionUsuarioService.findById(
|
||||||
|
id_institucion_usuario,
|
||||||
|
);
|
||||||
|
|
||||||
|
return this.repository
|
||||||
|
.createQueryBuilder('mu')
|
||||||
|
.innerJoin('mu.prestamo', 'p')
|
||||||
|
.innerJoin('p.usuario', 'u')
|
||||||
|
.innerJoin(
|
||||||
|
'u.instituciones',
|
||||||
|
'is',
|
||||||
|
'is.id_institucion_usuario = :id_institucion_usuario',
|
||||||
|
{
|
||||||
|
id_institucion_usuario: institucionUsuario.id_institucion_usuario,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.where('activo = 1')
|
||||||
|
.getOne()
|
||||||
|
.then((multa) => {
|
||||||
|
if (!multa)
|
||||||
|
throw new ConflictException(
|
||||||
|
'Este usuario no tiene una multa activa en esta institución.',
|
||||||
|
);
|
||||||
|
multa.activo = false;
|
||||||
|
institucionUsuario.multa = false;
|
||||||
|
return this.repository.save(multa);
|
||||||
|
})
|
||||||
|
.then((_) => this.institucionUsuarioService.update(institucionUsuario))
|
||||||
|
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ export class OperadorController {
|
|||||||
description:
|
description:
|
||||||
'Todas las variables a excepción de id_operador son opcionales.',
|
'Todas las variables a excepción de id_operador son opcionales.',
|
||||||
examples: {
|
examples: {
|
||||||
ejemplo: { value: { id_operador: 3, activo: true, password: '' } },
|
ejemplo: { value: { id_operador: 3, _activo: true, _password: '' } },
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
update(@Body() body: UpdateOperadorDto) {
|
update(@Body() body: UpdateOperadorDto) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Expose, Type } from 'class-transformer';
|
import { Expose, Type } from 'class-transformer';
|
||||||
import { UsuarioInstitucionCarreraOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera.dto';
|
|
||||||
import { TipoUsuarioOutputDto } from '../../../tipo-usuario/dto/output/tipo-usuario.dto';
|
import { TipoUsuarioOutputDto } from '../../../tipo-usuario/dto/output/tipo-usuario.dto';
|
||||||
|
import { UsuarioInstitucionCarreraOutputDto } from '../../../institucion-usuario/dto/output/usuario-institucion-carrera.dto';
|
||||||
|
|
||||||
export class UsuariosOutputDto {
|
export class UsuariosOutputDto {
|
||||||
@Expose()
|
@Expose()
|
||||||
|
Loading…
Reference in New Issue
Block a user