private void Calendarizar(AlumnoMaterium alumnoMaterium, int diasEstudio) { var periodoActual = Helper.CalcularPeriodoActual(); var fechaActual = DateTime.Now; IRepositorio<Materium> repositorioMaterium = new MateriumRepositorio(); IRepositorio<Actividad> repositorioActividad = new ActividadRepositorio(); IList<Actividad> listActividades = repositorioActividad.GetAll(); IRepositorio<ClaseEvaluacion> repositorioClaseEvaluacion = new HorarioClaseRepositorio(); var listMisClasesEvaluacion = repositorioClaseEvaluacion.GetAll().Where(cE => cE.Cedula == alumnoMaterium.Cedula).ToList(); IRepositorio<SlMaterium> repositorioSlMateria = new SlMateriumRepositorio(); IRepositorio<SlSeccion> repositorioSlSeccion = new SlSeccionRepositorio(); var fechaIniSemestre = (from seccion in repositorioSlSeccion.GetAll() .Where( sec => sec.IdMateria == repositorioSlMateria.GetAll().Where( mat => mat.Nombre.CompareTo( repositorioMaterium.GetById(alumnoMaterium.IdMateria).Nombre) == 0).First() .IdMateria) where seccion.Periodo.CompareTo(Convert.ToInt32(periodoActual)) == 0 select seccion.InicioSem).First(); bool flag = true; //if (_fechaActual < fechaIniSemestre.AddDays(5)) //{ // var misActividadesFechaActual = new List<Actividad>(); // foreach (var claseEvaluacion in listMisClasesEvaluacion) // { // var miActClase = repositorioActividad.GetById(claseEvaluacion.IdActividad); // if (miActClase.Tipo.CompareTo("Clase") == 0 && // miActClase.HoraInicio.Date < _fechaActual.Date && // miActClase.IdMateria == alumnoMaterium.IdMateria) // { // misActividadesFechaActual.Add(miActClase); // } // } // if (misActividadesFechaActual.Count > 0) // { // flag = false; // } //} if (flag) { //OJO: VACACIONES var semanasRestantes = (16 - Math.Round((double)((fechaActual - fechaIniSemestre).Days / 7.0))); double horasAjustadas = alumnoMaterium.HorasPersonales * semanasRestantes; var miFecha = fechaActual.AddDays(1); var horasTotales = alumnoMaterium.HorasAcumuladas + horasAjustadas; while (alumnoMaterium.HorasAcumuladas < horasTotales) { if (diasEstudio < 7) { var misActividadesSemana = (from a in listActividades where a.Cedula == alumnoMaterium.Cedula && a.HoraInicio.Date < miFecha.AddDays(7).Date && a.HoraInicio.Date >= miFecha.Date select a).ToList(); foreach (var claseEvaluacion in listMisClasesEvaluacion) { var miActClase = repositorioActividad.GetById(claseEvaluacion.IdActividad); if (miActClase.HoraInicio.Date < miFecha.AddDays(7).Date && miActClase.HoraInicio.Date >= miFecha.Date) { misActividadesSemana.Add(miActClase); } } var horasOcupadas = new double[7]; for (int i = 0; i < 7; i++) { foreach (var actividad in misActividadesSemana) { if (actividad.HoraInicio.Date == miFecha.AddDays(i).Date) { horasOcupadas[i] += (actividad.HoraFin - actividad.HoraInicio).Hours; } } } var mejoresDias = new List<DateTime>(); double aux = 9999; int dia = 0; for (int i = 0; i < diasEstudio; i++) { for (int j = 0; j < 7; j++) { if (horasOcupadas[j] < aux) { aux = horasOcupadas[j]; dia = j; } } horasOcupadas[dia] = 9999; mejoresDias.Add(miFecha.AddDays(dia)); aux = 9999; dia = 0; } foreach (var mejorDia in mejoresDias) { GuardarActMejorHorario(mejorDia, alumnoMaterium, diasEstudio); } miFecha = miFecha.AddDays(7); } else { miFecha = miFecha.AddDays(1); GuardarActMejorHorario(miFecha, alumnoMaterium, diasEstudio); } } } }
private void HorasPersonales(IEnumerable<int?> misMaterias, Alumno alumno) { var miEdad = (int)((_fechaActual - alumno.FechaNac).Days / 365.25); IRepositorio<DatosSociales> repositorioDatosSociales = new DatosSocialesRepositorio(); var misDatosSociales = repositorioDatosSociales.GetByUniqueAtribute(alumno.Cedula.ToString()); IRepositorio<PromedioFactor> repositorioPromedioFactor = new PromedioFactorRepositorio(); var promedioFactor = repositorioPromedioFactor.GetAll(); IRepositorio<Materium> repositorioMaterium = new MateriumRepositorio(); // Se obtienen las horas base y se customiza segun los parametros del estudiante. foreach (int idMateria in misMaterias) { double horasBase = repositorioMaterium.GetById(idMateria).HorasBase; double promHistorico = 0; decimal nota = 0; int cantPersonalizacion = 0; // Personaliza segun la edad var fEdad = (from factor in promedioFactor where factor.Factor.CompareTo("Edad") == 0 && factor.Clasificacion.CompareTo(miEdad.ToString()) == 0 && factor.IdMateria == idMateria select factor); if (fEdad.Count() > 0) { cantPersonalizacion++; nota = fEdad.First().Promedio; promHistorico = promHistorico + (double)nota; } //Personaliza segun Trabajo cantPersonalizacion++; if (misDatosSociales.Trabaja.CompareTo("Si") == 0) { nota = (from factor in promedioFactor where factor.Factor.CompareTo("Trabajo") == 0 && factor.Clasificacion.CompareTo(misDatosSociales.RelacionTrabCarr) == 0 && factor.IdMateria == idMateria select factor.Promedio).First(); } else { nota = (from factor in promedioFactor where factor.Factor.CompareTo("Trabajo") == 0 && factor.Clasificacion.CompareTo("No Trabaja") == 0 && factor.IdMateria == idMateria select factor.Promedio).First(); } promHistorico = promHistorico + Convert.ToDouble(nota); //Personaliza segun la materia cantPersonalizacion++; nota = (from factor in promedioFactor where factor.Factor.CompareTo("Promedio") == 0 && factor.IdMateria == idMateria select factor.Promedio).First(); promHistorico = promHistorico + Convert.ToDouble(nota); //Personaliza segun el record de las materias que prelan esta materia IRepositorio<Requisito> repositorioRequisito = new RequisitoRepositorio(); var misRequisitos = (from r in repositorioRequisito.GetAll() where r.IdMateriaHijo == idMateria select r.IdMateriaPadre).ToList(); var prom = 0.0; if (misRequisitos.Count > 0) { IRepositorio<SlRecordAcademico> repositorioSlRecord = new SlRecordAcademicoRepositorio(); IRepositorio<SlSeccion> repositorioSlSeccion = new SlSeccionRepositorio(); IRepositorio<SlMaterium> repositorioSlMateria = new SlMateriumRepositorio(); var anioPerdiodo = Convert.ToInt32(_periodoActual.Substring(0, 4)); var periodo = Convert.ToInt32(_periodoActual.Substring(4)); if (periodo > 21) { periodo--; } else { anioPerdiodo--; } var periodoAnterior = Convert.ToInt32(anioPerdiodo.ToString() + periodo.ToString()); var sum = 0; foreach (var requisito in misRequisitos) { var materia = repositorioMaterium.GetById(requisito); var slMateria = repositorioSlMateria.GetAll().Where(m => m.Nombre.CompareTo(materia.Nombre) == 0).First(); var slSeccion = repositorioSlSeccion.GetAll().Where(s => s.IdMateria == slMateria.IdMateria && s.Periodo.CompareTo(periodoAnterior) == 0).ToList(); var n = (from record in repositorioSlRecord.GetAll() from seccion in slSeccion where record.Cedula == alumno.Cedula && record.IdSeccion == seccion.IdSeccion select record.Nota); if (n.Count() > 0) { sum++; prom += Convert.ToDouble(n.First()); } } if (prom > 0.0) { cantPersonalizacion++; promHistorico += (prom / sum); } } promHistorico = promHistorico / cantPersonalizacion; /* * Segun el promedio obtenido segun las caracteristicas * personales del alumno se le aumentan o disminuyen las * horas de estudio segun una regla. */ const double pendiente = -0.075; var factorM = (promHistorico * pendiente) + 1.75; var horasPersonalizadas = horasBase * factorM; var misHorasPersonales = new AlumnoMaterium() { IdMateria = idMateria, Cedula = alumno.Cedula, HorasPersonales = horasPersonalizadas }; //Segun las notas obtenidas en las evaluaciones anteriores se afecta las horas personales IRepositorio<ClaseEvaluacion> repositorioHorarioClase = new HorarioClaseRepositorio(); var listCronograma = repositorioHorarioClase.GetAll().Where(alum => alum.Cedula == alumno.Cedula).ToList(); IRepositorio<Actividad> repositorioActividad = new ActividadRepositorio(); var listActividades = repositorioActividad.GetAll().Where(a => a.Periodo.CompareTo(_periodoActual) == 0).ToList(); var misEvaluaciones = (from d in listCronograma from c in listActividades where c.Tipo.CompareTo("Evaluacion") == 0 && d.IdActividad == c.IdActividad select c).ToList(); foreach (var miEvaluacion in misEvaluaciones) { var miNota = (from cE in listCronograma where cE.IdActividad == miEvaluacion.IdActividad select cE.Nota).First(); if (miNota != 0.0) { const int x1 = 10; const int y1 = 0; const int x2 = 20; var y2 = (misHorasPersonales.HorasPersonales * (miEvaluacion.Ponderacion / 100.00)) * -1; var pendiente1 = (y2 - y1) / (x2 - x1); var factorMat = (miNota * pendiente1) - y2; misHorasPersonales.HorasPersonales += factorMat; } } if (prom > 0.00) { if (prom < 4) { misHorasPersonales.Preferencia = 5; } else if (prom < 8) { misHorasPersonales.Preferencia = 4; } else if (prom < 12) { misHorasPersonales.Preferencia = 3; } else if (prom < 16) { misHorasPersonales.Preferencia = 2; } else if (prom <= 20) { misHorasPersonales.Preferencia = 1; } } IRepositorio<AlumnoMaterium> repositorioAlumnoMateria = new AlumnoMateriumRepositorio(); repositorioAlumnoMateria.Update(misHorasPersonales); } }
protected void ActualizarAlumno(int miCedula) { var fechaActual = DateTime.Now; var semestre2 = new DateTime(fechaActual.Year, 03, 01); var verano1 = new DateTime(fechaActual.Year, 07, 01); var verano2 = new DateTime(fechaActual.Year, 10, 01); string periodoActual; if (fechaActual < semestre2) { periodoActual = (fechaActual.Year - 1) + "22"; } else if (fechaActual > verano1 && fechaActual < verano2) { periodoActual = (fechaActual.Year - 1) + "23"; } else { periodoActual = (fechaActual.Year - 1) + "21"; } IRepositorio<Materium> repositorioMateria = new MateriumRepositorio(); var listMaterias = repositorioMateria.GetAll(); IRepositorio<Actividad> repositorioActividad = new ActividadRepositorio(); var listActividades = new List<Actividad>(); IRepositorio<ClaseEvaluacion> repositorioClaseE = new HorarioClaseRepositorio(); var listClaseEvaluacion = repositorioClaseE.GetAll().Where(cE => cE.Cedula == miCedula).ToList(); foreach (var claseEvaluacion in listClaseEvaluacion) { var actividad = repositorioActividad.GetById(claseEvaluacion.IdActividad); if (actividad.Tipo.CompareTo("Clase") == 0 && actividad.Periodo.CompareTo((periodoActual)) == 0 && actividad.HoraInicio >= fechaActual) { listActividades.Add(actividad); } } foreach (var actividad in listActividades) { var materia = (from mat in listMaterias where mat.IdMateria == actividad.IdMateria select mat).First(); actividad.Materia = materia; } IRepositorio<Profesor> repositorioProfesor = new ProfesorRepositorio(); IRepositorio<SlMaterium> repositorioSlMateria = new SlMateriumRepositorio(); var listSlMaterias = repositorioSlMateria.GetAll(); IRepositorio<SlSeccion> repositorioSlSeccion = new SlSeccionRepositorio(); var listSlSecciones = repositorioSlSeccion.GetAll(); IRepositorio<SlClase> repositorioSlClase = new SlClaseRepositorio(); var listSlClase = repositorioSlClase.GetAll(); IRepositorio<SlProfesor> repositorioSlProfesor = new SlProfesorRepositorio(); var listSlProfesor = repositorioSlProfesor.GetAll(); foreach (var actividad in listActividades) { var flag = false; var slMateria = (from mat in listSlMaterias where mat.Nombre.CompareTo(actividad.Materia.Nombre) == 0 select mat).First(); if (slMateria.HorasLab != actividad.Materia.HorasLab) { actividad.Materia.HorasLab = slMateria.HorasLab; flag = true; Trace.Write("Se encontro un cambio en las horas de laboratorio de la materia " + actividad.Materia.Nombre); } if (slMateria.HorasPractica != actividad.Materia.HorasPractica) { actividad.Materia.HorasPractica = slMateria.HorasPractica; flag = true; Trace.Write("Se encontro un cambio en las horas de practica de la materia " + actividad.Materia.Nombre); } if (slMateria.HorasTeoria != actividad.Materia.HorasTeoria) { actividad.Materia.HorasTeoria = slMateria.HorasTeoria; flag = true; Trace.Write("Se encontro un cambio en las horas de teoria de la materia " + actividad.Materia.Nombre); } if (slMateria.Creditos != actividad.Materia.Creditos) { actividad.Materia.Creditos = slMateria.Creditos; flag = true; Trace.Write("Se encontro un cambio en los creditos de la materia " + actividad.Materia.Nombre); } if (actividad.Materia.Descripcion != null) { if (slMateria.Descripcion.CompareTo(actividad.Materia.Descripcion) != 0) { actividad.Materia.Descripcion = slMateria.Descripcion; flag = true; Trace.Write("Se encontro un cambio en la descripcion de la materia " + actividad.Materia.Nombre); } } if (flag) { Trace.WriteIf(repositorioMateria.Update(actividad.Materia).CompareTo("true") == 0, "Se actualizo la materia " + actividad.Materia.Nombre); } flag = false; var slSeccion = (from sec in listSlSecciones where sec.IdMateria == slMateria.IdMateria select sec).First(); if (slSeccion.Seccion.CompareTo(actividad.Seccion) != 0) { actividad.Seccion = slSeccion.Seccion; flag = true; Trace.Write("Se encontro un cambio de seccion en la materia " + actividad.Materia.Nombre); } if (flag) { Trace.WriteIf(repositorioActividad.Update(actividad).CompareTo("true") == 0, "Se actualizo la actividad de la materia " + actividad.Materia.Nombre); } //var listMisSlClase = (from clase in listSlClase // where clase.IdSeccion == slSeccion.IdSeccion // select clase).ToList(); //foreach (var slClase in listMisSlClase) //{ // var actividades = listActividades.Where(a => a.IdMateria == actividad.IdMateria && // a.Seccion == slSeccion.Seccion).ToList(); // foreach (var act in actividades) // { // flag = false; // if (slClase.HoraInicio.Hour.CompareTo(act.HoraInicio.Hour) != 0) // { // act.HoraInicio = new DateTime(act.HoraInicio.Year, act.HoraInicio.Month, act.HoraInicio.Day, // slClase.HoraInicio.Hour, act.HoraInicio.Minute, 0); // flag = true; // Trace.Write("Se encontro un cambio en la hora inicio de la materia " + // actividad.Materia.Nombre); // } // if (slClase.HoraInicio.Minute.CompareTo(act.HoraInicio.Minute) != 0) // { // act.HoraInicio = new DateTime(act.HoraInicio.Year, act.HoraInicio.Month, act.HoraInicio.Day, // act.HoraInicio.Minute, slClase.HoraInicio.Minute , 0); // flag = true; // Trace.Write("Se encontro un cambio en la hora inicio de la materia " + // actividad.Materia.Nombre); // } // if (slClase.HoraFin.Hour.CompareTo(act.HoraFin.Hour) != 0) // { // act.HoraFin = new DateTime(act.HoraFin.Year, act.HoraFin.Month, act.HoraFin.Day, // slClase.HoraFin.Hour, act.HoraFin.Minute, 0); // flag = true; // Trace.Write("Se encontro un cambio en la hora inicio de la materia " + // actividad.Materia.Nombre); // } // if (slClase.HoraFin.Minute.CompareTo(act.HoraFin.Minute) != 0) // { // act.HoraFin = new DateTime(act.HoraFin.Year, act.HoraFin.Month, act.HoraFin.Day, // act.HoraFin.Hour, slClase.HoraFin.Minute, 0); // flag = true; // Trace.Write("Se encontro un cambio en la hora inicio de la materia " + // actividad.Materia.Nombre); // } // if (flag) // { // Trace.WriteIf(repositorioActividad.Update(act).CompareTo("true") == 0, // "Se actualizo la actividad de la materia " + actividad.Materia.Nombre); // } // } //} flag = false; var slProfesor = (from p in listSlProfesor where p.Cedula == slSeccion.Profesor select p).First(); var profesor = repositorioProfesor.GetAll().Where(p => p.Cedula == actividad.Profesor).First(); if (slProfesor.Cedula.CompareTo(profesor.Cedula) != 0) { profesor.Cedula = slProfesor.Cedula; flag = true; Trace.Write("Se encontro un cambio del profesor de la materia " + actividad.Materia.Nombre); } if (slProfesor.Nombre.CompareTo(profesor.Nombre) != 0) { profesor.Nombre = slProfesor.Nombre; flag = true; Trace.Write("Se encontro un cambio en el nombre del profesor de la materia " + actividad.Materia.Nombre); } if (slProfesor.Apellido.CompareTo(profesor.Apellido) != 0) { profesor.Apellido = slProfesor.Apellido; flag = true; Trace.Write("Se encontro un cambio en el apellido del profesor de la materia " + actividad.Materia.Nombre); } if (flag) { Trace.WriteIf(repositorioProfesor.Update(profesor).CompareTo("true") == 0, "Se actualizo el profesor " + profesor.Nombre + " " + profesor.Apellido); } } }