/**
* 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.phd.thesis.meeting;
import java.util.ArrayList;
import java.util.List;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.caseHandling.Activity;
import org.fenixedu.academic.domain.caseHandling.StartActivity;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.phd.PhdIndividualProgramProcess;
import org.fenixedu.academic.domain.phd.thesis.PhdThesisProcess;
import org.fenixedu.academic.domain.phd.thesis.PhdThesisProcessBean;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.PhdMeetingSchedulingActivity;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.ScheduleFirstThesisMeeting;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.ScheduleFirstThesisMeetingRequest;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.ScheduleThesisMeeting;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.ScheduleThesisMeetingRequest;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.SkipScheduleFirstThesisMeeting;
import org.fenixedu.academic.domain.phd.thesis.meeting.activities.SubmitThesisMeetingMinutes;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.i18n.BundleUtil;
public class PhdMeetingSchedulingProcess extends PhdMeetingSchedulingProcess_Base {
@StartActivity
static public class StartThesisMeetings extends PhdMeetingSchedulingActivity {
@Override
protected void activityPreConditions(PhdMeetingSchedulingProcess process, User userView) {
// Activity on main process ensures access control
}
@Override
protected PhdMeetingSchedulingProcess executeActivity(PhdMeetingSchedulingProcess process, User userView, Object object) {
final PhdThesisProcessBean bean = (PhdThesisProcessBean) object;
final PhdMeetingSchedulingProcess result = new PhdMeetingSchedulingProcess(bean.getThesisProcess());
result.createState(PhdMeetingSchedulingProcessStateType.WAITING_FIRST_THESIS_MEETING_REQUEST, userView.getPerson(),
bean.getRemarks());
return result;
}
}
static private List<Activity> activities = new ArrayList<Activity>();
static {
activities.add(new ScheduleFirstThesisMeetingRequest());
activities.add(new ScheduleFirstThesisMeeting());
activities.add(new ScheduleThesisMeetingRequest());
activities.add(new ScheduleThesisMeeting());
activities.add(new SubmitThesisMeetingMinutes());
activities.add(new SkipScheduleFirstThesisMeeting());
}
@Override
public boolean isAllowedToManageProcess(User userView) {
return this.getIndividualProgramProcess().isAllowedToManageProcess(userView);
}
public PhdMeetingSchedulingProcess(PhdThesisProcess process) {
super();
super.setThesisProcess(process);
}
@Override
public void setThesisProcess(PhdThesisProcess thesisProcess) {
throw new DomainException("error.phd.thesis.meeting.cannot.set.thesis.process");
}
@Override
protected Person getPerson() {
return getIndividualProgramProcess().getPerson();
}
@Override
public List<Activity> getActivities() {
return activities;
}
@Override
public boolean canExecuteActivity(User userView) {
return false;
}
@Override
public String getDisplayName() {
return BundleUtil.getString(Bundle.PHD, getClass().getSimpleName());
}
@Override
public PhdMeetingSchedulingProcessStateType getActiveState() {
return (PhdMeetingSchedulingProcessStateType) super.getActiveState();
}
@Override
protected PhdIndividualProgramProcess getIndividualProgramProcess() {
return getThesisProcess().getIndividualProgramProcess();
}
public void createState(PhdMeetingSchedulingProcessStateType type, Person person, String remarks) {
PhdMeetingSchedulingProcessState.createWithInferredStateDate(this, type, person, remarks);
}
public void addMeeting(PhdMeeting meeting) {
getMeetingsSet().add(meeting);
}
public boolean isAnyMinutesDocumentMissing() {
for (PhdMeeting meeting : getMeetingsSet()) {
if (!meeting.getDocumentsSet().isEmpty()) {
continue;
}
return true;
}
return false;
}
@Override
public PhdMeetingSchedulingProcessState getMostRecentState() {
return (PhdMeetingSchedulingProcessState) super.getMostRecentState();
}
@Override
public java.util.Set<org.fenixedu.academic.domain.phd.thesis.meeting.PhdMeetingSchedulingProcessState> getStates() {
return getStatesSet();
}
@Override
public boolean hasAnyStates() {
return !getStatesSet().isEmpty();
}
}