Пример #1
0
        /// <summary>
        /// Ejecuta la aplicación principal
        /// </summary>
        public void Run()
        {
            ServiciosImportacion imp = new ServiciosImportacion();

            imp.ImportarCSV(Archivo);
            //Console.WriteLine(Archivo);
            //Console.ReadLine();
        }
Пример #2
0
        /// <summary>
        /// Ejecuta la aplicacion principal
        /// </summary>
        public void Run()
        {
            int j = 10;
            //var nombre = _config["nombre"];

            ServiciosImportacion imp = new ServiciosImportacion(_config);

            IEnumerable <Publicacion> listaOriginal = imp.ImportarCSV(Archivo);

            ContextoPublicaciones ctx = new ContextoPublicaciones(_config);

            //ctx.Publicaciones.Where(p => p.Titulo.Contains("prog"));

            ctx.Database.ExecuteSqlRaw("truncate table Publicaciones");

            foreach (var item in listaOriginal)
            {
                ctx.Publicaciones.Add(item);
            }

            ctx.SaveChanges();


            Console.WriteLine($"Instancias generadas {Publicacion.ContadorInstancias}");

            var stats = listaOriginal.Estadisticas <Publicacion>(h => h.Paginas);

            Console.WriteLine($"Minimo: {stats.min} Maximo: {stats.max} Promedio: {stats.prom}");

            //  AISLO LA EXPRESION LINQ (FLUENT)
            //

            //  var xx = Enumerable.All(listaOriginal, publicacion => true);

            //  var xxx = listaOriginal.Any(pub => pub.Tipo == TipoPublicacion.Revista);

            var filtrada = listaOriginal
                           .Where((x) => x.Tipo == TipoPublicacion.Libro && x.Paginas > j) // IEnum<Publicacion>
                           .Select((p) => new { p.Titulo, Hojas = p.Paginas })             // IEnumerable<????>
                           .Where((pub) => pub.Titulo.Contains("prog", StringComparison.CurrentCultureIgnoreCase));

            //  ???? es un tipo anonimo que consiste de dos propiedades
            //  Titulo (string)
            //  Hojas (int?)
            foreach (var x in filtrada)
            {
                Console.WriteLine($"{x.Titulo} {x.Hojas}");
            }

            /*
             *    //List<Publicacion> listaFiltrada = new List<Publicacion>();
             *
             *    //  DELEGADO GENERICO
             *    //
             *    Func<Publicacion, bool> predicado = FiltrarPaginas;
             *
             *    foreach (var l in listaOriginal)
             *    {
             *      if (predicado(l))
             *        listaFiltrada.Add(l);
             *    }
             *    foreach (Publicacion p in listaFiltrada)
             *    {
             *      Console.WriteLine($"{p.Titulo} {p.Paginas}");
             *    }
             *
             * /*
             *    Publicacion --> bool
             *
             *    (pub) => pub.Tipo == TipoPublicacion.Revista
             *
             */



            /*
             *    //  CASTING TRADICIONAL QUE PUEDE PROVOCAR EXCEPCIONES SI NO SE PUEDE CONVERTIR
             *    //
             *    //  List<Publicacion> listaReal = (List<Publicacion>)lista ;
             *
             *    List<Publicacion> listaReal = lista as List<Publicacion> ?? new List<Publicacion>();
             *
             *    //  usamos throw para generar una excepcion propia
             *    //
             *    //  List<Publicacion> listaReal = lista as List<Publicacion> ?? throw new ApplicationException("");
             *
             *
             *    if (listaReal.Count >= 10)
             *    {
             *      Console.WriteLine($"{listaReal[10].Titulo}");
             *    }
             *
             *    int i = 1;
             *    foreach (Publicacion p in lista)
             *    {
             *      Console.WriteLine($"{i++} -- {p.Titulo}");
             *    }
             */
            Console.ReadLine();
        }
Пример #3
0
        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 [falta implementar guardar en la DB]",
                    "Consultas varias desde el contexto",
                    "Pruebas ingresando Libros"
                });

                //  TODO_HECHO obtener archivo desde la configuracion
                //
                //  --file=D:\CURSOS\INCOMPANY\clase\datos\libros.csv --tipo=libros
                //
                //  --file=D:\CURSOS\INCOMPANY\clase\datos\autores.csv --tipo=autores
                //
                //  NOTA: cuando ponemos el menu, no tiene sentido usar la opcion --tipo
                //
                string file = _config["file"];

                if (opcion.In(0, 2, 1) && 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:
                {
                    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 ingresos varias para libros y autores:\n");
                    string titulo = Prompt.Input <string>("Ingresar titulo o parte del titulo");

                    var libroResultado = _exp.GetLibros(titulo).FirstOrDefault();

                    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!!");
            }
        }