/**
* 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.math.BigDecimal;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.ResourceBundle;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.Locality;
import org.fenixedu.academic.domain.OptionalEnrolment;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.accounting.PostingRule;
import org.fenixedu.academic.domain.accounting.postingRules.serviceRequests.CertificateRequestPR;
import org.fenixedu.academic.domain.accounting.serviceAgreementTemplates.AdministrativeOfficeServiceAgreementTemplate;
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.exceptions.DomainException;
import org.fenixedu.academic.domain.organizationalStructure.Unit;
import org.fenixedu.academic.domain.organizationalStructure.UniversityUnit;
import org.fenixedu.academic.domain.phd.serviceRequests.documentRequests.PhdDocumentRequest;
import org.fenixedu.academic.domain.serviceRequests.AcademicServiceRequest;
import org.fenixedu.academic.domain.serviceRequests.AcademicServiceRequestSituationType;
import org.fenixedu.academic.domain.serviceRequests.RegistrationAcademicServiceRequest;
import org.fenixedu.academic.domain.serviceRequests.Under23TransportsDeclarationRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.CertificateRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.CourseLoadRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequestType;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.ExternalCourseLoadRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.ExternalProgramCertificateRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.IDocumentRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.ProgramCertificateRequest;
import org.fenixedu.academic.domain.student.MobilityProgram;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.domain.student.curriculum.ICurriculum;
import org.fenixedu.academic.domain.student.curriculum.ICurriculumEntry;
import org.fenixedu.academic.domain.studentCurriculum.ExternalEnrolment;
import org.fenixedu.academic.report.FenixReport;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.academic.util.FenixStringTools;
import org.fenixedu.academic.util.HtmlToTextConverterUtil;
import org.fenixedu.academic.util.Money;
import org.fenixedu.academic.util.MultiLanguageString;
import org.fenixedu.academic.util.StringFormatter;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.bennu.core.util.CoreConfiguration;
import org.fenixedu.commons.i18n.LocalizedString;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import com.google.common.base.Strings;
public class AdministrativeOfficeDocument extends FenixReport {
static final protected int LINE_LENGTH = 64;
static final protected int SUFFIX_LENGTH = 12;
static final protected String[] identifiers = { "i) ", "ii) ", "iii) ", "iv) ", "v) ", "vi) ", "vii) ", "viii) ", "ix) ",
"x) " };
static final protected String LINE_BREAK = "\n";
static final protected char END_CHAR = '-';
protected IDocumentRequest documentRequestDomainReference;
public static class AdministrativeOfficeDocumentCreator {
@SuppressWarnings("unchecked")
public static <T extends AdministrativeOfficeDocument> List<T> create(final IDocumentRequest documentRequest) {
switch (documentRequest.getDocumentRequestType()) {
case ENROLMENT_CERTIFICATE:
return Collections.<T> singletonList((T) new EnrolmentCertificate(documentRequest));
case APPROVEMENT_CERTIFICATE:
return Collections.<T> singletonList((T) new ApprovementCertificate(documentRequest));
case APPROVEMENT_MOBILITY_CERTIFICATE:
return Collections.<T> singletonList((T) new ApprovementMobilityCertificate(documentRequest));
case DEGREE_FINALIZATION_CERTIFICATE:
return Collections.<T> singletonList((T) new DegreeFinalizationCertificate(documentRequest));
case PHD_FINALIZATION_CERTIFICATE:
return Collections.<T> singletonList((T) new PhdFinalizationCertificate(documentRequest));
case SCHOOL_REGISTRATION_DECLARATION:
return Collections.<T> singletonList((T) new RegistrationDeclaration(documentRequest));
case SCHOOL_REGISTRATION_CERTIFICATE:
return Collections.<T> singletonList((T) new RegistrationCertificate(documentRequest));
case ENROLMENT_DECLARATION:
return Collections.<T> singletonList((T) new EnrolmentDeclaration(documentRequest));
case IRS_DECLARATION:
return Collections.<T> singletonList((T) new IRSDeclaration(documentRequest));
case DIPLOMA_REQUEST:
if (documentRequest.isRequestForRegistration()) {
return Collections.<T> singletonList((T) new Diploma(documentRequest));
}
if (documentRequest.isRequestForPhd()) {
return Collections.<T> singletonList((T) new PhdDiploma(documentRequest));
}
case REGISTRY_DIPLOMA_REQUEST:
if (documentRequest.isRequestForRegistration()) {
return Collections.<T> singletonList((T) new RegistryDiploma(documentRequest));
}
if (documentRequest.isRequestForPhd()) {
return Collections.<T> singletonList((T) new PhdRegistryDiploma(documentRequest));
}
case DIPLOMA_SUPPLEMENT_REQUEST:
List<T> result = new ArrayList<T>();
Set<Locale> definedLocales = new HashSet<Locale>(CoreConfiguration.supportedLocales());
definedLocales.remove(Locale.getDefault());
result.add((T) new DiplomaSupplement(documentRequest, Locale.getDefault()));
for (Locale locale : definedLocales) {
result.add((T) new DiplomaSupplement(documentRequest, locale));
}
return result;
case EXAM_DATE_CERTIFICATE:
return Collections.<T> singletonList((T) new ExamDateCertificate(documentRequest));
case COURSE_LOAD:
return Collections.<T> singletonList((T) new CourseLoadRequestDocument((CourseLoadRequest) documentRequest));
case EXTERNAL_COURSE_LOAD:
return Collections.<T> singletonList((T) new ExternalCourseLoadRequestDocument(
(ExternalCourseLoadRequest) documentRequest));
case PROGRAM_CERTIFICATE:
return Collections.<T> singletonList((T) new ProgramCertificateRequestDocument(
(ProgramCertificateRequest) documentRequest));
case EXTERNAL_PROGRAM_CERTIFICATE:
return Collections.<T> singletonList((T) new ExternalProgramCertificateRequestDocument(
(ExternalProgramCertificateRequest) documentRequest));
case EXTRA_CURRICULAR_CERTIFICATE:
return Collections.<T> singletonList((T) new ExtraCurricularCertificateRequestDocument(documentRequest));
case STANDALONE_ENROLMENT_CERTIFICATE:
return Collections.<T> singletonList((T) new StandaloneEnrolmentCertificateRequestDocument(documentRequest));
case UNDER_23_TRANSPORTS_REQUEST:
return Collections.<T> singletonList((T) new Under23TransportsDeclarationDocument(
(Under23TransportsDeclarationRequest) documentRequest));
default:
return Collections.<T> singletonList((T) new AdministrativeOfficeDocument(documentRequest));
}
}
}
protected AdministrativeOfficeDocument(final IDocumentRequest documentRequest) {
this(documentRequest, documentRequest.getLanguage());
}
public AdministrativeOfficeDocument(final IDocumentRequest documentRequest, final Locale locale) {
super(locale);
this.documentRequestDomainReference = documentRequest;
fillReport();
}
protected IDocumentRequest getDocumentRequest() {
return documentRequestDomainReference;
}
@Override
public String getReportTemplateKey() {
return getDocumentRequest().getDocumentTemplateKey();
}
protected UniversityUnit getUniversity(DateTime date) {
return UniversityUnit.getInstitutionsUniversityUnitByDate(date);
}
protected String getUniversityName(DateTime date) {
return getUniversity(date).getPartyName().getContent(getLanguage());
}
protected String getInstitutionName() {
return Bennu.getInstance().getInstitutionUnit().getPartyName().getContent(getLanguage());
}
@Override
public String getReportFileName() {
final StringBuilder result = new StringBuilder();
result.append(getDocumentRequest().getPerson().getUsername());
result.append("-");
result.append(new DateTime().toString(YYYYMMMDD, getLocale()));
result.append("-");
result.append(getDocumentRequest().getDescription().replace(":", EMPTY_STR).replace(SINGLE_SPACE, EMPTY_STR));
result.append("-");
result.append(getLanguage().toString());
return result.toString();
}
protected AdministrativeOffice getAdministrativeOffice() {
return getDocumentRequest().getAdministrativeOffice();
}
protected Registration getRegistration() {
if (getDocumentRequest().isRequestForRegistration()) {
return ((RegistrationAcademicServiceRequest) getDocumentRequest()).getRegistration();
}
if (getDocumentRequest().isRequestForPhd()) {
return ((PhdDocumentRequest) getDocumentRequest()).getPhdIndividualProgramProcess().getRegistration();
}
throw new DomainException("error.AdministrativeOfficeDocument.registration.not.found");
}
@Override
protected void fillReport() {
addParameter("bundle", ResourceBundle.getBundle(getBundle(), getLocale()));
addParameter("documentRequest", getDocumentRequest());
addParameter("registration", getRegistration());
if (showPriceFields() && !((AcademicServiceRequest) getDocumentRequest()).isFree()) {
addPriceFields();
}
addIntroParameters();
setDocumentTitle();
setPersonFields();
if (getDocumentRequest().hasExecutionYear()) {
String situation = getExecutionYear().containsDate(new DateTime()) ? "label.is" : "label.was";
addParameter("situation", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), situation));
}
addParameter("degreeDescription", getDegreeDescription());
addParameter("day", new LocalDate().toString(DD_MMMM_YYYY, getLocale()));
newFillReport();
}
protected String getBundle() {
return Bundle.ACADEMIC;
}
protected void newFillReport() {
}
protected boolean showPriceFields() {
return getDocumentRequest().isCertificate() && getDocumentRequest().getEventType() != null;
}
protected void addPriceFields() {
final CertificateRequest certificateRequest = (CertificateRequest) getDocumentRequest();
final CertificateRequestPR certificateRequestPR = (CertificateRequestPR) getPostingRule();
final Money amountPerPage = certificateRequestPR.getAmountPerPage();
final Money baseAmountPlusAmountForUnits =
certificateRequestPR.getBaseAmount().add(
certificateRequestPR.getAmountPerUnit().multiply(
BigDecimal.valueOf(certificateRequest.getNumberOfUnits())));
final Money urgencyAmount = certificateRequest.getUrgentRequest() ? certificateRequestPR.getBaseAmount() : Money.ZERO;
addParameter("printed",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.certificate.printingPriceLabel"));
addParameter("printPriceLabel",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.certificate.issuingPriceLabel"));
addParameter("urgency",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.certificate.fastDeliveryPriceLabel"));
addParameter("total",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.certificate.totalsPriceLabel"));
addParameter("amountPerPage", amountPerPage);
addParameter("baseAmountPlusAmountForUnits", baseAmountPlusAmountForUnits);
addParameter("urgencyAmount", urgencyAmount);
addParameter("printPriceFields", printPriceParameters(certificateRequest));
}
final protected PostingRule getPostingRule() {
final AdministrativeOfficeServiceAgreementTemplate serviceAgreementTemplate =
getDocumentRequest().getAdministrativeOffice().getServiceAgreementTemplate();
return serviceAgreementTemplate.findPostingRuleByEventType(getDocumentRequest().getEventType());
}
final protected boolean printPriceParameters(final CertificateRequest certificateRequest) {
return certificateRequest.getAcademicServiceRequestSituationType() == AcademicServiceRequestSituationType.PROCESSING
&& !certificateRequest.isFree() || certificateRequest.getEvent() != null;
}
protected void addIntroParameters() {
addParameter("administrativeOfficeCoordinator", getAdministrativeOffice().getCoordinator().getPerson());
addParameter("administrativeOfficeName", getI18NText(getAdministrativeOffice().getName()));
final Locality locality = getAdministrativeOffice().getCampus().getLocality();
addParameter("employeeLocation", locality != null ? locality.getName() : null);
addParameter("supervisingUnit",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.direcaoAcademica"));
addParameter("institutionName", getInstitutionName());
addParameter("universityName", getUniversityName(getDocumentRequest().getRequestDate()));
}
protected void setDocumentTitle() {
}
protected void setPersonFields() {
final Person person = getDocumentRequest().getPerson();
StringBuilder builder1 = new StringBuilder();
builder1.append(BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.with"));
builder1.append(SINGLE_SPACE).append(person.getIdDocumentType().getLocalizedName(getLocale()));
builder1.append(SINGLE_SPACE).append(BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.number.short"));
builder1.append(SINGLE_SPACE).append(person.getDocumentIdNumber());
StringBuilder builder2 = new StringBuilder();
builder2.append(BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "documents.birthLocale"));
builder2.append(SINGLE_SPACE).append(getBirthLocale(person, false));
if (getDocumentRequest().getDocumentRequestType().equals(DocumentRequestType.APPROVEMENT_MOBILITY_CERTIFICATE)) {
addParameter("name", person.getName().toUpperCase());
addParameter("documentIdNumber", builder1.toString());
addParameter("birthLocale", builder2.toString());
} else {
addParameter("name", FenixStringTools.multipleLineRightPad(person.getName().toUpperCase(), LINE_LENGTH, END_CHAR));
addParameter("documentIdNumber", FenixStringTools.multipleLineRightPad(builder1.toString(), LINE_LENGTH, END_CHAR));
addParameter("birthLocale", FenixStringTools.multipleLineRightPad(builder2.toString(), LINE_LENGTH, END_CHAR));
}
setNationality(person);
}
protected void setNationality(final Person person) {
final String nationality = person.getCountry().getFilteredNationality(getLocale()).toUpperCase();
String labelNationality = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "message.documents.nationality");
String nationalityMessage = MessageFormat.format(labelNationality, nationality);
if (getDocumentRequest().getDocumentRequestType().equals(DocumentRequestType.APPROVEMENT_MOBILITY_CERTIFICATE)) {
addParameter("nationality", nationalityMessage);
} else {
addParameter("nationality", FenixStringTools.multipleLineRightPad(nationalityMessage, LINE_LENGTH, END_CHAR));
}
}
protected String getBirthLocale(final Person person, final boolean prettyPrint) {
final StringBuilder result = new StringBuilder();
if (person.getParishOfBirth() == null) {
return "";
}
final String parishOfBirth =
prettyPrint ? StringFormatter.prettyPrint(person.getParishOfBirth()) : person.getParishOfBirth();
final String districtSubdivision =
prettyPrint ? StringFormatter.prettyPrint(person.getDistrictSubdivisionOfBirth()) : person
.getDistrictSubdivisionOfBirth();
result.append(parishOfBirth);
if (!parishOfBirth.equals(districtSubdivision)) {
result.append(",").append(SINGLE_SPACE).append(districtSubdivision);
}
return result.toString();
}
protected String getDegreeDescription() {
final Registration registration = getRegistration();
final DegreeType degreeType = registration.getDegreeType();
final CycleType cycleType =
degreeType.hasExactlyOneCycleType() ? degreeType.getCycleType() : registration.getCycleType(getExecutionYear());
return registration.getDegreeDescription(cycleType, getLocale());
}
protected ExecutionYear getExecutionYear() {
if (getDocumentRequest().hasExecutionYear()) {
return getDocumentRequest().getExecutionYear();
}
return ExecutionYear.readByDateTime(getDocumentRequest().getRequestDate());
}
final protected String getCreditsDescription() {
if (getDocumentRequest().isRequestForRegistration()) {
return ((RegistrationAcademicServiceRequest) getDocumentRequest()).getDegreeType().getCreditsDescription();
}
return null;
}
final protected String generateEndLine() {
return StringUtils.rightPad(EMPTY_STR, LINE_LENGTH, END_CHAR);
}
final protected String getCurriculumEntryName(final Map<Unit, String> academicUnitIdentifiers, final ICurriculumEntry entry) {
final StringBuilder result = new StringBuilder();
if (entry instanceof ExternalEnrolment) {
result.append(getAcademicUnitIdentifier(academicUnitIdentifiers, ((ExternalEnrolment) entry).getAcademicUnit()));
}
result.append(getPresentationNameFor(entry).toUpperCase());
return result.toString();
}
protected String getPresentationNameFor(final ICurriculumEntry entry) {
final MultiLanguageString result;
if (entry instanceof OptionalEnrolment) {
final OptionalEnrolment optionalEnrolment = (OptionalEnrolment) entry;
result = optionalEnrolment.getCurricularCourse().getNameI18N();
} else {
result = entry.getName();
}
return getMLSTextContent(result);
}
protected String getMLSTextContent(final MultiLanguageString mls) {
return getMLSTextContent(mls, getLanguage());
}
protected String getMLSTextContent(final MultiLanguageString mls, final Locale language) {
if (mls == null) {
return EMPTY_STR;
}
final String content =
mls.hasContent(language) && !StringUtils.isEmpty(mls.getContent(language)) ? mls.getContent(language) : mls
.getContent();
return content;
// return convert(content);
}
protected String getI18NText(LocalizedString localized) {
return getI18NText(localized, getLocale());
}
protected String getI18NText(LocalizedString localized, Locale language) {
if (localized == null) {
return "";
}
String result = localized.getContent(language);
return !Strings.isNullOrEmpty(result) ? result : localized.getContent();
}
protected String convert(final String content) {
return HtmlToTextConverterUtil.convertToText(content).replace("\n\n", "\t").replace(LINE_BREAK, EMPTY_STR)
.replace("\t", "\n\n").trim();
}
@SuppressWarnings("static-access")
final protected String getAcademicUnitIdentifier(final Map<Unit, String> academicUnitIdentifiers, final Unit academicUnit) {
if (!academicUnitIdentifiers.containsKey(academicUnit)) {
academicUnitIdentifiers.put(academicUnit, this.identifiers[academicUnitIdentifiers.size()]);
}
return academicUnitIdentifiers.get(academicUnit);
}
final protected void getCreditsInfo(final StringBuilder result, final ICurriculumEntry entry) {
result.append(entry.getEctsCreditsForCurriculum()).append(getCreditsDescription()).append(", ");
}
final protected String getRemainingCreditsInfo(final ICurriculum curriculum) {
final BigDecimal remainingCredits = curriculum.getRemainingCredits();
final StringBuilder result = new StringBuilder();
if (remainingCredits != BigDecimal.ZERO) {
result.append(LINE_BREAK);
final String remainingCreditsInfo =
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "documents.remainingCreditsInfo");
result.append(FenixStringTools.multipleLineRightPadWithSuffix(remainingCreditsInfo + ":", LINE_LENGTH, END_CHAR,
remainingCredits + getCreditsDescription()));
result.append(LINE_BREAK);
}
return result.toString();
}
final protected String getAcademicUnitInfo(final Map<Unit, String> unitIDs, final MobilityProgram mobilityProgram) {
final StringBuilder result = new StringBuilder();
for (final Entry<Unit, String> academicUnitId : unitIDs.entrySet()) {
final StringBuilder unit = new StringBuilder();
unit.append(academicUnitId.getValue());
unit.append(SINGLE_SPACE).append(
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "documents.external.curricular.courses.one"));
unit.append(SINGLE_SPACE).append(getMLSTextContent(academicUnitId.getKey().getPartyName()).toUpperCase());
if (mobilityProgram != null) {
unit.append(SINGLE_SPACE).append(
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "documents.external.curricular.courses.two"));
unit.append(SINGLE_SPACE).append(mobilityProgram.getDescription(getLocale()).toUpperCase());
}
result.append(FenixStringTools.multipleLineRightPad(unit.toString(), LINE_LENGTH, END_CHAR));
result.append(LINE_BREAK);
}
return result.toString();
}
protected String getCreditsAndGradeInfo(final ICurriculumEntry entry, final ExecutionYear executionYear) {
final StringBuilder result = new StringBuilder();
if (getDocumentRequest().isToShowCredits()) {
getCreditsInfo(result, entry);
}
result.append(entry.getGradeValue());
result.append(StringUtils.rightPad("(" + BundleUtil.getString(Bundle.ENUMERATION, getLocale(), entry.getGradeValue())
+ ")", SUFFIX_LENGTH, ' '));
result.append(SINGLE_SPACE);
final String in = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.in");
if (executionYear == null) {
result.append(StringUtils.rightPad(EMPTY_STR, in.length(), ' '));
result.append(SINGLE_SPACE).append(StringUtils.rightPad(EMPTY_STR, 9, ' '));
} else {
result.append(in);
result.append(SINGLE_SPACE).append(executionYear.getYear());
}
return result.toString();
}
protected void setFooter(DocumentRequest documentRequest) {
Registration registration = documentRequest.getRegistration();
String student;
if (registration.getStudent().getPerson().isMale()) {
student = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.maleStudent");
} else {
student = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.femaleStudent");
}
String stringTemplate =
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.footer.studentNumber");
addParameter("studentNumber", MessageFormat.format(stringTemplate, student, registration.getNumber().toString()));
stringTemplate =
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.footer.documentNumber");
addParameter("documentNumber", MessageFormat.format(stringTemplate, documentRequest.getServiceRequestNumberYear()));
addParameter("checked",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.checked"));
addParameter("page", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.footer.page"));
addParameter("pageOf",
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.footer.pageOf"));
}
protected void fillInstitutionAndStaffFields() {
final String institutionName = getInstitutionName();
final Person coordinator = getAdministrativeOffice().getCoordinator().getPerson();
String coordinatorTitle;
coordinatorTitle = getCoordinatorGender(coordinator);
String stringTemplate =
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.signer");
addParameter("signer",
MessageFormat.format(stringTemplate, coordinatorTitle, getI18NText(getAdministrativeOffice().getName())));
String departmentAndInstitute =
BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.signer");
addParameter("departmentAndInstitute",
MessageFormat.format(departmentAndInstitute, getI18NText(getAdministrativeOffice().getName()), institutionName));
addParameter("administrativeOfficeCoordinator", coordinator);
final Locality locality = getAdministrativeOffice().getCampus().getLocality();
String location = locality != null ? locality.getName() : null;
String dateDD = new LocalDate().toString("dd", getLocale());
String dateMMMM = new LocalDate().toString("MMMM", getLocale());
String dateYYYY = new LocalDate().toString("yyyy", getLocale());
stringTemplate = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.signerLocation");
addParameter("signerLocation",
MessageFormat.format(stringTemplate, institutionName, location, dateDD, dateMMMM, dateYYYY));
}
protected String getCoordinatorGender(final Person coordinator) {
if (coordinator.isMale()) {
return BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.maleCoordinator");
} else {
return BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.declaration.femaleCoordinator");
}
}
}