/**
* Copyright © 2011 Instituto Superior Técnico
*
* This file is part of FenixEdu Teacher Credits.
*
* FenixEdu Teacher Credits 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 Credits 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 Credits. If not, see <http://www.gnu.org/licenses/>.
*/
package pt.ist.fenixedu.teacher.domain.teacher;
import java.math.BigDecimal;
import java.util.List;
import org.fenixedu.academic.domain.Attends;
import org.fenixedu.academic.domain.Professorship;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import pt.ist.fenixedu.teacher.domain.credits.util.ProjectTutorialServiceBean;
import pt.ist.fenixframework.Atomic;
public class DegreeProjectTutorialService extends DegreeProjectTutorialService_Base {
public DegreeProjectTutorialService(Professorship professorship, Attends attend, Integer percentageValue) {
super();
setRootDomainObject(Bennu.getInstance());
setProfessorship(professorship);
TeacherService teacherService =
TeacherService.getTeacherService(professorship.getTeacher(), professorship.getExecutionCourse()
.getExecutionYear().getNextExecutionYear().getFirstExecutionPeriod());
setTeacherService(teacherService);
setAttend(attend);
setPercentageValue(percentageValue);
}
@Override
public void setPercentageValue(Integer percentageValue) {
checkPercentage(percentageValue);
super.setPercentageValue(percentageValue);
new TeacherServiceLog(getTeacherService(), BundleUtil.getString(Bundle.TEACHER_CREDITS,
"label.teacher.degreeProjectTutorialService.change", getProfessorship().getExecutionCourse().getName(),
getProfessorship().getTeacher().getPerson().getNickname(), getAttend().getRegistration().getNumber().toString(),
getPercentageValue().toString()));
}
private void checkPercentage(Integer percentageValue) {
Integer availablePercentage = new Integer(100);
if (percentageValue == null || percentageValue.compareTo(0) < 0 || percentageValue.compareTo(availablePercentage) > 0) {
throw new DomainException("message.invalid.percentage");
}
for (DegreeProjectTutorialService degreeProjectTutorialService : getAttend().getDegreeProjectTutorialServicesSet()) {
if (!degreeProjectTutorialService.equals(this)) {
availablePercentage = availablePercentage - degreeProjectTutorialService.getPercentageValue();
}
}
if (percentageValue.compareTo(availablePercentage) > 0) {
throw new DomainException("message.exceeded.percentage");
}
}
@Atomic
public static void updateProjectTutorialService(List<ProjectTutorialServiceBean> projectTutorialServicesBean) {
for (ProjectTutorialServiceBean projectTutorialServiceBean : projectTutorialServicesBean) {
if (!projectTutorialServiceBean.getProfessorship().getExecutionCourse().getProjectTutorialCourse()) {
throw new DomainException("message.invalid.executionCourseType");
}
DegreeProjectTutorialService degreeProjectTutorialService =
projectTutorialServiceBean.getDegreeProjectTutorialService();
if (projectTutorialServiceBean.getPercentage() == null) {
projectTutorialServiceBean.setPercentage(0);
}
if (degreeProjectTutorialService == null && projectTutorialServiceBean.getPercentage() != 0) {
degreeProjectTutorialService =
new DegreeProjectTutorialService(projectTutorialServiceBean.getProfessorship(),
projectTutorialServiceBean.getAttend(), projectTutorialServiceBean.getPercentage());
} else if (degreeProjectTutorialService != null
&& !degreeProjectTutorialService.getPercentageValue().equals(projectTutorialServiceBean.getPercentage())) {
degreeProjectTutorialService.setPercentageValue(projectTutorialServiceBean.getPercentage());
}
}
}
@Override
public void delete() {
new TeacherServiceLog(getTeacherService(), BundleUtil.getString(Bundle.TEACHER_CREDITS,
"label.teacher.degreeProjectTutorialService.delete", getProfessorship().getExecutionCourse().getName(),
getProfessorship().getTeacher().getPerson().getNickname(), getAttend().getRegistration().getNumber().toString(),
getPercentageValue().toString()));
setAttend(null);
setProfessorship(null);
super.delete();
}
public BigDecimal getDegreeProjectTutorialServiceCredits() {
if (getAttend().getEnrolment() != null && getAttend().getEnrolment().isApproved()) {
return new BigDecimal((((double) getPercentageValue()) / 100)
* (getAttend().getExecutionCourse().getEctsCredits() / 60));
}
return BigDecimal.ZERO;
}
}