/** * Copyright © 2011 Instituto Superior Técnico * * This file is part of FenixEdu Teacher Evaluation. * * FenixEdu Teacher Evaluation is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FenixEdu Teacher Evaluation is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FenixEdu Teacher Evaluation. If not, see <http://www.gnu.org/licenses/>. */ package pt.ist.fenixedu.teacher.evaluation.domain; import java.text.Collator; import java.util.Comparator; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.fenixedu.academic.domain.Person; import org.fenixedu.academic.predicate.AccessControl; import org.fenixedu.academic.util.Bundle; import org.fenixedu.bennu.core.domain.Bennu; import org.fenixedu.bennu.core.groups.DynamicGroup; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.fenixedu.bennu.core.security.Authenticate; public class TeacherEvaluationProcess extends TeacherEvaluationProcess_Base { public static Comparator<TeacherEvaluationProcess> COMPARATOR_BY_EVALUEE = new Comparator<TeacherEvaluationProcess>() { @Override public int compare(TeacherEvaluationProcess p1, TeacherEvaluationProcess p2) { final int i = Collator.getInstance().compare(p1.getEvaluee().getName(), p2.getEvaluee().getName()); return i == 0 ? p2.hashCode() - p1.hashCode() : i; } }; public static Comparator<TeacherEvaluationProcess> COMPARATOR_BY_INTERVAL = new Comparator<TeacherEvaluationProcess>() { @Override public int compare(TeacherEvaluationProcess p1, TeacherEvaluationProcess p2) { return FacultyEvaluationProcess.COMPARATOR_BY_INTERVAL.compare(p1.getFacultyEvaluationProcess(), p2.getFacultyEvaluationProcess()); } }; public TeacherEvaluationProcess() { super(); setRootDomainObject(Bennu.getInstance()); } public TeacherEvaluationProcess(final FacultyEvaluationProcess facultyEvaluationProcess, final Person evaluee, final Person evaluator) { setFacultyEvaluationProcess(facultyEvaluationProcess); setEvaluee(evaluee); setEvaluator(evaluator); if (facultyEvaluationProcess.getAllowNoEval()) { new NoEvaluation(this); } } public TeacherEvaluation getCurrentTeacherEvaluation() { TeacherEvaluation last = null; for (TeacherEvaluation evaluation : getTeacherEvaluationSet()) { if (last == null || evaluation.getCreatedDate().isAfter(last.getCreatedDate())) { last = evaluation; } } return last; } public TeacherEvaluationState getState() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null ? current.getState() : getFacultyEvaluationProcess().getState(); } public TeacherEvaluationType getType() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null ? current.getType() : null; } public boolean isAutoEvaluationLocked() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null && current.getAutoEvaluationLock() != null; } public boolean isEvaluationLocked() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null && current.getEvaluationLock() != null; } public TeacherEvaluationMark getAutoEvaluationMark() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null ? current.getAutoEvaluationMark() : null; } public void setEvaluationMark(TeacherEvaluationMark mark) { getCurrentTeacherEvaluation().setEvaluationMark(mark); } public TeacherEvaluationMark getEvaluationMark() { TeacherEvaluation current = getCurrentTeacherEvaluation(); return current != null ? current.getEvaluationMark() : null; } public boolean isInAutoEvaluationInterval() { return getFacultyEvaluationProcess().getAutoEvaluationInterval().containsNow(); } public boolean isInEvaluationInterval() { return getFacultyEvaluationProcess().getEvaluationInterval().containsNow(); } public boolean isInAutoEvaluation() { return isInAutoEvaluationInterval() && !isAutoEvaluationLocked(); } public boolean isInEvaluation() { return isInEvaluationInterval() && isAutoEvaluationLocked() && !isEvaluationLocked() && (getEvaluator().equals(AccessControl.getPerson()) || AccessControl.getPerson() .isTeacherEvaluationCoordinatorCouncilMember()); } public boolean isPossibleToInsertApprovedMark() { return (isEvaluationLocked() || getFacultyEvaluationProcess().getEvaluationInterval().getEnd().isBeforeNow()) && (AccessControl.getPerson().isTeacherEvaluationCoordinatorCouncilMember() || DynamicGroup.get("managers") .isMember(Authenticate.getUser())); } public boolean isPossibleToLockAutoEvaluation() { return hasAllNeededFilesForAuto(); } public boolean isPossibleToLockEvaluation() { return getEvaluationMark() != null && hasAllNeededFiles() && (getEvaluator().equals(AccessControl.getPerson()) || AccessControl.getPerson() .isTeacherEvaluationCoordinatorCouncilMember()); } public boolean isPossibleToViewEvaluation() { return isPossibleToInsertApprovedMark() || getEvaluator().equals(AccessControl.getPerson()) || AccessControl.getPerson().isTeacherEvaluationCoordinatorCouncilMember(); } public boolean isPossibleToUnlockAutoEvaluation() { return isAutoEvaluationLocked() && !isEvaluationLocked(); } public boolean isPossibleToUnlockEvaluation() { return isEvaluationLocked(); } public boolean isReadyForCCADConsideration() { return isEvaluationLocked() || getFacultyEvaluationProcess().getEvaluationInterval().getEnd().isBeforeNow(); } public Set<TeacherEvaluationFileBean> getTeacherEvaluationFileBeanSet() { SortedSet<TeacherEvaluationFileBean> teacherEvaluationFileBeans = new TreeSet<TeacherEvaluationFileBean>(TeacherEvaluationFileBean.COMPARATOR_BY_TYPE); TeacherEvaluation currentTeacherEvaluation = getCurrentTeacherEvaluation(); if (currentTeacherEvaluation != null) { if (isAutoEvaluationLocked()) { for (TeacherEvaluationFileType teacherEvaluationFileType : currentTeacherEvaluation.getAutoEvaluationFileSet()) { TeacherEvaluationFileBean e = new TeacherEvaluationFileBean(currentTeacherEvaluation, teacherEvaluationFileType); teacherEvaluationFileBeans.add(e); } if (isPossibleToViewEvaluation()) { for (TeacherEvaluationFileType teacherEvaluationFileType : currentTeacherEvaluation.getEvaluationFileSet()) { TeacherEvaluationFileBean e = new TeacherEvaluationFileBean(currentTeacherEvaluation, teacherEvaluationFileType); teacherEvaluationFileBeans.add(e); } } } } return teacherEvaluationFileBeans; } public Set<TeacherEvaluationFileBean> getTeacherAutoEvaluationFileBeanSet() { SortedSet<TeacherEvaluationFileBean> teacherEvaluationFileBeans = new TreeSet<TeacherEvaluationFileBean>(TeacherEvaluationFileBean.COMPARATOR_BY_TYPE); TeacherEvaluation currentTeacherEvaluation = getCurrentTeacherEvaluation(); if (currentTeacherEvaluation != null) { for (TeacherEvaluationFileType teacherEvaluationFileType : currentTeacherEvaluation.getAutoEvaluationFileSet()) { TeacherEvaluationFileBean e = new TeacherEvaluationFileBean(currentTeacherEvaluation, teacherEvaluationFileType); teacherEvaluationFileBeans.add(e); } if (isEvaluationLocked()) { for (TeacherEvaluationFileType teacherEvaluationFileType : currentTeacherEvaluation.getEvaluationFileSet()) { TeacherEvaluationFileBean e = new TeacherEvaluationFileBean(currentTeacherEvaluation, teacherEvaluationFileType); teacherEvaluationFileBeans.add(e); } } } return teacherEvaluationFileBeans; } private boolean hasAllNeededFilesForAuto() { TeacherEvaluation currentTeacherEvaluation = getCurrentTeacherEvaluation(); Set<TeacherEvaluationFileType> files = new HashSet<TeacherEvaluationFileType>(); if (currentTeacherEvaluation != null) { for (TeacherEvaluationFile teacherEvaluationFile : currentTeacherEvaluation.getTeacherEvaluationFileSet()) { files.add(teacherEvaluationFile.getTeacherEvaluationFileType()); } if (files.containsAll(currentTeacherEvaluation.getAutoEvaluationFileSet())) { return true; } } return false; } private boolean hasAllNeededFiles() { TeacherEvaluation currentTeacherEvaluation = getCurrentTeacherEvaluation(); Set<TeacherEvaluationFileType> files = new HashSet<TeacherEvaluationFileType>(); if (currentTeacherEvaluation != null) { for (TeacherEvaluationFile teacherEvaluationFile : currentTeacherEvaluation.getTeacherEvaluationFileSet()) { files.add(teacherEvaluationFile.getTeacherEvaluationFileType()); } if (files.containsAll(currentTeacherEvaluation.getEvaluationFileSet())) { return true; } } return false; } public String getCoEvaluatorsAsString() { final StringBuilder stringBuilder = new StringBuilder(); for (final TeacherEvaluationCoEvaluator teacherEvaluationCoEvaluator : getTeacherEvaluationCoEvaluatorSet()) { stringBuilder.append(teacherEvaluationCoEvaluator.getDescription()); } return stringBuilder.toString(); } public void delete() { setEvaluator(null); setEvaluee(null); setFacultyEvaluationProcess(null); for (final TeacherEvaluation teacherEvaluation : getTeacherEvaluationSet()) { teacherEvaluation.delete(); } for (final TeacherEvaluationCoEvaluator teacherEvaluationCoEvaluator : getTeacherEvaluationCoEvaluatorSet()) { teacherEvaluationCoEvaluator.delete(); } for (ApprovedTeacherEvaluationProcessMark mark : getApprovedTeacherEvaluationProcessMarkSet()) { mark.delete(); } setRootDomainObject(null); deleteDomainObject(); } public void setApprovedTeacherEvaluationProcessMark(final FacultyEvaluationProcessYear facultyEvaluationProcessYear, final TeacherEvaluationMark teacherEvaluationMark) { final ApprovedTeacherEvaluationProcessMark approvedTeacherEvaluationProcessMark = createApprovedTeacherEvaluationProcessMark(facultyEvaluationProcessYear); approvedTeacherEvaluationProcessMark.setApprovedEvaluationMark(teacherEvaluationMark); } private ApprovedTeacherEvaluationProcessMark createApprovedTeacherEvaluationProcessMark( final FacultyEvaluationProcessYear facultyEvaluationProcessYear) { for (final ApprovedTeacherEvaluationProcessMark approvedTeacherEvaluationProcessMark : getApprovedTeacherEvaluationProcessMarkSet()) { if (approvedTeacherEvaluationProcessMark.getFacultyEvaluationProcessYear() == facultyEvaluationProcessYear) { return approvedTeacherEvaluationProcessMark; } } return new ApprovedTeacherEvaluationProcessMark(facultyEvaluationProcessYear, this); } public SortedSet<ApprovedTeacherEvaluationProcessMark> getOrderedApprovedTeacherEvaluationProcessMark() { final SortedSet<ApprovedTeacherEvaluationProcessMark> result = new TreeSet<ApprovedTeacherEvaluationProcessMark>(ApprovedTeacherEvaluationProcessMark.COMPARATOR_BY_YEAR); result.addAll(getApprovedTeacherEvaluationProcessMarkSet()); return result; } public String getApprovedEvaluationMarkAsStringForCCAD() { final StringBuilder stringBuilder = new StringBuilder(); for (final ApprovedTeacherEvaluationProcessMark approvedTeacherEvaluationProcessMark : getOrderedApprovedTeacherEvaluationProcessMark()) { final FacultyEvaluationProcessYear facultyEvaluationProcessYear = approvedTeacherEvaluationProcessMark.getFacultyEvaluationProcessYear(); final String year = facultyEvaluationProcessYear.getYear(); final TeacherEvaluationMark approvedEvaluationMark = approvedTeacherEvaluationProcessMark.getApprovedEvaluationMark(); if (stringBuilder.length() > 0) { stringBuilder.append("\n"); } stringBuilder.append(year); stringBuilder.append(" "); if (approvedEvaluationMark == null) { stringBuilder.append("N/A"); } else { stringBuilder.append(BundleUtil.getString(Bundle.ENUMERATION, approvedEvaluationMark.name())); } } return stringBuilder.length() == 0 ? null : stringBuilder.toString(); } public String getApprovedEvaluationMarkAsString() { final FacultyEvaluationProcess facultyEvaluationProcess = getFacultyEvaluationProcess(); return facultyEvaluationProcess.getAreApprovedMarksPublished() ? getApprovedEvaluationMarkAsStringForCCAD() : null; } }