/// <summary> /// Retorna una lista de los libros mostrando ID y titulo /// </summary> /// <returns></returns> public IActionResult Listar() { var modelo = _stock.ObtenerTitulosDeEditorial(null); ViewData.Model = modelo; ViewBag.Encabezado = "Lista de TODOS los ID y Titulos"; return(View()); }
public void Run() { Console.Clear(); Header("biblioZ-cli", "Interface de linea de comando para BiblioZone"); try { int opcion = Prompt.Menu("Seleccionar una de las acciones que queres realizar", new[] { "Importar Libros desde --file y ejecutar las pruebas en memoria", "Importar Libros desde --file y guardar en la DB", "Importar Autores desde --file y mostrar en pantalla", "Importar Autores desde --file y guardar en la DB", "Consultas varias desde el contexto", "Pruebas ingresando Libros" }); // TODO_HECHO obtener archivo desde la configuracion // // --file=D:\CURSOS\libros.csv --tipo=libros // // --file=D:\CURSOS\autores.csv --tipo=autores // // NOTA: cuando ponemos el menu, no tiene sentido usar la opcion --tipo // // string file = @"D:\CURSOS\PTR2020_Avanzado\listados\libros.csv"; string file = _config["file"]; if (opcion.In(0, 2, 1, 3) && file == null) { throw new ApplicationException("La opcion seleccionada necesita que se pase un archivo en --file"); } switch (opcion) { case 0: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file); IEnumerable <Libro> lista = _imp.ImportarCSV(file); _logger.LogInformation("Ejecutando pruebas en memoria..."); // ejecutamos las pruebas sobre la lista importada (memoria) // Pruebas(lista); } } break; case 1: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file); IEnumerable <Libro> lista = _imp.ImportarCSV(file); _logger.LogInformation("Iniciando el proceso de exportacion"); // eliminamos los datos previos?? if (Prompt.Confirm("Eliminamos datos previos?", true, "WARNING Esta operacion eliminara todos los datos de las 3 tablas de Articulos!!")) { _exp.ClearDatabase(); } // pasamos la responsabilidad de la exportacion al componente adecuado... // _exp.ExportarListaDeLibros(lista); } } break; case 2: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Autores {archivo}", file); var autoresTemp = _imp.ImportarAutores(file); Console.WriteLine("Lista de autores importados..."); foreach (var item in autoresTemp) { Console.WriteLine($"Se importo el siguiente par (idLibro, autor) ==> {item}"); _logger.LogDebug("Se importo el siguiente par (idLibro, autor) ==> {tupla}", item); } } } break; case 3: { if (Prompt.Confirm($"Es el archivo correcto? ==> {file}")) { _logger.LogInformation("Iniciando el procesamiento del archivo de Autores {archivo}", file); var autoresTemp = _imp.ImportarAutores(file); Console.WriteLine("Lista de autores importados..."); foreach (var item in autoresTemp) { Console.WriteLine($"Se importo el siguiente par (idLibro, autor) ==> {item}"); _logger.LogDebug("Se importo el siguiente par (idLibro, autor) ==> {tupla}", item); } _exp.ExportarListaDeAutores(autoresTemp); } } break; case 13: { string editorial = Prompt.Input <string>("Ingresar el nombre de una editorial"); Console.WriteLine($"Titulos para la Editorial {editorial}:\n"); // foreach (string titulo in _exp.ObtenerTitulosDeEditorial(editorial)) { Console.WriteLine(titulo); } } break; case 4: { Console.WriteLine($"Pruebas de consultas e ingresos varios para libros y autores:\n"); string criterio = Prompt.Input <string>("Ingresar criterio (titulo, editorial o autor)... "); var libros = _stock.GetLibrosFromCriterio(criterio); foreach (Libro libro in libros) { Console.WriteLine($"Titulo: {libro.Titulo} - Clave: {libro.ID_Real} - ISBN: {libro.ISBN13}"); Console.WriteLine("Autor(es) del libro..."); foreach (Autor autor in libro.Autores) { Console.WriteLine($"Nombre: {autor.Nombre} - Libros Escritos: {autor.Libros.Count}"); } } string editorial = Prompt.Input <string>("Ingresar un nombre de editorial (exacto) "); var titulos = _stock.ObtenerTitulosDeEditorial(editorial); Console.WriteLine($"Titulos editados por {editorial}"); foreach ((Guid id, string titulo)item in titulos) { Console.WriteLine($"Titulo: {item.titulo} - ID: {item.id}"); } //if (libroResultado == null) //{ // // crear nuevo libro... // libroResultado = new Libro() // { // ID = "1234", // Titulo = titulo, // Publicacion = null // }; //} //else //{ // Console.WriteLine($"Autores del libro: {libroResultado.Titulo}"); // foreach (var au in libroResultado.LibroAutores) // Console.WriteLine($"ID={au.ID_Autor} ; Nombre={au.Autor.Nombre}"); //} //string autor = Prompt.Input<string>("Ingresar nombre del autor (exacto)"); //var autorResultado = _exp.GetAutor(autor); //if (autorResultado == null) //{ // autorResultado = new Autor() // { // Nombre = autor // }; //} //else //{ // Console.WriteLine($"Libros escritos por {autor}"); // foreach (var li in autorResultado.AutorLibros) // Console.WriteLine($"{li.Libro.Titulo}"); //} //// PARA MEDITAR -- De que manera podemos evitar el UPDATE del Libro que no esta modificado?? //// //libroResultado.LibroAutores.Add(new LibroAutor() { Libro = libroResultado, Autor = autorResultado }); //_exp.AgregarLibro(libroResultado); //// _exp.AgregarLibroAutor(new LibroAutor() { Libro = libroResultado, Autor = autorResultado }); //Console.WriteLine($"GUID: {libroResultado.ID_Real} Fecha: {libroResultado.Publicacion}"); } break; } } catch (ApplicationException ex) when(ex.Data.Contains("archivo")) { Console.WriteLine($"Se produjo una excepcion {ex.Message} Archivo: {ex.Data["archivo"]}"); } catch (NullReferenceException ex) { Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.WriteLine(); Console.WriteLine("[finally] ==> programa terminado!!"); } }