/** * 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 org.fenixedu.academic.domain.Person; import org.fenixedu.academic.domain.accounting.EventType; import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequest; import org.fenixedu.academic.domain.serviceRequests.documentRequests.IDocumentRequest; import org.fenixedu.academic.domain.serviceRequests.documentRequests.IRSDeclarationRequest; import org.fenixedu.academic.domain.student.Registration; import org.fenixedu.academic.util.Bundle; import org.fenixedu.academic.util.FenixStringTools; import org.fenixedu.academic.util.Money; import org.fenixedu.bennu.core.domain.Bennu; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.joda.time.DateTime; public class IRSDeclaration extends AdministrativeOfficeDocument { protected IRSDeclaration(final IDocumentRequest documentRequest) { super(documentRequest); } @Override protected DocumentRequest getDocumentRequest() { return (DocumentRequest) super.getDocumentRequest(); } @Override protected void fillReport() { final Registration registration = getDocumentRequest().getRegistration(); final Person person = registration.getPerson(); final Integer civilYear = ((IRSDeclarationRequest) getDocumentRequest()).getYear(); addParameter("registration", registration); addParameter("documentTitle", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.title.declaration")); String institutionName = getInstitutionName(); String universityName = getUniversityName(new DateTime()); String socialSecurityNumber = Bennu.getInstance().getInstitutionUnit().getSocialSecurityNumber().toString(); String stringTemplate1 = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.firstParagraph"); addParameter( "firstParagraph", MessageFormat.format(stringTemplate1, institutionName.toUpperCase(getLocale()), universityName.toUpperCase(getLocale()))); String stringTemplate2 = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.secondParagraph"); addParameter("secondParagraph", MessageFormat.format(stringTemplate2, socialSecurityNumber)); addParameter("socialSecurityNumber", socialSecurityNumber); addParameter("thirdParagraph", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.thirdParagraph")); addParameter("sixthParagraph", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.sixthParagraph")); addParameter("seventhParagraph", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.seventhParagraph")); setPersonFields(registration, person); addParameter("civilYear", civilYear.toString()); setAmounts(person, civilYear); setFooter(getDocumentRequest()); fillInstitutionAndStaffFields(); } final private void setPersonFields(final Registration registration, final Person person) { final String name = person.getName().toUpperCase(); addParameter("name", FenixStringTools.multipleLineRightPad(name, LINE_LENGTH, END_CHAR)); final String registrationNumber = registration.getNumber().toString(); String fourthParagraph = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.fourthParagraph"); addParameter("fourthParagraph", fourthParagraph); int fourthParagraphLength = fourthParagraph.length(); addParameter("registrationNumber", FenixStringTools.multipleLineRightPad(registrationNumber, LINE_LENGTH - fourthParagraphLength, END_CHAR)); final String documentIdNumber = person.getDocumentIdNumber().toString(); String fifthParagraph = BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.fifthParagraph"); addParameter("fifthParagraph", fifthParagraph); int fithParagraphLength = fifthParagraph.length(); addParameter("documentIdNumber", FenixStringTools.multipleLineRightPad(documentIdNumber, LINE_LENGTH - fithParagraphLength, END_CHAR)); } final private void setAmounts(final Person person, final Integer civilYear) { Money gratuityPayedAmount = person.getMaxDeductableAmountForLegalTaxes(EventType.GRATUITY, civilYear); Money othersPayedAmount = calculateOthersPayedAmount(person, civilYear); final StringBuilder eventTypes = new StringBuilder(); final StringBuilder payedAmounts = new StringBuilder(); if (!gratuityPayedAmount.isZero()) { eventTypes.append("- ") .append(BundleUtil.getString(Bundle.ENUMERATION, getLocale(), EventType.GRATUITY.getQualifiedName())) .append(LINE_BREAK); payedAmounts.append("*").append(gratuityPayedAmount.toPlainString()).append("Eur").append(LINE_BREAK); } if (!othersPayedAmount.isZero()) { eventTypes.append( BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.eighthParagraph")) .append(LINE_BREAK); payedAmounts.append("*").append(othersPayedAmount.toPlainString()).append("Eur").append(LINE_BREAK); } addParameter("eventTypes", eventTypes.toString()); addParameter("payedAmounts", payedAmounts.toString()); Money totalPayedAmount = othersPayedAmount.add(gratuityPayedAmount); addParameter("totalPayedAmount", "*" + totalPayedAmount.toString() + "Eur"); addParameter("total", BundleUtil.getString(Bundle.ACADEMIC, getLocale(), "label.academicDocument.irs.declaration.total")); } private Money calculateOthersPayedAmount(final Person person, final Integer civilYear) { Money result = Money.ZERO; for (final EventType eventType : EventType.values()) { if (eventType != EventType.GRATUITY) { result = result.add(person.getMaxDeductableAmountForLegalTaxes(eventType, civilYear)); } } return result; } }