/**
* 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.dto.serviceRequests;
import java.io.Serializable;
import java.util.Collection;
import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.serviceRequests.AcademicServiceRequest;
import org.fenixedu.academic.domain.serviceRequests.AcademicServiceRequestSituationType;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequest;
import org.fenixedu.academic.predicate.AccessControl;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.joda.time.DateTime;
import org.joda.time.YearMonthDay;
public class AcademicServiceRequestBean implements Serializable {
protected AcademicServiceRequestSituationType academicServiceRequestSituationType;
private AcademicServiceRequest request;
private String justification;
private YearMonthDay situationDate;
protected Integer serviceRequestYear;
private Person responsible;
protected AcademicServiceRequestBean() {
super();
}
public AcademicServiceRequestBean(final AcademicServiceRequest request,
final AcademicServiceRequestSituationType situationType) {
this();
setAcademicServiceRequest(request);
setAcademicServiceRequestSituationType(situationType);
setSituationDate(new YearMonthDay());
}
public AcademicServiceRequestBean(final AcademicServiceRequestSituationType academicServiceRequestSituationType,
final Person responsible) {
this();
setAcademicServiceRequestSituationType(academicServiceRequestSituationType);
setResponsible(responsible);
setSituationDate(new YearMonthDay());
}
public AcademicServiceRequestBean(final AcademicServiceRequestSituationType academicServiceRequestSituationType,
final Person responsible, final Integer serviceRequestYear) {
this(academicServiceRequestSituationType, responsible);
setServiceRequestYear(serviceRequestYear);
}
public AcademicServiceRequestBean(final AcademicServiceRequestSituationType academicServiceRequestSituationType,
final Person responsible, final String justification) {
this(academicServiceRequestSituationType, responsible);
setJustification(justification);
}
public AcademicServiceRequestBean(final AcademicServiceRequestSituationType academicServiceRequestSituationType,
final Person responsible, final YearMonthDay situationDate, final String justification) {
this(academicServiceRequestSituationType, responsible, justification);
setSituationDate(situationDate);
}
public AcademicServiceRequestBean(final Person responsible, final String justification) {
this((AcademicServiceRequestSituationType) null, responsible, justification);
}
public AcademicServiceRequestSituationType getAcademicServiceRequestSituationType() {
return academicServiceRequestSituationType;
}
public void setAcademicServiceRequestSituationType(AcademicServiceRequestSituationType academicServiceRequestSituationType) {
this.academicServiceRequestSituationType = academicServiceRequestSituationType;
}
public boolean hasAcademicServiceRequestSituationType() {
return this.academicServiceRequestSituationType != null;
}
DateTime finalSituationDate;
public DateTime getFinalSituationDate() {
if (finalSituationDate == null) {
return getSituationDate().toDateTimeAtCurrentTime();
}
return finalSituationDate;
}
public void setFinalSituationDate(final DateTime finalSituationDate) {
this.finalSituationDate = finalSituationDate;
}
public YearMonthDay getSituationDate() {
return situationDate;
}
public void setSituationDate(YearMonthDay situationDate) {
this.situationDate = situationDate;
}
public Person getResponsible() {
return responsible;
}
public void setResponsible(Person responsible) {
this.responsible = responsible;
}
private AcademicServiceRequest getAcademicServiceRequest() {
return request;
}
private void setAcademicServiceRequest(final AcademicServiceRequest request) {
this.request = request;
}
public String getJustification() {
if (StringUtils.isEmpty(justification) && getAcademicServiceRequest().isDocumentRequest()
&& ((DocumentRequest) getAcademicServiceRequest()).isDiploma()) {
if (getAcademicServiceRequestSituationType() == AcademicServiceRequestSituationType.CONCLUDED) {
return BundleUtil.getString(Bundle.ACADEMIC, "DiplomaRequest.diploma.concluded");
}
if (getAcademicServiceRequestSituationType() == AcademicServiceRequestSituationType.SENT_TO_EXTERNAL_ENTITY) {
return BundleUtil.getString(Bundle.ACADEMIC, "DiplomaRequest.diploma.sent");
}
if (getAcademicServiceRequestSituationType() == AcademicServiceRequestSituationType.RECEIVED_FROM_EXTERNAL_ENTITY) {
return BundleUtil.getString(Bundle.ACADEMIC, "DiplomaRequest.diploma.received");
}
}
return justification;
}
public void setJustification(String justification) {
this.justification = justification;
}
public boolean hasJustification() {
return !StringUtils.isEmpty(this.justification);
}
public Integer getServiceRequestYear() {
return serviceRequestYear;
}
public void setServiceRequestYear(Integer serviceRequestYear) {
this.serviceRequestYear = serviceRequestYear;
}
public boolean isNew() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.NEW;
}
public boolean isToProcess() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.PROCESSING;
}
public boolean isToDeliver() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.DELIVERED;
}
public boolean isToCancel() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.CANCELLED;
}
public boolean isToReject() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.REJECTED;
}
public boolean isToConclude() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.CONCLUDED;
}
public boolean isToSendToExternalEntity() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.SENT_TO_EXTERNAL_ENTITY;
}
public boolean isToReceiveFromExternalUnit() {
return this.academicServiceRequestSituationType == AcademicServiceRequestSituationType.RECEIVED_FROM_EXTERNAL_ENTITY;
}
public boolean isToCancelOrReject() {
return isToCancel() || isToReject();
}
public Collection<AcademicServiceRequest> searchAcademicServiceRequests() {
return AcademicServiceRequest.getAcademicServiceRequests(AccessControl.getPerson(), serviceRequestYear,
academicServiceRequestSituationType, null);
}
}