@page "/inventario/movimientos"
@attribute [Authorize]
@inject IInventoryService InventorySvc
@inject IDialogService DialogSvc
@inject ISnackbar Snackbar
Movimientos de Inventario - AutoTaller ERP
Todos
@foreach (var r in repuestos)
{
@r.CodigoInterno — @r.Descripcion
}
Todos
@foreach (var a in almacenes)
{
@a.Nombre
}
@total movimiento(s)
Fecha
Tipo
Repuesto
Almacén
Cantidad
Costo unit.
Saldo nuevo
Documento
Usuario
@context.Fecha.ToString("dd/MM/yyyy")
@context.Fecha.ToString("HH:mm")
@TipoTexto(context.Tipo)
@context.CodigoRepuesto
@context.DescripcionRepuesto
@context.Almacen
@(EsEntrada(context.Tipo) ? "+" : "-")@context.Cantidad.ToString("N2")
S/. @context.CostoUnitario.ToString("N2")
@context.SaldoNuevo.ToString("N2")
@if (!string.IsNullOrEmpty(context.NumeroDocumento))
{
@context.TipoDocumento @context.NumeroDocumento
}
@if (!string.IsNullOrEmpty(context.Justificacion))
{
}
@(context.Usuario ?? "—")
No hay movimientos para los filtros seleccionados.
@if (totalPages > 1)
{
}
@code {
private int? repuestoFiltro;
private int? almacenFiltro;
private DateTime? desde = DateTime.Today.AddDays(-30);
private DateTime? hasta = DateTime.Today;
private List movimientos = new();
private List repuestos = new();
private List almacenes = new();
private bool cargando = true;
private int page = 1;
private const int pageSize = 15;
private int total = 0;
private int totalPages = 0;
protected override async Task OnInitializedAsync()
{
repuestos = await InventorySvc.ListarTodosRepuestosAsync();
almacenes = await InventorySvc.ListarAlmacenesAsync();
await CargarAsync();
}
private async Task CargarAsync()
{
cargando = true;
var resultado = await InventorySvc.ListarMovimientosAsync(repuestoFiltro, almacenFiltro, desde, hasta, page, pageSize);
movimientos = resultado.Items;
total = resultado.Total;
totalPages = resultado.TotalPages;
cargando = false;
}
private async Task OnPageChanged(int p)
{
page = p;
await CargarAsync();
}
private async Task NuevoMovimiento()
{
var dto = new MovimientoFormDto
{
RepuestoId = repuestos.FirstOrDefault()?.Id ?? 0,
AlmacenId = almacenes.FirstOrDefault()?.Id ?? 0
};
var parametros = new DialogParameters
{
["Movimiento"] = dto,
["Repuestos"] = repuestos.Select(r => (r.Id, r.CodigoInterno, r.Descripcion)).ToList(),
["Almacenes"] = almacenes
};
var opciones = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await DialogSvc.ShowAsync("Registrar movimiento", parametros, opciones);
var r = await dialog.Result;
if (r is { Canceled: false })
{
Snackbar.Add("Movimiento registrado", Severity.Success);
await CargarAsync();
}
}
private static bool EsEntrada(TipoMovimientoInventario t) =>
t is TipoMovimientoInventario.EntradaCompra
or TipoMovimientoInventario.DevolucionCliente
or TipoMovimientoInventario.AjustePositivo
or TipoMovimientoInventario.TrasladoEntrada;
private static Color TipoColor(TipoMovimientoInventario t) => t switch
{
TipoMovimientoInventario.EntradaCompra => Color.Success,
TipoMovimientoInventario.DevolucionCliente => Color.Info,
TipoMovimientoInventario.AjustePositivo => Color.Warning,
TipoMovimientoInventario.AjusteNegativo => Color.Error,
TipoMovimientoInventario.SalidaConsumoOT => Color.Primary,
TipoMovimientoInventario.DevolucionProveedor => Color.Default,
TipoMovimientoInventario.TrasladoEntrada => Color.Tertiary,
TipoMovimientoInventario.TrasladoSalida => Color.Tertiary,
_ => Color.Default
};
private static string TipoIcon(TipoMovimientoInventario t) => EsEntrada(t)
? Icons.Material.Filled.ArrowDownward
: Icons.Material.Filled.ArrowUpward;
private static string TipoTexto(TipoMovimientoInventario t) => t switch
{
TipoMovimientoInventario.EntradaCompra => "Compra",
TipoMovimientoInventario.SalidaConsumoOT => "Consumo OT",
TipoMovimientoInventario.DevolucionCliente => "Dev. cliente",
TipoMovimientoInventario.DevolucionProveedor => "Dev. proveedor",
TipoMovimientoInventario.AjustePositivo => "Ajuste +",
TipoMovimientoInventario.AjusteNegativo => "Ajuste −",
TipoMovimientoInventario.TrasladoEntrada => "Traslado in",
TipoMovimientoInventario.TrasladoSalida => "Traslado out",
_ => t.ToString()
};
}