@Override public void applyAction(FormEntrySession session) { ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(scriptType); scriptEngine.put("patient", session.getPatient()); scriptEngine.put("encounter", session.getSubmissionActions().getCurrentEncounter()); scriptEngine.put("formEntrySession", session); try { Object result = scriptEngine.eval(script); session.setAfterSaveUrlTemplate(result.toString()); } catch (ScriptException ex) { throw new IllegalStateException("Exception while evaluating " + scriptType + " for <redirectOnSave>", ex); } } }
/** * If the html form contains both PatientTags and Encounter tags then initialize it with the * Patient and Encounter associated with the Form else if htmlform only contains PatientTags * then initialize it with the Patient associated with the Form. */ public void prepareForSubmit() { submissionActions = new FormSubmissionActions(); if (hasPatientTag() && !hasEncouterTag()) { try { submissionActions.beginPerson(patient); } catch (InvalidActionException e) { log.error("Programming error: should be no errors starting a patient", e); } } else { if (context.getMode() == Mode.EDIT) { if (encounter == null) throw new RuntimeException("Programming exception: encounter shouldn't be null in EDIT mode"); } else { encounter = new Encounter(); } try { submissionActions.beginPerson(patient); submissionActions.beginEncounter(encounter); } catch (InvalidActionException e) { log.error("Programming error: should be no errors starting a patient and encounter", e); } } }
log.debug("VOID: " + printObsHelper(existingObs)); obsToVoid.add(existingObs); return; log.debug("VOID: " + printObsHelper(existingObs)); obsToVoid.add(existingObs); return; boolean dateChanged = dateChangedHelper(existingObs.getObsDatetime(), newObs.getObsDatetime()); boolean accessionNumberChanged = accessionNumberChangedHelper(existingObs.getAccessionNumber(), newObs.getAccessionNumber()); boolean conceptsHaveChanged = false; log.debug("CHANGED: " + printObsHelper(existingObs)); createObs(concept, newValue, newDatetime, accessionNumber, comment); } else { if(existingObs != null && StringUtils.isNotBlank(comment)) log.debug("SAME: " + printObsHelper(existingObs));
/** * Adds an Obs Group to the submission stack * * @param group the Obs Group to add * @throws InvalidActionException */ public void beginObsGroup(Obs group) throws InvalidActionException { // there needs to be a Person on the stack before this if (!stackContains(Person.class)) throw new InvalidActionException("No Person on the stack"); if (group.getObsId() == null && !obsToCreate.contains(group)) { obsToCreate.add(group); } Person person = highestOnStack(Person.class); Encounter encounter = highestOnStack(Encounter.class); group.setPerson(person); if (encounter != null) { addObsToEncounterIfNotAlreadyThere(encounter, group); } //this is for obs groups within obs groups Object o = stack.peek(); if (o instanceof Obs) { Obs oParent = (Obs) o; oParent.addGroupMember(group); } stack.push(group); }
@Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { try { if (start) { if (existingGroup != null) { session.getSubmissionActions().beginObsGroup(existingGroup); } else { Obs obsGroup = new Obs(); obsGroup.setConcept(groupingConcept); session.getSubmissionActions().beginObsGroup(obsGroup); } } else { session.getSubmissionActions().endObsGroup(); } } catch (InvalidActionException ex) { throw new RuntimeException(ex); } }
for (Encounter e : submissionActions.getEncountersToCreate()) { if (e.getEncounterDatetime() == null) { throw new BadFormDesignException( HtmlFormEntryUtil.removeEmptyObs(submissionActions.getObsToCreate()); if (submissionActions.getObsToCreate() != null) { List<Obs> toCheck = new ArrayList<Obs>(); toCheck.addAll(submissionActions.getObsToCreate()); while (toCheck.size() > 0) { Obs o = toCheck.remove(toCheck.size() - 1); if (submissionActions.getPatientProgramsToCreate() != null) { for (PatientProgram pp : submissionActions.getPatientProgramsToCreate()) { if (pp.getDateEnrolled() == null) pp.setDateEnrolled(encounter.getEncounterDatetime()); if (submissionActions.getPatientProgramsToComplete() != null) { for (PatientProgram pp : submissionActions.getPatientProgramsToComplete()) { if (pp.getDateCompleted() == null) { pp.setDateCompleted(encounter.getEncounterDatetime()); List<Obs> outcomeObs = findObsForConcept(outcomesConcept, submissionActions.getObsToCreate()); if (outcomeObs.size() == 1) { pp.setOutcome(outcomeObs.get(0).getValueCoded()); if (submissionActions.getPersonsToCreate() != null) { for (Person p : submissionActions.getPersonsToCreate()) { if (p instanceof Patient) {
&& (session.getSubmissionActions().getPersonsToCreate() == null || session.getSubmissionActions().getPersonsToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an Patient"); if (session.getContext().getMode() == Mode.ENTER && session.hasEncouterTag() && (session.getSubmissionActions().getEncountersToCreate() == null || session.getSubmissionActions().getEncountersToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an encounter");
session.getSubmissionActions().getObsToVoid().add(existingObsGroup); } else if (checked) { if (existingObsGroup != null && OpenmrsUtil.compareWithNullAsEarliest(existingObsGroup.getObsDatetime(), date) == 0) { session.getSubmissionActions().getObsToVoid().add(existingObsGroup); session.getSubmissionActions().beginObsGroup(group); session.getSubmissionActions().createObs(vaccineQuestionConcept, vaccineConcept, date, null, null); session.getSubmissionActions().createObs(sequenceNumberConcept, sequenceNumber, date, null, null); if (dateWidget != null) { session.getSubmissionActions().createObs(vaccinationDateConcept, date, date, null, null); session.getSubmissionActions().endObsGroup();
private SubmissionResults doSubmission(FormEntrySession session, HttpServletRequest request) throws Exception { SubmissionResults results = new SubmissionResults(); session.prepareForSubmit(); List<FormSubmissionError> validationErrors = session.getSubmissionController().validateSubmission( session.getContext(), request); if (validationErrors != null && validationErrors.size() > 0) { results.setValidationErrors(validationErrors); return results; } session.getSubmissionController().handleFormSubmission(session, request); if (session.getContext().getMode() == Mode.ENTER && session.hasEncouterTag() && (session.getSubmissionActions().getEncountersToCreate() == null || session.getSubmissionActions() .getEncountersToCreate().size() == 0)) throw new IllegalArgumentException("This form is not going to create an encounter"); Context.getService(HtmlFormEntryService.class).applyActions(session); results.setPatient(session.getPatient()); results.setEncounterCreated(session.getEncounter()); results.setFormEntrySession(session); return results; }
@Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { session.getSubmissionActions().addCustomFormSubmissionAction(this); }
@Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { session.getSubmissionActions().addCustomFormSubmissionAction(this); }
/** * @see org.openmrs.module.htmlformentry.action.FormSubmissionControllerAction#handleSubmission(org.openmrs.module.htmlformentry.FormEntrySession, javax.servlet.http.HttpServletRequest) */ @Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { EncounterRole role = encounterRole; Provider provider = null; if (roleWidget != null) { role = (EncounterRole) roleWidget.getValue(session.getContext(), submission); } Set<Provider> currentProvidersForRole = session.getSubmissionActions().getCurrentEncounter().getProvidersByRole(role); for (Widget providerWidget : providerWidgets) { provider = (Provider) providerWidget.getValue(session.getContext(), submission); if (provider != null) { // if this provider it not currently one of the provider, add her if (currentProvidersForRole != null || !currentProvidersForRole.contains(provider)) { session.getSubmissionActions().getCurrentEncounter().addProvider(role, provider); } // we remove this provider so that we end up with a list of providers to void currentProvidersForRole.remove(provider); } } // now remove any current providers that we haven't found in the provider list for (Provider providerToRemove : currentProvidersForRole) { session.getSubmissionActions().getCurrentEncounter().removeProvider(role, providerToRemove); } }
@Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { session.getSubmissionActions().addCustomFormSubmissionAction(this); }
private void setOrderer(FormEntrySession session, DrugOrder drugOrder) { if (drugOrder.getUuid() == null) drugOrder.setUuid(UUID.randomUUID().toString()); Set<EncounterProvider> encounterProviders = session.getSubmissionActions().getCurrentEncounter() .getEncounterProviders(); for (EncounterProvider encounterProvider : encounterProviders) { if (!encounterProvider.isVoided()) { drugOrder.setOrderer(encounterProvider.getProvider()); } } }
@Override public void handleSubmission(FormEntrySession session, HttpServletRequest submission) { try { Class<?> actionClass = Context.loadClass(className); CustomFormSubmissionAction actionInstance = (CustomFormSubmissionAction) actionClass.newInstance(); session.getSubmissionActions().addCustomFormSubmissionAction(actionInstance); } catch (Exception ex) { throw new IllegalStateException("Error loading/instantiating post submission action class " + className, ex); } }
private void setOrderer(Order o, FormEntrySession session) { Set<EncounterProvider> encounterProviders = session.getSubmissionActions().getCurrentEncounter() .getEncounterProviders(); for (EncounterProvider encounterProvider : encounterProviders) { if (!encounterProvider.isVoided()) { o.setOrderer(encounterProvider.getProvider()); break; } } }
if (dateWidget != null) { Date date = (Date) dateWidget.getValue(session.getContext(), submission); Date previousDate = session.getSubmissionActions().getCurrentEncounter().getEncounterDatetime(); session.getSubmissionActions().getCurrentEncounter().setEncounterDatetime(date); new Date(session.getSubmissionActions().getCurrentEncounter().getEncounterDatetime().getTime())); session.getSubmissionActions().getCurrentEncounter().setEncounterDatetime(date); Encounter e = session.getSubmissionActions().getCurrentEncounter(); Date dateAndTime = HtmlFormEntryUtil.combineDateAndTime(e.getEncounterDatetime(), time); e.setEncounterDatetime(dateAndTime); if (value != null) { Person person = (Person) convertValueToProvider(value); EncounterCompatibility.setProvider(session.getSubmissionActions().getCurrentEncounter(), person); if (value != null) { Location location = (Location) HtmlFormEntryUtil.convertToType(value.toString().trim(), Location.class); session.getSubmissionActions().getCurrentEncounter().setLocation(location); session.getSubmissionActions().getCurrentEncounter().setEncounterType(encounterType);
protected void editOrder(FormEntrySession session, OrderTag orderTag) { existingOrder.setDrug(orderTag.drug); existingOrder.setDose(orderTag.dose); existingOrder.setFrequency(orderTag.frequency); existingOrder.setStartDate(orderTag.startDate); if (orderTag.orderDuration != null) existingOrder.setAutoExpireDate(calculateAutoExpireDate(orderTag.startDate, orderTag.orderDuration)); if (orderTag.discontinuedDate != null){ existingOrder.setDiscontinuedDate(orderTag.discontinuedDate); existingOrder.setDiscontinued(true); } if (!StringUtils.isEmpty(orderTag.discontinuedReasonStr)) existingOrder.setDiscontinuedReason(HtmlFormEntryUtil.getConcept(orderTag.discontinuedReasonStr)); existingOrder.setConcept(orderTag.drug.getConcept()); if (!StringUtils.isEmpty(orderTag.instructions)) existingOrder.setInstructions((String) orderTag.instructions); log.debug("modifying drug order, drugId is " + orderTag.drugId + " and startDate is " + orderTag.startDate); existingOrder = setDiscontinueDateFromAutoExpire(existingOrder); session.getSubmissionActions().getCurrentEncounter().setDateChanged(new Date()); }
protected void enterStandardRegimen(FormEntrySession session, HttpServletRequest submission, String regCode, Date startDate, Date discontinuedDate, String discontinuedReasonStr) { RegimenSuggestion rs = RegimenUtil.getStandardRegimenByCode(possibleRegimens, regCode); //create new drugOrders Set<Order> ords = RegimenUtil.standardRegimenToDrugOrders(rs, startDate, session.getPatient()); for (Order o: ords){ if (o.getDateCreated() == null) o.setDateCreated(new Date()); if (o.getCreator() == null) o.setCreator(Context.getAuthenticatedUser()); if (o.getUuid() == null) o.setUuid(UUID.randomUUID().toString()); if (!StringUtils.isEmpty(discontinuedReasonStr)) o.setDiscontinuedReason(HtmlFormEntryUtil.getConcept(discontinuedReasonStr)); if (discontinuedDate != null){ o.setDiscontinuedDate(discontinuedDate); o.setDiscontinued(true); o.setDiscontinuedBy(Context.getAuthenticatedUser()); } session.getSubmissionActions().getCurrentEncounter().addOrder(o); } }
o.setCareSetting(careSetting); session.getSubmissionActions().getCurrentEncounter().addOrder(o); if (discontinuationOrder != null) { session.getSubmissionActions().getCurrentEncounter().addOrder(discontinuationOrder);