//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 mostrar a todos los trabajadores que hay en la nómina public static void ListarTrabajadores(Trabajador[] arr) { arr = Ficheros.getTrabajadores(); //Cogemos los trabajadores del fichero Interfaz.Header(); for (int i = 0; i < arr.Length; i++) { Interfaz.FormatoLeerXML(arr[i].dni_pre, arr[i].nombre_pre, arr[i].apellidos_pre); } Interfaz.Continuar(); }
//Método utilizado para la creación de nuevos trabajadores public static void NuevoTrabajador(ref Trabajador[] listaTrabajadores, int mode) { Trabajador trabtemp; Trabajador[] copia = null; bool salida = false; //Inicialización de variables string mensaje = null; string mensaje2 = null; bool existe = false; // Entrada de Datos do { // ENTRADA trabtemp = Interfaz.PlantillaCrearTrabajador(); existe = ExisteTrabajador(listaTrabajadores, trabtemp.dni_pre); //Comprueba si existe o no el trabajador if (listaTrabajadores == null) //Si la lista de trabajadores está vacía, le asigna una posición { listaTrabajadores = new Trabajador[1]; } if (listaTrabajadores != null) //Como no es nula, debido a la anterior creación de la posición { if (existe == false) { //Gestión dinámica de la memoria copia = new Trabajador[listaTrabajadores.Length]; //Copiamos el tamaño del array de trabajadores listaTrabajadores.CopyTo(copia, 0); //Volcamos el contenido del array de trabajadores en copia listaTrabajadores = new Trabajador[listaTrabajadores.Length + 1]; //Asignamos una posición más copia.CopyTo(listaTrabajadores, 0); //Copiamos todo de nuevo al array de trabajadores copia = null; //Volvemos copia a null para ahorrar memoria listaTrabajadores[listaTrabajadores.Length - 1] = trabtemp; //Asignamos el nuevo trabajador al array mensaje = "Trabajador registrado correctamente"; if (mode == 1)// Modo 1: Creamos empleados por NuevoTrabajadors { mensaje2 = "Desea registrar otro Trabajador (s/n): "; salida = Interfaz.Continuar(mensaje); Interfaz.Pregunta(ref mensaje2, ref salida); Ficheros.GuardarTrabajadores(listaTrabajadores); } else //Creamos empleados desde la nómina. { salida = true; } } else //Si existe el trabajador, asignamos que salga del bucle { salida = true; } } } while (!salida); }
//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 de modificacion de nómina semanal public static void CambiaSemana(ref Nomina[] Nomina) { int semana = 0; int opcion = 0; String cadena = null; //Entrada de Datos semana = Interfaz.ElegirSemana(Nomina); //Se pide la semana mediante el método de interfaz if (BuscaSemana(Nomina, ref semana)) //A continuación se lanza el método Buscasemana { //que nos devuelve la posición del array en la que está la semana y si existe. opcion = Interfaz.ModificarNomina(Nomina[semana]); //Si existe se lanza la interfaz para seleccionar la opción que vamos a modificar } else { opcion = 0; } //Si no se encuentra la semana se pasa la opción de abortar la modificación //PROCESO switch (opcion) { case 0: cadena = "Modificación cancelada"; break; //Modificación de los datos case 1: //Lanza la Interfaz para modificar las horas Nomina[semana].Horas_pre = Interfaz.SolicitarHoras(); cadena = "Horas modificadas con éxito."; break; case 2: //Lanza la Interfaz para modificar el precio de la hora. Nomina[semana].PrecioPre = Interfaz.SolicitarPrecio(); cadena = "Precio de la hora de trabajo modificado con éxito."; break; case 3: //Lanza la Interfaz para modificar el precio de la hora. Nomina[semana].JornadaPre = Interfaz.SolicitarJornada(); cadena = "Jornada modificada con éxito."; break; case 4: //Lanza la Interfaz para modificar el precio de la hora. Nomina[semana].RetencionPre = Interfaz.SolicitarRetencion(); cadena = "Retención modificada con éxito."; break; } Interfaz.Continuar(cadena); }
//Método de eliminación de semana public static void ProcesoEliminarSemana(ref Nomina[] Nomina, int semana) { int i = 0; int j = 0; Nomina[] copiaNomina; bool existesemana; String cadena = ""; //Existe la semana? existesemana = ExisteNomina(ref Nomina, semana); if (!existesemana) { cadena = "\n\t\t La semana no existe"; } else//Si la semana existe { copiaNomina = new Nomina[Nomina.Length]; //Creamos un Array en el que copiamos la nómina for (i = 0; i <= copiaNomina.Length - 1; i++, j++) { if (i != (semana - 1)) //En caso que el contador sea distinto a la posición de la seman en el array se copia en copianomina { copiaNomina[j] = Nomina[i]; } } //Array dinámico (Una vez copiado todo, redimensionamos el array eliminando una seman y vaciándolo Nomina = new Nomina[copiaNomina.Length]; copiaNomina.CopyTo(Nomina, 0); //Copiamos el array copia en la nómina //Ponemos el array de copia en Null para ahorrar memoria copiaNomina = null; cadena = "\n\t\t Semana eliminada con éxito"; } cadena += "\n\t\tPulse ENTER para continuar\n"; Interfaz.Continuar(cadena); }
//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..."); } }