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