/// <summary>
        /// Implementa Save_button_Click
        /// </summary>
        protected override void SaveAction()
        {
            foreach (SesionAuxiliar sesion in _lista_sesiones)
            {
                if ((sesion.OidClaseTeorica > 0 ||
                     sesion.OidClasePractica > 0 ||
                     sesion.OidClaseExtra > 0) &&
                    sesion.OidProfesor == 0)
                {
                    MessageBox.Show(Resources.Messages.SESION_SIN_PROFESOR);
                    _action_result = DialogResult.Ignore;
                    return;
                }
            }

            foreach (SesionAuxiliar item in _lista_sesiones)
            {
                if (item.EEstadoClase != EEstadoClase.NoProgramada)
                {
                    _generado = true;
                    break;
                }
            }
            if (!_generado && _entity.Observaciones == string.Empty)
            {
                MessageBox.Show(Resources.Messages.HORARIO_NO_GENERADO);
                _action_result = DialogResult.Ignore;
                return;
            }

            if (_entity.IsNew && Horario.ExisteHorario(_entity.OidPlan, _entity.OidPromocion, _entity.FechaInicial))
            {
                MessageBox.Show(Resources.Messages.HORARIO_EXISTENTE);
                _action_result = DialogResult.Ignore;
                return;
            }

            _action_result = SaveObject() ? DialogResult.OK : DialogResult.Ignore;
        }
        /// <summary>
        /// Asigna los datos de origen para controles que dependen de otros
        /// </summary>
        /// <param name="controlName"></param>
        protected override void SetDependentControlSource(string controlName)
        {
            switch (controlName)
            {
            case "Plan_CB":
            {
                if (Datos_Planes.Current != null)
                {
                    ResetSesiones(true);
                    Datos_Promociones.DataSource = _combo_planes.GetFilteredChilds(((ComboBoxSource)Plan_CB.SelectedItem).Oid);
                    Entity.OidPlan = ((ComboBoxSource)Plan_CB.SelectedItem).Oid;
                }

                Globals.Instance.Timer.Record("Plan_CB");
            } break;

            case "Promocion_CB":
            {
                if (Promocion_CB.SelectedItem != null)
                {
                    Entity.OidPromocion = ((ComboBoxSource)Promocion_CB.SelectedItem).Oid;
                }

                if (Entity.OidPromocion != 0)
                {
                    /*PgMng.Reset(10, 1, Resources.Messages.UPDATING_PROMOCION_HORARIO, this);
                     * _back_job = BackJob.Promociones;
                     * PgMng.StartBackJob(this);
                     * PgMng.FillUp();*/
                    DoPromociones();
                }
            } break;

            case "Fecha_DTP":
            {
                if (Promocion_CB.SelectedItem == null || Plan_CB.SelectedItem == null)
                {
                    break;
                }

                if (((ComboBoxSource)Promocion_CB.SelectedItem).Oid != 0 && ((ComboBoxSource)Plan_CB.SelectedItem).Oid != 0)
                {
                    try
                    {
                        PgMng.Reset(5, 1, Resources.Messages.UPDATING_INSTRUCTORES_HORARIO, this);

                        DoSetFecha();
                    }
                    finally
                    {
                        PgMng.FillUp();
                    }

                    if (Horario.ExisteHorario(((ComboBoxSource)Plan_CB.SelectedItem).Oid, ((ComboBoxSource)Promocion_CB.SelectedItem).Oid, _entity.FechaInicial))
                    {
                        MessageBox.Show(Resources.Messages.HORARIO_EXISTENTE);
                        _action_result = DialogResult.Ignore;
                        return;
                    }
                }
            } break;
            }
        }
        protected void DoNuevoHorario()
        {
            try
            {
                PgMng.Reset(10, 1, Resources.Messages.CREANDO_HORARIO, this);

                if (this is HorarioAddForm && Horario.ExisteHorario(Entity.OidPlan, Entity.OidPromocion, Entity.FechaInicial))
                {
                    MessageBox.Show("Ya existe un horario para la promoción y fecha indicadas, si lo desea modifique el que ya existe.");
                    PgMng.FillUp();
                    return;
                }

                profesores_encargados.GetEncargados(Entity.OidPlan, Entity.OidPromocion);
                PgMng.Grow();

                _combo_clases           = Submodulo.GetComboClases(_teoricas, ClasePracticaList.Merge(_practicas[1], _practicas[2]), _extras);
                Datos_Clases.DataSource = _combo_clases;
                PgMng.Grow();

                _instructores_asignados = Sesion.CargaSesionesProfesores(Entity.FechaInicial, Entity.OidPromocion);
                PgMng.Grow();

                if (_profesores == null)
                {
                    _profesores = InstructorList.GetInstructoresHorariosList(EntityInfo.OidPromocion, EntityInfo.FechaInicial, EntityInfo.FechaFinal);
                }
                PgMng.Grow();

                CleanAction();
                PgMng.Grow(string.Empty, "CleanAction");

                if (_generado)
                {
                    ResetNoConfirmadas();
                }
                PgMng.Grow(string.Empty, "ResetNoConfirmadas");

                if (_lista_sesiones == null)
                {
                    _lista_sesiones = new ListaSesiones(Entity.FechaInicial);
                }

                if (!Entity.FechaInicial.Date.Equals(_lista_sesiones[0].Fecha.Date))
                {
                    DateTime fecha = Entity.FechaInicial;
                    for (int i = 0; i < 70; i += 14)
                    {
                        _lista_sesiones[i].Fecha      = fecha;
                        _lista_sesiones[i + 1].Fecha  = fecha;
                        _lista_sesiones[i + 2].Fecha  = fecha;
                        _lista_sesiones[i + 3].Fecha  = fecha;
                        _lista_sesiones[i + 4].Fecha  = fecha;
                        _lista_sesiones[i + 5].Fecha  = fecha;
                        _lista_sesiones[i + 6].Fecha  = fecha;
                        _lista_sesiones[i + 7].Fecha  = fecha;
                        _lista_sesiones[i + 8].Fecha  = fecha;
                        _lista_sesiones[i + 9].Fecha  = fecha;
                        _lista_sesiones[i + 10].Fecha = fecha;
                        _lista_sesiones[i + 11].Fecha = fecha;
                        _lista_sesiones[i + 12].Fecha = fecha;
                        _lista_sesiones[i + 13].Fecha = fecha;
                        fecha = fecha.AddDays(1);
                    }
                    for (int i = 70; i < 75; i++)
                    {
                        _lista_sesiones[i].Fecha = fecha;
                    }
                }

                _lista_sesiones = Entity.SetSesionesActivas(_lista_sesiones);
                PgMng.Grow(string.Empty, "Entity.SetSesionesActivas");

                decimal n_practicas = 11;
                if (Practicas_CB.Checked)
                {
                    n_practicas = NPracticas.Value;
                }

                HorarioController controlador = new HorarioController(_entity, _lista_sesiones,
                                                                      _teoricas, _practicas, _extras, _profesores,
                                                                      profesores_encargados, _instructores_asignados,
                                                                      _disponibilidades, n_practicas, DiasSuplente.Value);

                controlador.Rules[(int)TRule.MismoInstructorMismaSesion] = !MismoInstructorMismaSesion_CB.Checked;
                controlador.Rules[(int)TRule.MismoInstructorMismoDia]    = !MismoInstructorMismoDia_CB.Checked;

                controlador.GeneraHorario(_no_asignables);
                PgMng.Grow(string.Empty, "Generación de horario");

                RellenaCasillas();
                PgMng.Grow(string.Empty, "Rellenar Casillas");

                Completar_BT.Enabled = false;
                Marcar_BT.Enabled    = true;
                Clean_BT.Enabled     = true;
                if (this is HorarioEditForm)
                {
                    Confirmar_BT.Enabled = true;
                }
                _generado = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                PgMng.FillUp();
            }
        }