protected override bool CrearPartes() { int count = 0; long oid_modulo = 0; int index = 0; long tipo = 0; PgMng.Reset(6, 1, Resources.Messages.CREANDO_PARTES_ASISTENCIA, this); try { PromocionInfo promo = PromocionInfo.Get(_entity.OidPromocion, true); AlumnoList alumnos = AlumnoList.GetListByPromocion(promo.Oid, true); if (promo.Sesiones.Count == 0) { Promocion promocion = Promocion.Get(_entity.OidPromocion, false); promocion.LoadChilds(typeof(Sesion_Promocion)); List <List <long> > duracion_sesiones = _entity.RellenaHorasSemana(); foreach (List <long> lista in duracion_sesiones) { foreach (long item in lista) { Sesion_Promocion ses = Sesion_Promocion.NewChild(promocion); ses.NHoras = duracion_sesiones.IndexOf(lista) + 1; if (item > 69) { ses.Sabado = true; } ses.HoraInicio = DateTime.Parse((item % 14 + 10).ToString("00") + ":00"); promocion.Sesiones.Add(ses); } } promo = promocion.GetInfo(true); promocion.CloseSession(); } PgMng.Grow(); if (!_entity.IsDirty) { return(true); } //guarda la lista de partes de asistencia anterior ParteAsistencias partes = _entity.Asistencias.Clone(); PgMng.Grow(); ParteAsistencias nueva = ParteAsistencias.NewChildList(); HorarioInfo horario_old = HorarioInfo.Get(_entity.Oid, true); //genera la nueva lista de partes de asistencia for (int sesion_ind = 0; sesion_ind < _entity.Sesions.Count; sesion_ind++) { Sesion item = _entity.Sesions[sesion_ind]; bool confirmada = false; if (item.OidClasePractica != 0) { bool incluida = false; foreach (ParteAsistencia parte_practicas in nueva) { if (parte_practicas.Tipo == 2) { ClasePracticaInfo p_info = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); if (p_info != null && (parte_practicas.Texto.Trim() == p_info.Alias.Trim() + "G" + item.Grupo.ToString() || parte_practicas.Texto.Trim() == p_info.Alias.Trim())) { incluida = true; break; } } } if (incluida) { continue; } } //Se busca un parte de asistencias confirmado que contenga esta clase foreach (ParteAsistencia parte_old in partes) { DateTime hora_sesion = DateTime.Parse(parte_old.HoraInicio); if (parte_old.Fecha.Date == item.Fecha.Date && hora_sesion.Hour == item.Hora.Hour && parte_old.Confirmada) { int n_horas = DateTime.Parse(parte_old.NHoras).Hour; for (int horas_ind = 0; horas_ind < n_horas; horas_ind++) { if (!_entity.Sesions[sesion_ind + horas_ind].IsEqual(horario_old.Sesions[sesion_ind + horas_ind])) { return(false); } } //se trata de una teórica o una extra y no hay que comprobar que en ese intervalo exista otra sesión if (item.OidClasePractica == 0) { sesion_ind += n_horas - 1; } nueva.Add(parte_old); confirmada = true; break; } } if (confirmada) { continue; } //Desmarca las clases que han sido marcadas como impartidas pero que tienen //fecha y horas mayor que la actual if (item.Fecha.Date > DateTime.Today.Date && item.Estado == 3) { item.Estado = 2; } //si ya hay un parte para esta práctica no se vuelve a crear if (item.OidClasePractica > 0) { bool esta = false; foreach (ParteAsistencia p in nueva) { foreach (Clase_Parte cp in p.Clases) { if (cp.Tipo == 2 && cp.OidClase == item.OidClasePractica && (cp.Grupo == 3 || cp.Grupo == item.Grupo)) { esta = true; break; } } } if (esta) { continue; } } if ((item.OidClaseTeorica > 0 || item.OidClasePractica > 0 || item.OidClaseExtra > 0) && !item.IsDeleted) { string aux = string.Empty; long oid_modulo_item = 0; string sesion = string.Empty; long oid_clase = 0; long grupo = 3; if (item.OidClasePractica != 0) { ClasePracticaInfo clase = null; clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); oid_modulo_item = clase.OidModulo; aux = clase.Alias + " G" + item.Grupo.ToString(); sesion = clase.Oid.ToString(); tipo = 2; grupo = clase.Grupo; oid_clase = clase.Oid; } if (item.OidClaseTeorica != 0) { ClaseTeoricaInfo clase = _teoricas.GetItem(item.OidClaseTeorica); oid_modulo_item = clase.OidModulo; aux = clase.Alias; sesion = clase.Oid.ToString(); tipo = 1; oid_clase = clase.Oid; } if (item.OidClaseExtra != 0) { ClaseExtraInfo clase = _extras.GetItem(item.OidClaseExtra); oid_modulo_item = clase.OidModulo; aux = clase.Alias; sesion = clase.Oid.ToString(); tipo = 3; oid_clase = clase.Oid; } if (oid_modulo_item != 0) { if (item.OidClasePractica == 0) { foreach (Sesion_PromocionInfo ses in promo.Sesiones) { if (ses.HoraInicio.TimeOfDay == item.Hora.TimeOfDay) { count = 0; break; } } } if (count == 0) { ParteAsistencia parte = ParteAsistencia.NewChild(_entity); parte.Tipo = tipo; parte.Texto = aux + " "; parte.Sesiones = sesion + " "; parte.Fecha = item.Fecha; parte.HoraInicio = item.Hora.ToString("HH:mm"); parte.OidInstructor = item.OidProfesor; parte.OidInstructorEfectivo = item.OidProfesor; parte.CreateAlumnosList(alumnos, item.Grupo); if (index == _entity.Sesions.Count - 1) { parte.NHoras = count.ToString() + ":00"; } parte.MarkItemChild(); nueva.AddItem(parte); oid_modulo = oid_modulo_item; count++; if (tipo == 2) { nueva[nueva.Count - 1].NHoras = "5:00"; nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica); } else { nueva[nueva.Count - 1].NHoras = count.ToString() + ":00"; } } else { ParteAsistencia ultima = nueva[nueva.Count - 1]; if (ultima.OidHorario == item.OidHorario && ultima.Fecha.Date.Equals(item.Fecha.Date) && Convert.ToDateTime(ultima.HoraInicio).AddHours(count).Hour.Equals(item.Hora.Hour) && ultima.OidInstructor == item.OidProfesor && oid_modulo_item == oid_modulo && ((ultima.Tipo == 1 && item.OidClaseTeorica > 0) || (ultima.Tipo == 2 && item.OidClasePractica > 0) || (ultima.Tipo == 3 && item.OidClaseExtra > 0))) { count++; sesion += " "; if ((item.OidClasePractica > 0 && nueva[nueva.Count - 1].Sesiones != sesion) || item.OidClasePractica == 0) { nueva[nueva.Count - 1].Texto += aux + " "; nueva[nueva.Count - 1].Sesiones += sesion; nueva[nueva.Count - 1].NHoras = count.ToString() + ":00"; if (index == _entity.Sesions.Count - 1) { count = 0; } } else { ClasePracticaInfo clase = null; clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); string texto_aux = clase.Alias + " G" + item.Grupo.ToString() + " "; if (nueva[nueva.Count - 1].Texto != texto_aux) { nueva[nueva.Count - 1].Texto = clase.Alias; nueva[nueva.Count - 1].CreateAlumnosList(alumnos, 3); nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica); } } } else { ParteAsistencia parte = ParteAsistencia.NewChild(_entity); parte.Tipo = tipo; parte.Texto = aux + " "; parte.Sesiones = sesion + " "; parte.Fecha = item.Fecha; parte.HoraInicio = item.Hora.ToString("HH:mm"); parte.OidInstructor = item.OidProfesor; parte.OidInstructorEfectivo = item.OidProfesor; parte.CreateAlumnosList(alumnos, item.Grupo); if (index == _entity.Sesions.Count - 1) { parte.NHoras = count.ToString() + ":00"; } parte.MarkItemChild(); nueva.AddItem(parte); oid_modulo = oid_modulo_item; count = 1; if (tipo == 2) { nueva[nueva.Count - 1].NHoras = "5:00"; nueva[nueva.Count - 1].CreatePartePracticas(item.OidClasePractica); } else { nueva[nueva.Count - 1].NHoras = count.ToString() + ":00"; } } } Clase_Parte registro = nueva[nueva.Count - 1].Clases.NewItem(nueva[nueva.Count - 1]); registro.OidClase = oid_clase; registro.Tipo = tipo; registro.Grupo = grupo; } } index++; } PgMng.Grow(); foreach (ParteAsistencia parte_old in partes) { bool esta = false; for (int i = 0; i < nueva.Count; i++) { ParteAsistencia parte_new = nueva[i]; if (parte_old.Fecha.Date == parte_new.Fecha.Date && parte_old.HoraInicio == parte_new.HoraInicio && parte_old.NHoras == parte_new.NHoras && parte_old.OidInstructor == parte_new.OidInstructor && parte_old.Tipo == parte_new.Tipo) { esta = true; foreach (Clase_Parte cp_old in parte_old.Clases) { bool esta_clase = false; foreach (Clase_Parte cp_new in parte_new.Clases) { if (cp_old.OidClase == cp_new.OidClase && cp_old.Tipo == cp_new.Tipo && cp_old.Grupo == cp_new.Grupo) { esta_clase = true; break; } } if (!esta_clase) { if (parte_old.Confirmada) { throw new iQException(Resources.Messages.PARTE_CON_CONCEPTOS_ASOCIADOS); } else { esta = false; break; } } } } if (esta) { nueva.Remove(parte_new); break; } } if (!esta) { if (parte_old.Confirmada) { throw new iQException(Resources.Messages.PARTE_CON_CONCEPTOS_ASOCIADOS); } else { _entity.Asistencias.Remove(parte_old); } } } /*ParteAsistencias partes_bu = _entity.Asistencias.Clone(); * //_entity.Asistencias = ParteAsistencias.NewChildList(); * //se unen las dos listas * //partes es la lista de partes de asistencia que existía antes de modificar el horario * //nueva tiene los partes que se generan a partir del horario modificado * //Se busca cada parte antiguo en la lista de partes nueva * foreach (ParteAsistencia item in partes) * { * ParteAsistencia existe = nueva.Contiene(item); * * if (existe != null) * { * //Si se trata de una clase práctica * if (existe.Tipo == 2 && !existe.Confirmada) * { * //Si en el parte antiguo la clase práctica no tenía lista de notas de prácticas de alumnos o estaba vacía * //se le crea la lista de notas de prácticas de alumnos * if (item.Alumnos_Practicas == null || item.Alumnos_Practicas.Count == 0) * { * if (existe.Alumnos_Practicas.Count > 0) * item.CreatePartePracticas(existe.Alumnos_Practicas[0].OidClasePractica); * else * item.Alumnos_Practicas = existe.Alumnos_Practicas.Clone(); * } * else * { * //si ya tenía lista de notas de prácticas se actualiza * foreach (Alumno_Practica alumno_practica in item.Alumnos_Practicas) * { * if (alumno_practica.Falta) * alumno_practica.Calificacion = Resources.Labels.NO_APTO_LABEL; * } * } * } * * _entity.Asistencias.AddItem(item, false); * * //Método rancio para eliminar el parte que ya existía en la lista original de la lista de partes nuevos * int ind = -1; * for (int i = 0; i < nueva.Count; i++) * { * ParteAsistencia obj = nueva[i]; * * if (item.OidInstructor == obj.OidInstructor * && item.Sesiones == obj.Sesiones * && item.NHoras == obj.NHoras * && item.Fecha.ToShortDateString() == obj.Fecha.ToShortDateString() * && item.HoraInicio == obj.HoraInicio) * { * ind = i; * break; * } * } * if (ind != -1) * { * ParteAsistencias aux = nueva.Clone(); * nueva = ParteAsistencias.NewChildList(); * for (int i = 0; i < aux.Count; i++) * { * if (i != ind) * nueva.AddItem(aux[i]); * } * } * } * else * { * if (!item.Confirmada) * { * //Si no se ha encontrado el parte antiguo, se genera el albarán correspondiente y se elimina el parte antiguo * if (item.Conceptos != null && item.Conceptos.Count > 0) * { * InputDeliveryLineInfo concepto = InputDeliveryLineInfo.Get(item.Conceptos[0].OidConcepto); * InputDeliveryInfo albaran = albaranes.GetItem(concepto.OidAlbaran); * if (albaran != null && albaran.Facturado) * { * _entity.Asistencias = partes_bu; * return false; * } * } * ParteAsistencia.Delete(item.Oid); * } * else * { * _entity.Asistencias = partes_bu; * * return false; * } * } * }*/ PgMng.Grow(); //Al finalizar se añaden todos los partes nuevos que no tenían coincidencia a la lista de //partes del horario foreach (ParteAsistencia item in nueva) { _entity.Asistencias.AddItem(item); } PgMng.Grow(); return(true); } catch { return(false); } finally { PgMng.FillUp(); } }
protected override bool CrearPartes() { int count = 0; long oid_modulo = 0; int index = 0; PgMng.Reset(4, 1, Resources.Messages.CREANDO_PARTES_ASISTENCIA, this); try { PromocionInfo promo = PromocionInfo.Get(_entity.OidPromocion, true); AlumnoList alumnos = AlumnoList.GetListByPromocion(promo.Oid, true); if (promo.Sesiones.Count == 0) { Promocion promocion = Promocion.Get(_entity.OidPromocion, false); promocion.LoadChilds(typeof(Sesion_Promocion)); List <List <long> > duracion_sesiones = _entity.RellenaHorasSemana(); foreach (List <long> lista in duracion_sesiones) { foreach (long item in lista) { Sesion_Promocion ses = Sesion_Promocion.NewChild(promocion); ses.NHoras = duracion_sesiones.IndexOf(lista) + 1; if (item > 69) { ses.Sabado = true; } ses.HoraInicio = DateTime.Parse((item % 14 + 10).ToString("00") + ":00"); promocion.Sesiones.Add(ses); } } promo = promocion.GetInfo(true); promocion.CloseSession(); } PgMng.Grow(); foreach (Sesion item in _entity.Sesions) { //Desmarca las clases que han sido marcadas como impartidas pero que tienen //fecha y horas mayor que la actual if (item.Fecha.Date > DateTime.Today.Date /*|| (item.Fecha.Date.Equals(DateTime.Today.Date) * && item.Hora.TimeOfDay > DateTime.Today.TimeOfDay)*/ && item.Estado == 3) { item.Estado = 2; } //No genera partes de asistencia para clases que no se han impartido //if (item.Estado != 3) // continue; //si ya hay un parte para esta práctica no se vuelve a crear if (item.OidClasePractica > 0) { bool esta = false; foreach (ParteAsistencia p in _entity.Asistencias) { //ClasePracticaInfo clase = null; /*foreach (ClasePracticaList listap in _practicas) * { * clase = listap.GetItem(item.OidClasePractica); * if (clase != null) break; * }*/ //clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); foreach (Clase_Parte cp in p.Clases) { if (cp.Tipo == 2 && cp.OidClase == item.OidClasePractica && (cp.Grupo == 3 || cp.Grupo == item.Grupo)) { esta = true; break; } } /*if (p.Tipo == 2 && p.Sesiones.Contains(item.OidClasePractica.ToString()) * && !p.Texto.Contains(" G" + Convert.ToString(3 - item.Grupo) + " ")) * { * esta = true; * break; * }*/ if (esta) { break; } } if (esta) { continue; } } if (item.OidClaseTeorica > 0 || item.OidClasePractica > 0 || item.OidClaseExtra > 0) { string aux = string.Empty; long oid_modulo_item = 0; string sesion = string.Empty; long tipo = 0; long oid_clase = 0; long grupo = 3; if (item.OidClasePractica != 0) { ClasePracticaInfo clase = null; /*foreach (ClasePracticaList listap in _practicas) * { * clase = listap.GetItem(item.OidClasePractica); * if (clase != null) break; * }*/ clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); oid_modulo_item = clase.OidModulo; aux = clase.Alias + " G" + item.Grupo.ToString(); sesion = clase.Oid.ToString(); tipo = 2; grupo = clase.Grupo; oid_clase = clase.Oid; } if (item.OidClaseTeorica != 0) { ClaseTeoricaInfo clase = _teoricas.GetItem(item.OidClaseTeorica); oid_modulo_item = clase.OidModulo; aux = clase.Alias; sesion = clase.Oid.ToString(); tipo = 1; oid_clase = clase.Oid; } if (item.OidClaseExtra != 0) { ClaseExtraInfo clase = _extras.GetItem(item.OidClaseExtra); oid_modulo_item = clase.OidModulo; aux = clase.Alias; sesion = clase.Oid.ToString(); tipo = 3; oid_clase = clase.Oid; } if (oid_modulo_item != 0) { if (item.OidClasePractica == 0) { foreach (Sesion_PromocionInfo ses in promo.Sesiones) { if (ses.HoraInicio.TimeOfDay == item.Hora.TimeOfDay) { count = 0; break; } } } if (count == 0) { ParteAsistencia parte = ParteAsistencia.NewChild(_entity); parte.Texto = aux + " "; parte.Sesiones = sesion + " "; parte.Fecha = item.Fecha; parte.HoraInicio = item.Hora.ToString("HH:mm"); parte.Tipo = tipo; parte.OidInstructor = item.OidProfesor; parte.OidInstructorEfectivo = item.OidProfesor; parte.CreateAlumnosList(alumnos, item.Grupo); if (index == _entity.Sesions.Count - 1) { parte.NHoras = count.ToString() + ":00"; } parte.MarkItemChild(); _entity.Asistencias.AddItem(parte); oid_modulo = oid_modulo_item; count++; if (tipo == 2) { _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = "5:00"; _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica); } else { _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = count.ToString() + ":00"; } } else { ParteAsistencia ultima = _entity.Asistencias[_entity.Asistencias.Count - 1]; if (ultima.OidHorario == item.OidHorario && ultima.Fecha.Date.Equals(item.Fecha.Date) && Convert.ToDateTime(ultima.HoraInicio).AddHours(count).Hour.Equals(item.Hora.Hour) && ultima.OidInstructor == item.OidProfesor && oid_modulo_item == oid_modulo && ((ultima.Tipo == 1 && item.OidClaseTeorica > 0) || (ultima.Tipo == 2 && item.OidClasePractica > 0) || (ultima.Tipo == 3 && item.OidClaseExtra > 0))) { count++; sesion += " "; if ((item.OidClasePractica > 0 && _entity.Asistencias[_entity.Asistencias.Count - 1].Sesiones != sesion) || item.OidClasePractica == 0) { _entity.Asistencias[_entity.Asistencias.Count - 1].Texto += aux + " "; _entity.Asistencias[_entity.Asistencias.Count - 1].Sesiones += sesion; _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = count.ToString() + ":00"; if (index == _entity.Sesions.Count - 1) { //_entity.Asistencias[_entity.Asistencias.Count - 1].Fecha = item.Fecha; //_entity.Asistencias[_entity.Asistencias.Count - 1].Hora = item.Hora; //_entity.Asistencias[_entity.Asistencias.Count - 1].OidInstructor = item.OidProfesor; count = 0; } } else { ClasePracticaInfo clase = null; clase = _practicas[(int)item.Grupo].GetItem(item.OidClasePractica); string texto_aux = clase.Alias + " G" + item.Grupo.ToString() + " "; if (_entity.Asistencias[_entity.Asistencias.Count - 1].Texto != texto_aux) { _entity.Asistencias[_entity.Asistencias.Count - 1].Texto = clase.Alias; _entity.Asistencias[_entity.Asistencias.Count - 1].CreateAlumnosList(alumnos, 3); _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica); } } } else { ParteAsistencia parte = ParteAsistencia.NewChild(_entity); parte.Texto = aux + " "; parte.Sesiones = sesion + " "; parte.Fecha = item.Fecha; parte.HoraInicio = item.Hora.ToString("HH:mm"); parte.Tipo = tipo; parte.OidInstructor = item.OidProfesor; parte.OidInstructorEfectivo = item.OidProfesor; parte.CreateAlumnosList(alumnos, item.Grupo); if (index == _entity.Sesions.Count - 1) { parte.NHoras = count.ToString() + ":00"; } parte.MarkItemChild(); _entity.Asistencias.AddItem(parte); oid_modulo = oid_modulo_item; count = 1; if (tipo == 2) { _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = "5:00"; _entity.Asistencias[_entity.Asistencias.Count - 1].CreatePartePracticas(item.OidClasePractica); } else { _entity.Asistencias[_entity.Asistencias.Count - 1].NHoras = count.ToString() + ":00"; } } } Clase_Parte registro = _entity.Asistencias[_entity.Asistencias.Count - 1].Clases.NewItem(_entity.Asistencias[_entity.Asistencias.Count - 1]); registro.OidClase = oid_clase; registro.Tipo = tipo; registro.Grupo = grupo; } } index++; } PgMng.Grow(); return(true); } catch { return(false); } finally { PgMng.FillUp(); } }