public List<TipoServicio> obtenerServiciosDeRuta(int idRuta)
        {
            DataTable dt = new ServicioPorRuta().obtenerTodosPorIdRuta(idRuta);
            List<TipoServicio> tipos = new List<TipoServicio>();

            foreach (DataRow row in dt.Rows)
            {
                TipoServicio ts = new TipoServicio();
                ts = this.obtenerPorId(Int32.Parse(row["TIPO_SERVICIO_ID"].ToString()));
                if (ts != null) { tipos.Add(ts); }
            }

            return tipos;
        }
        public List<ServicioPorRuta> obtenerListaPorIdRuta(int id)
        {
            List<ServicioPorRuta> servicios = new List<ServicioPorRuta>();
            DataTable dt = this.obtenerTodosPorIdRuta(id);

            foreach (DataRow row in dt.Rows)
            {
                ServicioPorRuta s = new ServicioPorRuta();
                s.idRutaAerea = id;
                s.idTipoServicio = Int32.Parse(row["TIPO_SERVICIO_ID"].ToString());
                servicios.Add(s);
            }
            return servicios;
        }
        private void btnGenerar_Click(object sender, EventArgs e)
        {
            try
            {
                string mensaje = string.Empty;
                if (cboMatriculas.SelectedIndex == -1) { mensaje += "Debe seleccionar una aeronave." + Environment.NewLine; }
                if (cboOrigen.SelectedIndex == -1) { mensaje += "Debe seleccionar una ciudad de origen." + Environment.NewLine; }
                if (cboDestino.SelectedIndex == -1) { mensaje += "Debe seleccionar una ciudad de destino." + Environment.NewLine; }
                if (cboOrigen.SelectedIndex == cboDestino.SelectedIndex) { mensaje += "Las ciudades no pueden ser iguales." + Environment.NewLine; }
                if (dtpFechaSalida.Value < ConfiguracionGlobal.FechaSistema) { mensaje += "La fecha debe ser posterior a la fecha actual." + Environment.NewLine; }
                if ((dtpFechaLlegadaEstimada.Value < dtpFechaSalida.Value.AddHours(1))) { mensaje += "El viaje tiene que durar más de una hora." + Environment.NewLine; }
                if ((dtpFechaLlegadaEstimada.Value > dtpFechaSalida.Value.AddDays(1))) { mensaje += "El viaje tiene que durar menos de un día." + Environment.NewLine; }
                if (!string.IsNullOrEmpty(mensaje)) { throw new Exception(mensaje); }

                Aeronave a = (Aeronave)cboMatriculas.SelectedItem;
                Ciudad origen = (Ciudad)cboOrigen.SelectedItem;
                Ciudad destino = (Ciudad)cboDestino.SelectedItem;

                RutaAerea ra = new RutaAerea().obtenerRutaAereaPorCiudades(origen.idCiudad, destino.idCiudad);
                if (ra == null) { throw new Exception(string.Format("No se ha encontrado una ruta aerea de {0} a {1}.",origen.nombreCiudad,destino.nombreCiudad)); }

                List<ServicioPorRuta> serviciosRuta = new ServicioPorRuta().obtenerListaPorIdRuta(ra.idRutaAerea);
                if (!serviciosRuta.Exists(sr => sr.idTipoServicio == a.idTipoServicio))
                {
                    throw new Exception(string.Format("El servicio de la aeronave no coincide con ninguno de la ruta aerea entre {0} y {1}.",origen.nombreCiudad,destino.nombreCiudad));
                }

                if (new Aeronave().tieneViajesEntreHorarios(dtpFechaSalida.Value, dtpFechaLlegadaEstimada.Value,a.idAeronave))
                {
                    dtpFechaSalida.Value = DateTime.Now;
                    actualizarExtremosFechas();
                    throw new Exception("La aeronave seleccionada no esta disponible en ese rango horario.");
                }

                var msg = MessageBox.Show("¿Está seguro que desea generar el viaje ingresado?", "Atención", MessageBoxButtons.YesNo);
                if (msg == DialogResult.Yes)
                {
                    new Viaje().generarViaje(a.idAeronave, ra.idRutaAerea, dtpFechaSalida.Value, dtpFechaLlegadaEstimada.Value);
                    MessageBox.Show("El viaje ha sido generado correctamente.", "OK");
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }
        private void formServicioPorRuta_Load(object sender, EventArgs e)
        {
            ((ListBox)clbServicios).DataSource = new TipoServicio().obtenerTodosLista();
            ((ListBox)clbServicios).ValueMember = "idTipoServicio";
            ((ListBox)clbServicios).DisplayMember = "nombreTipoServicio";

            if (!modoAlta)
            {
                List<ServicioPorRuta> serviciosRuta = new ServicioPorRuta().obtenerListaPorIdRuta(rutaActual.idRutaAerea);

                for (int i = 0; i < clbServicios.Items.Count; i++)
                {
                    TipoServicio s = (TipoServicio)clbServicios.Items[i];
                    if (serviciosRuta.Any(sr => sr.idTipoServicio == s.idTipoServicio))
                    {
                        clbServicios.SetItemChecked(i, true);
                    }
                    else
                    {
                        clbServicios.SetItemChecked(i, false);
                    }
                }
            }
        }