public void AgregarServicio(Servicios unServicio)
 {
     Trazas_X_Servicios ts = new Trazas_X_Servicios();
     ts.Id = this.Id;
     ts.Servicios = unServicio;
     Trazas_X_Servicios.Add(ts);
 }
        private void CrearNuevoServicio()
        {
            string errorMsj = "";
            Servicios nuevoServicio = new Servicios();

            if (!Util.EsAlfaNumerico(txtNombreServicio.Text))
                errorMsj += "Nombre de servicio: Incompleto/Incorrecto.\n";
            else if (context.Servicios.Where(x => x.Nombre == txtNombreServicio.Text).Count() > 0)
                errorMsj += "Nombre de servicio: ya existe un servicio con el mismo nombre.\n";

            if (auxRelaciones.Count == 0)
                errorMsj += "El servicio no tiene estaciones relacionadas.\n";

            if (!nuevoServicio.ServicioEsValido(auxRelaciones))
                errorMsj += "Las relaciones del servicio tienen errores.\n";

            if (clbxFormacionesCrear.CheckedItems.Count == 0)
                errorMsj += "El servicio no tiene formaciones asignadas.\n";

            if (string.IsNullOrEmpty(errorMsj))
            {
                nuevoServicio.Nombre = txtNombreServicio.Text;
                nuevoServicio.Relaciones = auxRelaciones;

                for (int pos = 0; pos <= clbxFormacionesCrear.CheckedItems.Count - 1; pos++)
                {
                    Formaciones f = (Formaciones)clbxFormacionesCrear.CheckedItems[pos];
                    Servicios_X_Formaciones sf = new Servicios_X_Formaciones();
                    sf.Id_Formacion = f.Id;
                    sf.Formaciones = f;
                    //sf.Servicios = nuevoServicio;
                    nuevoServicio.Servicios_X_Formaciones.Add(sf);
                }
                try
                {
                    context.Servicios.Add(nuevoServicio);
                    context.SaveChanges();
                    lbxServiciosModificar.Items.Add(nuevoServicio);
                    lbxServiciosEliminar.Items.Add(nuevoServicio);
                    LimpiarTabCrear();
                    MessageBox.Show("El servicio se ha creado exitosamente.\n");
                }
                catch (Exception exc)
                {
                    MessageBox.Show("No se guardo el servicio \n\n" + exc.ToString());
                }
            }
            else
                MessageBox.Show(errorMsj);
        }
        private Relaciones BuscarRelacion2(int id_estacionOrigen, int id_estacionDentino, Servicios s)
        {
            Relaciones r = s.Relaciones.Where(x => x.Id_Estacion_Anterior == id_estacionOrigen && x.Id_Estacion_Siguiente == id_estacionDentino).FirstOrDefault();

            return r;
        }
 private void actualizarSiguienteServicio(out int siguienteSalida, out Servicios siguienteServicio)
 {
     if (_posServicio > Traza.ServiciosDisponibles.Count - 1)
         _posServicio = 0;
     siguienteServicio = Traza.ServiciosDisponibles[_posServicio];
     _posServicio++;
     siguienteSalida = siguienteServicio.proximoHorarioSalida();
     /*Actualiza las variables siguienteSalida y siguienteServicio con los valores del proximo servicio a salir. */
     /*siguienteServicio = Traza.ServiciosDisponibles.First();
     siguienteSalida = siguienteServicio.proximoHorarioSalida();
     foreach (Servicios servicio in Traza.ServiciosDisponibles)
     {
         int salidaAux = servicio.proximoHorarioSalida();
         if (salidaAux < siguienteSalida)
         {
             siguienteServicio = servicio;
             siguienteSalida = salidaAux;
         }
     }*/
     siguienteServicio.removerSalida(siguienteSalida); //Al haber usado el horario siguienteSalida lo remuevo del servicio.
 }