Feat: Cambios Varios 2

This commit is contained in:
2026-01-05 10:30:04 -03:00
parent 8bc1308bc5
commit 0fa77e4a98
184 changed files with 11098 additions and 6348 deletions

View File

@@ -22,6 +22,7 @@ public class ReportsController : ControllerBase
}
[HttpGet("dashboard")]
[Authorize(Roles = "Admin,GerenteVentas")]
public async Task<IActionResult> GetDashboard([FromQuery] DateTime? from, [FromQuery] DateTime? to)
{
var start = from ?? DateTime.UtcNow.Date;
@@ -31,6 +32,7 @@ public class ReportsController : ControllerBase
}
[HttpGet("sales-by-category")]
[Authorize(Roles = "Admin,GerenteVentas")]
public async Task<IActionResult> GetSalesByCategory([FromQuery] DateTime? from, [FromQuery] DateTime? to)
{
var start = from ?? DateTime.UtcNow.AddMonths(-1);
@@ -48,6 +50,7 @@ public class ReportsController : ControllerBase
}
[HttpGet("audit")]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> GetAuditLogs()
{
// Obtenemos los últimos 100 eventos
@@ -108,15 +111,39 @@ public class ReportsController : ControllerBase
[HttpGet("cashier-transactions")]
[Authorize(Roles = "Cajero,Admin")]
public async Task<IActionResult> GetCashierTransactions()
public async Task<IActionResult> GetCashierTransactions(
[FromQuery] DateTime? from,
[FromQuery] DateTime? to,
[FromQuery] int? userId)
{
// 1. Obtener datos del usuario logueado
var userIdClaim = User.FindFirst("Id")?.Value;
var userRole = User.FindFirst(System.Security.Claims.ClaimTypes.Role)?.Value;
if (string.IsNullOrEmpty(userIdClaim)) return Unauthorized();
int userId = int.Parse(userIdClaim);
// Usamos el repositorio para traer los avisos de hoy de este usuario
var transactions = await _listingRepo.GetDetailedReportAsync(DateTime.UtcNow, DateTime.UtcNow, userId);
// 2. Lógica de seguridad para el filtro de usuario:
// Si es Admin, puede ver a cualquier cajero (usa el userId que viene por query).
// Si es Cajero, SOLO puede verse a sí mismo (forzamos su propio ID).
int? targetUserId = (userRole == "Admin") ? userId : int.Parse(userIdClaim);
// 3. Manejo de fechas:
// Si no vienen, usamos el rango de hoy.
// Pero el frontend enviará los valores de los selectores.
var startDate = from ?? DateTime.UtcNow.Date;
var endDate = to ?? DateTime.UtcNow.Date;
// Llamamos al repositorio con las fechas REALES enviadas desde el frontend
var transactions = await _listingRepo.GetDetailedReportAsync(startDate, endDate, targetUserId);
return Ok(transactions);
}
[HttpGet("cajeros")]
[Authorize(Roles = "Cajero,Admin")]
public async Task<IActionResult> GetCajeros()
{
var cajeros = await _listingRepo.GetActiveCashiersAsync();
return Ok(cajeros);
}
}