@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() }; }