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