* HtmlGeneratorElement and the FormSubmissionControllerAction for Encounter details.
*/
public class EncounterDetailSubmissionElement implements HtmlGeneratorElement, FormSubmissionControllerAction {
<<<<<<< HEAD
private String id;
private DateWidget dateWidget;
private ErrorWidget dateErrorWidget;
private TimeWidget timeWidget;
private ErrorWidget timeErrorWidget;
private PersonStubWidget providerWidget;
private ErrorWidget providerErrorWidget;
private LocationWidget locationWidget;
private ErrorWidget locationErrorWidget;
private CheckboxWidget voidWidget;
private ErrorWidget voidErrorWidget;
private EncounterTypeWidget encounterTypeWidget;
private ErrorWidget encounterTypeErrorWidget;
/**
* Construct a new EncounterDetailSubmissionElement
*
* @param context
* @param parameters
*/
public EncounterDetailSubmissionElement(FormEntryContext context, Map parameters) {
// Register Date and Time widgets, if appropriate
if (Boolean.TRUE.equals(parameters.get("date"))) {
dateWidget = new DateWidget();
dateErrorWidget = new ErrorWidget();
if (context.getExistingEncounter() != null) {
dateWidget.setInitialValue(context.getExistingEncounter().getEncounterDatetime());
} else if (parameters.get("defaultDate") != null) {
dateWidget.setInitialValue(parameters.get("defaultDate"));
}
if (parameters.get("disallowMultipleEncountersOnDate") != null
&& StringUtils.hasText((String) parameters.get("disallowMultipleEncountersOnDate"))) {
dateWidget.setOnChangeFunction("existingEncounterOnDate(this, '"
+ parameters.get("disallowMultipleEncountersOnDate") + "') ");
}
if ("true".equals(parameters.get("showTime"))) {
timeWidget = new TimeWidget();
} else {
timeErrorWidget = new ErrorWidget();
if (context.getExistingEncounter() != null) {
timeWidget.setInitialValue(context.getExistingEncounter().getEncounterDatetime());
} else if (parameters.get("defaultDate") != null) {
timeWidget.setInitialValue(parameters.get("defaultDate"));
}
context.registerWidget(timeWidget);
context.registerErrorWidget(timeWidget, timeErrorWidget);
}
context.registerWidget(dateWidget);
context.registerErrorWidget(dateWidget, dateErrorWidget);
}
// Register Provider widgets, if appropriate
if (Boolean.TRUE.equals(parameters.get("provider"))) {
providerWidget = new PersonStubWidget();
providerErrorWidget = new ErrorWidget();
List options = new ArrayList();
// boolean sortOptions = false;
// If specific persons are specified, display only those persons in order
String personsParam = (String) parameters.get("persons");
if (personsParam != null) {
for (String s : personsParam.split(",")) {
Person p = HtmlFormEntryUtil.getPerson(s);
if (p == null) {
throw new RuntimeException("Cannot find Person: " + s);
}
options.add(new PersonStub(p));
}
removeNonProviders(options);
}
// Only if specific person ids are not passed in do we get by user Role
if (options.isEmpty()) {
List users = new ArrayList();
// If the "role" attribute is passed in, limit to users with this role
if (parameters.get("role") != null) {
Role role = Context.getUserService().getRole((String) parameters.get("role"));
if (role == null) {
throw new RuntimeException("Cannot find role: " + parameters.get("role"));
} else {
users = Context.getService(HtmlFormEntryService.class).getUsersAsPersonStubs(role.getRole());
}
}
// Otherwise, use default options appropriate to the underlying OpenMRS version
else {
if (openmrsVersionDoesNotSupportProviders()) {
// limit to users with the default OpenMRS PROVIDER role,
String defaultRole = OpenmrsConstants.PROVIDER_ROLE;
Role role = Context.getUserService().getRole(defaultRole);
if (role != null) {
users = Context.getService(HtmlFormEntryService.class).getUsersAsPersonStubs(role.getRole());
}
// If this role isn't used, default to all Users
if (users.isEmpty()) {
users = Context.getService(HtmlFormEntryService.class).getUsersAsPersonStubs(null);
}
} else {
// in OpenMRS 1.9+, get all suitable providers
users = getAllProvidersThatArePersonsAsPersonStubs();
}
}
options.addAll(users);
// sortOptions = true;
}
// Set default values as appropriate
Person defaultProvider = null;
if (context.getExistingEncounter() != null) {
defaultProvider = context.getExistingEncounter().getProvider();
if (!options.contains(new PersonStub(defaultProvider))) {
options.add(new PersonStub(defaultProvider));
}
} else {
String defParam = (String) parameters.get("default");
if (StringUtils.hasText(defParam)) {
if ("currentuser".equalsIgnoreCase(defParam)) {
defaultProvider = Context.getAuthenticatedUser().getPerson();
} else {
defaultProvider = HtmlFormEntryUtil.getPerson(defParam);
}
if (defaultProvider == null) {
throw new IllegalArgumentException("Invalid default provider specified for encounter: " + defParam);
}
}
}
// if (sortOptions) {
// Collections.sort(options, new PersonByNameComparator());
// }
providerWidget.setOptions(options);
providerWidget.setInitialValue(new PersonStub(defaultProvider));
context.registerWidget(providerWidget);
context.registerErrorWidget(providerWidget, providerErrorWidget);
}
// Register Location widgets, if appropriate
if (Boolean.TRUE.equals(parameters.get("location"))) {
locationWidget = new LocationWidget();
locationErrorWidget = new ErrorWidget();
// If the "order" attribute is passed in, limit to the specified locations in order
if (parameters.get("order") != null) {
List locations = new ArrayList();
String[] temp = ((String) parameters.get("order")).split(",");
for (String s : temp) {
Location loc = HtmlFormEntryUtil.getLocation(s);
if (loc == null) {
throw new RuntimeException("Cannot find location: " + loc);
}
locations.add(loc);
}
locationWidget.setOptions(locations);
}
if (parameters.get("type") != null) {
try {
locationWidget.setType(parameters.get("type").toString());
}
// Set default values
Location defaultLocation = null;
if (context.getExistingEncounter() != null) {
defaultLocation = context.getExistingEncounter().getLocation();
} else {
String defaultLocId = (String) parameters.get("default");
if (StringUtils.hasText(defaultLocId)) {
defaultLocation = HtmlFormEntryUtil.getLocation(defaultLocId);
}
}
defaultLocation = defaultLocation == null ? context.getDefaultLocation() : defaultLocation;
locationWidget.setInitialValue(defaultLocation);
context.registerWidget(locationWidget);
context.registerErrorWidget(locationWidget, locationErrorWidget);
}
if (Boolean.TRUE.equals(parameters.get("showVoidEncounter")) && context.getMode() == Mode.EDIT) { //only show void option if the encounter already exists. And VIEW implies not voided.
if (parameters.get("toggle") != null) {
ToggleWidget toggleWidget = new ToggleWidget((String) parameters.get("toggle"));
voidWidget = new CheckboxWidget(" " + Context.getMessageSourceService().getMessage("general.voided"), (context.getExistingEncounter() != null && context.getExistingEncounter().isVoided().equals(true)) ? "true" : "false", toggleWidget.getTargetId(), toggleWidget.isToggleDim());
} else {
voidWidget = new CheckboxWidget();
}
voidWidget.setLabel(" " + Context.getMessageSourceService().getMessage("general.voided"));
voidErrorWidget = new ErrorWidget();
if (context.getExistingEncounter() != null && context.getExistingEncounter().isVoided().equals(true))
voidWidget.setInitialValue("true");
context.registerWidget(voidWidget);
context.registerErrorWidget(voidWidget, voidErrorWidget);
}
// set the id, if it has been specified
if (parameters.get("id") != null) {
id = (String) parameters.get("id");
}
if (Boolean.TRUE.equals(parameters.get("encounterType"))) {
encounterTypeWidget = new EncounterTypeWidget();
encounterTypeErrorWidget = new ErrorWidget();
if (parameters.get("types") != null) {
List encounterTypes = new ArrayList();
String[] temp = ((String) parameters.get("types")).split(",");
for (String s : temp) {
EncounterType type = HtmlFormEntryUtil.getEncounterType(s);
if (type == null) {
throw new RuntimeException("Cannot find encounter type: " + s);
}
encounterTypes.add(type);
}
encounterTypeWidget.setOptions(encounterTypes);
}
// Set default values
EncounterType defaultEncounterType = null;
if (context.getExistingEncounter() != null) {
defaultEncounterType = context.getExistingEncounter().getEncounterType();
String defaultTypeId = (String) parameters.get("default");
if (StringUtils.hasText(defaultTypeId)) {
defaultEncounterType = HtmlFormEntryUtil.getEncounterType(defaultTypeId);
}
}
encounterTypeWidget.setInitialValue(defaultEncounterType);
context.registerWidget(encounterTypeWidget);
context.registerErrorWidget(encounterTypeWidget, encounterTypeErrorWidget);
}
}
/**
* This method exists to allow us to quickly support providers as introduce in OpenMRS 1.9.x,
* without having to branch the module. We should remove this method when do a proper
* implementation.
*
* @return
*/
private boolean openmrsVersionDoesNotSupportProviders() {
return OpenmrsConstants.OPENMRS_VERSION_SHORT.startsWith("1.6")
|| OpenmrsConstants.OPENMRS_VERSION_SHORT.startsWith("1.7")
|| OpenmrsConstants.OPENMRS_VERSION_SHORT.startsWith("1.8");
}
/**
.getMessage(ex.getMessage())));
* This method exists to allow us to quickly support providers as introduce in OpenMRS 1.9.x,
* without having to branch the module. We should remove this method when do a proper
* implementation.
*
* @param options
*/
private void removeNonProviders(List persons) {
if (openmrsVersionDoesNotSupportProviders())
return;
Set legalPersonIds = getAllProviderPersonIds();
for (Iterator i = persons.iterator(); i.hasNext();) {
PersonStub candidate = i.next();
if (!legalPersonIds.contains(candidate.getId()))
i.remove();
}
}
/**
* This method exists to allow us to quickly support providers as introduce in OpenMRS 1.9.x,
* without having to branch the module. We should remove this method when do a proper
* implementation.
*
* @return all providers that are attached to persons
*/
private List
Solution content
} else {
* HtmlGeneratorElement and the FormSubmissionControllerAction for Encounter details.
*/
public class EncounterDetailSubmissionElement implements HtmlGeneratorElement, FormSubmissionControllerAction {
private String id;
private DateWidget dateWidget;
private ErrorWidget dateErrorWidget;
private TimeWidget timeWidget;
private ErrorWidget timeErrorWidget;
private SingleOptionWidget providerWidget;
private ErrorWidget providerErrorWidget;
private SingleOptionWidget locationWidget;
private ErrorWidget locationErrorWidget;
private ToggleWidget toggleWidget;
private CheckboxWidget voidWidget;
private ErrorWidget voidErrorWidget;
private EncounterTypeWidget encounterTypeWidget;
private ErrorWidget encounterTypeErrorWidget;
/**
* Construct a new EncounterDetailSubmissionElement
*
* @param context
* @param parameters
* @should display 'Enter' option if 'type' is set to Autocomplete
*/
public EncounterDetailSubmissionElement(FormEntryContext context, Map parameters) {
// Register Date and Time widgets, if appropriate
if (Boolean.TRUE.equals(parameters.get("date"))) {
dateWidget = new DateWidget();
dateErrorWidget = new ErrorWidget();
if (context.getExistingEncounter() != null) {
dateWidget.setInitialValue(context.getExistingEncounter().getEncounterDatetime());
} else if (parameters.get("defaultDate") != null) {
dateWidget.setInitialValue(parameters.get("defaultDate"));
}
if (parameters.get("disallowMultipleEncountersOnDate") != null
&& StringUtils.hasText((String) parameters.get("disallowMultipleEncountersOnDate"))) {
dateWidget.setOnChangeFunction("existingEncounterOnDate(this, '"
+ parameters.get("disallowMultipleEncountersOnDate") + "') ");
}
if ("true".equals(parameters.get("showTime"))) {
timeWidget = new TimeWidget();
timeErrorWidget = new ErrorWidget();
if (context.getExistingEncounter() != null) {
timeWidget.setInitialValue(context.getExistingEncounter().getEncounterDatetime());
} else if (parameters.get("defaultDate") != null) {
timeWidget.setInitialValue(parameters.get("defaultDate"));
}
context.registerWidget(timeWidget);
context.registerErrorWidget(timeWidget, timeErrorWidget);
}
context.registerWidget(dateWidget);
context.registerErrorWidget(dateWidget, dateErrorWidget);
}
// Register Provider widgets, if appropriate
if (Boolean.TRUE.equals(parameters.get("provider"))) {
if ("autocomplete".equals(parameters.get("type"))) {
providerWidget = new AutocompleteWidget(Person.class);
}else{
providerWidget = new DropdownWidget();
}
providerErrorWidget = new ErrorWidget();
List