//Método para la Modificación de los diferentes aspectos de un trabajador en concreto public static void ModificarTrabajador(ref Trabajador[] listaTrabajadores) { int posicion = 0; string eleccion = null; string dni = null; bool salir = false, existe = false; bool error = false; string pregunta = null; string mensaje = null; if (error == false) { dni = Interfaz.PlantillaPedirDni(); //Pedimos el DNI a modificar con la plantilla de la intefaz existe = ExisteTrabajador(listaTrabajadores, dni, ref posicion); } if (existe) { do { try { //Llamamos a la plantilla para ver la elección escogida eleccion = Interfaz.PlantillaEleccionModificar(); switch (eleccion) //Según la elección escogida realiza una acción u otra { //Caso 1: Modificación del DNI case "1": listaTrabajadores[posicion].dni_pre = Interfaz.ElementoModificar(eleccion); break; //Caso 2: Modificación del NOMBRE case "2": listaTrabajadores[posicion].nombre_pre = Interfaz.ElementoModificar(eleccion); break; //Caso 1: Modificación de los APELLIDOS case "3": listaTrabajadores[posicion].apellidos_pre = Interfaz.ElementoModificar(eleccion); break; } error = false; mensaje = "Operación realizada con éxito."; pregunta = "¿Quieres modificar otro aspecto? s/n >> "; Interfaz.Continuar(mensaje); Interfaz.Pregunta(ref pregunta, ref salir); Ficheros.GuardarTrabajadores(listaTrabajadores); // Si todo ha sido validado, lo guardamos en el fichero } catch (Exception ex) { Interfaz.Error(ex.Message); Interfaz.Continuar(); salir = false; error = true; } } while (!salir); } }
//Método para borrar un trabajador public static void BorrarTrabajador(ref Trabajador[] listaTrabajadores) { Trabajador[] copia; int posicion = 0; string dni = null; bool existe = false; //bool correcto = false; string mensaje; int j = 0; //Vamos a pedir el DNI para buscar a la persona que vamos a borrar dni = Interfaz.PlantillaPedirDni(); //En segundo lugar buscamos si existe dicho DNI introducido. existe = ExisteTrabajador(listaTrabajadores, dni, ref posicion); // Condición para conocer si la cuenta se encuentra sin saldo y además si existe. if (existe == true) { // Creamos un array de Copia para volcar los datos, con longitud de los trabajadores -1 copia = new Trabajador[listaTrabajadores.Length - 1]; /* For para recorrer el array, si encotnramos dicho DNI, borramos dicha posición y datos.*/ for (int i = 0; i < listaTrabajadores.Length; i++, j++) { if (i != posicion) { copia[j] = listaTrabajadores[i]; } else { j -= 1; } } //Array dinámico listaTrabajadores = new Trabajador[copia.Length]; copia.CopyTo(listaTrabajadores, 0); //Ponemos el array de copia en Null para ahorrar memoria copia = null; mensaje = "Trabajador borrado con éxito"; Interfaz.Continuar(mensaje); Interfaz.Continuar(); } else { mensaje = "El trabajador que está intentando borrar no existe.\n"; Interfaz.Error(mensaje); Interfaz.Continuar(); } }
//Método para buscar una semana determinada en el array private static bool BuscaSemana(Nomina[] nomina, ref int semana) { bool ctrl = false; for (int i = 0; i < nomina.Length; i++) //Recorre el array buscando una semana no nula y que coincida el ID con el valor { //de la semana que se pasa como parámetro. if (nomina[i] != null && semana == nomina[i].ID_pre) { semana = i; //En este caso se iguala la semana al valor de la posición del array, ctrl = true; //y se devuelve el true, es decir que la semana está en el array } } if (!ctrl) { Interfaz.Error("Lo siento, no existe la semana"); } return(ctrl); }
//Métodos que controlan el funcionamiento de la clase GestionNomina y la Interfaz public static void GestionNominas(int numb, ref bool flag, string dni) { string fecha; Nomina[] Nomina = null; Nomina semana = null; try { //Recuperamos la nómina del trabajador y la cargamos en un Array de Nóminas de trabajo. Nomina = Ficheros.GetNomina(dni); //Ordenamos el array y lo redimensionamos, dejando huecos en las semanas no creadas aún Gestion_Nomina.OrdenaNomina(ref Nomina); switch (numb) { case 0: flag = true; break; //Introducir nóminas case 1: /*Comprobamos que el array no ha llenado los seis espacios que es el máximo de semanas * que tiene un mes. En caso de haber huecos, lanzamos los métodos para pedir la semana * e introducirla en el array nómina, tras lo cual se almacena en el fichero.*/ if (!Gestion_Nomina.LimiteSemanas(Nomina)) { semana = Interfaz.AgregarSemana(Nomina); Gestion_Nomina.CreaSemana(ref Nomina, ref semana); Ficheros.GuardarNominaTemporal(ref Nomina); } else { Interfaz.Error("No se pueden agregar más semanas, se ha alcanzado el máximo posible de semanas de un mes"); } break; //Modificar Nóminas case 2: /*Con esta opción vamos a cambiar los parámetros de la nómina, para lo que lanzamos el * método de cambio de la semana. Y, una vez terminado, se guarda la nómina en el fichero.*/ Gestion_Nomina.CambiaSemana(ref Nomina); Ficheros.GuardarNominaTemporal(ref Nomina); break; //Modificar archivo de configuracion case 3: /* Esta opción lanza una interfaz que nos va a permitir modificar los parámetros almacenados en * app.config, previa validación de la contraseña de administrador*/ int option = 0; float valor = 0; string pass = null; pass = Interfaz.PedirContraseña(); if (GestionNegocio.ValidarContraseña(pass)) { Interfaz.PedirDatosArchivoConf(ref option, ref valor); Ficheros.ModConfig(option, valor); Interfaz.Continuar("Valor modificado con éxito"); } else { Interfaz.Error("La contraseña no coincide."); Interfaz.Continuar(); break; } break; //Eliminar nominas case 4: /*La opción de eliminar nóminas a su vez lanza un menú por interfaz que permite eliminar una sóla semana * del array de nóminas o, por el contrario, eliminar todas las posiciones de dicho array. * Tanto en un método como en el otro, se lanza un método en gestión de nómina que es el que se encarga de * hacer la eliminación y redimensión del array. */ int ordinal = 0, opcion = 0; opcion = Interfaz.EliminarSemanaOpcion(); if (opcion == 1) { ordinal = Interfaz.ElegirSemana(); // Pide la semana a eliminar Gestion_Nomina.ProcesoEliminarSemana(ref Nomina, ordinal); } else { Gestion_Nomina.ProcesoEliminarNomina(ref Nomina); } Ficheros.GuardarNominaTemporal(ref Nomina); break; //Mostrar Nómina Temporal case 5: /*En esta opción se muestra la nómina temporal, con el número de semanas * como los parámetros tales como número de horas, horas extra, * precio de la hora extra, porcentaje de retencion, etc.*/ Console.WriteLine(Interfaz.MostrarNominaTemporal(Nomina, dni)); Console.ReadLine(); break; //Cerrar Nómina del Mes case 6: /*Este método sirve para guardar la nómina del mes, exportándola a un archivo de texto * (después de mostrarla en pantalla y pedir confirmación) y eliminar el archivo temporal*/ string cadena = null; /*Se calculan los parámetros tales como horas extra trabajadas, salario base, extra, * retenciones y neto, y se almacenan en él array de nóminas*/ Gestion_Nomina.CalculaParcial(ref Nomina); //La interfaz muestra por pantalla los parciales semanales y se devuelve en la variable cadena. cadena = Interfaz.MostrarNomina(Nomina, dni); //El método cierreMes devuelve (y concatena) en la variable cadena el resultado del cálculo de los totales de cada semana. cadena += Interfaz.CierreMes(Nomina); if (!Confirmar())//se pide confirmación para guardar los cambios. { //Almacena en el fichero fecha = Interfaz.Pidefecha();//En este método vamos a pedir la fecha de mes y año de la nómina para almacenarla. Ficheros.CerrarNomina(cadena, fecha);//En este método almacenamos la cadena de texto en un archivo nombrado con la fecha y el dni del trabajador. //Eliminar fichero Ficheros.BorrarTemporal(dni); //Eliminamos el fichero temporal de la nómina del sistema. Interfaz.Continuar("Nómina Exportada Correctamente \n \t\tPulsa una tecla para continuar..."); } else { Interfaz.Continuar(); } break; } } catch (Exception e) { Interfaz.Error(e.Message); Interfaz.Continuar("Pulsa una tecla para continuar..."); } }