use of org.akaza.openclinica.domain.datamap.SubjectEventStatus in project OpenClinica by OpenClinica.
the class EventProcessor method updateStudyEvent.
private StudyEvent updateStudyEvent(StudyEvent studyEvent, StudyEventDefinition studyEventDefinition, Study study, StudySubject studySubject, UserAccount user, boolean isAnonymous) {
SubjectEventStatus newStatus = null;
int crfCount = 0;
int hiddenSiteCrfCount = 0;
int completedCrfCount = 0;
if (!isAnonymous) {
if (studyEvent.getSubjectEventStatusId().intValue() == SubjectEventStatus.SCHEDULED.getCode().intValue())
newStatus = SubjectEventStatus.DATA_ENTRY_STARTED;
} else {
// get the crf count
if (study.getStudy() != null) {
hiddenSiteCrfCount = eventDefinitionCrfDao.findSiteHiddenByStudyEventDefStudy(studyEventDefinition.getStudyEventDefinitionId(), study.getStudyId()).size();
crfCount = eventDefinitionCrfDao.findAvailableByStudyEventDefStudy(studyEventDefinition.getStudyEventDefinitionId(), study.getStudy().getStudyId()).size();
} else
crfCount = eventDefinitionCrfDao.findAvailableByStudyEventDefStudy(studyEventDefinition.getStudyEventDefinitionId(), study.getStudyId()).size();
// Get a count of completed CRFs for the event
completedCrfCount = eventCrfDao.findByStudyEventStatus(studyEvent.getStudyEventId(), Status.UNAVAILABLE.getCode()).size();
if ((crfCount - hiddenSiteCrfCount) == completedCrfCount) {
if (studyEvent.getSubjectEventStatusId().intValue() == SubjectEventStatus.SCHEDULED.getCode().intValue() || studyEvent.getSubjectEventStatusId().intValue() == SubjectEventStatus.DATA_ENTRY_STARTED.getCode().intValue()) {
newStatus = SubjectEventStatus.COMPLETED;
}
} else if (studyEvent.getSubjectEventStatusId().intValue() == SubjectEventStatus.SCHEDULED.getCode().intValue()) {
newStatus = SubjectEventStatus.DATA_ENTRY_STARTED;
}
}
if (newStatus != null) {
studyEvent.setUpdateId(user.getUserId());
studyEvent.setDateUpdated(new Date());
studyEvent.setSubjectEventStatusId(newStatus.getCode());
StudyEventChangeDetails changeDetails = new StudyEventChangeDetails(true, false);
StudyEventContainer container = new StudyEventContainer(studyEvent, changeDetails);
studyEvent = studyEventDao.saveOrUpdateTransactional(container);
logger.debug("*********UPDATED STUDY EVENT ");
}
return studyEvent;
}
Aggregations