use of org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean in project OpenClinica by OpenClinica.
the class BatchCRFMigrationController method run.
@Override
public void run() {
dataSource = helperObject.getDataSource();
cBean = helperObject.getcBean();
reportLog = helperObject.getReportLog();
stBean = helperObject.getStBean();
resterms = helperObject.getResterms();
userAccountBean = helperObject.getUserAccountBean();
openClinicaMailSender = helperObject.getOpenClinicaMailSender();
sessionFactory = helperObject.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
helperObject.setSession(session);
int i = 0;
for (EventCRFBean eventCrfToMigrate : helperObject.getEventCrfListToMigrate()) {
i++;
executeMigrationAction(helperObject, eventCrfToMigrate);
if (i % 50 == 0) {
session.flush();
session.clear();
}
StudySubjectBean ssBean = (StudySubjectBean) ssdao().findByPK(eventCrfToMigrate.getStudySubjectId());
StudyBean sBean = (StudyBean) sdao().findByPK(ssBean.getStudyId());
StudyEventBean seBean = (StudyEventBean) sedao().findByPK(eventCrfToMigrate.getStudyEventId());
StudyEventDefinitionBean sedBean = (StudyEventDefinitionBean) seddao().findByPK(seBean.getStudyEventDefinitionId());
reportLog.getLogs().add(cBean.getName() + "," + helperObject.getSourceCrfVersionBean().getName() + "," + helperObject.getTargetCrfVersionBean().getName() + "," + ssBean.getLabel() + "," + sBean.getName() + "," + sedBean.getName() + "," + seBean.getSampleOrdinal());
}
tx.commit();
session.close();
String fileName = new SimpleDateFormat("_yyyy-MM-dd-hhmmssSaa'.txt'").format(new Date());
fileName = "logFile" + fileName;
File file = createLogFile(fileName);
PrintWriter writer = null;
try {
writer = openFile(file);
} catch (FileNotFoundException | UnsupportedEncodingException e) {
e.printStackTrace();
} finally {
writer.print(toStringTextFormat(reportLog, resterms, stBean, cBean));
closeFile(writer);
}
String reportUrl = getReportUrl(fileName, helperObject.getUrlBase());
String fullName = userAccountBean.getFirstName() + " " + userAccountBean.getLastName();
StringBuilder body = new StringBuilder();
body.append(resterms.getString("Dear") + " " + fullName + ",<br><br>" + resterms.getString("Batch_CRF_version_migration_has_finished_running") + "<br>" + resterms.getString("Study") + ": " + stBean.getName() + "<br>" + resterms.getString("CRF") + ": " + cBean.getName() + "<br><br>" + resterms.getString("A_summary_report_of_the_migration_is_available_here") + ":<br>" + reportUrl + "<br><br>" + resterms.getString("Thank_you_Your_OpenClinica_System"));
logger.info(body.toString());
openClinicaMailSender.sendEmail(userAccountBean.getEmail(), EmailEngine.getAdminEmail(), resterms.getString("Batch_Migration_Complete_For") + " " + stBean.getName(), body.toString(), true);
}
use of org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean in project OpenClinica by OpenClinica.
the class CrfBusinessLogicHelper method markCRFComplete.
/**
* The following methods are for 'mark CRF complete' Note that we will also wrap Study Event status changes in this
* code, possibly split out in a later release, tbh 06/2008
*
* @return
*/
public boolean markCRFComplete(EventCRFBean ecb, UserAccountBean ub) throws Exception {
// locale = LocaleResolver.getLocale(request);
// < respage =
// ResourceBundle.getBundle("org.akaza.openclinica.i18n.page_messages",
// locale);
// < restext =
// ResourceBundle.getBundle("org.akaza.openclinica.i18n.notes",locale);
// <
// resexception=ResourceBundle.getBundle(
// "org.akaza.openclinica.i18n.exceptions",locale);
// getEventCRFBean();
// getEventDefinitionCRFBean();
DataEntryStage stage = ecb.getStage();
EventCRFDAO eventCrfDao = new EventCRFDAO(ds);
ItemDataDAO itemDataDao = new ItemDataDAO(ds);
StudyDAO sdao = new StudyDAO(ds);
StudySubjectDAO ssdao = new StudySubjectDAO(ds);
StudyBean study = sdao.findByStudySubjectId(ecb.getStudySubjectId());
EventDefinitionCRFBean edcb = getEventDefinitionCrfByStudyEventAndCrfVersion(ecb, study);
// StudyEventDAO studyEventDao = new StudyEventDAO(ds);
// StudyEventBean studyEventBean = (StudyEventBean)
// studyEventDao.findByPK(ecb.getStudyEventId());
// Status studyEventStatus = studyEventBean.getStatus();
StudyEventDefinitionDAO studyEventDefinitionDao = new StudyEventDefinitionDAO(ds);
StudyEventDefinitionBean sedBean = (StudyEventDefinitionBean) studyEventDefinitionDao.findByPK(edcb.getStudyEventDefinitionId());
CRFDAO crfDao = new CRFDAO(ds);
ArrayList crfs = (ArrayList) crfDao.findAllActiveByDefinition(sedBean);
sedBean.setCrfs(crfs);
// request.setAttribute(TableOfContentsServlet.INPUT_EVENT_CRF_BEAN,
// ecb);
// request.setAttribute(INPUT_EVENT_CRF_ID, new
// Integer(ecb.getId()));
logger.debug("inout_event_crf_id:" + ecb.getId());
logger.debug("inout_study_event_def_id:" + sedBean.getId());
// below bit is from DataEntryServlet, is more appropriate for filling
// in by hand than by automatic
// removing this in favor of the more streamlined effect below, tbh
// 06/2008
// Page errorPage = getJSPPage();
// if (stage.equals(DataEntryStage.UNCOMPLETED) ||
// stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY_COMPLETE) ||
// stage.equals(DataEntryStage.LOCKED)) {
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete1\"))");
// return false;
// }
//
// if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE) ||
// stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
//
// /*
// * if (!edcb.isDoubleEntry()) {
// *
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete2\"))");
// * return false; }
// *
// */
// }
//
// /*
// * if (!isEachSectionReviewedOnce()) { addPageMessage("You may not
// mark
// * this Event CRF complete, because there are some sections which have
// * not been reviewed once."); return false; }
// */
//
// if (!isEachRequiredFieldFillout(ecb)) {
// logger.info(
// "addPageMessage(respage.getString(\"not_mark_CRF_complete4\"))");
// return false;
// }
//
// /*
// * if (ecb.getInterviewerName().trim().equals("")) { throw new
// * InconsistentStateException(errorPage, "You may not mark this Event
// * CRF complete, because the interviewer name is blank."); }
// */
Status newStatus = ecb.getStatus();
DataEntryStage newStage = ecb.getStage();
boolean ide = true;
// currently we are setting the event crf status to complete, so this
// block is all to
// complete, tbh
// if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) &&
// edcb.isDoubleEntry()) {
// newStatus = Status.PENDING;
// ecb.setUpdaterId(ub.getId());
// ecb.setUpdater(ub);
// ecb.setUpdatedDate(new Date());
// ecb.setDateCompleted(new Date());
// } else if (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY) &&
// !edcb.isDoubleEntry()) {
// newStatus = Status.UNAVAILABLE;
// ecb.setUpdaterId(ub.getId());
// ecb.setUpdater(ub);
// ecb.setUpdatedDate(new Date());
// ecb.setDateCompleted(new Date());
// ecb.setDateValidateCompleted(new Date());
// } else if
// (stage.equals(DataEntryStage.INITIAL_DATA_ENTRY_COMPLETE)
// || stage.equals(DataEntryStage.DOUBLE_DATA_ENTRY)) {
// newStatus = Status.UNAVAILABLE;
// ecb.setDateValidateCompleted(new Date());
// ide = false;
// }
newStatus = Status.UNAVAILABLE;
// ecb.setUpdaterId(ub.getId());
ecb.setUpdater(ub);
ecb.setUpdatedDate(new Date());
ecb.setDateCompleted(new Date());
ecb.setDateValidateCompleted(new Date());
/*
* //for the non-reviewed sections, no item data in DB yet, need to //create them if
* (!isEachSectionReviewedOnce()) { boolean canSave = saveItemsToMarkComplete(newStatus); if (canSave == false){
* addPageMessage("You may not mark this Event CRF complete, because there are some required entries which have
* not been filled out."); return false; } }
*/
ecb.setStatus(newStatus);
ecb.setStage(newStage);
ecb = (EventCRFBean) eventCrfDao.update(ecb);
logger.debug("just updated event crf id: " + ecb.getId());
// note the below statement only updates the DATES, not the STATUS
eventCrfDao.markComplete(ecb, ide);
// update all the items' status to complete
itemDataDao.updateStatusByEventCRF(ecb, newStatus);
// change status for study event
StudyEventDAO sedao = new StudyEventDAO(ds);
StudyEventBean seb = (StudyEventBean) sedao.findByPK(ecb.getStudyEventId());
seb.setUpdatedDate(new Date());
seb.setUpdater(ub);
// updates with Pauls observation from bug:2488:
// 1. If there is only one CRF in the event (whether the CRF was
// required or not), and data was imported for it, the status of the
// event should be Completed.
//
logger.debug("sed bean get crfs get size: " + sedBean.getCrfs().size());
logger.debug("edcb get crf id: " + edcb.getCrfId() + " version size? " + edcb.getVersions().size());
logger.debug("ecb get crf id: " + ecb.getCrf().getId());
logger.debug("ecb get crf version id: " + ecb.getCRFVersionId());
if (sedBean.getCrfs().size() == 1) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- COMPLETED --");
} else // removing sedBean.getCrfs().size() > 1 &&
if (areAllRequired(seb, study) && !areAllCompleted(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.DATA_ENTRY_STARTED);
logger.info("just set subj event status to -- DATAENTRYSTARTED --");
} else // removing sedBean.getCrfs().size() > 1 &&
if (!areAllRequired(seb, study)) {
if (areAllRequiredCompleted(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- 3completed3 --");
} else {
seb.setSubjectEventStatus(SubjectEventStatus.DATA_ENTRY_STARTED);
logger.info("just set subj event status to -- DATAENTRYSTARTED --");
}
} else if (noneAreRequired(seb, study)) {
seb.setSubjectEventStatus(SubjectEventStatus.COMPLETED);
logger.info("just set subj event status to -- 5completed5 --");
}
logger.debug("just set subj event status, final status is " + seb.getSubjectEventStatus().getName());
logger.debug("final overall status is " + seb.getStatus().getName());
seb = (StudyEventBean) sedao.update(seb);
return true;
}
use of org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean in project OpenClinica by OpenClinica.
the class StudyEventDefinitionRow method compareColumn.
/*
* (non-Javadoc)
*
* @see org.akaza.openclinica.core.EntityBeanRow#compareColumn(java.lang.Object,
* int)
*/
@Override
protected int compareColumn(Object row, int sortingColumn) {
if (!row.getClass().equals(StudyEventDefinitionRow.class)) {
return 0;
}
StudyEventDefinitionBean thisDefinition = (StudyEventDefinitionBean) bean;
StudyEventDefinitionBean argDefinition = (StudyEventDefinitionBean) ((StudyEventDefinitionRow) row).bean;
int answer = 0;
switch(sortingColumn) {
case COL_ORDINAL:
if (thisDefinition.getOrdinal() > argDefinition.getOrdinal()) {
answer = 1;
} else if (thisDefinition.getOrdinal() == argDefinition.getOrdinal()) {
answer = 0;
} else {
answer = -1;
}
break;
case COL_NAME:
answer = thisDefinition.getName().toLowerCase().compareTo(argDefinition.getName().toLowerCase());
break;
case COL_REPEATING:
if (thisDefinition.isRepeating() && !argDefinition.isRepeating()) {
answer = 1;
} else if (!thisDefinition.isRepeating() && argDefinition.isRepeating()) {
answer = -1;
} else {
answer = 0;
}
break;
case COL_TYPE:
answer = thisDefinition.getType().toLowerCase().compareTo(argDefinition.getType().toLowerCase());
break;
case COL_CATEGORY:
String category = "ZZZZZZZZZ";
if (!"".equals(thisDefinition.getCategory())) {
category = thisDefinition.getCategory();
// System.out.println("switched out ...");
}
answer = category.toLowerCase().compareTo(argDefinition.getCategory().toLowerCase());
// System.out.println("returning " + answer + " for " + category);
break;
case COL_POPULATED:
if (thisDefinition.isPopulated() && !argDefinition.isPopulated()) {
answer = 1;
} else if (!thisDefinition.isPopulated() && argDefinition.isPopulated()) {
answer = -1;
} else {
answer = 0;
}
break;
// break;
case COL_DATE_UPDATED:
answer = compareDate(thisDefinition.getUpdatedDate(), argDefinition.getUpdatedDate());
break;
case COL_UPDATER:
answer = thisDefinition.getUpdater().getName().toLowerCase().compareTo(argDefinition.getUpdater().getName().toLowerCase());
break;
case COL_STATUS:
answer = thisDefinition.getStatus().compareTo(argDefinition.getStatus());
break;
}
return answer;
}
use of org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean in project OpenClinica by OpenClinica.
the class SDVUtil method prepareSDVSelectElements.
public void prepareSDVSelectElements(HttpServletRequest request, StudyBean studyBean) {
// Study event statuses
List<String> studyEventStatuses = new ArrayList<String>();
for (org.akaza.openclinica.domain.Status stat : org.akaza.openclinica.domain.Status.values()) {
studyEventStatuses.add(stat.getDescription());
}
request.setAttribute("studyEventStatuses", studyEventStatuses);
// SDV requirements
List<String> sdvRequirements = new ArrayList<String>();
for (SourceDataVerification sdvRequire : SourceDataVerification.values()) {
sdvRequirements.add(sdvRequire.getDescription());
}
request.setAttribute("sdvRequirements", SourceDataVerification.values());
// study event definitions
StudyEventDefinitionDAO studyEventDefinitionDAO = new StudyEventDefinitionDAO(dataSource);
List<StudyEventDefinitionBean> studyEventDefinitionBeans = new ArrayList<StudyEventDefinitionBean>();
studyEventDefinitionBeans = studyEventDefinitionDAO.findAllByStudy(studyBean);
request.setAttribute("studyEventDefinitions", studyEventDefinitionBeans);
// study event status
request.setAttribute("studyEventStatuses", Status.toArrayList());
// event CRF status
request.setAttribute("eventCRFDStatuses", SubjectEventStatus.toArrayList());
StudyEventDAO studyEventDAO = new StudyEventDAO(dataSource);
List<StudyEventBean> studyEventBeans = studyEventDAO.findAllByStudy(studyBean);
List<EventCRFBean> eventCRFBeans = getAllEventCRFs(studyEventBeans);
SortedSet<String> eventCRFNames = new TreeSet<String>();
for (EventCRFBean bean : eventCRFBeans) {
eventCRFNames.add(getCRFName(bean.getCRFVersionId()));
}
request.setAttribute("eventCRFNames", eventCRFNames);
}
use of org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean in project OpenClinica by OpenClinica.
the class ImportCRFDataService method fetchEventCRFStatuses.
/*
* purpose: Build a map of EventCRFs and the statuses they should have post-import. Assumes EventCRFs have been
* created for "Not Started" forms.
*/
public void fetchEventCRFStatuses(ODMContainer odmContainer, HashMap<Integer, String> importedCRFStatuses) {
EventCRFDAO eventCrfDAO = new EventCRFDAO(ds);
StudySubjectDAO studySubjectDAO = new StudySubjectDAO(ds);
StudyEventDefinitionDAO studyEventDefinitionDAO = new StudyEventDefinitionDAO(ds);
StudyDAO studyDAO = new StudyDAO(ds);
StudyEventDAO studyEventDAO = new StudyEventDAO(ds);
String studyOID = odmContainer.getCrfDataPostImportContainer().getStudyOID();
StudyBean studyBean = studyDAO.findByOid(studyOID);
ArrayList<SubjectDataBean> subjectDataBeans = odmContainer.getCrfDataPostImportContainer().getSubjectData();
for (SubjectDataBean subjectDataBean : subjectDataBeans) {
ArrayList<StudyEventDataBean> studyEventDataBeans = subjectDataBean.getStudyEventData();
StudySubjectBean studySubjectBean = studySubjectDAO.findByOidAndStudy(subjectDataBean.getSubjectOID(), studyBean.getId());
for (StudyEventDataBean studyEventDataBean : studyEventDataBeans) {
ArrayList<FormDataBean> formDataBeans = studyEventDataBean.getFormData();
String sampleOrdinal = studyEventDataBean.getStudyEventRepeatKey() == null ? "1" : studyEventDataBean.getStudyEventRepeatKey();
StudyEventDefinitionBean studyEventDefinitionBean = studyEventDefinitionDAO.findByOidAndStudy(studyEventDataBean.getStudyEventOID(), studyBean.getId(), studyBean.getParentStudyId());
logger.info("find all by def and subject " + studyEventDefinitionBean.getName() + " study subject " + studySubjectBean.getName());
StudyEventBean studyEventBean = (StudyEventBean) studyEventDAO.findByStudySubjectIdAndDefinitionIdAndOrdinal(studySubjectBean.getId(), studyEventDefinitionBean.getId(), Integer.parseInt(sampleOrdinal));
for (FormDataBean formDataBean : formDataBeans) {
CRFVersionDAO crfVersionDAO = new CRFVersionDAO(ds);
ArrayList<CRFVersionBean> crfVersionBeans = crfVersionDAO.findAllByOid(formDataBean.getFormOID());
for (CRFVersionBean crfVersionBean : crfVersionBeans) {
ArrayList<EventCRFBean> eventCrfBeans = eventCrfDAO.findByEventSubjectVersion(studyEventBean, studySubjectBean, crfVersionBean);
for (EventCRFBean ecb : eventCrfBeans) {
Integer ecbId = new Integer(ecb.getId());
if (!importedCRFStatuses.keySet().contains(ecbId) && formDataBean.getEventCRFStatus() != null) {
importedCRFStatuses.put(ecb.getId(), formDataBean.getEventCRFStatus());
}
}
}
}
}
}
}
Aggregations