/**
* 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 pt.ist.fenix.ui.struts.action.academicAdministration;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.academic.domain.StudentCurricularPlan;
import org.fenixedu.academic.domain.administrativeOffice.curriculumValidation.DocumentPrintRequest;
import org.fenixedu.academic.domain.documents.DocumentRequestGeneratedDocument;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequestType;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.IDocumentRequest;
import org.fenixedu.academic.domain.student.Registration;
import org.fenixedu.academic.report.academicAdministrativeOffice.AdministrativeOfficeDocument;
import org.fenixedu.academic.service.services.exceptions.FenixServiceException;
import org.fenixedu.academic.ui.struts.action.administrativeOffice.serviceRequests.documentRequests.DocumentRequestsManagementDispatchAction;
import org.fenixedu.academic.util.report.ReportsUtils;
import org.fenixedu.bennu.struts.annotations.Forward;
import org.fenixedu.bennu.struts.annotations.Forwards;
import org.fenixedu.bennu.struts.annotations.Mapping;
import pt.ist.fenix.domain.student.evaluation.PreBolognaEvaluationManagement;
@Mapping(path = "/curriculumValidationDocumentRequestsManagement", module = "academicAdministration",
functionality = AcademicAdminOfficeCurriculumValidationDA.class)
@Forwards({
@Forward(name = "printDocument", path = "/academicAdministration/curriculumValidation/documentRequests/printDocument.jsp"),
@Forward(name = "viewDocuments", path = "/academicAdministration/curriculumValidation/documentRequests/viewDocuments.jsp"),
@Forward(name = "notValidDocument",
path = "/academicAdministration/curriculumValidation/documentRequests/notValidDocument.jsp") })
public class CurriculumValidationDocumentRequestsManagementDispatchAction extends DocumentRequestsManagementDispatchAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
StudentCurricularPlan studentCurricularPlan = readStudentCurricularPlan(request);
request.setAttribute("studentCurriculumValidationAllowed",
PreBolognaEvaluationManagement.getEvaluationForCurriculumValidationAllowed(studentCurricularPlan));
return super.execute(mapping, actionForm, request, response);
}
public ActionForward listDocuments(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
StudentCurricularPlan studentCurricularPlan = readStudentCurricularPlan(request);
Registration registration = studentCurricularPlan.getRegistration();
request.setAttribute("registration", registration);
return mapping.findForward("viewDocuments");
}
public ActionForward preparePrintDocument(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) {
final IDocumentRequest documentRequest = getDocumentRequest(request);
if (!(DocumentRequestType.DEGREE_FINALIZATION_CERTIFICATE.equals(documentRequest.getDocumentRequestType()) || DocumentRequestType.DIPLOMA_REQUEST
.equals(documentRequest.getDocumentRequestType()))) {
return mapping.findForward("notValidDocument");
}
String conlusionDate = "";
String degreeDescription = "";
String graduatedTitle = "";
if (DocumentRequestType.DEGREE_FINALIZATION_CERTIFICATE.equals(documentRequest.getDocumentRequestType())) {
AdministrativeOfficeDocument document =
AdministrativeOfficeDocument.AdministrativeOfficeDocumentCreator.create(documentRequest).iterator().next();
conlusionDate = (String) document.getParameters().get("degreeFinalizationDate");
degreeDescription = (String) document.getParameters().get("degreeDescription");
graduatedTitle = (String) document.getParameters().get("graduateTitle");
} else if (DocumentRequestType.DIPLOMA_REQUEST.equals(documentRequest.getDocumentRequestType())) {
AdministrativeOfficeDocument document =
AdministrativeOfficeDocument.AdministrativeOfficeDocumentCreator.create(documentRequest).iterator().next();
conlusionDate =
(String) AdministrativeOfficeDocument.AdministrativeOfficeDocumentCreator.create(documentRequest).iterator()
.next().getParameters().get("conclusionDate");
degreeDescription = (String) document.getParameters().get("degreeFilteredName");
graduatedTitle = (String) document.getParameters().get("graduateTitle");
}
DocumentFieldsCustomization customization = new DocumentFieldsCustomization();
customization.setConclusionDate(conlusionDate);
customization.setDegreeDescription(degreeDescription);
customization.setGraduatedTitle(graduatedTitle);
request.setAttribute("documentFieldsCustomization", customization);
request.setAttribute("documentRequest", documentRequest);
return mapping.findForward("printDocument");
}
@Override
public ActionForward printDocument(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws IOException, FenixServiceException {
final IDocumentRequest documentRequest = getDocumentRequest(request);
try {
final List<AdministrativeOfficeDocument> documents =
AdministrativeOfficeDocument.AdministrativeOfficeDocumentCreator.create(documentRequest);
DocumentFieldsCustomization customization = getRenderedObject("document.fields.customization");
if (documentRequest.isRequestForRegistration()) {
DocumentPrintRequest.logRequest(customization.getConclusionDate(), customization.getDegreeDescription(),
customization.getGraduatedTitle(), (DocumentRequest) documentRequest);
}
if (DocumentRequestType.DEGREE_FINALIZATION_CERTIFICATE.equals(documentRequest.getDocumentRequestType())) {
documents.iterator().next().getParameters().put("degreeFinalizationDate", customization.getConclusionDate());
documents.iterator().next().getParameters().put("degreeDescription", customization.getDegreeDescription());
documents.iterator().next().getParameters().put("graduateTitle", customization.getGraduatedTitle());
} else if (DocumentRequestType.DIPLOMA_REQUEST.equals(documentRequest.getDocumentRequestType())) {
documents.iterator().next().getParameters().put("conclusionDate", customization.getConclusionDate());
documents.iterator().next().getParameters().put("degreeFilteredName", customization.getDegreeDescription());
documents.iterator().next().getParameters().put("graduateTitle", customization.getGraduatedTitle());
}
final AdministrativeOfficeDocument[] array = {};
byte[] data = ReportsUtils.generateReport(documents.toArray(array)).getData();
DocumentRequestGeneratedDocument.store(documentRequest, documents.iterator().next().getReportFileName() + ".pdf",
data);
response.setContentLength(data.length);
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=" + documents.iterator().next().getReportFileName()
+ ".pdf");
final ServletOutputStream writer = response.getOutputStream();
writer.write(data);
writer.flush();
writer.close();
response.flushBuffer();
return mapping.findForward("");
} catch (DomainException e) {
addActionMessage(request, e.getKey());
if (documentRequest.isRequestForRegistration()) {
request.setAttribute("registration", ((DocumentRequest) documentRequest).getRegistration());
}
return mapping.findForward("viewRegistrationDetails");
}
}
private StudentCurricularPlan readStudentCurricularPlan(HttpServletRequest request) {
if (request.getAttribute("studentCurricularPlan") != null) {
return (StudentCurricularPlan) request.getAttribute("studentCurricularPlan");
}
request.setAttribute("studentCurricularPlan", getDomainObject(request, "studentCurricularPlanId"));
return getDomainObject(request, "studentCurricularPlanId");
}
public static class DocumentFieldsCustomization implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String conclusionDate;
private String degreeDescription;
private String graduatedTitle;
public DocumentFieldsCustomization() {
}
public String getConclusionDate() {
return this.conclusionDate;
}
public void setConclusionDate(final String value) {
this.conclusionDate = value;
}
public String getDegreeDescription() {
return degreeDescription;
}
public void setDegreeDescription(String degreeDescription) {
this.degreeDescription = degreeDescription;
}
public String getGraduatedTitle() {
return graduatedTitle;
}
public void setGraduatedTitle(String graduatedTitle) {
this.graduatedTitle = graduatedTitle;
}
}
}