Beispiel #1
0
        static void Main(string[] args)
        {
            //Path al archivo del libro mayor.
            String pathLibroMayor = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "mayor.txt");

            //Crear lista de asientos diarios.
            string[] csvAsientosDiarios = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "diario.txt"));
            var      asientosDiarios    = new List <AsientoDiario>();

            using (StreamWriter salida = File.AppendText(pathLibroMayor))

                for (int i = 1; i < csvAsientosDiarios.Length; i++)
                {
                    AsientoDiario asiento = new AsientoDiario(csvAsientosDiarios[i]);
                    asientosDiarios.Add(asiento);
                }


            // Ejecutar funciones solicitadas hasta salir.
            while (true)
            {
                //Crear lista de asientos del libro mayor.
                string[] csvAsientosMayor = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "mayor.txt"));
                var      asientosMayor    = new List <AsientoMayor>();
                for (int i = 1; i < csvAsientosMayor.Length; i++)
                {
                    AsientoMayor asientoMayor = new AsientoMayor(csvAsientosMayor[i]);
                    asientosMayor.Add(asientoMayor);
                }

                Console.Clear();
                Console.WriteLine("Seleccione la opción deseada:");
                Console.WriteLine("1 - Actualizar diario mayor.");
                Console.WriteLine("2 - Consultar diario mayor.");
                Console.WriteLine("3 - Salir.");

                int seleccion = Validaciones.IngresarOpcion();

                switch (seleccion)
                {
                case 1:
                    Funciones.ActualizarMayor(asientosDiarios, asientosMayor, pathLibroMayor);
                    Console.Clear();
                    break;

                case 2:
                    Console.Clear();
                    Funciones.ConsultarMayor(pathLibroMayor);
                    break;

                case 3:
                    System.Environment.Exit(1);
                    break;
                }
            }
        }
Beispiel #2
0
        // Actualiza diario mayor
        public static void ActualizarMayor(List <AsientoDiario> libroDiario, List <AsientoMayor> libroMayor, string pathSalida) //Actualiza diario mayor.
        {
            //validar cuenta a actualizar
            Console.WriteLine("Ingrese el nro de cuenta a actualizar:");
            int      nroCuenta            = Validaciones.IngresarNumeroCuenta();
            bool     mayorContieneCuenta  = libroMayor.Any(item => item.CodigoCuenta == nroCuenta);
            bool     diarioContieneCuenta = libroDiario.Any(item => item.CodigoCuenta == nroCuenta);
            double   debeAgregado         = 0;
            double   haberAgregado        = 0;
            int      contregistros        = 0;
            DateTime?ultimaFecha          = null;

            // si la cuenta no existe en libro diario, no hace nada

            if (!diarioContieneCuenta)
            {
                Console.WriteLine("No hay asientos nuevos correspondientes a esa cuenta.");
            }

            // si la cuenta existe en libro mayor, la actualiza
            else
            {
                if (mayorContieneCuenta)
                {
                    AsientoMayor         registroAActualizar = libroMayor.Where(x => x.CodigoCuenta == nroCuenta).OrderByDescending(o => o.Fecha).FirstOrDefault();
                    List <AsientoDiario> asiDiariosOrdenados = libroDiario.OrderBy(o => o.Fecha).ToList();
                    List <AsientoMayor>  asientosAgregar     = new List <AsientoMayor>();
                    debeAgregado  += registroAActualizar.Debe;
                    haberAgregado += registroAActualizar.Haber;

                    foreach (var item in asiDiariosOrdenados)
                    {
                        if (item.CodigoCuenta == registroAActualizar.CodigoCuenta && item.Fecha > registroAActualizar.Fecha)
                        {
                            debeAgregado  += item.Debe;
                            haberAgregado += item.Haber;
                            contregistros++;
                            ultimaFecha = item.Fecha;
                        }
                        asientosAgregar.Clear();
                        asientosAgregar.Add(new AsientoMayor(nroCuenta, item.Fecha, debeAgregado, haberAgregado));
                    }

                    // muestra los datos usados para la actualizacion
                    if (contregistros > 0)
                    {
                        Console.WriteLine("Se actualizó el libro mayor con la información de " + contregistros + " asientos del libro diario, este es el nuevo estado de la cuenta:");

                        foreach (var obj in asientosAgregar)
                        {
                            Console.WriteLine(obj);

                            List <String> lines = new List <string>();
                            string        line;

                            System.IO.StreamReader file = new System.IO.StreamReader(pathSalida);
                            while ((line = file.ReadLine()) != null)
                            {
                                lines.Add(line);
                            }
                            file.Close();

                            lines.RemoveAll(l => l.StartsWith(nroCuenta.ToString()));
                            using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(pathSalida))
                            {
                                outfile.Write(String.Join(System.Environment.NewLine, lines.ToArray()));
                                outfile.Close();
                            }

                            using (StreamWriter sw = File.AppendText(pathSalida))
                            {
                                sw.WriteLine("\n" + obj.ToString());
                                sw.Close();
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("No había asientos nuevos.");
                    }
                }


                // Si la cuenta no existe, agrega el asiento al libro mayor.
                else
                {
                    Console.WriteLine("La cuenta no existe en el libro mayor. Agregando asientos de la cuenta.");
                    List <AsientoDiario> asiDiariosOrdenados = libroDiario.OrderBy(o => o.Fecha).ToList();
                    List <AsientoMayor>  asientosAgregar     = new List <AsientoMayor>();

                    foreach (var item in asiDiariosOrdenados)
                    {
                        if (item.CodigoCuenta == nroCuenta)
                        {
                            debeAgregado  += item.Debe;
                            haberAgregado += item.Haber;
                            contregistros++;
                            ultimaFecha = item.Fecha;
                        }
                        asientosAgregar.Clear();
                        asientosAgregar.Add(new AsientoMayor(nroCuenta, item.Fecha, debeAgregado, haberAgregado));
                    }

                    // Muestra los datos usados para la actualizacion.
                    if (contregistros > 0)
                    {
                        Console.WriteLine("Se añadieron los siguientes " + contregistros.ToString() + " registros al libro mayor: ");

                        foreach (var obj in asientosAgregar)
                        {
                            Console.WriteLine(obj);
                            using (StreamWriter sw = File.AppendText(pathSalida))
                            {
                                sw.WriteLine(obj);
                                sw.Close();
                            }
                        }
                    }
                }
            }

            Console.WriteLine("Presione cualquier tecla para continuar.");
            Console.ReadKey();
        }