/** * 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.domain.serviceRequests; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.fenixedu.academic.domain.administrativeOffice.AdministrativeOffice; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.domain.serviceRequests.documentRequests.DiplomaRequest; import org.fenixedu.academic.dto.serviceRequests.AcademicServiceRequestBean; import org.fenixedu.academic.predicate.AccessControl; import org.fenixedu.bennu.core.domain.Bennu; import org.joda.time.DateTime; public class RectorateSubmissionBatch extends RectorateSubmissionBatch_Base { public RectorateSubmissionBatch(AdministrativeOffice administrativeOffice) { super(); setCreation(new DateTime()); setCreator(AccessControl.getPerson()); setState(RectorateSubmissionState.UNSENT); setAdministrativeOffice(administrativeOffice); setRootDomainObject(Bennu.getInstance()); } public boolean isUnsent() { return getState().equals(RectorateSubmissionState.UNSENT); } public boolean isClosed() { return getState().equals(RectorateSubmissionState.CLOSED); } public boolean isSent() { return getState().equals(RectorateSubmissionState.SENT); } public boolean isReceived() { return getState().equals(RectorateSubmissionState.RECEIVED); } public RectorateSubmissionBatch getNextRectorateSubmissionBatch() { RectorateSubmissionBatch next = null; for (RectorateSubmissionBatch batch : getAdministrativeOffice().getRectorateSubmissionBatchSet()) { if (batch.getCreation().isAfter(getCreation()) && (next == null || batch.getCreation().isBefore(next.getCreation()))) { next = batch; } } return next; } public RectorateSubmissionBatch getPreviousRectorateSubmissionBatch() { RectorateSubmissionBatch previous = null; for (RectorateSubmissionBatch batch : getAdministrativeOffice().getRectorateSubmissionBatchSet()) { if (batch.getCreation().isBefore(getCreation()) && (previous == null || batch.getCreation().isAfter(previous.getCreation()))) { previous = batch; } } return previous; } public String getRange() { String first = null; String last = null; for (AcademicServiceRequest request : getDocumentRequestSet()) { RegistryCode code = null; if (request.isRegistryDiploma()) { code = request.getRegistryCode(); } else if (request.isDiploma() && request.isRequestForRegistration()) { // FIXME: this can leave after all diplomas without registry // diplomas are dealt with. DiplomaRequest diploma = (DiplomaRequest) request; if (!diploma.hasRegistryDiplomaRequest()) { code = diploma.getRegistryCode(); } } if (code == null) { continue; } if (first == null || code.getCode().compareTo(first) < 0) { first = code.getCode(); } if (last == null || code.getCode().compareTo(last) > 0) { last = code.getCode(); } } if (first != null && last != null) { return first + "-" + last; } return "-"; } public int getDiplomaDocumentRequestCount() { int acc = 0; for (AcademicServiceRequest docRequest : getDocumentRequestSet()) { if ((docRequest.isRegistryDiploma()) || (docRequest.isDiplomaSupplement())) { acc++; } } return acc; } public RectorateSubmissionBatch closeBatch() { if (!getState().equals(RectorateSubmissionState.UNSENT)) { throw new DomainException("error.rectorateSubmission.attemptingToCloseABatchNotInUnsentState"); } setState(RectorateSubmissionState.CLOSED); return new RectorateSubmissionBatch(getAdministrativeOffice()); } public void markAsSent() { if (!getState().equals(RectorateSubmissionState.CLOSED)) { throw new DomainException("error.rectorateSubmission.attemptingToSendABatchNotInClosedState"); } setState(RectorateSubmissionState.SENT); setSubmission(new DateTime()); setSubmitter(AccessControl.getPerson()); for (AcademicServiceRequest document : getDocumentRequestSet()) { if (document.isCancelled() || document.isRejected()) { continue; } document.edit(new AcademicServiceRequestBean(AcademicServiceRequestSituationType.SENT_TO_EXTERNAL_ENTITY, AccessControl.getPerson(), "Insert Template Text Here")); } } public boolean allDocumentsReceived() { for (AcademicServiceRequest document : getDocumentRequestSet()) { AcademicServiceRequestSituationType type = document.getAcademicServiceRequestSituationType(); if (!type.equals(AcademicServiceRequestSituationType.RECEIVED_FROM_EXTERNAL_ENTITY) && !type.equals(AcademicServiceRequestSituationType.DELIVERED)) { return false; } } return true; } public void markAsReceived() { if (!getState().equals(RectorateSubmissionState.SENT)) { throw new DomainException("error.rectorateSubmission.attemptingToReceiveABatchNotInSentState"); } if (allDocumentsReceived()) { setState(RectorateSubmissionState.RECEIVED); setReception(new DateTime()); setReceptor(AccessControl.getPerson()); } } public void delete() { if (!getDocumentRequestSet().isEmpty()) { throw new DomainException("error.rectorateSubmission.cannotDeleteBatchWithDocuments"); } setCreator(null); setReceptor(null); setSubmitter(null); setAdministrativeOffice(null); setRootDomainObject(null); super.deleteDomainObject(); } public int getDocumentRequestCount() { int result = 0; Set<AcademicServiceRequest> documentRequestSet = getDocumentRequestSet(); for (AcademicServiceRequest academicServiceRequest : documentRequestSet) { if (academicServiceRequest.isRejected()) { continue; } if (academicServiceRequest.isCancelled()) { continue; } result++; } return result; } public static Set<RectorateSubmissionBatch> getRectorateSubmissionBatchesByState(Collection<AdministrativeOffice> offices, RectorateSubmissionState state) { Set<RectorateSubmissionBatch> result = new HashSet<RectorateSubmissionBatch>(); for (AdministrativeOffice office : offices) { for (RectorateSubmissionBatch batch : office.getRectorateSubmissionBatchSet()) { if (batch.getState().equals(state)) { result.add(batch); } } } return result; } }