Exemplo 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;
                }
            }
        }