public static List <PlanCuentas> CargarPlanDeCuentas() { List <PlanCuentas> PlanDeCuentas = new(); string direccion = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Actividad 03 - Plan de cuentas.txt"); FileInfo elPlan = new FileInfo(direccion); if (!elPlan.Exists) { Funciones.MostrarError("No se encuentra el plan de cuentas"); Console.ReadLine(); Environment.Exit(0); } try { StreamReader abridor = elPlan.OpenText(); if (elPlan.Length == 0) { Funciones.MostrarError("El archivo de plan de cuentas esta vacio!."); Console.ReadLine(); Environment.Exit(0); return(null); } while (!abridor.EndOfStream) { string Linea = abridor.ReadLine(); string[] Vector = Linea.Split('|'); if (Vector[0] == "Codigo" && Vector[1] == "Nombre" && Vector[2] == "Tipo") { // Con esto nos salteamos la primera linea. } else { PlanCuentas P = new PlanCuentas(); P.Codigo = Int32.Parse(Vector[0]); P.Nombre = Vector[1]; P.Tipo = Vector[2]; PlanDeCuentas.Add(P); } } abridor.Close(); return(PlanDeCuentas); } catch (IOException e) { Console.WriteLine("No se pudo cargar el plan de cuentas. Vuelva a abrir el programa: " + e.Source); Console.ReadLine(); Environment.Exit(0); return(null); } }
static void Main(string[] args) { // Inicializamos variables List <Asientos> Asiento = new(); string direccion = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Diario.txt"); #region Variables para el menu 1 List <PlanCuentas> PlanDeCuentas = new(); PlanDeCuentas = Funciones.CargarPlanDeCuentas(); int cantidadAsientos, nroCuenta; DateTime fecha; Double montoDebe = 0; Double montoHaber = 0; Double debeIncremental = 0; Double haberIncremental = 0; Double incrementalCuentasHaber = 0; Double incrementalCuentasDebe = 0; //Bools de parses bool parseNroAsiento = false; bool parse1 = false; bool parse2 = false; bool parse3 = false; bool parse4 = false; bool parse5 = false; bool parse6 = false; bool parse7 = false; bool parse8 = false; //Fin de bools de parses bool paso1 = false; bool paso2 = false; bool paso3 = false; bool hayAsientos = false; #endregion // Inicio del programa // Variable para el menu bool continuamos = true; while (continuamos) { Funciones.MostrarMenu(); int opcion; if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out opcion)) { switch (opcion) { case 1: Console.Clear(); Console.WriteLine("¿Cuantos asientos quiere ingresar?"); do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out cantidadAsientos)) { if (cantidadAsientos == 0) { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } else { parse1 = true; } } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse1 == false); if (Funciones.ComprobarTxt() == false) { hayAsientos = true; } else { hayAsientos = false; } int nrodeAsiento = 0; do { // Iniciamos recorrido. for (int i = 0; i < cantidadAsientos; i++) { if (hayAsientos == true) { Console.WriteLine("Ingrese el nro de asiento"); do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out nrodeAsiento)) { if (nrodeAsiento == 0) { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } else { parseNroAsiento = true; } } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parseNroAsiento == false); Console.WriteLine("-----------Asiento {0}-----------", (nrodeAsiento)); parseNroAsiento = false; } else { Console.WriteLine("-----------Asiento {0}-----------", (i + 1)); } Console.WriteLine("Ingrese la fecha del asiento en el siguiente formato: DD/MM/AAAA"); do { if (DateTime.TryParseExact(Console.ReadLine(), "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out fecha)) { if (fecha > DateTime.Today) { Funciones.MostrarError("La fecha del asiento no puede ser futura. Ingrese nuevamente."); } else { parse2 = true; } } else { Funciones.MostrarError("Lo ingresado no es una fecha valida. Ingrese nuevamente."); } } while (parse2 == false); parse2 = false; Console.WriteLine("Ingrese la cantidad de cuentas del DEBE:"); // Ciclo DEBE. int cantidadCuentasDebe; do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out cantidadCuentasDebe)) { if (cantidadCuentasDebe == 0) { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } else { parse3 = true; } } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse3 == false); parse3 = false; for (int d = 0; d < cantidadCuentasDebe; d++) { paso1 = false; do { Console.WriteLine("Ingrese Nro de cuenta"); do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out nroCuenta)) { parse4 = true; } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse4 == false); parse4 = false; PlanCuentas buscar = PlanDeCuentas.Find(x => (x.Codigo == nroCuenta)); if (PlanDeCuentas.Contains(buscar)) { paso1 = true; } else { Funciones.MostrarError("No existe la cuenta en el Plan de Cuentas. Intente nuevamente."); } }while (paso1 == false); paso1 = false; // Pedimos Montos Console.WriteLine("Ingrese monto"); do { if (Double.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.AllowDecimalPoint, null, out montoDebe)) { parse5 = true; } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse5 == false); parse5 = false; debeIncremental += montoDebe; incrementalCuentasDebe = incrementalCuentasDebe + cantidadCuentasDebe; if (hayAsientos == true) { Asiento.Add(new Asientos() { NroAsiento = nrodeAsiento, Fecha = fecha.ToString("dd/MM/yyyy"), CodigoCuenta = nroCuenta, Debe = montoDebe, Haber = 0 }); } else { Asiento.Add(new Asientos() { NroAsiento = (i + 1), Fecha = fecha.ToString("dd/MM/yyyy"), CodigoCuenta = nroCuenta, Debe = montoDebe, Haber = 0 }); } } // Fin ciclo DEBE // Inicio Ciclo Haber Console.WriteLine("Ingrese la cantidad de cuentas del HABER:"); // Ciclo HABER. int cantidadCuentasHaber; do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out cantidadCuentasHaber)) { if (cantidadCuentasHaber == 0) { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } else { parse6 = true; } } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse6 == false); parse6 = false; for (int d = 0; d < cantidadCuentasHaber; d++) { paso2 = false; do { Console.WriteLine("Ingrese Nro de cuenta"); do { if (Int32.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.None, null, out nroCuenta)) { parse7 = true; } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse7 == false); parse7 = false; PlanCuentas buscar = PlanDeCuentas.Find(x => (x.Codigo == nroCuenta)); if (PlanDeCuentas.Contains(buscar)) { paso2 = true; } else { Funciones.MostrarError("No existe la cuenta en el Plan de Cuentas. Intente nuevamente."); } }while (paso2 == false); paso2 = false; // Pedimos Montos Console.WriteLine("Ingrese monto"); do { if (Double.TryParse(Console.ReadLine(), System.Globalization.NumberStyles.AllowDecimalPoint, null, out montoHaber)) { parse8 = true; } else { Funciones.MostrarError("Lo ingresado no es un numero valido. Ingrese nuevamente."); } } while (parse8 == false); parse8 = false; haberIncremental += montoHaber; incrementalCuentasHaber += cantidadCuentasHaber; if (hayAsientos == true) { Asiento.Add(new Asientos() { NroAsiento = nrodeAsiento, Fecha = fecha.ToString("dd/MM/yyyy"), CodigoCuenta = nroCuenta, Debe = 0, Haber = montoHaber }); } else { Asiento.Add(new Asientos() { NroAsiento = (i + 1), Fecha = fecha.ToString("dd/MM/yyyy"), CodigoCuenta = nroCuenta, Debe = 0, Haber = montoHaber }); } } // Comprobamos que DEBE = HABER if (debeIncremental == haberIncremental) { paso3 = true; } else { Funciones.MostrarError("El debe no es igual al haber. Por favor, reingrese los asientos correctamente."); montoDebe = 0; montoHaber = 0; debeIncremental = 0; haberIncremental = 0; incrementalCuentasDebe = 0; incrementalCuentasHaber = 0; nrodeAsiento = 0; Asiento.Clear(); paso3 = false; paso1 = false; paso2 = false; parse3 = false; parse4 = false; parse5 = false; parse6 = false; parse7 = false; parse8 = false; parseNroAsiento = false; break; } } } while (paso3 == false); paso3 = false; //Actualizamos el archivo. foreach (var item in Asiento) { Funciones.ActualizarDiario(item.ToString()); } hayAsientos = false; Asiento.Clear(); Console.WriteLine("Asientos agregados correctamente."); Console.ReadLine(); Console.Clear(); break; case 2: // Vamos a mostrar todo lo que hay en Diario.txt Console.Clear(); List <Asientos> mostrarAsientos = new(); mostrarAsientos = Funciones.CargarAsientos(); for (int i = 0; i < (Funciones.ContarAsientos()); i++) { string tipoCuenta = ""; if (mostrarAsientos.FirstOrDefault(x => x.NroAsiento == (i + 1)) == null) { break; } string fechadeasiento = mostrarAsientos.FirstOrDefault(x => x.NroAsiento == (i + 1)).Fecha; Console.WriteLine("{0} ---------------------------------{1}-------------------------------", fechadeasiento, (i + 1)); Console.WriteLine(Environment.NewLine); foreach (var item in mostrarAsientos.Where(x => (x.NroAsiento == (i + 1)))) { PlanCuentas cuentanombre = PlanDeCuentas.Find(x => (x.Codigo == item.CodigoCuenta)); if (item.Debe == 0) { if (cuentanombre.Tipo == "Activo") { tipoCuenta = "Activo-"; } else { tipoCuenta = cuentanombre.Tipo; } Console.WriteLine(String.Format("|{0,-5}|{1,-68}|{2,-14}|{3,-5}|{4,-5}|", item.CodigoCuenta, " a " + cuentanombre.Nombre, tipoCuenta, item.Debe, item.Haber)); tipoCuenta = ""; } else { if (cuentanombre.Tipo == "Pasivo") { tipoCuenta = "Pasivo-"; } else if (cuentanombre.Tipo == "PatrimonioNeto") { tipoCuenta = "PatrimonioNeto-"; } else { tipoCuenta = cuentanombre.Tipo; } Console.WriteLine(String.Format("|{0,-5}|{1,-68}|{2,-14}|{3,-5}|{4,-5}|", item.CodigoCuenta, cuentanombre.Nombre, tipoCuenta, item.Debe, item.Haber)); tipoCuenta = ""; } } Console.WriteLine(Environment.NewLine); } Console.ReadLine(); Console.Clear(); break; case 3: Environment.Exit(0); continuamos = false; break; default: Funciones.MostrarError("Lo ingresado no es una opcion valida."); break; } } else { Console.WriteLine("Lo ingresado no es una opcion valida"); } } Console.ReadLine(); }