Example #1
0
        public override void RefreshSecondaryData()
        {
            Plan_TB.Text = PlanEstudiosInfo.Get(_entity.OidPlan).Nombre;
            PgMng.Grow(string.Empty, "Plan_TB");

            Promocion_TB.Text = PromocionInfo.Get(_entity.OidPromocion).Nombre;
            PgMng.Grow(string.Empty, "Promocion_TB");
        }
        //public override void PrintObject()
        //{
        //}

        //#endregion

        //#region Buttons

        //protected override void PrintAction()
        //{
        //    switch (TabControl.SelectedTab.Name)
        //    {
        //        case "General_TP":
        //            {
        //                PrintObject();
        //            } break;

        //        default:
        //            {
        //                PrintSelectSkinForm psform = new PrintSelectSkinForm(true);
        //                psform.EnableDetail(false);
        //                psform.ShowDialog();
        //                if (psform.DialogResult == DialogResult.Cancel) return;

        //                switch (TabControl.SelectedTab.Name)
        //                {
        //                    case "Redes_TP":
        //                        {
        //                            PrintData(Entidad.Red, psform.Source, psform.Type);
        //                        } break;

        //                }
        //            } break;
        //    }
        //}

        #endregion

        #region Buttons

        /// <summary>
        /// Implementa Save_button_Click
        /// </summary>
        protected override void SaveAction()
        {
#if TRACE
            moleQule.Library.Timer t = new moleQule.Library.Timer();
#endif
            if (!_generado)
            {
                MessageBox.Show("No se ha generado ningún cronograma");
                _action_result = DialogResult.Ignore;
                return;
            }
            else
            {
                _entity.FechaCreacion = DateTime.Today;
                if (_entity.Plan == string.Empty)
                {
                    PlanEstudiosInfo plan = PlanEstudiosInfo.Get(_entity.OidPlan, false);
                    if (plan != null)
                    {
                        _entity.Plan = plan.Nombre;
                    }
                }
                if (_entity.Promocion == string.Empty)
                {
                    PromocionInfo promocion = PromocionInfo.Get(_entity.OidPromocion, false);
                    if (promocion != null)
                    {
                        _entity.Promocion = promocion.Nombre;
                    }
                }


                foreach (Sesion_Promocion item in _entity.Configuracion)
                {
                    item.HoraInicio = DateTime.Parse(item.Hora);
                }
#if TRACE
                t.Record("FechaCreacion");
#endif
                _action_result = SaveObject() ? DialogResult.OK : DialogResult.Ignore;
            }
        }
        protected override bool CrearPartes()
        {
            int  count      = 0;
            long oid_modulo = 0;
            int  index      = 0;
            long tipo       = 0;

            PgMng.Reset(6, 1, Resources.Messages.CREANDO_PARTES_ASISTENCIA, this);

            try
            {
                PromocionInfo promo   = PromocionInfo.Get(_entity.OidPromocion, true);
                AlumnoList    alumnos = AlumnoList.GetListByPromocion(promo.Oid, true);

                if (promo.Sesiones.Count == 0)
                {
                    Promocion promocion = Promocion.Get(_entity.OidPromocion, false);
                    promocion.LoadChilds(typeof(Sesion_Promocion));
                    List <List <long> > duracion_sesiones = _entity.RellenaHorasSemana();
                    foreach (List <long> lista in duracion_sesiones)
                    {
                        foreach (long item in lista)
                        {
                            Sesion_Promocion ses = Sesion_Promocion.NewChild(promocion);
                            ses.NHoras = duracion_sesiones.IndexOf(lista) + 1;
                            if (item > 69)
                            {
                                ses.Sabado = true;
                            }
                            ses.HoraInicio = DateTime.Parse((item % 14 + 10).ToString("00") + ":00");
                            promocion.Sesiones.Add(ses);
                        }
                    }
                    promo = promocion.GetInfo(true);
                    promocion.CloseSession();
                }
                PgMng.Grow();

                if (!_entity.IsDirty)
                {
                    return(true);
                }

                //guarda la lista de partes de asistencia anterior
                ParteAsistencias partes = _entity.Asistencias.Clone();

                PgMng.Grow();

                ParteAsistencias nueva       = ParteAsistencias.NewChildList();
                HorarioInfo      horario_old = HorarioInfo.Get(_entity.Oid, true);

                //genera la nueva lista de partes de asistencia
                for (int sesion_ind = 0; sesion_ind < _entity.Sesions.Count; sesion_ind++)
                {
                    Sesion item = _entity.Sesions[sesion_ind];

                    bool confirmada = false;

                    if (item.OidClasePractica != 0)
                    {
                        bool incluida = false;

                        foreach (ParteAsistencia parte_practicas in nueva)
                        {
                            if (parte_practicas.Tipo == 2)
                            {
                                ClasePracticaInfo p_info = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                                if (p_info != null &&
                                    (parte_practicas.Texto.Trim() == p_info.Alias.Trim() + "G" + item.Grupo.ToString() ||
                                     parte_practicas.Texto.Trim() == p_info.Alias.Trim()))
                                {
                                    incluida = true;
                                    break;
                                }
                            }
                        }

                        if (incluida)
                        {
                            continue;
                        }
                    }

                    //Se busca un parte de asistencias confirmado que contenga esta clase
                    foreach (ParteAsistencia parte_old in partes)
                    {
                        DateTime hora_sesion = DateTime.Parse(parte_old.HoraInicio);

                        if (parte_old.Fecha.Date == item.Fecha.Date &&
                            hora_sesion.Hour == item.Hora.Hour &&
                            parte_old.Confirmada)
                        {
                            int n_horas = DateTime.Parse(parte_old.NHoras).Hour;

                            for (int horas_ind = 0; horas_ind < n_horas; horas_ind++)
                            {
                                if (!_entity.Sesions[sesion_ind + horas_ind].IsEqual(horario_old.Sesions[sesion_ind + horas_ind]))
                                {
                                    return(false);
                                }
                            }

                            //se trata de una teórica o una extra y no hay que comprobar que en ese intervalo exista otra sesión
                            if (item.OidClasePractica == 0)
                            {
                                sesion_ind += n_horas - 1;
                            }

                            nueva.Add(parte_old);
                            confirmada = true;
                            break;
                        }
                    }

                    if (confirmada)
                    {
                        continue;
                    }

                    //Desmarca las clases que han sido marcadas como impartidas pero que tienen
                    //fecha y horas mayor que la actual
                    if (item.Fecha.Date > DateTime.Today.Date &&
                        item.Estado == 3)
                    {
                        item.Estado = 2;
                    }

                    //si ya hay un parte para esta práctica no se vuelve a crear
                    if (item.OidClasePractica > 0)
                    {
                        bool esta = false;
                        foreach (ParteAsistencia p in nueva)
                        {
                            foreach (Clase_Parte cp in p.Clases)
                            {
                                if (cp.Tipo == 2 &&
                                    cp.OidClase == item.OidClasePractica &&
                                    (cp.Grupo == 3 || cp.Grupo == item.Grupo))
                                {
                                    esta = true;
                                    break;
                                }
                            }
                        }
                        if (esta)
                        {
                            continue;
                        }
                    }

                    if ((item.OidClaseTeorica > 0 ||
                         item.OidClasePractica > 0 ||
                         item.OidClaseExtra > 0) &&
                        !item.IsDeleted)
                    {
                        string aux             = string.Empty;
                        long   oid_modulo_item = 0;
                        string sesion          = string.Empty;
                        long   oid_clase       = 0;
                        long   grupo           = 3;

                        if (item.OidClasePractica != 0)
                        {
                            ClasePracticaInfo clase = null;

                            clase           = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias + " G" + item.Grupo.ToString();
                            sesion          = clase.Oid.ToString();
                            tipo            = 2;
                            grupo           = clase.Grupo;
                            oid_clase       = clase.Oid;
                        }
                        if (item.OidClaseTeorica != 0)
                        {
                            ClaseTeoricaInfo clase = _teoricas.GetItem(item.OidClaseTeorica);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias;
                            sesion          = clase.Oid.ToString();
                            tipo            = 1;
                            oid_clase       = clase.Oid;
                        }
                        if (item.OidClaseExtra != 0)
                        {
                            ClaseExtraInfo clase = _extras.GetItem(item.OidClaseExtra);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias;
                            sesion          = clase.Oid.ToString();
                            tipo            = 3;
                            oid_clase       = clase.Oid;
                        }

                        if (oid_modulo_item != 0)
                        {
                            if (item.OidClasePractica == 0)
                            {
                                foreach (Sesion_PromocionInfo ses in promo.Sesiones)
                                {
                                    if (ses.HoraInicio.TimeOfDay == item.Hora.TimeOfDay)
                                    {
                                        count = 0;
                                        break;
                                    }
                                }
                            }

                            if (count == 0)
                            {
                                ParteAsistencia parte = ParteAsistencia.NewChild(_entity);
                                parte.Tipo                  = tipo;
                                parte.Texto                 = aux + " ";
                                parte.Sesiones              = sesion + " ";
                                parte.Fecha                 = item.Fecha;
                                parte.HoraInicio            = item.Hora.ToString("HH:mm");
                                parte.OidInstructor         = item.OidProfesor;
                                parte.OidInstructorEfectivo = item.OidProfesor;
                                parte.CreateAlumnosList(alumnos, item.Grupo);
                                if (index == _entity.Sesions.Count - 1)
                                {
                                    parte.NHoras = count.ToString() + ":00";
                                }
                                parte.MarkItemChild();
                                nueva.AddItem(parte);
                                oid_modulo = oid_modulo_item;
                                count++;
                                if (tipo == 2)
                                {
                                    nueva[nueva.Count - 1].NHoras = "5:00";
                                    nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                }
                                else
                                {
                                    nueva[nueva.Count - 1].NHoras = count.ToString() + ":00";
                                }
                            }
                            else
                            {
                                ParteAsistencia ultima = nueva[nueva.Count - 1];

                                if (ultima.OidHorario == item.OidHorario &&
                                    ultima.Fecha.Date.Equals(item.Fecha.Date) &&
                                    Convert.ToDateTime(ultima.HoraInicio).AddHours(count).Hour.Equals(item.Hora.Hour) &&
                                    ultima.OidInstructor == item.OidProfesor &&
                                    oid_modulo_item == oid_modulo &&
                                    ((ultima.Tipo == 1 && item.OidClaseTeorica > 0) ||
                                     (ultima.Tipo == 2 && item.OidClasePractica > 0) ||
                                     (ultima.Tipo == 3 && item.OidClaseExtra > 0)))
                                {
                                    count++;
                                    sesion += " ";
                                    if ((item.OidClasePractica > 0 && nueva[nueva.Count - 1].Sesiones != sesion) ||
                                        item.OidClasePractica == 0)
                                    {
                                        nueva[nueva.Count - 1].Texto    += aux + " ";
                                        nueva[nueva.Count - 1].Sesiones += sesion;
                                        nueva[nueva.Count - 1].NHoras    = count.ToString() + ":00";
                                        if (index == _entity.Sesions.Count - 1)
                                        {
                                            count = 0;
                                        }
                                    }
                                    else
                                    {
                                        ClasePracticaInfo clase = null;
                                        clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                                        string texto_aux = clase.Alias + " G" + item.Grupo.ToString() + " ";
                                        if (nueva[nueva.Count - 1].Texto != texto_aux)
                                        {
                                            nueva[nueva.Count - 1].Texto = clase.Alias;

                                            nueva[nueva.Count - 1].CreateAlumnosList(alumnos, 3);
                                            nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                        }
                                    }
                                }
                                else
                                {
                                    ParteAsistencia parte = ParteAsistencia.NewChild(_entity);
                                    parte.Tipo                  = tipo;
                                    parte.Texto                 = aux + " ";
                                    parte.Sesiones              = sesion + " ";
                                    parte.Fecha                 = item.Fecha;
                                    parte.HoraInicio            = item.Hora.ToString("HH:mm");
                                    parte.OidInstructor         = item.OidProfesor;
                                    parte.OidInstructorEfectivo = item.OidProfesor;
                                    parte.CreateAlumnosList(alumnos, item.Grupo);
                                    if (index == _entity.Sesions.Count - 1)
                                    {
                                        parte.NHoras = count.ToString() + ":00";
                                    }
                                    parte.MarkItemChild();
                                    nueva.AddItem(parte);
                                    oid_modulo = oid_modulo_item;
                                    count      = 1;
                                    if (tipo == 2)
                                    {
                                        nueva[nueva.Count - 1].NHoras = "5:00";
                                        nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                    }
                                    else
                                    {
                                        nueva[nueva.Count - 1].NHoras = count.ToString() + ":00";
                                    }
                                }
                            }
                            Clase_Parte registro = nueva[nueva.Count - 1].Clases.NewItem(nueva[nueva.Count - 1]);
                            registro.OidClase = oid_clase;
                            registro.Tipo     = tipo;
                            registro.Grupo    = grupo;
                        }
                    }
                    index++;
                }
                PgMng.Grow();

                foreach (ParteAsistencia parte_old in partes)
                {
                    bool esta = false;
                    for (int i = 0; i < nueva.Count; i++)
                    {
                        ParteAsistencia parte_new = nueva[i];
                        if (parte_old.Fecha.Date == parte_new.Fecha.Date &&
                            parte_old.HoraInicio == parte_new.HoraInicio &&
                            parte_old.NHoras == parte_new.NHoras &&
                            parte_old.OidInstructor == parte_new.OidInstructor &&
                            parte_old.Tipo == parte_new.Tipo)
                        {
                            esta = true;
                            foreach (Clase_Parte cp_old in parte_old.Clases)
                            {
                                bool esta_clase = false;
                                foreach (Clase_Parte cp_new in parte_new.Clases)
                                {
                                    if (cp_old.OidClase == cp_new.OidClase &&
                                        cp_old.Tipo == cp_new.Tipo &&
                                        cp_old.Grupo == cp_new.Grupo)
                                    {
                                        esta_clase = true;
                                        break;
                                    }
                                }
                                if (!esta_clase)
                                {
                                    if (parte_old.Confirmada)
                                    {
                                        throw new iQException(Resources.Messages.PARTE_CON_CONCEPTOS_ASOCIADOS);
                                    }
                                    else
                                    {
                                        esta = false;
                                        break;
                                    }
                                }
                            }
                        }
                        if (esta)
                        {
                            nueva.Remove(parte_new);
                            break;
                        }
                    }
                    if (!esta)
                    {
                        if (parte_old.Confirmada)
                        {
                            throw new iQException(Resources.Messages.PARTE_CON_CONCEPTOS_ASOCIADOS);
                        }
                        else
                        {
                            _entity.Asistencias.Remove(parte_old);
                        }
                    }
                }

                /*ParteAsistencias partes_bu = _entity.Asistencias.Clone();
                 * //_entity.Asistencias = ParteAsistencias.NewChildList();
                 * //se unen las dos listas
                 * //partes es la lista de partes de asistencia que existía antes de modificar el horario
                 * //nueva tiene los partes que se generan a partir del horario modificado
                 * //Se busca cada parte antiguo en la lista de partes nueva
                 * foreach (ParteAsistencia item in partes)
                 * {
                 *  ParteAsistencia existe = nueva.Contiene(item);
                 *
                 *  if (existe != null)
                 *  {
                 *      //Si se trata de una clase práctica
                 *      if (existe.Tipo == 2 && !existe.Confirmada)
                 *      {
                 *          //Si en el parte antiguo la clase práctica no tenía lista de notas de prácticas de alumnos o estaba vacía
                 *          //se le crea la lista de notas de prácticas de alumnos
                 *          if (item.Alumnos_Practicas == null || item.Alumnos_Practicas.Count == 0)
                 *          {
                 *              if (existe.Alumnos_Practicas.Count > 0)
                 *                  item.CreatePartePracticas(existe.Alumnos_Practicas[0].OidClasePractica);
                 *              else
                 *                  item.Alumnos_Practicas = existe.Alumnos_Practicas.Clone();
                 *          }
                 *          else
                 *          {
                 *              //si ya tenía lista de notas de prácticas se actualiza
                 *              foreach (Alumno_Practica alumno_practica in item.Alumnos_Practicas)
                 *              {
                 *                  if (alumno_practica.Falta)
                 *                      alumno_practica.Calificacion = Resources.Labels.NO_APTO_LABEL;
                 *              }
                 *          }
                 *      }
                 *
                 *      _entity.Asistencias.AddItem(item, false);
                 *
                 *      //Método rancio para eliminar el parte que ya existía en la lista original de la lista de partes nuevos
                 *      int ind = -1;
                 *      for (int i = 0; i < nueva.Count; i++)
                 *      {
                 *          ParteAsistencia obj = nueva[i];
                 *
                 *          if (item.OidInstructor == obj.OidInstructor
                 *          && item.Sesiones == obj.Sesiones
                 *          && item.NHoras == obj.NHoras
                 *          && item.Fecha.ToShortDateString() == obj.Fecha.ToShortDateString()
                 *          && item.HoraInicio == obj.HoraInicio)
                 *          {
                 *              ind = i;
                 *              break;
                 *          }
                 *      }
                 *      if (ind != -1)
                 *      {
                 *          ParteAsistencias aux = nueva.Clone();
                 *          nueva = ParteAsistencias.NewChildList();
                 *          for (int i = 0; i < aux.Count; i++)
                 *          {
                 *              if (i != ind)
                 *                  nueva.AddItem(aux[i]);
                 *          }
                 *      }
                 *  }
                 *  else
                 *  {
                 *      if (!item.Confirmada)
                 *      {
                 *          //Si no se ha encontrado el parte antiguo, se genera el albarán correspondiente y se elimina el parte antiguo
                 *          if (item.Conceptos != null && item.Conceptos.Count > 0)
                 *          {
                 *              InputDeliveryLineInfo concepto = InputDeliveryLineInfo.Get(item.Conceptos[0].OidConcepto);
                 *              InputDeliveryInfo albaran = albaranes.GetItem(concepto.OidAlbaran);
                 *              if (albaran != null && albaran.Facturado)
                 *              {
                 *                  _entity.Asistencias = partes_bu;
                 *                  return false;
                 *              }
                 *          }
                 *          ParteAsistencia.Delete(item.Oid);
                 *      }
                 *      else
                 *      {
                 *          _entity.Asistencias = partes_bu;
                 *
                 *          return false;
                 *      }
                 *  }
                 * }*/
                PgMng.Grow();

                //Al finalizar se añaden todos los partes nuevos que no tenían coincidencia a la lista de
                //partes del horario
                foreach (ParteAsistencia item in nueva)
                {
                    _entity.Asistencias.AddItem(item);
                }
                PgMng.Grow();

                return(true);
            }
            catch { return(false); }
            finally
            {
                PgMng.FillUp();
            }
        }
        protected override bool CrearPartes()
        {
            int  count      = 0;
            long oid_modulo = 0;
            int  index      = 0;

            PgMng.Reset(4, 1, Resources.Messages.CREANDO_PARTES_ASISTENCIA, this);

            try
            {
                PromocionInfo promo   = PromocionInfo.Get(_entity.OidPromocion, true);
                AlumnoList    alumnos = AlumnoList.GetListByPromocion(promo.Oid, true);

                if (promo.Sesiones.Count == 0)
                {
                    Promocion promocion = Promocion.Get(_entity.OidPromocion, false);
                    promocion.LoadChilds(typeof(Sesion_Promocion));
                    List <List <long> > duracion_sesiones = _entity.RellenaHorasSemana();
                    foreach (List <long> lista in duracion_sesiones)
                    {
                        foreach (long item in lista)
                        {
                            Sesion_Promocion ses = Sesion_Promocion.NewChild(promocion);
                            ses.NHoras = duracion_sesiones.IndexOf(lista) + 1;
                            if (item > 69)
                            {
                                ses.Sabado = true;
                            }
                            ses.HoraInicio = DateTime.Parse((item % 14 + 10).ToString("00") + ":00");
                            promocion.Sesiones.Add(ses);
                        }
                    }
                    promo = promocion.GetInfo(true);
                    promocion.CloseSession();
                }
                PgMng.Grow();

                foreach (Sesion item in _entity.Sesions)
                {
                    //Desmarca las clases que han sido marcadas como impartidas pero que tienen
                    //fecha y horas mayor que la actual
                    if (item.Fecha.Date > DateTime.Today.Date

                        /*|| (item.Fecha.Date.Equals(DateTime.Today.Date)
                         * && item.Hora.TimeOfDay > DateTime.Today.TimeOfDay)*/
                        && item.Estado == 3)
                    {
                        item.Estado = 2;
                    }

                    //No genera partes de asistencia para clases que no se han impartido
                    //if (item.Estado != 3)
                    //    continue;

                    //si ya hay un parte para esta práctica no se vuelve a crear
                    if (item.OidClasePractica > 0)
                    {
                        bool esta = false;
                        foreach (ParteAsistencia p in _entity.Asistencias)
                        {
                            //ClasePracticaInfo clase = null;

                            /*foreach (ClasePracticaList listap in _practicas)
                             * {
                             *  clase = listap.GetItem(item.OidClasePractica);
                             *  if (clase != null) break;
                             * }*/
                            //clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                            foreach (Clase_Parte cp in p.Clases)
                            {
                                if (cp.Tipo == 2 &&
                                    cp.OidClase == item.OidClasePractica &&
                                    (cp.Grupo == 3 || cp.Grupo == item.Grupo))
                                {
                                    esta = true;
                                    break;
                                }
                            }

                            /*if (p.Tipo == 2 && p.Sesiones.Contains(item.OidClasePractica.ToString())
                             *  && !p.Texto.Contains(" G" + Convert.ToString(3 - item.Grupo) + " "))
                             * {
                             *  esta = true;
                             *  break;
                             * }*/
                            if (esta)
                            {
                                break;
                            }
                        }
                        if (esta)
                        {
                            continue;
                        }
                    }

                    if (item.OidClaseTeorica > 0 ||
                        item.OidClasePractica > 0 ||
                        item.OidClaseExtra > 0)
                    {
                        string aux             = string.Empty;
                        long   oid_modulo_item = 0;
                        string sesion          = string.Empty;
                        long   tipo            = 0;
                        long   oid_clase       = 0;
                        long   grupo           = 3;

                        if (item.OidClasePractica != 0)
                        {
                            ClasePracticaInfo clase = null;

                            /*foreach (ClasePracticaList listap in _practicas)
                             * {
                             *  clase = listap.GetItem(item.OidClasePractica);
                             *  if (clase != null) break;
                             * }*/
                            clase           = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias + " G" + item.Grupo.ToString();
                            sesion          = clase.Oid.ToString();
                            tipo            = 2;
                            grupo           = clase.Grupo;
                            oid_clase       = clase.Oid;
                        }
                        if (item.OidClaseTeorica != 0)
                        {
                            ClaseTeoricaInfo clase = _teoricas.GetItem(item.OidClaseTeorica);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias;
                            sesion          = clase.Oid.ToString();
                            tipo            = 1;
                            oid_clase       = clase.Oid;
                        }
                        if (item.OidClaseExtra != 0)
                        {
                            ClaseExtraInfo clase = _extras.GetItem(item.OidClaseExtra);
                            oid_modulo_item = clase.OidModulo;
                            aux             = clase.Alias;
                            sesion          = clase.Oid.ToString();
                            tipo            = 3;
                            oid_clase       = clase.Oid;
                        }

                        if (oid_modulo_item != 0)
                        {
                            if (item.OidClasePractica == 0)
                            {
                                foreach (Sesion_PromocionInfo ses in promo.Sesiones)
                                {
                                    if (ses.HoraInicio.TimeOfDay == item.Hora.TimeOfDay)
                                    {
                                        count = 0;
                                        break;
                                    }
                                }
                            }
                            if (count == 0)
                            {
                                ParteAsistencia parte = ParteAsistencia.NewChild(_entity);
                                parte.Texto                 = aux + " ";
                                parte.Sesiones              = sesion + " ";
                                parte.Fecha                 = item.Fecha;
                                parte.HoraInicio            = item.Hora.ToString("HH:mm");
                                parte.Tipo                  = tipo;
                                parte.OidInstructor         = item.OidProfesor;
                                parte.OidInstructorEfectivo = item.OidProfesor;
                                parte.CreateAlumnosList(alumnos, item.Grupo);
                                if (index == _entity.Sesions.Count - 1)
                                {
                                    parte.NHoras = count.ToString() + ":00";
                                }
                                parte.MarkItemChild();
                                _entity.Asistencias.AddItem(parte);
                                oid_modulo = oid_modulo_item;
                                count++;
                                if (tipo == 2)
                                {
                                    _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = "5:00";
                                    _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                }
                                else
                                {
                                    _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = count.ToString() + ":00";
                                }
                            }
                            else
                            {
                                ParteAsistencia ultima = _entity.Asistencias[_entity.Asistencias.Count - 1];

                                if (ultima.OidHorario == item.OidHorario &&
                                    ultima.Fecha.Date.Equals(item.Fecha.Date) &&
                                    Convert.ToDateTime(ultima.HoraInicio).AddHours(count).Hour.Equals(item.Hora.Hour) &&
                                    ultima.OidInstructor == item.OidProfesor &&
                                    oid_modulo_item == oid_modulo &&
                                    ((ultima.Tipo == 1 && item.OidClaseTeorica > 0) ||
                                     (ultima.Tipo == 2 && item.OidClasePractica > 0) ||
                                     (ultima.Tipo == 3 && item.OidClaseExtra > 0)))
                                {
                                    count++;
                                    sesion += " ";
                                    if ((item.OidClasePractica > 0 && _entity.Asistencias[_entity.Asistencias.Count - 1].Sesiones != sesion) || item.OidClasePractica == 0)
                                    {
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].Texto    += aux + " ";
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].Sesiones += sesion;
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras    = count.ToString() + ":00";
                                        if (index == _entity.Sesions.Count - 1)
                                        {
                                            //_entity.Asistencias[_entity.Asistencias.Count - 1].Fecha = item.Fecha;
                                            //_entity.Asistencias[_entity.Asistencias.Count - 1].Hora = item.Hora;
                                            //_entity.Asistencias[_entity.Asistencias.Count - 1].OidInstructor = item.OidProfesor;
                                            count = 0;
                                        }
                                    }
                                    else
                                    {
                                        ClasePracticaInfo clase = null;
                                        clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica);
                                        string texto_aux = clase.Alias + " G" + item.Grupo.ToString() + " ";
                                        if (_entity.Asistencias[_entity.Asistencias.Count - 1].Texto != texto_aux)
                                        {
                                            _entity.Asistencias[_entity.Asistencias.Count - 1].Texto = clase.Alias;

                                            _entity.Asistencias[_entity.Asistencias.Count - 1].CreateAlumnosList(alumnos, 3);
                                            _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                        }
                                    }
                                }
                                else
                                {
                                    ParteAsistencia parte = ParteAsistencia.NewChild(_entity);
                                    parte.Texto                 = aux + " ";
                                    parte.Sesiones              = sesion + " ";
                                    parte.Fecha                 = item.Fecha;
                                    parte.HoraInicio            = item.Hora.ToString("HH:mm");
                                    parte.Tipo                  = tipo;
                                    parte.OidInstructor         = item.OidProfesor;
                                    parte.OidInstructorEfectivo = item.OidProfesor;
                                    parte.CreateAlumnosList(alumnos, item.Grupo);
                                    if (index == _entity.Sesions.Count - 1)
                                    {
                                        parte.NHoras = count.ToString() + ":00";
                                    }
                                    parte.MarkItemChild();
                                    _entity.Asistencias.AddItem(parte);
                                    oid_modulo = oid_modulo_item;
                                    count      = 1;
                                    if (tipo == 2)
                                    {
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = "5:00";
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica);
                                    }
                                    else
                                    {
                                        _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = count.ToString() + ":00";
                                    }
                                }
                            }
                            Clase_Parte registro = _entity.Asistencias[_entity.Asistencias.Count - 1].Clases.NewItem(_entity.Asistencias[_entity.Asistencias.Count - 1]);
                            registro.OidClase = oid_clase;
                            registro.Tipo     = tipo;
                            registro.Grupo    = grupo;
                        }
                    }
                    index++;
                }
                PgMng.Grow();

                return(true);
            }
            catch { return(false); }
            finally { PgMng.FillUp(); }
        }
        /// <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":
            {
                //moleQule.Library.Timer t = new moleQule.Library.Timer();
                if (Datos_Planes.Current != null && Plan_CB.SelectedItem != null)
                {
                    Datos_Promociones.DataSource = _combo_planes.GetFilteredChilds(((ComboBoxSource)Plan_CB.SelectedItem).Oid);
                    Generar_BT.Enabled           = true;
                }
                // t.Record("Plan_CB");
                //MessageBox.Show(t.GetCronos());
            } break;

            case "Promocion_CB":
            {
                //moleQule.Library.Timer t = new moleQule.Library.Timer();
                if (Datos_Promociones.Current != null)
                {
                    if (Promocion_CB.SelectedItem != null)
                    {
                        _entity.OidPromocion = ((ComboBoxSource)Promocion_CB.SelectedItem).Oid;
                    }
                    Generar_BT.Enabled = true;
                }
                //t.Record("Promocion_CB");
                //MessageBox.Show(t.GetCronos());
            } break;

            case "Semana_GB":
            {
                PromocionInfo promo = null;
                if (Promocion_CB.SelectedItem != null)
                {
                    promo = PromocionInfo.Get(((ComboBoxSource)Promocion_CB.SelectedItem).Oid, true);
                }

                if (promo != null)
                {
                    CLB_1.Items[0] = "08:00 - 9:00";
                    CLB_1.Items[1] = "09:00 - 10:00";
                    CLB_1.Items[2] = "10:00 - 11:00";
                    CLB_1.Items[3] = "11:00 - 12:00";
                    CLB_1.Items[4] = "12:00 - 13:00";
                    CLB_1.Items[5] = "13:00 - 14:00";
                    CLB_1.Items[6] = "14:00 - 15:00";
                    CLB_1.Items[7] = "15:00 - 16:00";
                    CLB_2.Items[0] = "16:00 - 17:00";
                    CLB_2.Items[1] = "17:00 - 18:00";
                    CLB_2.Items[2] = "18:00 - 19:00";
                    CLB_2.Items[3] = "19:00 - 20:00";
                    CLB_2.Items[4] = "20:00 - 21:00";
                    CLB_2.Items[5] = "21:00 - 22:00";

                    CLB_1.SetItemChecked(0, promo.H8AM);
                    CLB_1.SetItemChecked(1, promo.H0);
                    CLB_1.SetItemChecked(2, promo.H1);
                    CLB_1.SetItemChecked(3, promo.H2);
                    CLB_1.SetItemChecked(4, promo.H3);
                    CLB_1.SetItemChecked(5, promo.H4);
                    CLB_1.SetItemChecked(6, promo.H5);
                    CLB_1.SetItemChecked(7, promo.H6);
                    CLB_2.SetItemChecked(0, promo.H7);
                    CLB_2.SetItemChecked(1, promo.H8);
                    CLB_2.SetItemChecked(2, promo.H9);
                    CLB_2.SetItemChecked(3, promo.H10);
                    CLB_2.SetItemChecked(4, promo.H11);
                    CLB_2.SetItemChecked(5, promo.H12);

                    _entity.Configuracion = Sesiones_Promociones.NewChildList();

                    foreach (Sesion_PromocionInfo item in promo.Sesiones)
                    {
                        Sesion_Promocion copia_conf = Sesion_Promocion.NewChild(_entity);
                        copia_conf.HoraInicio = item.HoraInicio;
                        copia_conf.Sabado     = item.Sabado;
                        copia_conf.NHoras     = item.NHoras;
                        copia_conf.Hora       = item.Hora;
                        _entity.Configuracion.AddItem(copia_conf);
                    }

                    Datos_Sesiones.DataSource = _entity.Configuracion;
                }
            } break;

            case "Sabado_GB":
            {
                PromocionInfo promo = null;
                if (Promocion_CB.SelectedItem != null)
                {
                    promo = _promociones.GetItem(((ComboBoxSource)Promocion_CB.SelectedItem).Oid);
                }

                if (promo != null)
                {
                    CLB_3.Items[0] = "09:00 - 10:00";
                    CLB_3.Items[1] = "10:00 - 11:00";
                    CLB_3.Items[2] = "11:00 - 12:00";
                    CLB_3.Items[3] = "12:00 - 13:00";
                    CLB_3.Items[4] = "13:00 - 14:00";

                    CLB_3.SetItemChecked(0, promo.HS0);
                    CLB_3.SetItemChecked(1, promo.HS1);
                    CLB_3.SetItemChecked(2, promo.HS2);
                    CLB_3.SetItemChecked(3, promo.HS3);
                    CLB_3.SetItemChecked(4, promo.HS4);
                }
            } break;
            }
        }
        private void DoGeneraCronograma()
        {
            PgMng.Reset(10, 1, Resources.Messages.GENERANDO_CRONOGRAMA, this);

            try
            {
                int clases_dia    = 0;
                int clases_sabado = 0;
                int total_dias    = 5;
                PgMng.Grow();

                List <bool> activas_dia = new List <bool>();

                if (CLB_1.CheckedIndices.Contains(0))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(1))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(2))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(3))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(4))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(5))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(6))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_1.CheckedIndices.Contains(7))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(0))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(1))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(2))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(3))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(4))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                if (CLB_2.CheckedIndices.Contains(5))
                {
                    clases_dia++;
                    activas_dia.Add(true);
                }
                else
                {
                    activas_dia.Add(false);
                }
                PgMng.Grow();

                List <bool> activas_sabado = new List <bool>();

                if (CLB_3.CheckedIndices.Contains(0))
                {
                    clases_sabado++;
                    activas_sabado.Add(true);
                }
                else
                {
                    activas_sabado.Add(false);
                }
                if (CLB_3.CheckedIndices.Contains(1))
                {
                    clases_sabado++;
                    activas_sabado.Add(true);
                }
                else
                {
                    activas_sabado.Add(false);
                }
                if (CLB_3.CheckedIndices.Contains(2))
                {
                    clases_sabado++;
                    activas_sabado.Add(true);
                }
                else
                {
                    activas_sabado.Add(false);
                }
                if (CLB_3.CheckedIndices.Contains(3))
                {
                    clases_sabado++;
                    activas_sabado.Add(true);
                }
                else
                {
                    activas_sabado.Add(false);
                }
                if (CLB_3.CheckedIndices.Contains(4))
                {
                    clases_sabado++;
                    activas_sabado.Add(true);
                }
                else
                {
                    activas_sabado.Add(false);
                }
                PgMng.Grow();

                if (clases_sabado > 0)
                {
                    total_dias = 6;
                }

                _entity.Configuracion = Sesiones_Promociones.NewChildList();

                for (int row_index = 0; row_index < Datos_Sesiones.List.Count; row_index++)
                {
                    Sesion_Promocion sp     = Sesion_Promocion.NewChild(_entity);
                    Sesion_Promocion sp_row = ((Sesion_Promocion)Datos_Sesiones.List[row_index]);
                    sp.Hora       = sp_row.Hora;
                    sp.HoraInicio = sp_row.HoraInicio;
                    sp.NHoras     = sp_row.NHoras;
                    _entity.Configuracion.Add(sp);
                }

                moleQule.Library.Timer t = new moleQule.Library.Timer();
                //t.Start();
                //t.Record("inicio");
                PromocionInfo    promocion = PromocionInfo.Get(_entity.OidPromocion, false);
                PlanEstudiosInfo plan      = PlanEstudiosInfo.Get(_entity.OidPlan, false);
                if (promocion != null)
                {
                    if (_entity.GeneraCronograma(promocion.Oid != 0 ? promocion.FechaInicio : plan.Fecha, DateTime.MaxValue, (int)Semana_NUD.Value, clases_dia, clases_sabado, total_dias, (int)Practicas_NUD.Value, t, activas_dia, activas_sabado))
                    {
                        //t.Record("fin");
                        //MessageBox.Show(t.GetCronos());
                        //t.Record("GeneraCronograma");
                        //MessageBox.Show("Cronograma generado con éxito");
                        _generado = true;
                    }
                    else
                    {
                        MessageBox.Show("No se ha podido generar el cronograma.\n" +
                                        "Compruebe que no se hayan eliminado clases que ya estuvieran planificadas.");
                        _generado = false;
                    }
                }
                else
                {
                    MessageBox.Show("No se ha podido generar el cronograma.\n" +
                                    "Seleccione una promoción.");
                    _generado = false;
                }
                //Generar_BT.Enabled = false;
                PgMng.Grow();
            }
            finally { PgMng.FillUp(); }
            if (_generado)
            {
                PgMng.ShowInfoException(Resources.Messages.CRONOGRAMA_GENERADO_CON_EXITO);
                Submit_BT.PerformClick();
            }
        }
 protected override void GetFormSourceData(long oid)
 {
     _entity  = PromocionInfo.Get(oid, true);
     _mf_type = ManagerFormType.MFView;
 }