public static List <HistorialCalificacionSemestral> seleccionarHistorial(calificaciones_semestrales calificacion_semestral) { // Código necesario para los métodos que // utilicen la base de datos CBTis123_Entities dbContext = Vinculo_DB.generarContexto(); List <HistorialCalificacionSemestral> listaHistorial = new List <HistorialCalificacionSemestral>(); try { historial_calificaciones_semestrales historialBruto = dbContext. historial_calificaciones_semestrales. SingleOrDefault( h => h.idCalificacion_Semestral == calificacion_semestral.idCalificacion_Semestral ); if (historialBruto != null) { string s1 = historialBruto.cambios; string[] s2 = s1.Split(new string[] { separadorRegistro }, StringSplitOptions.RemoveEmptyEntries); string[][] valoresFinales = new string[s2.Length][]; for (int i = 0; i < s2.Length; i++) { string s = s2[i]; valoresFinales[i] = s.Split(new string[] { separadorCampo }, StringSplitOptions.None); } foreach (string[] sArr in valoresFinales) { HistorialCalificacionSemestral h = new HistorialCalificacionSemestral(); int posicion = 0; h.nombreDeCampo = sArr[posicion++]; h.valorAnterior = sArr[posicion++]; h.valorNuevo = sArr[posicion++]; h.fuenteDeCambio = sArr[posicion++]; h.fecha = sArr[posicion++]; int idUsuario = Convert.ToInt32(sArr[posicion++]); usuarios u = dbContext.usuarios.SingleOrDefault(u1 => u1.idUsuario == idUsuario); h.usuarioAutor = u; listaHistorial.Add(h); } } } catch (Exception e) { ControladorVisual.mostrarMensaje(ControladorExcepciones.crearResultadoOperacionException(e)); } return(listaHistorial); }
// UPDATES public static ResultadoOperacion actualizarCalificaciones(IList <calificaciones_semestrales> listaCalificaciones, string razon) { // Código necesario para los métodos que // utilicen la base de datos CBTis123_Entities dbContext = Vinculo_DB.generarContexto(); // Setteamos variables necesarias para el método int calificacionesModificadas = 0; ResultadoOperacion innerRO = null; bool cambios = false; try { // Iteramos sobre la lista que nos pasaron foreach (calificaciones_semestrales c in listaCalificaciones) { // Creamos un StringBuilder para guardar cualquier cambio StringBuilder logCambios = new StringBuilder(); // Obtenemos las calificaciones que hay en la DB calificaciones_semestrales cUpdated = dbContext.calificaciones_semestrales.SingleOrDefault( c1 => c1.idCatedra == c.idCatedra && c1.idEstudiante == c.idEstudiante ); // Si hay algún cambio en cualquiera de los campos, // se agregará el registro al StringBuilder, y se // encenderá la bandera de que hubo cambio // PRIMERO, las asistencias if (ControladorMiscelaneo.compararNullableDouble(cUpdated.asistenciasParcial1, c.asistenciasParcial1) != 0) { logCambios.Append( crearLogCambios( "Asistencias parcial 1", cUpdated.asistenciasParcial1.ToString(), c.asistenciasParcial1.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.asistenciasParcial1 = c.asistenciasParcial1; cambios = true; } if (ControladorMiscelaneo.compararNullableDouble(cUpdated.asistenciasParcial2, c.asistenciasParcial2) != 0) { logCambios.Append( crearLogCambios( "Asistencias parcial 2", cUpdated.asistenciasParcial2.ToString(), c.asistenciasParcial2.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.asistenciasParcial2 = c.asistenciasParcial2; cambios = true; } if (ControladorMiscelaneo.compararNullableDouble(cUpdated.asistenciasParcial3, c.asistenciasParcial3) != 0) { logCambios.Append( crearLogCambios( "Asistencias parcial 3", cUpdated.asistenciasParcial3.ToString(), c.asistenciasParcial3.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.asistenciasParcial3 = c.asistenciasParcial3; cambios = true; } // SEGUNDO, las calificaciones if (ControladorMiscelaneo.compararNullableDouble(cUpdated.calificacionParcial1, c.calificacionParcial1) != 0) { logCambios.Append( crearLogCambios( "Calificación parcial 1", cUpdated.calificacionParcial1.ToString(), c.calificacionParcial1.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.calificacionParcial1 = c.calificacionParcial1; cambios = true; } if (ControladorMiscelaneo.compararNullableDouble(cUpdated.calificacionParcial2, c.calificacionParcial2) != 0) { logCambios.Append( crearLogCambios( "Calificación parcial 2", cUpdated.calificacionParcial2.ToString(), c.calificacionParcial2.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.calificacionParcial2 = c.calificacionParcial2; cambios = true; } if (ControladorMiscelaneo.compararNullableDouble(cUpdated.calificacionParcial3, c.calificacionParcial3) != 0) { logCambios.Append( crearLogCambios( "Calificación parcial 3", cUpdated.calificacionParcial3.ToString(), c.calificacionParcial3.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.calificacionParcial3 = c.calificacionParcial3; cambios = true; } //TERCERO, otros datos que se pueden modificar en el DGV if (cUpdated.firmado != c.firmado) { logCambios.Append( crearLogCambios( "Firmado", cUpdated.firmado.ToString(), c.firmado.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.firmado = c.firmado; cambios = true; } if (cUpdated.tipoDeAcreditacion != c.tipoDeAcreditacion) { logCambios.Append( crearLogCambios( "Tipo de acreditación", cUpdated.tipoDeAcreditacion, c.tipoDeAcreditacion, razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.tipoDeAcreditacion = c.tipoDeAcreditacion; cambios = true; } if (cUpdated.recursamiento != c.recursamiento) { logCambios.Append( crearLogCambios( "Firmado", cUpdated.recursamiento.ToString(), c.recursamiento.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.recursamiento = c.recursamiento; cambios = true; } if (cUpdated.verificado != c.verificado) { logCambios.Append( crearLogCambios( "Tipo de acreditación", cUpdated.verificado.ToString(), c.verificado.ToString(), razon, ControladorSesion.usuarioActivo.idUsuario ) ); cUpdated.verificado = c.verificado; cambios = true; } // Ahora, para guardar en el historial, // comprobamos que exista. Si no existe, // lo creamos y agregmos los cambios del StringBuilder. // Si ya existe, simplemente agregamos los // cambios al final de la cadena. historial_calificaciones_semestrales historial = dbContext.historial_calificaciones_semestrales.SingleOrDefault(h => h.idCalificacion_Semestral == cUpdated.idCalificacion_Semestral); if (historial == null) { historial = new historial_calificaciones_semestrales() { idCalificacion_Semestral = cUpdated.idCalificacion_Semestral, cambios = logCambios.ToString() }; dbContext.historial_calificaciones_semestrales.Add(historial); } else { historial.cambios += logCambios.ToString(); } } // Si hubo cambios, se guardan if (cambios) { calificacionesModificadas = dbContext.SaveChanges(); } } catch (Exception e) { innerRO = ControladorExcepciones.crearResultadoOperacionException(e); } int listaCalificacionesCount = listaCalificaciones.Count; return (!cambios ? new ResultadoOperacion( EstadoOperacion.NingunResultado, "No se guardó ninguna calificación - " + razon, null, innerRO) : calificacionesModificadas > 0 ? new ResultadoOperacion( EstadoOperacion.Correcto, "Calificaciones actualizadas - " + razon, null, innerRO) : new ResultadoOperacion( EstadoOperacion.ErrorAplicacion, "No se han actualizado las calificaciones - " + razon, "CalAct " + calificacionesModificadas.ToString(), innerRO)); }