Ejemplo n.º 1
0
        /// <summary>
        /// Guarda en la bd el objeto actual
        /// </summary>
        protected override bool SaveObject()
        {
            using (StatusBusy busy = new StatusBusy(moleQule.Face.Resources.Messages.SAVING))
            {
                this.Datos.RaiseListChangedEvents = false;

                // do the save
                try
                {
                    string memo = Entity.MemoPreguntas;

                    foreach (Pregunta_Examen item in Entity.Pregunta_Examens)
                    {
                        //si se han añadido preguntas al examen, se añaden al memo
                        if (memo.IndexOf(";" + item.OidPregunta.ToString() + ";") == -1 ||
                            memo.IndexOf(item.OidPregunta.ToString() + ";") != 0)
                        {
                            memo += item.OidPregunta.ToString() + ";";
                        }
                    }

                    if (memo != string.Empty)
                    {
                        //se cambian los ; por coma porque los estamos guardando en la base de datos
                        //separandolos con ; y el SQL necesita que se separen con ,
                        memo = memo.Substring(0, memo.Length - 1);
                        memo = memo.Replace(';', ',');
                    }

                    _preguntas_examen = Preguntas.GetPreguntasByList(memo, _entity.SessionCode);

                    List <long> incluidas = new List <long>();

                    //hay que reconstruir el memo_preguntas
                    string memo_viejo = _entity.MemoPreguntas;
                    _entity.MemoPreguntas = string.Empty;

                    foreach (Pregunta_Examen item in Entity.Pregunta_Examens)
                    {
                        if (_preguntas_examen.GetItem(item.OidPregunta).Activa)
                        {
                            incluidas.Add(item.OidPregunta);
                            _entity.MemoPreguntas += item.OidPregunta.ToString() + ";";
                        }
                    }

                    GetPreguntasReservadas();

                    foreach (Pregunta item in _preguntas_examen)
                    {
                        if (item.Reservada && !preguntas_mismo_dia.Contains(item.Oid))
                        {
                            //hay que comprobar que estaba en el memopreguntas
                            //si no estaba, es que alguien la ha reservado  y no se puede incluir en el examen
                            if (memo_viejo.IndexOf(";" + item.Oid.ToString() + ";") == -1 &&
                                memo_viejo.IndexOf(item.Oid.ToString() + ";") != 0)
                            {
                                MessageBox.Show(string.Format(Resources.Messages.PREGUNTA_INCLUIDA, item.Codigo),
                                                moleQule.Library.Application.AppController.APP_TITLE,
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Exclamation);
                                //_preguntas_examen.CloseSession();
                                return(false);
                            }
                        }

                        //si están en el examen
                        if (incluidas.Contains(item.Oid))
                        {
                            //y el examen ha sido emitido, se bloquean
                            if (_entity.FechaEmision.Date.Equals(DateTime.Today.Date))
                            {
                                item.Reservada           = false;
                                item.Bloqueada           = true;
                                item.FechaUltimoExamen   = _entity.FechaExamen;
                                item.FechaDisponibilidad = _entity.FechaExamen.AddMonths(6);
                            }
                            else //si no, se reservan
                            {
                                item.Reservada = true;
                            }
                        }
                        else //si se han quitado del examen, deja de estar reservada
                        {
                            if (!preguntas_mismo_dia.Contains(item.Oid))
                            {
                                item.Reservada = false;
                            }
                        }
                    }
                    _entity.Pregunta_Examens = Pregunta_Examens.NewChildList();

                    Examen temp = _entity.Clone();
                    temp.ApplyEdit();

                    _entity = temp.Save();
                    _entity.ApplyEdit();

                    //rutina para copiar las imágenes de las preguntas en la carpeta de fotos
                    //de preguntas de examen
                    if (_entity.FechaEmision.Date.Equals(DateTime.Today.Date))
                    {
                        PgMng.Grow("Guardando imágenes...");

                        _entity.MemoPreguntas = string.Empty;
                        int orden = 1;
                        foreach (Pregunta origen in _preguntas_examen)
                        {
                            if (origen.Bloqueada == false)
                            {
                                continue;
                            }

                            foreach (PreguntaExamen destino in _entity.PreguntaExamens)
                            {
                                if (destino.OidPregunta == origen.Oid)
                                {
                                    if (origen.Imagen != string.Empty && File.Exists(origen.ImagenWithPath))
                                    {
                                        //string ext = string.Empty;

                                        Bitmap imagen = new Bitmap(origen.ImagenWithPath);

                                        //if (imagen.RawFormat.Guid.Equals(System.Drawing.Imaging.ImageFormat.Jpeg.Guid))
                                        //    ext = ".jpg";
                                        //else
                                        //{
                                        //    if (imagen.RawFormat.Guid.Equals(System.Drawing.Imaging.ImageFormat.Bmp.Guid))
                                        //        ext = ".bmp";
                                        //    else
                                        //    {
                                        //        if (imagen.RawFormat.Guid.Equals(System.Drawing.Imaging.ImageFormat.Png.Guid))
                                        //            ext = ".png";
                                        //    }
                                        //}

                                        string path = origen.ImagenWithPath;

                                        destino.Imagen = destino.Oid.ToString("000000") + path.Substring(path.LastIndexOf("."));

                                        int maxHeight = imagen.Height > imagen.Width ? imagen.Height : imagen.Width;

                                        Images.Save(origen.ImagenWithPath, destino.ImagenWithPath, maxHeight);

                                        imagen.Dispose();
                                    }
                                    else
                                    {
                                        destino.Imagen = string.Empty;
                                    }
                                    if (origen.ModeloRespuesta != string.Empty && File.Exists(origen.ModeloRespuestaPath))
                                    {
                                        string ext = origen.ModeloRespuesta.Substring(origen.ModeloRespuesta.LastIndexOf('.'));
                                        destino.ModeloRespuesta = destino.Oid.ToString("000000") + ext;

                                        string directorio = destino.ModeloRespuestaPath.Substring(0, destino.ModeloRespuestaPath.Length - destino.ModeloRespuesta.Length);
                                        if (!Directory.Exists(directorio))
                                        {
                                            Directory.CreateDirectory(directorio);
                                        }
                                        File.Copy(origen.ModeloRespuestaPath, destino.ModeloRespuestaPath);
                                    }
                                    else
                                    {
                                        origen.ModeloRespuesta = string.Empty;
                                    }
                                    orden++;
                                    break;
                                }
                            }

                            PgMng.Grow();
                        }
                        temp = _entity.Clone();
                        //_preguntas_examen.Save();
                        //_entity = temp.Save();
                    }

                    PgMng.Grow("Guardando examen...");

                    _preguntas_examen.Save();

                    temp    = _entity.Clone();
                    _entity = temp.Save();
                    _entity.BeginEdit();

                    PgMng.FillUp();

                    return(true);
                }
                catch (iQValidationException ex)
                {
                    MessageBox.Show(iQExceptionHandler.GetAllMessages(ex) +
                                    Environment.NewLine + ex.SysMessage,
                                    moleQule.Library.Application.AppController.APP_TITLE,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                    return(false);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(iQExceptionHandler.GetAllMessages(ex),
                                    moleQule.Library.Application.AppController.APP_TITLE,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                    return(true);
                }
                finally
                {
                    this.Datos.RaiseListChangedEvents = true;
                }
            }
        }
Ejemplo n.º 2
0
        protected override void CellContentClick(int column, int row)
        {
            switch (Preguntas_Grid.Columns[column].Name)
            {
            case "Ordenar_BT":
            {
                OrdenarPreguntasInputForm form = new OrdenarPreguntasInputForm(true, row + 1);
                form.SetSourceData(Entity, Preguntas_Grid.Rows.Count);
                form.ShowDialog();

                RellenaPreguntas();
            }
            break;

            case "Ver_BT":
            {
                //Pregunta.OpenSession();
                string memo = string.Empty;

                foreach (Pregunta_Examen item in Entity.Pregunta_Examens)
                {
                    memo += item.OidPregunta.ToString() + ",";
                }

                if (memo != string.Empty)
                {
                    memo = memo.Substring(0, memo.Length - 1);
                }

                PreguntaList preguntas = PreguntaList.GetPreguntasByList(memo);

                PreguntaInfo      info = (PreguntaInfo)Preguntas_Grid.Rows[row].DataBoundItem;
                PreguntasViewForm form = new PreguntasViewForm(info.Oid, preguntas, true);
                form.ShowDialog();
            }
            break;

            case "Editar_BT":
            {
                string memo = string.Empty;

                foreach (Pregunta_Examen item in Entity.Pregunta_Examens)
                {
                    memo += item.OidPregunta.ToString() + ",";
                }

                if (memo != string.Empty)
                {
                    memo = memo.Substring(0, memo.Length - 1);
                }

                Preguntas    preguntas = Preguntas.GetPreguntasByList(memo, _entity.SessionCode);
                Preguntas    ordenadas = Preguntas.NewList();
                PreguntaInfo info      = (PreguntaInfo)Preguntas_Grid.Rows[row].DataBoundItem;

                //se ordenan las preguntas para que se vayan mostrando en el mismo orden que en el examen
                foreach (Pregunta_Examen item in _entity.Pregunta_Examens)
                {
                    ordenadas.AddItem(preguntas.GetItem(item.OidPregunta));
                }

                Pregunta activa = ordenadas.GetItem(info.Oid);
                SortedBindingList <Pregunta> sorted = Preguntas.SortList(ordenadas, "Codigo", ListSortDirection.Ascending);

                PreguntasEditForm form = new PreguntasEditForm(activa, sorted, true);
                form.ShowDialog();

                //se recarga la lista de preguntas a seleccionar para que estén actualizadas
                PreguntasModulo = PreguntaList.GetPreguntasModulo(_entity.OidModulo, _entity.MemoPreguntas);

                RellenaPreguntas();
                //preguntas.CloseSession();
                ordenadas.CloseSession();
            }
            break;

            case "Eliminar_BT":
            {
                DialogResult result;

                result = MessageBox.Show("¿Está seguro que desea eliminar la pregunta seleccionada?", "Aviso", MessageBoxButtons.YesNo);

                if (result == DialogResult.Yes)
                {
                    //string memo_preguntas = Entity.MemoPreguntas;
                    //int pos = 0;

                    //long oid_eliminada = ((PreguntaInfo)Preguntas_Grid.Rows[row].DataBoundItem).Oid;

                    //string[] lista = Entity.MemoPreguntas.Split(';');
                    //Entity.MemoPreguntas = string.Empty;

                    //foreach (string oid in lista)
                    //{
                    //    try
                    //    {
                    //        long oid_pregunta = Convert.ToInt32(oid);
                    //        if (oid_pregunta != oid_eliminada)
                    //            Entity.MemoPreguntas += oid_pregunta + ";";
                    //        else
                    //        {
                    //            Pregunta item = _preguntas.GetItem(oid_pregunta);
                    //            item.Reservada = false;
                    //        }
                    //    }
                    //    catch
                    //    {
                    //        continue;
                    //    }
                    //}

                    foreach (Pregunta_Examen item in Entity.Pregunta_Examens)
                    {
                        if (item.OidPregunta == ((PreguntaInfo)Preguntas_Grid.Rows[row].DataBoundItem).Oid)
                        {
                            Entity.Pregunta_Examens.Remove(item);
                            break;
                        }
                    }

                    //while (memo_preguntas != string.Empty)
                    //{
                    //    string pregunta;
                    //    int index = memo_preguntas.IndexOf(";");
                    //    pregunta = memo_preguntas.Substring(0, index + 1);
                    //    memo_preguntas = memo_preguntas.Substring(index + 1);
                    //    if (pos != row)
                    //        Entity.MemoPreguntas += pregunta;
                    //    else
                    //    {
                    //        int l = pregunta.Length;
                    //        Pregunta p = _modulo.Preguntas.GetItem(Convert.ToInt64(pregunta.Substring(0, l - 1)));
                    //        p.Reservada = false;

                    //    }
                    //    pos++;
                    //}

                    RellenaPreguntas();
                }
            }
            break;
            }
        }
Ejemplo n.º 3
0
        protected override void LiberarAction()
        {
            if (!AppContext.User.IsAdmin /*|| !(AppContext.User.Name == "Admin")*/)
            {
                MessageBox.Show("Esta acción solo está permitida al administrador del sistema");
                return;
            }

            _liberar = true;

            if (Entity.FechaExamen.Date > DateTime.Today.Date)
            {
                if (Entity.Alumnos != null && Entity.Alumnos.Count > 0)
                {
                    MessageBox.Show("No se puede liberar un examen que tiene alumnos asociados.");
                }
                else
                {
                    PgMng.Reset(Entity.PreguntaExamens.Count * 2 + 2, 1, "Eliminando copias de preguntas y respuestas...", this);

                    PreguntaExamens preguntas = Entity.PreguntaExamens.Clone();
                    Entity.MemoPreguntas = string.Empty;
                    foreach (PreguntaExamen p in preguntas)
                    {
                        Entity.PreguntaExamens.Remove(p.Oid);
                        Entity.MemoPreguntas += p.OidPregunta.ToString() + ";";

                        PgMng.Grow();
                    }

                    string directorio = Library.Application.AppController.FOTOS_PREGUNTAS_EXAMEN_PATH + Entity.Oid.ToString("00000");

                    if (Directory.Exists(directorio))
                    {
                        Directory.Delete(directorio, true);
                    }

                    PgMng.Grow("Liberando preguntas...");

                    if (Entity.MemoPreguntas != string.Empty)
                    {
                        PgMng.Grow("Liberando preguntas...");

                        string lista_preguntas = Entity.MemoPreguntas.Replace(';', ',').Substring(0, Entity.MemoPreguntas.Length - 1);

                        _preguntas_examen = Preguntas.GetPreguntasByList(lista_preguntas, _entity.SessionCode);
                        foreach (Pregunta item in _preguntas_examen)
                        {
                            DateTime fecha = ExamenInfo.GetUltimoByPreguntaIncluida(item.Oid, Entity.FechaExamen);
                            if (fecha != DateTime.MinValue)
                            {
                                item.FechaDisponibilidad = fecha.AddMonths(6);
                                item.FechaUltimoExamen   = fecha;
                            }
                            else
                            {
                                item.FechaDisponibilidad = item.FechaAlta;
                                item.FechaUltimoExamen   = item.FechaAlta.AddMonths(-6);
                            }
                            item.Bloqueada = false;
                            item.Reservada = true;

                            PgMng.Grow();
                        }
                        _preguntas_examen.Save();
                    }

                    Entity.FechaEmision   = DateTime.MaxValue;
                    FExamen_DTP.Enabled   = true;
                    Desarrollo_CB.Enabled = true;
                    Instructor_CB.Enabled = true;
                    Promocion_CB.Enabled  = true;
                    Tipo_TB.Enabled       = true;

                    PgMng.FillUp();
                    MessageBox.Show("El examen ha sido liberado correctamente.");

                    SaveAction();
                    //Scripts.FormatFechaDisponibilidad();
                }
            }
            else
            {
                MessageBox.Show("No se puede liberar un examen que ya se ha celebrado.");
            }

            _liberar = false;
        }