Search in sources :

Example 1 with SubjectEventStatus

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;
}
Also used : StudyEventChangeDetails(org.akaza.openclinica.patterns.ocobserver.StudyEventChangeDetails) StudyEventContainer(org.akaza.openclinica.patterns.ocobserver.StudyEventContainer) Date(java.util.Date) SubjectEventStatus(org.akaza.openclinica.domain.datamap.SubjectEventStatus)

Aggregations

Date (java.util.Date)1 SubjectEventStatus (org.akaza.openclinica.domain.datamap.SubjectEventStatus)1 StudyEventChangeDetails (org.akaza.openclinica.patterns.ocobserver.StudyEventChangeDetails)1 StudyEventContainer (org.akaza.openclinica.patterns.ocobserver.StudyEventContainer)1