Files
pcpuma_unam_api/src/prestamo/prestamo.controller.ts
T

560 lines
16 KiB
TypeScript
Raw Normal View History

2022-07-15 00:27:30 -05:00
import {
Body,
Controller,
Get,
Post,
Put,
Query,
Request,
2022-07-15 00:27:30 -05:00
UseGuards,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiQuery,
ApiTags,
} from '@nestjs/swagger';
2022-06-14 15:39:13 -05:00
import { Serealize } from '../interceptors/serialize.interceptor';
2022-04-04 20:53:32 -05:00
import { PrestamoService } from './prestamo.service';
2022-09-02 16:15:05 -05:00
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
2022-08-15 14:29:53 -05:00
import { Operador } from '../operador/entity/operador.entity';
2022-10-24 09:30:19 -05:00
import { Usuario } from '../usuario/entity/usuario.entity';
import { Modulo } from '../modulo/entity/modulo.entity';
2022-10-23 17:52:46 -05:00
import { IdEquipoPaginaDto } from '../dto/input/id-equipo-pagina.dto';
import { IdUsuarioPaginaDto } from '../dto/input/id-usuario-pagina.dto';
2022-07-07 23:56:17 -05:00
import { NumeroInventarioDto } from '../dto/numero-inventario.dto';
2022-06-14 12:11:10 -05:00
import { ActivosDto } from './dto/input/activos.dto';
2022-06-14 20:57:28 -05:00
import { CancelarOperadorDto } from './dto/input/cancelar-operador.dto';
2022-06-14 14:56:01 -05:00
import { HistorialDto } from './dto/input/historial.dto';
2022-06-14 20:57:28 -05:00
import { IdPrestamoDto } from './dto/input/id-prestamo.dto';
import { PedirDto } from './dto/input/pedir.dto';
import { EntregarDto } from './dto/input/entregar.dto';
import { RegresarIdPrestamoDto } from './dto/input/regresar-id-prestamo.dto';
import { RegresarNumeroInventarioDto } from './dto/input/regresar-numero-inventario.dto';
2022-10-24 09:30:19 -05:00
import { MessageOutputDto } from '../dto/output/message.dto';
2022-07-10 23:41:32 -05:00
import { ActivosOutputDto } from './dto/output/activos.dto';
2022-10-02 20:15:23 -05:00
import { EquipoMinOutputDto } from '../equipo/dto/output/equipo-min.dto';
2022-06-14 15:39:13 -05:00
import { PrestamoOutputDto } from './dto/output/prestamo.dto';
import { PrestamoEquipoOutputDto } from './dto/output/prestamo-equipo.dto';
2022-06-28 19:29:10 -05:00
import { PrestamosOutputDto } from './dto/output/prestamos.dto';
import { PrestamosEquipoOutputDto } from './dto/output/prestamos-equipo.dto';
import { PrestamosUsuarioOutputDto } from './dto/output/prestamos-usuario.dto';
2022-03-29 22:03:19 -06:00
@Controller('prestamo')
2022-06-03 08:47:36 -05:00
@ApiTags('prestamo')
2022-04-04 20:53:32 -05:00
export class PrestamoController {
2022-09-02 16:15:05 -05:00
constructor(
private prestamoService: PrestamoService,
private validarUsuarioService: ValidarUsuarioService,
) {}
2022-04-17 22:51:49 -05:00
2022-07-10 23:41:32 -05:00
@Serealize(ActivosOutputDto)
2022-04-17 22:51:49 -05:00
@Get('activos')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description:
'Endpoint que retorna 25 prestamos activos dependiendo de la página en la que se encuentra el operador y sus filtros.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 13:35:47 -05:00
@ApiQuery({
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Carrito que se quiere usar como filtro.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Equipo que se quiere usar como filtro.',
name: 'equipo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la institución que se quiere usar como filtro.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del modulo que se quiere usar como filtro.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del préstamo que se quiere usar como filtro.',
name: 'id_prestamo',
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({
description: 'Id del tipo de usuario que se quiere usar como filtro.',
name: 'id_tipo_usuario',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Usuario que se quiere usar como filtro.',
name: 'usuario',
type: 'string',
required: false,
})
activos(@Request() req, @Query() query: ActivosDto) {
const operador: Operador = req.user.operador;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-10-25 16:45:38 -05:00
return this.prestamoService.findAll(query);
2022-06-08 23:52:05 -05:00
}
2022-04-17 22:51:49 -05:00
2022-10-24 09:30:19 -05:00
@Serealize(MessageOutputDto)
2022-06-03 08:47:36 -05:00
@Put('cancelar-operador')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description: 'Endpoint que cancela un prestamo por parte del operador.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 15:16:24 -05:00
@ApiBody({
description: 'Ambas variables son obligatorias.',
2022-07-07 23:56:17 -05:00
examples: {
2022-09-28 21:43:17 -05:00
ejemplo: { value: { id_prestamo: 1, motivo: '' } },
2022-07-07 23:56:17 -05:00
},
2022-06-12 15:16:24 -05:00
})
cancelarOperador(@Request() req, @Body() body: CancelarOperadorDto) {
const operador: Operador = req.user.operador;
2022-10-26 03:25:15 -05:00
const modulo: Modulo = req.user.modulo;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-06-12 15:16:24 -05:00
return this.prestamoService.cancelarOperador(
2022-09-28 21:43:17 -05:00
operador,
2022-06-12 15:16:24 -05:00
body.id_prestamo,
2022-06-14 17:11:59 -05:00
body.motivo,
2022-10-26 03:25:15 -05:00
modulo,
2022-06-12 15:16:24 -05:00
);
}
2022-04-17 22:51:49 -05:00
2022-10-24 09:30:19 -05:00
@Serealize(MessageOutputDto)
2022-06-03 08:47:36 -05:00
@Put('cancelar-usuario')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description: 'Endpoint que cancela el prestamo del usuario.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 15:16:24 -05:00
@ApiBody({
description: 'La variable id_prestamo es obligatoria.',
examples: { ejemplo: { value: { id_prestamo: 1 } } },
})
2022-10-25 16:45:38 -05:00
cancelarUsuario(@Request() req) {
const usuario: Usuario = req.user.usuario;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarUsuario(usuario);
2022-10-25 16:45:38 -05:00
return this.prestamoService.cancelarUsuario(usuario);
2022-06-12 15:16:24 -05:00
}
2022-04-17 22:51:49 -05:00
2022-10-02 20:15:23 -05:00
@Serealize(EquipoMinOutputDto)
2022-04-17 22:51:49 -05:00
@Put('entregar')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description: 'Endpoint que actualiza el status del equipo a "En uso".',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 15:39:29 -05:00
@ApiBody({
description: 'Ambas variables son obligatorias.',
2022-09-28 21:43:17 -05:00
examples: { ejemplo: { value: { id_prestamo: 1 } } },
2022-06-12 15:39:29 -05:00
})
entregar(@Request() req, @Body() body: EntregarDto) {
const operador: Operador = req.user.operador;
2022-10-26 03:25:15 -05:00
const modulo: Modulo = req.user.modulo;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-11-03 02:48:47 -06:00
return this.prestamoService.entregar(operador, modulo, body.id_prestamo);
2022-06-12 15:39:29 -05:00
}
2022-04-17 22:51:49 -05:00
2022-11-02 22:10:48 -06:00
// @Serealize(PrestamosOutputDto)
@Get('reporte')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna todos los prestamos dependiendo de la página en la que se encuentra el operador y sus filtros.',
})
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Carrito que se quiere usar como filtro.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Equipo que se quiere usar como filtro.',
name: 'equipo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Fecha inicio que se quiere usar como filtro.',
name: 'fechaInicio',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Fecha fin se quiere usar como filtro.',
name: 'fechaFin',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la institución que se quiere usar como filtro.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del modulo que se quiere usar como filtro.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del préstamo que se quiere usar como filtro.',
name: 'id_prestamo',
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({
description: 'Id del tipo de usuario que se quiere usar como filtro.',
name: 'id_tipo_usuario',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Usuario que se quiere usar como filtro.',
name: 'usuario',
type: 'string',
required: false,
})
reporte(@Request() req, @Query() query: HistorialDto) {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarOperador(operador);
return this.prestamoService.findAll(query);
}
2022-06-28 19:29:10 -05:00
@Serealize(PrestamosOutputDto)
2022-04-17 22:51:49 -05:00
@Get('historial')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description:
'Endpoint que retorna 25 prestamos dependiendo de la página en la que se encuentra el operador y sus filtros.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 13:35:47 -05:00
@ApiQuery({
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
type: 'string',
})
@ApiQuery({
description: 'Carrito que se quiere usar como filtro.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Equipo que se quiere usar como filtro.',
name: 'equipo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Fecha inicio que se quiere usar como filtro.',
name: 'fechaInicio',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Fecha fin se quiere usar como filtro.',
name: 'fechaFin',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la institución que se quiere usar como filtro.',
name: 'id_institucion',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del modulo que se quiere usar como filtro.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del préstamo que se quiere usar como filtro.',
name: 'id_prestamo',
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({
description: 'Id del tipo de usuario que se quiere usar como filtro.',
name: 'id_tipo_usuario',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Usuario que se quiere usar como filtro.',
name: 'usuario',
type: 'string',
required: false,
})
historial(@Request() req, @Query() query: HistorialDto) {
const operador: Operador = req.user.operador;
2022-09-05 06:53:59 -05:00
this.validarUsuarioService.validarOperador(operador);
2022-10-25 16:45:38 -05:00
return this.prestamoService.findAll(query);
2022-06-12 13:35:47 -05:00
}
2022-04-17 22:51:49 -05:00
2022-06-28 19:29:10 -05:00
@Serealize(PrestamosEquipoOutputDto)
2022-06-03 08:47:36 -05:00
@Get('historial-equipo')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description:
'Endpoint que retorna 25 prestamos de un usuario dependiendo de la página en la que se encuentra el operador y sus filtros.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 13:35:47 -05:00
@ApiQuery({
2022-07-07 23:56:17 -05:00
description: 'Id del equipo.',
name: 'id_equipo',
2022-06-12 13:35:47 -05:00
type: 'string',
})
@ApiQuery({
2022-07-07 23:56:17 -05:00
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
2022-06-12 13:35:47 -05:00
type: 'string',
})
historialEquipo(@Request() req, @Query() query: IdEquipoPaginaDto) {
const operador: Operador = req.user.operador;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-06-12 13:35:47 -05:00
return this.prestamoService.findAllByIdEquipo(
parseInt(query.id_equipo),
parseInt(query.pagina),
);
}
2022-04-17 22:51:49 -05:00
2022-06-28 19:29:10 -05:00
@Serealize(PrestamosUsuarioOutputDto)
2022-06-03 08:47:36 -05:00
@Get('historial-usuario')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 13:35:47 -05:00
@ApiOperation({
description:
'Endpoint que retorna 25 prestamos de un equipo dependiendo de la página en la que se encuentra el operador y sus filtros.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 13:35:47 -05:00
@ApiQuery({
2022-07-07 23:56:17 -05:00
description: 'Id del usuario.',
name: 'id_usuario',
2022-06-12 13:35:47 -05:00
type: 'string',
})
@ApiQuery({
2022-07-07 23:56:17 -05:00
description: 'Página en la que se encuentra el usuario.',
name: 'pagina',
2022-06-12 13:35:47 -05:00
type: 'string',
})
historialUsuario(@Request() req, @Query() query: IdUsuarioPaginaDto) {
const operador: Operador = req.user.operador;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-06-12 13:35:47 -05:00
return this.prestamoService.findAllByIdUsuario(
parseInt(query.id_usuario),
parseInt(query.pagina),
);
}
2022-04-17 22:51:49 -05:00
2022-07-10 23:41:32 -05:00
@Serealize(PrestamoOutputDto)
2022-04-17 22:51:49 -05:00
@Post()
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 15:16:24 -05:00
@ApiOperation({ description: 'Endpoint que crea un prestamo nuevo.' })
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 15:16:24 -05:00
@ApiBody({
description:
'Todas las variables a excepción de id_programa y id_tipo_entrada son obligatorios.',
examples: {
ejemplo: {
value: {
id_modulo: 1,
id_tipo_carrito: 1,
2022-07-07 23:56:17 -05:00
_id_programa: 1,
_id_tipo_entrada: 1,
2022-06-12 15:16:24 -05:00
},
},
},
})
pedir(@Request() req, @Body() body: PedirDto) {
const usuario: Usuario = req.user.usuario;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarUsuario(usuario);
2022-06-08 23:37:29 -05:00
return this.prestamoService.create(
2022-08-06 19:56:37 -05:00
usuario,
2022-06-08 23:37:29 -05:00
body.id_modulo,
body.id_tipo_carrito,
body.id_programa,
body.id_tipo_entrada,
);
}
2022-04-17 22:51:49 -05:00
2022-06-14 15:39:13 -05:00
@Serealize(PrestamoOutputDto)
2022-06-03 08:47:36 -05:00
@Get('prestamo-id-prestamo')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
@ApiOperation({ description: 'Endpoint que retorna un préstamo por su id.' })
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-07-07 23:56:17 -05:00
@ApiQuery({
description: 'Id del préstamo.',
name: 'id_prestamo',
type: 'text',
})
prestamoIdPrestamo(@Request() req, @Query() query: IdPrestamoDto) {
2022-09-02 16:15:05 -05:00
const usuarioOperador: Operador | Usuario =
req.user.operador || req.user.usuario;
2022-10-23 17:52:46 -05:00
if (usuarioOperador instanceof Usuario)
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarUsuario(usuarioOperador);
else this.validarUsuarioService.validarAdminOperador(usuarioOperador);
2022-10-01 13:18:25 -05:00
return this.prestamoService.prestamoInfoById(parseInt(query.id_prestamo));
}
2022-04-17 22:51:49 -05:00
2022-06-28 19:29:10 -05:00
@Serealize(PrestamoOutputDto)
2022-06-03 08:47:36 -05:00
@Get('prestamo-id-usuario')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna un préstamo activo por el id del usuario.',
})
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-10-25 16:45:38 -05:00
prestamoIdUsuario(@Request() req) {
const usuario: Usuario = req.user.usuario;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarUsuario(usuario);
2022-11-06 23:01:12 -06:00
return this.prestamoService.prestamoInfoByUsuario(usuario, false);
}
2022-04-17 22:51:49 -05:00
2022-06-14 15:39:13 -05:00
@Serealize(PrestamoEquipoOutputDto)
2022-06-03 08:47:36 -05:00
@Get('prestamo-numero-inventario')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description:
'Endpoint que retorna un préstamo activo por el número de inventario de un equipo.',
})
@ApiQuery({
description: 'El número de inventario del equipo.',
name: 'numero_inventario',
type: 'string',
})
prestamoNumeroInventario(
@Request() req,
@Query() query: NumeroInventarioDto,
) {
const operador: Operador = req.user.operador;
2022-09-02 16:15:05 -05:00
this.validarUsuarioService.validarAdminOperador(operador);
2022-10-01 13:18:25 -05:00
return this.prestamoService.prestamoInfoByNumeroInventario(
2022-10-25 16:45:38 -05:00
operador,
2022-10-01 00:28:45 -05:00
query.numero_inventario,
);
}
2022-04-17 22:51:49 -05:00
2022-10-24 09:30:19 -05:00
@Serealize(MessageOutputDto)
2022-06-14 20:57:28 -05:00
@Put('regresar-id-prestamo')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-12 15:39:29 -05:00
@ApiOperation({ description: 'Endpoint que desactiva un préstamo.' })
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-12 15:39:29 -05:00
@ApiBody({
description: 'Ambas variables son obligatorias.',
2022-06-14 20:57:28 -05:00
examples: {
ejemplo: {
value: {
id_prestamo: 1,
2022-09-29 02:51:27 -05:00
id_status: 1,
2022-06-14 20:57:28 -05:00
_descripcion: '',
2022-09-29 02:51:27 -05:00
_motivo: '',
2022-06-14 20:57:28 -05:00
_id_institucion_infraccion: 603,
},
},
},
2022-06-12 15:39:29 -05:00
})
regresarIdPrestamo(@Request() req, @Body() body: RegresarIdPrestamoDto) {
const operador: Operador = req.user.operador;
2022-11-03 02:48:47 -06:00
const modulo: Modulo = req.user.modulo;
2022-11-03 02:48:47 -06:00
this.validarUsuarioService.validarSoloOperador(operador);
2022-06-14 20:57:28 -05:00
return this.prestamoService.regresarIdPrestamo(
2022-09-28 21:43:17 -05:00
operador,
2022-11-03 02:48:47 -06:00
modulo,
2022-06-14 20:57:28 -05:00
body.id_prestamo,
2022-09-29 02:51:27 -05:00
body.id_status,
body.motivo,
2022-06-14 20:57:28 -05:00
body.descripcion,
body.id_institucion_infraccion,
);
}
2022-10-24 09:30:19 -05:00
@Serealize(MessageOutputDto)
2022-06-14 20:57:28 -05:00
@Put('regresar-numero-inventario')
2022-07-15 00:27:30 -05:00
@UseGuards(AuthGuard('jwt'))
2022-06-14 20:57:28 -05:00
@ApiOperation({ description: 'Endpoint que desactiva un préstamo.' })
2022-07-15 00:27:30 -05:00
@ApiBearerAuth('jwt')
2022-06-14 20:57:28 -05:00
@ApiBody({
description: 'Ambas variables son obligatorias.',
examples: {
ejemplo: {
value: {
numero_inventario: '',
2022-09-29 02:51:27 -05:00
id_status: 1,
2022-06-14 20:57:28 -05:00
_descripcion: '',
2022-09-29 02:51:27 -05:00
_motivo: '',
2022-06-14 20:57:28 -05:00
_id_institucion_infraccion: 603,
},
},
},
})
regresarNumeroInventario(
@Request() req,
@Body() body: RegresarNumeroInventarioDto,
) {
const operador: Operador = req.user.operador;
2022-11-03 02:48:47 -06:00
const modulo: Modulo = req.user.modulo;
2022-11-03 02:48:47 -06:00
this.validarUsuarioService.validarSoloOperador(operador);
2022-06-14 20:57:28 -05:00
return this.prestamoService.regresarNumeroInventario(
2022-09-28 21:43:17 -05:00
operador,
2022-11-03 02:48:47 -06:00
modulo,
2022-06-14 21:43:07 -05:00
body.numero_inventario,
2022-09-29 02:51:27 -05:00
body.id_status,
body.motivo,
2022-06-14 20:57:28 -05:00
body.descripcion,
body.id_institucion_infraccion,
);
2022-06-12 15:39:29 -05:00
}
2022-04-04 20:53:32 -05:00
}