cancelado usuario y operador

This commit is contained in:
lemuel 2022-06-12 15:16:24 -05:00
parent f1499c76c2
commit 585cc1e8e5
5 changed files with 85 additions and 20 deletions

View File

@ -0,0 +1,9 @@
import { IsInt } from 'class-validator';
export class PrestamoCancelarOperadorDto {
@IsInt()
id_operador: number;
@IsInt()
id_prestamo: number;
}

View File

@ -0,0 +1,6 @@
import { IsInt } from 'class-validator';
export class PrestamoCancelarUsuarioDto {
@IsInt()
id_prestamo: number;
}

View File

@ -38,13 +38,14 @@ export class Prestamo {
@Column({ type: Date, nullable: false })
hora_max_recoger: Date;
@ManyToOne(() => Equipo, (equipo) => equipo.prestamos)
@ManyToOne(() => Equipo, (equipo) => equipo.prestamos, { eager: true })
@JoinColumn({ name: 'id_equipo' })
equipo: Equipo;
@ManyToOne(
() => Operador,
(operadorEntrega) => operadorEntrega.prestamosOperadorEntrega,
{ eager: true },
)
@JoinColumn({ name: 'id_operador_entrega' })
operadorEntrega: Operador;
@ -52,6 +53,7 @@ export class Prestamo {
@ManyToOne(
() => Operador,
(operadorRegreso) => operadorRegreso.prestamosOperadorRegreso,
{ eager: true },
)
@JoinColumn({ name: 'id_operador_regreso' })
operadorRegreso: Operador;

View File

@ -1,5 +1,5 @@
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 { PrestamoService } from './prestamo.service';
import { PrestamoPedirDto } from './dto/prestamo-pedir.dto';
import { PrestamoActivosDto } from './dto/prestamo-activos.dto';
@ -9,6 +9,8 @@ import { PrestamoNumeroInventarioDto } from './dto/prestamo-numero-inventario.dt
import { PrestamoHistorialEquipoDto } from './dto/prestamo-historial-equipo.dto';
import { PrestamoHistorialUsuarioDto } from './dto/prestamo-historial-usuario.dto';
import { PrestamoHistorialDto } from './dto/prestamo-historial.dto';
import { PrestamoCancelarOperadorDto } from './dto/prestamo-cancelar-operador.dto';
import { PrestamoCancelarUsuarioDto } from './dto/prestamo-cancelar-usuario.dto';
@Controller('prestamo')
@ApiTags('prestamo')
@ -81,13 +83,28 @@ export class PrestamoController {
@ApiOperation({
description: 'Endpoint que cancela un prestamo por parte del operador.',
})
cancelarOperador() {}
@ApiBody({
description: 'Ambas variables son obligatorias.',
examples: { ejemplo: { value: { id_prestamo: 1, id_operador: 1 } } },
})
cancelarOperador(@Body() body: PrestamoCancelarOperadorDto) {
return this.prestamoService.cancelarOperador(
body.id_prestamo,
body.id_operador,
);
}
@Put('cancelar-usuario')
@ApiOperation({
description: 'Endpoint que cancela el prestamo del usuario.',
})
cancelarUsuario() {}
@ApiBody({
description: 'La variable id_prestamo es obligatoria.',
examples: { ejemplo: { value: { id_prestamo: 1 } } },
})
cancelarUsuario(@Body() body: PrestamoCancelarUsuarioDto) {
return this.prestamoService.cancelarUsuario(body.id_prestamo);
}
@Put('entregar')
@ApiOperation({
@ -214,7 +231,22 @@ export class PrestamoController {
}
@Post()
@ApiOperation({ description: 'Endpoint .' })
@ApiOperation({ description: 'Endpoint que crea un prestamo nuevo.' })
@ApiBody({
description:
'Todas las variables a excepción de id_programa y id_tipo_entrada son obligatorios.',
examples: {
ejemplo: {
value: {
id_usuario: 1,
id_modulo: 1,
id_tipo_carrito: 1,
id_programa: 1,
id_tipo_entrada: 1,
},
},
},
})
pedir(@Body() body: PrestamoPedirDto) {
return this.prestamoService.create(
body.id_usuario,

View File

@ -6,7 +6,6 @@ import {
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { FindOperator, Like, Repository } from 'typeorm';
import { Carrera } from '../institucion-carrera/entity/carrera.entity';
import { Modulo } from '../modulo/entity/modulo.entity';
import { Operador } from '../operador/entity/operador.entity';
import { Prestamo } from './entity/prestamo.entity';
@ -44,6 +43,36 @@ export class PrestamoService {
private usuarioService: UsuarioService,
) {}
async cancelarOperador(id_prestamo: number, id_operador: number) {
const ahora = moment();
const operadorRegreso = await this.operadorService.findById(id_operador);
const prestamo = await this.findById(id_prestamo);
prestamo.activo = false;
prestamo.fecha_entrega = ahora.toDate();
prestamo.cancelado_operador = true;
prestamo.operadorRegreso = operadorRegreso;
prestamo.equipo.status = await this.statusService.findById(6);
return this.equipoService
.update(prestamo.equipo)
.then((_) => this.repository.save(prestamo))
.then((_) => ({ message: 'Se canceló correctamente este préstamo.' }));
}
async cancelarUsuario(id_prestamo: number) {
const ahora = moment();
const prestamo = await this.findById(id_prestamo);
prestamo.activo = false;
prestamo.fecha_entrega = ahora.toDate();
prestamo.cancelado_usuario = true;
prestamo.equipo.status = await this.statusService.findById(1);
return this.equipoService
.update(prestamo.equipo)
.then((_) => this.repository.save(prestamo))
.then((_) => ({ message: 'Se canceló correctamente este préstamo.' }));
}
async create(
id_usuario: number,
id_modulo: number,
@ -115,7 +144,6 @@ export class PrestamoService {
equipo?: string;
fechaFin?: string;
fechaInicio?: string;
// id_carrera?: string;
id_institucion?: string;
id_modulo?: string;
id_operador_entrega?: string;
@ -156,21 +184,13 @@ export class PrestamoService {
usuario: {
usuario?: FindOperator<string>;
tipoUsuario?: TipoUsuario;
// institucionCarrera: { carrera?: Carrera };
};
operadorEntrega?: Operador;
operadorRegreso?: Operador;
} = {
equipo: { carrito: {} },
usuario: {
// institucionCarrera: {}
},
usuario: {},
};
// const carrera = filtros.id_carrera
// ? await this.institucionCarreraService.findCarreraByIdCarrera(
// parseInt(filtros.id_carrera),
// )
// : null;
const institucion = filtros.id_institucion
? await this.institucionService.findById(parseInt(filtros.id_institucion))
: null;
@ -201,9 +221,6 @@ export class PrestamoService {
if (filtros.activo) {
if (typeof filtros.activo === 'boolean') busqueda.activo = filtros.activo;
else busqueda.activo = filtros.activo === 'true';
} else {
// join.oe = 'p.operadorEntrega';
// join.or = 'p.operadorRegreso';
}
if (filtros.carrito)
busqueda.equipo.carrito.carrito = Like(`%${filtros.carrito}%`);
@ -211,7 +228,6 @@ export class PrestamoService {
if (filtros.id_prestamo) busqueda.id_prestamo = Like(filtros.id_prestamo);
if (filtros.usuario)
busqueda.usuario.usuario = Like(`%${filtros.usuario}%`);
// if (carrera) busqueda.usuario.institucionCarrera.carrera = carrera;
if (institucion) busqueda.equipo.carrito.modulo = { institucion };
if (modulo) busqueda.equipo.carrito.modulo = modulo;
if (operadorEntrega) busqueda.operadorEntrega = operadorEntrega;