Package org.fenixedu.academic.report.academicAdministrativeOffice

Source Code of org.fenixedu.academic.report.academicAdministrativeOffice.CourseLoadRequestDocument$PreBolonhaCourseLoadEntry

/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic 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 Academic 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 Academic.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.fenixedu.academic.report.academicAdministrativeOffice;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.Enrolment;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.administrativeOffice.AdministrativeOffice;
import org.fenixedu.academic.domain.degree.DegreeType;
import org.fenixedu.academic.domain.degreeStructure.CycleType;
import org.fenixedu.academic.domain.organizationalStructure.UniversityUnit;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.CourseLoadRequest;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;

public class CourseLoadRequestDocument extends AdministrativeOfficeDocument {

    private static final long serialVersionUID = 10L;

    protected CourseLoadRequestDocument(final CourseLoadRequest documentRequest) {
        super(documentRequest);
    }

    @Override
    protected CourseLoadRequest getDocumentRequest() {
        return (CourseLoadRequest) super.getDocumentRequest();
    }

    @Override
    protected void fillReport() {

        addParameter("certification", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.certification").toUpperCase());
        addParameter("certificationMessage",
                BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.program.certificate.certification"));
        setPersonFields();
        fillInstitutionAndStaffFields();
        setFooter(getDocumentRequest());
        addParametersInformation();
    }

    private void addParametersInformation() {

        AdministrativeOffice administrativeOffice = getAdministrativeOffice();
        Person coordinator = administrativeOffice.getCoordinator().getPerson();
        Person student = getDocumentRequest().getPerson();
        final UniversityUnit university = UniversityUnit.getInstitutionsUniversityUnit();

        String coordinatorGender = getCoordinatorGender(coordinator);

        String labelStudent;
        if (student.isMale()) {
            labelStudent = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.of.student.male");
        } else {
            labelStudent = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.of.student.female");
        }

        String coordinatorName = coordinator.getName();
        String adminOfficeUnitName = getI18NText(administrativeOffice.getName()).toUpperCase();
        String universityName = getMLSTextContent(university.getPartyName()).toUpperCase();

        String institutionName = getInstitutionName().toUpperCase();

        String template = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.courseLoad.personalData.first");
        String firstPart =
                MessageFormat.format(template, coordinatorName, coordinatorGender, adminOfficeUnitName, institutionName,
                        universityName, labelStudent);
        addParameter("firstPart", firstPart);
        addParameter("secondPart", student.getName());
        addParameter("thirdPart", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.with.number"));
        addParameter("fourthPart", getStudentNumber());
        addParameter("fifthPart", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.of.male"));
        addParameter("sixthPart", getDegreeDescription());
        addParameter("seventhPart", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.courseLoad.endMessage"));

        addLabelsToMultiLanguage();
        createCourseLoadsList();
    }

    private void addLabelsToMultiLanguage() {
        addParameter("enrolment", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.serviceRequests.enrolment"));
        addParameter("year", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.year"));
        addParameter("autonomousWork", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.autonomousWork"));
        addParameter("courseLoad", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.courseLoad"));
        addParameter("total", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.total.amount"));
        addParameter("tTotal", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.total"));
        addParameter("lectures", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.lectures"));
        addParameter("practices", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.patrice"));
        addParameter("lecturesPractice", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.lecturesPractice"));
        addParameter("laboratory", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.laboratory"));
        addParameter("dissertations", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.courseLoad.dissertations"));
    }

    @Override
    protected String getDegreeDescription() {
        final CycleType requestedCycle = getDocumentRequest().getRequestedCycle();
        if (requestedCycle == null) {
            final Registration registration = getDocumentRequest().getRegistration();
            final DegreeType degreeType = registration.getDegreeType();
            final CycleType cycleType =
                    degreeType.hasExactlyOneCycleType() ? degreeType.getCycleType() : registration
                            .getCycleType(getExecutionYear());
            return registration.getDegreeDescription(getExecutionYear(), cycleType, getLocale());
        }
        return getDocumentRequest().getRegistration().getDegreeDescription(getExecutionYear(), requestedCycle, getLocale());
    }

    private String getStudentNumber() {
        final Registration registration = getDocumentRequest().getRegistration();
        if (registration.getRegistrationProtocol().isMilitaryAgreement()) {
            final String agreementInformation = registration.getAgreementInformation();
            if (!StringUtils.isEmpty(agreementInformation)) {
                return registration.getRegistrationProtocol().getCode() + SINGLE_SPACE + agreementInformation;
            }
        }
        return registration.getStudent().getNumber().toString();
    }

    private void createCourseLoadsList() {
        final List<CourseLoadEntry> bolonha = new ArrayList<CourseLoadEntry>();
        final List<CourseLoadEntry> preBolonha = new ArrayList<CourseLoadEntry>();
        final List<CourseLoadEntry> dissertations = new ArrayList<CourseLoadEntry>();

        addParameter("bolonhaList", bolonha);
        addParameter("preBolonhaList", preBolonha);
        addParameter("dissertationsList", dissertations);

        for (final Enrolment enrolment : getDocumentRequest().getEnrolmentsSet()) {

            if (enrolment.isBolonhaDegree()) {

                if (enrolment.isDissertation()) {
                    dissertations.add(new BolonhaCourseLoadEntry(enrolment));
                } else {
                    bolonha.add(new BolonhaCourseLoadEntry(enrolment));
                }

            } else {
                preBolonha.add(new PreBolonhaCourseLoadEntry(enrolment));
            }

        }

        Collections.sort(bolonha);
        Collections.sort(preBolonha);
        Collections.sort(dissertations);
    }

    static final protected String DD = "dd";
    static final protected String MMMM_YYYY = "MMMM yyyy";

    @Override
    protected boolean showPriceFields() {
        return false;
    }

    @Override
    protected void setPersonFields() {
        addParameter("name", getDocumentRequest().getPerson().getName());
    }

    abstract public class CourseLoadEntry implements Comparable<CourseLoadEntry> {
        private String curricularCourseName;
        private String year;
        private Double total;

        protected CourseLoadEntry(final String name, final String year) {
            this.curricularCourseName = name;
            this.year = year;
        }

        public String getCurricularCourseName() {
            return curricularCourseName;
        }

        public void setCurricularCourseName(String curricularCourseName) {
            this.curricularCourseName = curricularCourseName;
        }

        public String getYear() {
            return year;
        }

        public void setYear(String year) {
            this.year = year;
        }

        @Override
        public int compareTo(CourseLoadEntry other) {
            return getCurricularCourseName().compareTo(other.getCurricularCourseName());
        }

        public Double getTotal() {
            return total;
        }

        public void setTotal(Double total) {
            this.total = total;
        }

        public Boolean getCourseLoadCorrect() {
            return Boolean.valueOf(total.doubleValue() != 0d);
        }

        CourseLoadEntry create(final Enrolment enrolment) {
            if (enrolment.isBolonhaDegree()) {
                return new BolonhaCourseLoadEntry(enrolment);
            } else {
                return new PreBolonhaCourseLoadEntry(enrolment);
            }
        }
    }

    public class BolonhaCourseLoadEntry extends CourseLoadEntry {
        private Double contactLoad;
        private Double autonomousWork;

        public BolonhaCourseLoadEntry(final Enrolment enrolment) {
            super(enrolment.getCurricularCourse().getName(), enrolment.getExecutionYear().getYear());

            final CurricularCourse curricularCourse = enrolment.getCurricularCourse();
            setCurricularCourseName(curricularCourse.getNameI18N(enrolment.getExecutionYear()).getContent(getLanguage()));
            setContactLoad(curricularCourse.getContactLoad(enrolment.getExecutionPeriod()));
            setAutonomousWork(curricularCourse.getAutonomousWorkHours(enrolment.getExecutionPeriod()));
            setTotal(curricularCourse.getTotalLoad(enrolment.getExecutionPeriod()));
        }

        public Double getAutonomousWork() {
            return autonomousWork;
        }

        public void setAutonomousWork(Double autonomousWork) {
            this.autonomousWork = autonomousWork;
        }

        public Double getContactLoad() {
            return contactLoad;
        }

        public void setContactLoad(Double contactLoad) {
            this.contactLoad = contactLoad;
        }
    }

    public class PreBolonhaCourseLoadEntry extends CourseLoadEntry {
        private Double theoreticalHours;
        private Double praticalHours;
        private Double labHours;
        private Double theoPratHours;

        public PreBolonhaCourseLoadEntry(final Enrolment enrolment) {
            super(enrolment.getCurricularCourse().getName(), enrolment.getExecutionYear().getYear());
            initInformation(enrolment.getCurricularCourse(), enrolment.getExecutionYear());
        }

        private void initInformation(final CurricularCourse curricularCourse, ExecutionYear executionYear) {
            setCurricularCourseName(curricularCourse.getNameI18N(executionYear).getContent(getLanguage()));
            setTheoreticalHours(curricularCourse.getTheoreticalHours());
            setPraticalHours(curricularCourse.getPraticalHours());
            setLabHours(curricularCourse.getLabHours());
            setTheoPratHours(curricularCourse.getTheoPratHours());
            setTotal(calculateTotal(curricularCourse));
        }

        public Double getLabHours() {
            return labHours;
        }

        public void setLabHours(Double labHours) {
            this.labHours = labHours;
        }

        public Double getPraticalHours() {
            return praticalHours;
        }

        public void setPraticalHours(Double praticalHours) {
            this.praticalHours = praticalHours;
        }

        public Double getTheoPratHours() {
            return theoPratHours;
        }

        public void setTheoPratHours(Double theoPratHours) {
            this.theoPratHours = theoPratHours;
        }

        public Double getTheoreticalHours() {
            return theoreticalHours;
        }

        public void setTheoreticalHours(Double theoreticalHours) {
            this.theoreticalHours = theoreticalHours;
        }

        private Double calculateTotal(final CurricularCourse curricularCourse) {
            double result = 0d;
            result += curricularCourse.getTheoreticalHours();
            result += curricularCourse.getPraticalHours();
            result += curricularCourse.getLabHours();
            result += curricularCourse.getTheoPratHours();
            return Double.valueOf(result);
        }
    }

}
TOP

Related Classes of org.fenixedu.academic.report.academicAdministrativeOffice.CourseLoadRequestDocument$PreBolonhaCourseLoadEntry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.