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