Package org.fenixedu.academic.domain.serviceRequests

Source Code of org.fenixedu.academic.domain.serviceRequests.RectorateSubmissionBatch

/**
* 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;
    }

}
TOP

Related Classes of org.fenixedu.academic.domain.serviceRequests.RectorateSubmissionBatch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.