Se agregaron validaciones

This commit is contained in:
evenegas
2025-06-30 12:53:08 -06:00
parent 3eafb38f1f
commit a7ab20be29
19 changed files with 1149 additions and 75 deletions
+80 -4
View File
@@ -1,5 +1,5 @@
// src/excel/excel.controller.ts
import { Controller, Post, Get, UseGuards, Request, Res, UploadedFile, UseInterceptors, HttpStatus, Param, ParseIntPipe } from '@nestjs/common';
import { Controller, Post, Get, UseGuards, Request, Res, UploadedFile, UseInterceptors, HttpStatus, Param, ParseIntPipe, Body, BadRequestException } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiBearerAuth } from '@nestjs/swagger';
import { FileInterceptor } from '@nestjs/platform-express';
@@ -7,6 +7,10 @@ import { Response } from 'express';
import { ExcelDocumentation } from './excel.documentation';
import { ExcelService } from './excel.service';
import { MovimientoService } from '../movimiento/movimiento.service';
import { MailService } from 'src/mail/mail.service';
import { CreateUsuarioDto } from 'src/usuarios/dto/create-usuario.dto';
import { Origen } from 'src/entities/entities';
import { UsuariosService } from 'src/usuarios/usuarios.service';
@UseGuards(AuthGuard('jwt'))
@ApiBearerAuth('bearer')
@@ -15,8 +19,35 @@ export class ExcelController {
constructor(
private readonly excelService: ExcelService,
private readonly movimientoService: MovimientoService,
private readonly mailService: MailService,
private readonly usuarioService: UsuariosService // Asegúrate de importar el servicio de correo
) { }
@Post('carga')
async cargaUsuario(@Request() req, @Body() usuario: CreateUsuarioDto) {
console.log('Usuario recibido:', usuario);
if (req.user.origen != 'LOAD') {
throw new BadRequestException('Origen no permitido para carga')
}
const alta = await this.usuarioService.cargaIndividual(usuario, req.user.origen)
console.log('Alta de usuario:', alta);
await this.movimientoService.updateStatus(alta.movId, 'SUCCESS')
this.mailService.sendMail({
to: req.user.email, // Asegúrate de que el usuario tenga un email
subject: 'Carga de datos exitosa',
text: "La carga de datos se ha realizado con éxito.",
html: `<p>La carga de datos se ha realizado con éxito. ` + alta,
});
await this.excelService.enviarCargaMasiva();
}
@Post('verify')
@UseInterceptors(FileInterceptor('file'))
@ExcelDocumentation.verifyExcel()
@@ -40,7 +71,7 @@ export class ExcelController {
const origen = req.user.origen; // ahora sí existe
if (origen != 'LOAD') {
await this.movimientoService.log(
'LOAD',
origen,
'FAILED',
'Origen no permitido para carga'
);
@@ -50,13 +81,46 @@ export class ExcelController {
const result = await this.excelService.loadFile(file.buffer);
//Actualizar el estado de los movimientos
if (!result) {
this.mailService.sendMail({
to: req.user.email, // Asegúrate de que el usuario tenga un email
subject: 'Carga de datos Fallida',
text: "No se pudieron subir datos.",
html: '<p>No se pudieron subir datos.</p>',
});
throw new Error('No se pudo procesar el archivo.');
}
if (result.inserted == 0) {
this.mailService.sendMail({
to: req.user.email, // Asegúrate de que el usuario tenga un email
subject: 'Carga de datos Fallida',
text: "No se pudieron subir datos.",
html: `<p> Se han insertado ${result.inserted} registros.</p>
<p>Errores encontrados:</p>
<ul>${result.errors.map(error => `<li>${error}</li>`).join('')}</ul>`,
});
return result
}
await this.movimientoService.updateStatus(
result.id_movimiento,
'SUCCESS',
`inserted=${result.inserted}`
);
this.mailService.sendMail({
to: req.user.email, // Asegúrate de que el usuario tenga un email
subject: 'Carga de datos exitosa',
text: "La carga de datos se ha realizado con éxito.",
html: `<p>La carga de datos se ha realizado con éxito. Se han insertado ${result.inserted} registros.</p>
<p>Errores encontrados:</p>
<ul>${result.errors.map(error => `<li>${error}</li>`).join('')}</ul>`,
});
await this.excelService.enviarCargaMasiva();
return result
} catch (err) {
@@ -196,8 +260,9 @@ export class ExcelController {
//Agregarlo en su propio controller
@Get('movimientos')
async getMovimientos() {
const movimientos = await this.movimientoService.findAll();
async getMovimientos(@Request() req) {
const movimientos = await this.movimientoService.findAll(req.user.origen);
return movimientos;
}
@@ -217,4 +282,15 @@ export class ExcelController {
return { message: 'Servicios activados correctamente' };
}
@Get('cargaIndividual')
async cargarIndividual(
@Request() req) {
const origen = req.user.origen; // ahora sí existe
return this.movimientoService.findAllCargaIndv(origen);
}
}