Release Notes 1.9.0

On this page:

What's new in OpenMRS 1.9

Release date: 6 June 2012

Version 1.9.0 of OpenMRS has three (3) major changes. (A larger list can be found below.)

  • Grouping encounters into visits
  • Multiple providers per encounter
  • Additional attributes to concept mapping

377 Bugs Fixed

Click here to see all 377 bugs fixed in OpenMRS 1.9.

TRUNK-2390

Remove MigrationController

TRUNK-2620

TRUNK-1925 Id Generators for Hibernate Mapping require SEQUENCE name

TRUNK-2642

TRUNK-1925 Change Liquibase Schema to SQL Independent Types

TRUNK-2657

TRUNK-1925 ON UPDATE CASCADE in relationship table cannot be performed on SQL Server

TRUNK-2540

TRUNK-2539 Add missing version numbers to pom.xml

TRUNK-2542

TRUNK-2539 Warnings when running AttributeUtilTest

TRUNK-2631

TRUNK-1925 Allow IDENTITY_INSERT for SQL Server when making liquibase insert statements

TRUNK-2632

TRUNK-1925 Move Privileges and Roles to Core Data Liquibase XML

TRUNK-2633

TRUNK-1925 NEWSEQUENTIALID() can be only used in SQL Server DEFAULT expression for a column of type 'uniqueidentifier'

TRUNK-2667

TRUNK-1925 HibernateUtil should escape single quote character on all DBMS

TRUNK-2433

AdministrationService.saveGlobalProperties is dangerous, and should be changed

TRUNK-2465

Ordering of encounters on formentry tab incorrect

TRUNK-2729

Cannot save html form

TRUNK-2715

Cannot duplicate Basic Form

TRUNK-2712

Encounter form is broken

TRUNK-2764

Cannot view encounter

TRUNK-2647

In the Edit Visit page, startDatetime and stopDatetime need time pickers

TRUNK-2773

Editing encounters should not result into multiple openmrs headers

TRUNK-2782

Cannot save edited location

TRUNK-2006

Installation wizard should not automatically set connection.driver_class in the runtime properties file

TRUNK-1942

Unknown column error when a user enters multiple words in the concept search box

TRUNK-1958

In web layer, Spring CustomDateEditor initialization should be modified to better prevent against bad dates

TRUNK-2054

OpenMRS in-app Help is not helpful

TRUNK-2116

Address layout Portlet doesnot display locations

TRUNK-2117

Fix links above the banner

TRUNK-2225

headerMinimal does not include dwr js variable

TRUNK-2324

URL patterns for module servlet filter mappings should be relative to the context path

TRUNK-2298

Add includedVoided argument to EncounterService.getEncountersByVisit

TRUNK-2348

InvalidPropertyException: Invalid property 'xslt' of bean class org.openmrs.Form

 

TRUNK-2428

ConcurrentModificationException in ConceptNameSaveHandler

TRUNK-2432

ValidateUtil does not validate Concept

TRUNK-2675

View Concept page checks for an invalid privilege to display edit link

TRUNK-2702

The new search widgets spinner runs forever when input box gets cleared

TRUNK-2775

Should not create new runtime properties file if one was found

TRUNK-255

Change default logging levels of service methods.

TRUNK-203

Deleting Patients is possible without proper permissions

TRUNK-226

Voiding a patient should void patient's related data

TRUNK-292

Core should allow formentry modules to store view and resource metadata for a form

TRUNK-259

HL7 privileges should also be included under the Role Management screen

TRUNK-308

Concept Dictionary not saving properly

TRUNK-21

Changing workflow states on dashboard fails silently if date is blank or before date of start of current state

TRUNK-286

Add startDate and stopDate to Relationships

TRUNK-403

OrderService.getOrders does not correctly use ORDER_STATUS

TRUNK-275

Refactor standard drug regimens

TRUNK-219

changing task's schedule should reschedule the task

TRUNK-1627

Remove obs.dateStarted and obs.dateStopped

TRUNK-1687

Fix installer target in build.xml

TRUNK-1690

Add coding conventions to maven

TRUNK-1809

Module is not unloaded completely when dependent module is reloaded

TRUNK-1840

initialsetup: OpenMRS logo text is not correct

TRUNK-1874

CSRF Attack error occur during patient search with Tomcat 7

TRUNK-1938

The Civil Status field on the short patient form doesn't display or set the value

TRUNK-1963

Autocomplete option isn't chosen automatically unless clicked

TRUNK-1959

Hidden Identifier Fields When Creating a New Patient

TRUNK-1994

JUnit tests fail if run independent of maven

TRUNK-2011

Control character in cookie value, consider BASE64 encoding your value

TRUNK-2000

Admin page disappears if a bad module is uploaded

TRUNK-2108

User management page fails on searching with role and include disabled users

TRUNK-2026

save* and create* Before Advisor throws ClassCastException

TRUNK-2473

Javascript error on left and right arrow keys when creating new concept

TRUNK-2063

Fix fragile date comparison in ShortPatientFormValidatorTest

TRUNK-2129

When saving voided Person PersonSaveHandler should make sure the personVoidReason field is not empty, not the (patient) voidReason

TRUNK-2130

Add admin page for mapping concept reference terms and add a search widget

TRUNK-2132

Manage Observations privilege is missing from OpenMRS 1.6 Core Privileges

TRUNK-2323

Fix the logic in EventListeners.setGlobalPropertyListeners

TRUNK-2339

Tooltip on "Search Terms" on edit concept form is bad

TRUNK-2344

Upgrade Spring framework to latest stable release or atleast 3.0.3

TRUNK-2363

when try to add visit, it give me an error (tomcat-specific)

TRUNK-2392

ConceptService.getDrugs(String phrase) does not include retired results, but it should

TRUNK-2435

PatientSearch objects with filterClass belonging to a module aren't always properly decoded

TRUNK-2422

Look for runtime properties in current directory, environment variable, then home directory

TRUNK-2424

Unable to Save New Concept when OpenMRS is run in a JVM in Indonesia/French Locale

TRUNK-2446

Move Encounter types from core data to demo data

TRUNK-2459

getHydratedObject giving errors for person attributes that are char,int, and float options when put itrying to create a new Patient

TRUNK-2460

getHydratedObject giving class not found for person attributes that are org.openmrs.Patient.exitReason and org.openmrs.DrugOrder.discontinuedReason

TRUNK-2469

Conflicting ASM Library

TRUNK-2500

Synchronized Block in ModuleClassLoader Causing Dead Locks

TRUNK-2515

PersonService should extend OpenmrsService

TRUNK-2507

Tags use arbitrary build number

TRUNK-2508

Dojo references in openmrs.js cause javascript errors

TRUNK-2516

Add unique constraint to concept_source.hl7_code column

TRUNK-2521

Multiple Program Workflow States with same start date

TRUNK-2523

javascript error when trying to edit an existing program enrollment

TRUNK-2524

When you try to save changes to a program enrollment, they are saved, but the page appears stuck

TRUNK-2629

Voiding/unvoiding Person, Patient and User needs to be fixed

TRUNK-2673

ServiceContext.getRegisteredComponents has an unprotected log.debug

TRUNK-2713

Database with no demo data makes the first form readonly

TRUNK-2584

Fix purgeConcept and deleteConceptWord methods in HibernateConceptDao

TRUNK-285

Concept.getAnswers should include retired answers by default

TRUNK-2730

getConceptsByClass is broken

TRUNK-2561

Secret Question screen expects User to have a Person

TRUNK-2777

Database setup wizard should preserve contents of existing runtime properties file

TRUNK-2811

HL7 processor should not lose unbounded coded concepts answers in submitted forms

TRUNK-2816

Include Retired and Show Verbose labels should come after their checkboxes

TRUNK-12

Fix @Should tags in Generated Javadoc

TRUNK-32

ORUR01Handler.getLocation should accept name instead of just locationId

TRUNK-231

HibernateContextDAO.openSession/closeSession

TRUNK-221

Inconsistency between Encounter & Form Entry tabs on Patient Dashboard

TRUNK-224

Error when creating Patient Identifier with duplicate value

TRUNK-338

Validate patient name in create form with regular expression property

TRUNK-437

Add Required Class Element to Extension Points

TRUNK-220

When stopping/starting a module, its services are not added properly.

TRUNK-232

Module service onStartup and onShutdown methods never get called

TRUNK-235

User preferences for "show retired" and "include definitions" not being used to automatically check boxes

TRUNK-1611

Obs should not be allowed to have null values for all value fields (unless the obs has child obs)

TRUNK-1693

Drug Regimen portlet is slow to load

TRUNK-1803

Max size of serialized_object entry

TRUNK-1834

Cannot unretire a person attribute type

TRUNK-1848

Role.getName() does not work as you'd expect

TRUNK-1852

Install from Module Repository feature does not work under maven+jetty

TRUNK-1870

Exit Patient From Care does not work in vanilla installation

TRUNK-1883

the Obs method getValueAsString(Locale locale) needs improvement

TRUNK-2033

java.lang.ClassCastException: org.openmrs.Person cannot be cast to org.openmrs.Patient

TRUNK-2046

Error message produced when problem arises exiting a patient from care is not very helpful

TRUNK-2670

Encounter field tag should not display 'null' string for encounters with null location

TRUNK-2352

retiredReasonRow is null javascript error on concept drug form

TRUNK-2047

Fix issues with StartModule and context refresh

TRUNK-296

Openmrs constant PRIV_PURGE_PATIENT_PROGRAMS is set to Add Patient Programs

TRUNK-431

"Data Entry Statistics" visible to all users under Administration

TRUNK-31

IE Error: Can't move focus to the control

TRUNK-276

personField.tag breaks if pageContext contains a 'roles' variable

TRUNK-223

Viewing a concept as Anonymous user fails with Privilege required: View Forms


TRUNK-1620

Updated OpenMRS logo and colors in logo are not correct

TRUNK-1668

Module engine will execute sqldiff based on the String ordering

TRUNK-2005

Handle HttpSessionRequiredException in spring annotated controllers

TRUNK-1864

Make Concept required on concept drug form

TRUNK-1936

Please add more detail to Person::getPersonName() behavior

TRUNK-1946

Calling User.addName throws a NullPointerException if the user isn't attached to a Person yet

TRUNK-2020

NullPointerException when getting a concept name

TRUNK-2024

Relationship view portlet looks unlike Programs, Allergies and Problem List

TRUNK-2051

Chrome shows horizontal scrollbar on every page

TRUNK-2056

Add error message in ADTA28Handler if AssigningAuthority is missing

TRUNK-2199

Implement API method for retrieving PersonNames by PersonNameId

TRUNK-2430

User bar remains at top of screen and overlays content when scrolling on any page

TRUNK-2495

OpenmrsConstants.OPENMRS_VERSION is null when run with mvn jetty:run

TRUNK-2512

Default Cursor Placement on the Manage Users Screen

TRUNK-2568

You shouldn't be allowed to add an encounter to a visit if the encounter's datetime is not within the date range of the visit

TRUNK-335

Various problems with Dashboard Graphs

TRUNK-265

Complex obs images of type other than jpg aren't displayed right in the edit obs page

TRUNK-1638

When a concept is retired through the web interface, retired_by, date_retired and retire_reason are NULL in database concept table

TRUNK-1853

concept_answer.answer_drug does not have a foreign key to the drug table

TRUNK-1871

PatientServiceImpl.saveReasonForExit needs to provide a change message when updating the reason for exit obs

TRUNK-1989

Faulty ConceptNameTag.equals method

TRUNK-1912

Patient filter incompatibilities between OpenMRS 1.5 and 1.6

TRUNK-1923

PatientServiceImpl.saveCauseOfDeathObs needs to provide a change message when updating the cause of death obs

TRUNK-2018

Fix Initialization wizard redirects in case of ajax timeouts

TRUNK-1986

DataIntegrityViolationException when trying to delete a patient

TRUNK-1939

Default Cursor Placement on Find/Create Patient Screen

TRUNK-1971

Update pom to specify encoding for all plugins

TRUNK-1975

BinaryDataHandler leaves input stream open

TRUNK-1982

Update buildnumber Maven plugin in pom to non-modified released version

TRUNK-2001

Liquibase changeset preConditions missing "onFail" attribute

TRUNK-2043

Maven tests depend on machine locale

TRUNK-2066

Clean up favicon

TRUNK-2128

Retired locations should appear at the bottom of choice lists on the "Edit Patient" page

TRUNK-2156

Module tag files are copied into working copy of trunk when using jetty

TRUNK-2317

Logging Advice logs entire text of what is deserialized by serialization service

TRUNK-2293

Add All PropertyEditors to the global OpenmrsBindingInitializer

TRUNK-2313

nicer error handling when Patient Identifier Type regex too long

TRUNK-2315

search terms do not appear when viewing concept

TRUNK-2335

Javascript calendar picker not working on quick reports page

TRUNK-2353

Null pointer exception is occassionally thrown on concept drug form

TRUNK-2419

Default Button in Initialization Wizard is "Back" (again)

TRUNK-2458

Stop multiple users from running the installation wizard

TRUNK-2510

Pretty Error Message for: Patient is missing the following required identifier(s): HAS Dossier Number

TRUNK-2637

Source code rendering failed

TRUNK-2662

Logging level Global Property not used

TRUNK-1987

Make error more descriptive: ModuleException: A servlet mapping with name complexObsServlet already exists.

TRUNK-1985

DataIntegrityViolationException exception when trying to delete a form

TRUNK-2666

Table concept_map_type should have is_hidden column instead of isHidden

TRUNK-2795

InvalidPropertyException 'activeAttributes' when saving a visit

TRUNK-2913

Simplify display of visit on Visits tab

TRUNK-1637

Clarify what the startup error "Waiting for changelog lock...." means

TRUNK-2961

Saving user options for the default super user should not throw error message on second and subsequent times

TRUNK-2917

AuditableInterceptor throws an NPE at startup, preventing OpenMRS from running

TRUNK-2792

Starting a task whose class cannot be found should display a user friendly error message

TRUNK-2785

Saving person attribute type with missing description should give a user friendly error message

TRUNK-2783

Limit of maximum encounters to show on patient dashboard should be optional and configurable

TRUNK-2786

Saving relationship type with missing description should give a user friendly error message

TRUNK-2503

Include inherited roles when searching for users

TRUNK-412

Additional Attributes on Concept Mapping

TRUNK-2686

Provider Identifiers should be unique

TRUNK-2956

Search widget row highlight fails on verbose row when home/end/pageup/pagedown keys are used

TRUNK-2664

Change the priority when setting a preferred name for a concept

TRUNK-2791

Pressing start, stop, delete button without selecting any task should tell the user to first select at least one task

TRUNK-2023

Allow second user to see progress of update wizard

TRUNK-2586

Include a mock library in the core

TRUNK-2855

ERROR - RequestContextAwareTag.doStartTag(82) Theme 'theme': No message found under code 'jqueryui.theme.name' for locale 'en_US'

TRUNK-2922

Daemon user has no associated person

TRUNK-2948

1.9 Demo dataset sql file with the 5k patients needs a few more pieces of data

TRUNK-2055

Localize messages in the initialization and update wizard

TRUNK-2954

Rename visit configuration URL, jsp, controller and related files

TRUNK-2928

fix breaking test ConceptServiceImplTest.saveConcept_shouldSetDefaultPreferredNameToASynonymThird

TRUNK-2926

Add changeset to delete incorrect entries in role_role table

TRUNK-2914

Incorrect error message when trying to create an encounter and put it in a visit with incompatible start/end date

TRUNK-2796

Cannot save new visit and encounters at the same time

TRUNK-2909

1.9 Demo dataset needs a few more pieces of data

TRUNK-2923

Fix concept reference term to use random generated UUIDs

TRUNK-2821

Merge Patients page should be displayed on a separate pop-up screen

TRUNK-422

Edit / View of previous forms should merge into a single interface paradigm

TRUNK-2915

Manage Encounter should show date+time widget for encounterDatetime

TRUNK-2921

ConceptValidator should not compare names of a retired concept against the names of other concepts

TRUNK-2910

Add/Edit visit page needs to look like other OpenMRS pages

TRUNK-2152

Add upgrade script to set a preferred identifier for patients without one

TRUNK-2639

Drugs are not showing up in the concept search in the concept dictionary

TRUNK-2911

When you create a visit, it should take you back to the patient dashboard

TRUNK-2907

HibernateEnumType not finding module methods

TRUNK-2680

Automatically convert empty string properties on OpenmrsObjects to null before persisting in the database

TRUNK-2887

Add a label for encounters not assigned to any visit on the visit tab on the patient dashboard

TRUNK-2901

Obs.newInstance() method should include both voided and non-voided group member obs

TRUNK-2332

Fix EncounterService.getCountOfEncounters() and getEncounters(String, Integer, Integer, Boolean)

TRUNK-2900

Cannot parse address layout (fresh installation)

TRUNK-2644

Convert Global Property column to varchar

TRUNK-1677

Concept Proposal Management- Synonym function failed

TRUNK-2711

TRUNK-2696 Change active visits in header

TRUNK-2784

Add Encounter for Visit Extension

TRUNK-2889

Autocomplete widgets should not lose initial value on losing focus

TRUNK-222

Unable to find patients if their name is less than 3 characters

TRUNK-1993

UUID used by equals and hashCode in OpenmrsObject

TRUNK-2623

Concept::getAnswers(true) (for include retired ) should behave identically to Concept::getAnswers()

TRUNK-256

Preferred Patient Identifier should be required

TRUNK-2870

Field widgets that use autocomplete should show a visual indication of invalid entry

TRUNK-2793

Creating location tag without a name should display error message adjacent to the empty name textbox

TRUNK-2318

Do not allow creating, modifying, or deleting ConceptDatatype from the API

TRUNK-363

The web interface needs to support time obs when adding a new observation

TRUNK-2787

Cannot unretire relationship type

TRUNK-2766

Cannot upgrade from 1.8 to 1.9

TRUNK-2810

Adding ConvSet form field having a member concept without a description should not throw a NullPointerException

TRUNK-2814

Encounters should not be assigned to visits which stopped before the encounter date

TRUNK-2807

Unbounded coded concepts should not throw a NullPointerException when trying to answer them

TRUNK-299

WebModuleUtil should handle DWR <init> tags in dwr section of config.xml

TRUNK-420

Add obs.previous_version column

TRUNK-2780

Advanced setup install method should use default values in existing runtime properties file

TRUNK-2842

Fix spelling of Identifer Location on Add new Patient / Short Form

TRUNK-2849

Aware of module feature causes OpenMRS to crash

TRUNK-1668

Module engine will execute sqldiff based on the String ordering

TRUNK-2428

ConcurrentModificationException in ConceptNameSaveHandler

TRUNK-2697

Fix concept validator to allow duplicate concept names that are voided

TRUNK-2799

Missing description when saving program should give user friendly error message

TRUNK-3128

1.9 needs to require logic 0.5.2 as a core module, and bundle it

TRUNK-3031

Liquibase changeset 20100426-1947 fails when upgrading from 1.6

TRUNK-2703

Can't create relationship from patient dashboard

TRUNK-2700

m2eclipse error: Plugin execution not covered by lifecycle configuration

TRUNK-3108

ORUR01 handler should find providers by personId, providerId, identifier and uuid

TRUNK-2704

Can't create relationships from new patient page

TRUNK-2998

Fonts on the OpenMRS Installation Wizard not consistent...

TRUNK-3115

Rename AdministrationService.validateInManualFlushMode, and refactor it and ValidateUtil

TRUNK-2697

Fix concept validator to allow duplicate concept names that are voided

TRUNK-259

HL7 privileges should also be included under the Role Management screen

TRUNK-2011

Control character in cookie value, consider BASE64 encoding your value

TRUNK-3005

ConceptValidator finds duplicate names only for the current system locale

TRUNK-251

Add delete (and retire?) for program states in the workflow

TRUNK-3059

Encounter.removeProvider and setProvider should void the EncounterProvider, not remove it

TRUNK-198

Small fixes for newpatient.form

TRUNK-1800

Locale does not work property when using "Become This User"

TRUNK-3066

deserializing a SerializedObject should pass on deserialization errors

TRUNK-3049

Ugly screen when upgrading to OpenMRS 1.9

TRUNK-3082

Missing label for an encounter with no visit on patient dashboard

TRUNK-3068

Patient Dashboard is slow to load

TRUNK-3083

Missing description when saving patient ids in cohort builder should give user friendly error message

TRUNK-3057

Creating concept mappings fails with legacy code

TRUNK-3078

Concept reference term auto compete is broken in IE

TRUNK-1962

Drug regimen "Scheduled Stop Date" not shown in regimen list or cannot stop regimen with future dates

TRUNK-3073

Fetching concept reference terms and map types by name should be case insensitive

TRUNK-2273

Avoid Duplicate Rows in Patient_State Table

TRUNK-3055

JspException thrown on clicking the Visits category under settings

TRUNK-3001

Add initialization/update wizard messages for languages other than english

TRUNK-37

Add logging table for merged patients

TRUNK-2198

Implement voiding of PersonNames

TRUNK-3029

Determine correct length for datatype and handler config hibernate properties

TRUNK-3060

Database setup wizard fails to complete

TRUNK-2589

Concept doesn't have flexible methods for getting a name by locale, type, and tags

TRUNK-3033

Force multipart and POST form settings in LongFreeTextFileUploadHandler getWidgetHtml method

TRUNK-222

Unable to find patients if their name is less than 3 characters

TRUNK-3036

TRUNK-3034 In the CustomDatatypeHandler interface, remove the render method

TRUNK-3034

Refactor CustomDatatype and CustomDatatypeHandler to make the interface simpler

TRUNK-2734

Refactor Form Resources to use Custom Datatypes

TRUNK-3035

TRUNK-3034 In the CustomDatatype interface, replace render method with a summary view method

TRUNK-3038

TRUNK-3034 FieldGenDatatypeHandler and WebDatatypeHandler should both extend a new interface

TRUNK-3039

TRUNK-3034 Refactor FormResource-related code to use the newly-refactored interfaces

TRUNK-3037

TRUNK-3034 Add DownloadableDatatypeHandler interface

TRUNK-3046

Liquibase uses wrong types in MySQL

TRUNK-3042

Duplicate message code within message.properties file

TRUNK-3058

Encounter.addProvider(EncounterRole, Provider) should prevent adding duplicate providers for the same role

TRUNK-1925

Support Multiple Databases in OpenMRS Installation and Update

TRUNK-2652

TRUNK-1925 Liquibase Updates Need to be Backward-Consistent, Yet Support All Databases

TRUNK-3053

ProviderService.getProviderByUuid(String) has a typo

TRUNK-39

Multiple providers per encounter

TRUNK-2064

cannot use multiple globalproperties portlets on a single page

TRUNK-1926

Current version of liquibase has bugs.

TRUNK-3032

Patient Merge Failed when records have the same identifier with the same identifier type

TRUNK-2330

Include the default locale constant value when getting locales in order

TRUNK-2381

Data Entry Statistics Module - Includes voided encountres and obs

TRUNK-1976

openmrs-lib-cache temp directories not being deleted

TRUNK-2912

Active visit portlet on dashboard should show date + time in a prettier way

TRUNK-3041

Fix build on JDK7

TRUNK-2621

TRUNK-1925 Installation Wizard Should Automatically Select Correct Hibernate Dialect

TRUNK-3040

OpenMRS ENGLISH to SINHALA-Language Localization

TRUNK-2347

Revision Number Not Indicated In Web Application

TRUNK-2986

Get rid of the authentication step during test installation

TRUNK-3003

User should get redirected back to the remote details setup page when authentication fails

TRUNK-1829

Cannot save PersonAttributes of type User

TRUNK-2896

change functionality of isObsGrouping method to return hasGroupMembers(true) instead of hasGroupMembers(false)

TRUNK-438

Add a "Settings" page and Rename Manage Global Properties page

TRUNK-2272

EL functions defined in modules are not accessible

TRUNK-2971

Add Allergy dialog box should show date picker widget for selecting the start date

TRUNK-3019

jQuery not defined error

TRUNK-3015

Event Listeners duplicated at Spring restart

TRUNK-2804

Include a link to the documentation sprint book on the help page

TRUNK-2818

Persian Translation

TRUNK-2916

EncounterValidator should prevent creation of encounters with encounterDatetime in the future

TRUNK-2907

HibernateEnumType not finding module methods

TRUNK-2992

Bad module prevents OpenMRS from starting entirely

TRUNK-1763

Make delete more obvious on global property page

TRUNK-2674

Patient is unintentionally deleted while replacing his/her drug regimen from the regimen tab of the dashboard

TRUNK-2393

Add AOP around save methods to invoke validators

TRUNK-2981

Cannot save relationship type views

TRUNK-2964

Cannot save program workflow

TRUNK-3187

Limiting to a maximum number of search widget results doesn't work occasionally

TRUNK-427

Change Patient Identifier Location to be optional

TRUNK-3171

Removing concept mapping is broken

TRUNK-3162

Update Portuguese Translation

TRUNK-3140

Patient Dashboard Encounters are not sorted by date. Clicking on Encounter Date doesn't sort them.

TRUNK-3126

In patientHeader.jsp, the org.openmrs.patientDashboard.afterLastEncounter extension point should be moved outside of the <c:if test="$not visitsEnabledhttps://tickets.openmrs.org/browse/TRUNK-3126">

TRUNK-3131

Can't update core logic module automatically

TRUNK-3145

When you delete an encounter you are not returned to the dashboard and the dashboard isn't refreshed when click back

TRUNK-3139

Error when removing the patient program completion date: A completion date cannot be before an enrollment date

TRUNK-3130

Unable to start openmrs as web daemon

TRUNK-3156

Unable to add new global properties: Advanced Settings (Global Properties) page doesn't show the save button; Settings page doesn't allow for new properties

TRUNK-2240

Allow "end this visit now" from edit visit page

TRUNK-21

Changing workflow states on dashboard fails silently if date is blank or before date of start of current state

TRUNK-1714

Program/Workflow have problems with concept search

TRUNK-2305

Default locale doesn't work right when creating new users

TRUNK-2996

Initial setup wizard language selection language spellings not correct

TRUNK-3119

Patient merge not working for some locales

TRUNK-3129

Missing options in Concept Drug Management Page

TRUNK-3150

"true" and "false" concepts loaded improperly in ConceptServiceImpl

TRUNK-3136

Missing Link on Dashboard to Edit Encounters

TRUNK-3154

OpenMRS webapp should also map *.page and *.action to the openmrs servlet

TRUNK-2639

Drugs are not showing up in the concept search in the concept dictionary

TRUNK-2630

Login takes user to last page of previous user

TRUNK-3137

Add New Concept Page Broken

TRUNK-3109

Remove java keywords from jsp

TRUNK-3005

ConceptValidator finds duplicate names only for the current system locale

TRUNK-3048

When searching for patients by name, exact matches should be shown first

TRUNK-3241

PersonAddresses get voided and recreated on form submission

TRUNK-3235

in liquibase changeset 20110301-1030, the new concept mapping types should use standardized uuids instead of random ones

TRUNK-3233

Increase drug table name column length to 255 characters

TRUNK-3022

Unable to use the the new release testing feature to upgrade a 1.6.4 database

TRUNK-3248

Unable to edit multiple Drugs

TRUNK-3236

Unlocking account: number format exception when LockoutTimestamp set to blank

TRUNK-3173

Test Installation type fails to complete

TRUNK-3161

Account locked

TRUNK-1874

CSRF Attack error occur during patient search with Tomcat 7

TRUNK-3234

Failed to run sql dump file with testing installation method

TRUNK-3237

Change the default value for the default concept map type global property to NARROWER-THAN

TRUNK-3228

Provider search doesn't search on provider identifier

TRUNK-3133

Boolean dynamic types do not load correctly in OpenMRS Settings

TRUNK-3229

Reselect visit attribute values on error

TRUNK-3364

Unable to complete initial setup in openmrs trunk

TRUNK-2138

Add Location Attributes

TRUNK-3290

Override provider.getName method to look at provider.person.name

TRUNK-3297

Error displaying person attributes on user view page

TRUNK-412

Additional Attributes on Concept Mapping

TRUNK-3333

Voiding an encounter "deletes" the provider and the encounter cannot be unvoided

TRUNK-2510

Pretty Error Message for: Patient is missing the following required identifier(s): HAS Dossier Number

TRUNK-3340

Use getUuid instead of field access in BaseOpenmrsObject

TRUNK-3298

concept_reference_term uuids need to remain consistent across implementations during 1.9 upgrade

TRUNK-2644

Convert Global Property column to varchar

TRUNK-3248

Unable to edit multiple Drugs

TRUNK-3039

TRUNK-3034 Refactor FormResource-related code to use the newly-refactored interfaces

TRUNK-3022

Unable to use the the new release testing feature to upgrade a 1.6.4 database

TRUNK-2742

Make rules created by the Arden translation thread safe

TRUNK-3109

Remove java keywords from jsp

TRUNK-3137

Add New Concept Page Broken

TRUNK-1874

CSRF Attack error occur during patient search with Tomcat 7

TRUNK-3272

Cannot log into OpenMRS 1.9.0 after new install

74 New Features Added

Click here to see all 74 new features added in OpenMRS 1.9.

TRUNK-334

Consistent, well-document support for web service access to OpenMRS API

TRUNK-409

Improved mobile data collection

TRUNK-2297

Add privilege checks around retire and unretire inline forms on the concept form

TRUNK-2314

Add retire method for concept datatypes to concept service

TRUNK-2461

Fix DWRVisitService.findVisitsByPatient

TRUNK-2488

Add ability to specify changelog files when checking for unrun database changes

TRUNK-48

Add 'Visit' to data model

TRUNK-406

We need good data quality tools bundled and with similar workflow

TRUNK-2044

Add Provider Object

TRUNK-436

Add more information to System Information page

TRUNK-427

Change Patient Identifier Location to be optional

TRUNK-440

Enhance the management of stop words for concept name indexing

TRUNK-18

Add more @shoulds and junit test cases

TRUNK-26

Initialization / install wizard should have a default simple mode

TRUNK-1587

Allow modules to be aware of other modules without requiring them

TRUNK-47

Implementer not notified when modules don't restart alongside system restart

TRUNK-389

improve patient search support for multiple names

TRUNK-1798

Create a standalone all-in-one package with embedded server and db

TRUNK-2067

Improve location hierarchy "simple" widget

TRUNK-2138

Add Location Attributes

TRUNK-2320

Simple installer should let you choose whether or not to add demo data

TRUNK-2329

Add outcome as a property of Patient Program

TRUNK-2394

Can we use the search widget to "list all items" too?

TRUNK-2444

Port Arden changes from custom CHICA 1.5.x build to main codebase

TRUNK-2590

alert pop up required when removing relationship

TRUNK-2440

Add method for getting HL7InQueue by its uuid

TRUNK-2502

Add extension point to option.jsp page

TRUNK-262

Add type to global properties table

TRUNK-2008

Add a basic OpenmrsSerializer to core

TRUNK-2152

Add upgrade script to set a preferred identifier for patients without one

TRUNK-19

Require start and discontinue dates for orders

TRUNK-1654

getGroupMembers() returns voided obs

TRUNK-1878

When managing a user, display Created By and Changed By user and datetime

TRUNK-1956

Fix tests with @Ignore in ConceptServiceTest

TRUNK-2052

Add Missing help tool tips on the concept form when datatype is changed

TRUNK-2053

Hide preferred concept name radio button and label when a concept has only one name on the concept form

TRUNK-2211

Add voidPersonAddress method in PersonService

TRUNK-2294

Add uuid search to all PropertyEditors

TRUNK-2295

Voiding a visit should ask for confirmation, and show how many dependent object will be deleted

TRUNK-2471

Generic mechanism for validating field lengths

TRUNK-2485

The fieldGen for String should support an options the displays a textarea instead of a text field

TRUNK-2655

Register BinaryDataHandler and BinaryStream handler with ObsDAO

TRUNK-368

Define Address Formats Outside of Openmrs-Servlet

TRUNK-2447

Add Show Verbose to the new jquery search widgets

TRUNK-2141

Make the number of results to display per page and total hits returned in the jquery search widget to be configurable

TRUNK-2706

Cleanup code in the new search widgets

TRUNK-35

Add mergePatients method that takes in multiple patients

TRUNK-1602

Add checkstyle check for "new Date().getTime()"

TRUNK-1643

add ability to administer hl7_source table to administration page

TRUNK-1919

Add two-way hash method

TRUNK-1922

Allow database driver to be specified in a runtime property

TRUNK-1997

Create global property patientSearch.matchMode during install

TRUNK-2009

Implement TextHandler for Complex Obs

TRUNK-2109

use a global property for the app name in the welcome page

TRUNK-2131

Add 'Visit Attribute' to data model

TRUNK-2220

Date fields should also display the date picker when they receive focus

TRUNK-2283

Location.isInHierarchy is inefficient

TRUNK-2514

Contribution to messages_fr.properties for reporting

TRUNK-52

Need date_ changed and changed_by in person_address table

TRUNK-2585

When creating a new patient , the identifier row can be removed even if it is the only identifier row

TRUNK-2817

Set a default EncounterVisitHandler when upgrading to 1.9

TRUNK-2441

New Extension Point in headerfull.jsp for Feedback Module

TRUNK-1846

Support History of Person Addresses

TRUNK-1877

forEachRecord tag does not support reportObject

TRUNK-1909

Create new getConceptsByMapping API method that returned retired concept

TRUNK-1929

Adding Delete Field functionality

TRUNK-1943

Add a text attribute discontinuedReasonNonCoded (varchar 255) to Order object

TRUNK-2017

Add new objects and attributes to current order and drug order objects to support the Order Entry API

TRUNK-2035

Add hibernate mappings and liquibase changesets to support the Order Entry API

TRUNK-2142

Grouping encounters in dashboard by date

TRUNK-2201

Remove concept name rows for removed names on the concept form

TRUNK-2292

Add web.xml mapping for web services

TRUNK-1952

Add placeholder attribute to search boxes

TRUNK-1937

Add date_changed and changed_by to the person_relationship and patient_identifier tables

User Interface Changes

  • The Manage Global Properties link has been changed into Settings where the global properties are grouped according to category. The old style of listing all without grouping can be accessed from the Advanced Settings link.
  • The Encounters tab on the patient dashboard is replaced with Visits unless you set the visits.enabled setting to false.

Introduction of Concept Reference Terms

By default, when you upgrade to 1.9, all of your existing concept mappings are mapped as "NARROWER-THAN". If you actually want some of your concept mappings to be "SAME-AS" mappings (which would be the case if you are using mappings to uniquely identify concepts without using their concept id, for example), then before you migrate you can specify this by using the "comment" column of the concept_map table to specify the behavior that you want.

In summary (assuming a 1.6 -> 1.9 upgrade):

  • In your pre-migration 1.6 system, in the concept_map table, update the comment field with the name of the map type that you want to apply to the mapping, prefixed with the words "Map Type: ". Valid concept may type names include "NARROWER-THAN", "SAME-AS", and "BROADER-THAN". For example, you would say: "Map Type: SAME-AS".
  • If you are running a sync environment, the following groovy script might help do this (you'll want to set the source names and map type to meet your own specifications):
def typeName = "Map Type: SAME-AS";
def sourceNames = ["PIH","org.openmrs.module.mdrtb"];
for (sourceName in sourceNames) {
    org.openmrs.ConceptSource source = concept.getConceptSourceByName(sourceName);
    List conceptMaps = concept.getConceptsByConceptSource(source);
    for (conceptMap in conceptMaps) {
      if (!typeName.equals(conceptMap.getComment())) {
        conceptMap.setComment(typeName);
        concept.saveConcept(conceptMap.getConcept());
      }
    }
}

For more information, see: https://tickets.openmrs.org/browse/TRUNK-3296

Core and Bundled Modules

This module is a core module in OpenMRS 1.9. It can be upgraded, but can not be removed:

Core Module

Version

Logic

0.5.2

These modules are bundled with OpenMRS 1.9. They will be started automatically and can be removed if desired.

Download

Download OpenMRS 1.9

Upgrading

Enhanced Validation

Starting in OpenMRS 1.9, every object that you save is validated (e.g. checking required fields, not allowing duplicate names). Prior to 1.9 this was not always done, so it is likely that existing pre-1.9 databases have data that is invalid, and 1.9 will not let you save those objects without fixing the validation errors.
To avoid running into this situation at unexpected times, you should use the Validation Module module before upgrading in production. There are two approaches:

  • (better approach, because it uses 1.9's actual validation)
    1. Upgrade a copy of your production database on a test server
    2. Use the Validation module on the test server to identify any invalid items
    3. Fix these errors on your production server
    4. repeat, until there are no further validation errors
  • (easier approach, but this uses validation in your running version)
    1. Use the validation module on your existing production server to identify any invalid items
    2. Fix these errors in-place on your production server
    3. repeat, until there are no further validation errors

Release Testing Helper Module

We now offer the Release Testing Helper to help you test the upgrade to OpenMRS 1.9.0 using your existing data. You can get more information about this module by reading Release Testing Helper Module on the OpenMRS Wiki. A video recording of how to use the Release Testing Helper is available on YouTube.

Contributors

A huge thanks to the 71 people that have contributed to the code base and helping us to get this far:





Not to mention all the people that contributed in countless other ways to support this release and be a great part of the shaping of this release:

For Developers

Non-Backwards-Compatible Changes for Developers

OpenMRS 1.9 includes a few non-backwards-compatible changes from version 1.8:

  • Form no longer has the xslt and template properties. Use the new FormResource API.
  • Encounter provider is no longer a mere person but has to be in the new provider tables. So a provider may not be a person. And each encounter provider has to be associated with an encounter role.
  • Hibernate upgraded.  See Non-backwards-compatible changes to Hibernate's Type API

Data Model Changes

The OpenMRS data model diagram for version 1.9.0 can be viewed from the OpenMRS Data Model page.

Click here to see all database changes in OpenMRS 1.9.

* (Fixed)Modified edit_privilege to correct column size
* (Fixed)Add a table to enable generic storage of serialized objects
* (Fixed)users.retired to BOOLEAN
* Changing global_property.property from varbinary to varchar
* Drop the not null person id contraint
* (Fixed)Change active_list_type.retired to BOOLEAN
* (Fixed)Change active_list_type.retired to BOOLEAN
* (Fixed)Change concept_name.locale_preferred to BOOLEAN
* Adding index on notification_alert.date_to_expire column
* Adding "date_changed" column to person_address table
* Adding "changed_by" column to person_address table
* Add 'location_behavior' column to patient_identifier_type table
* Drop Not-Null constraint from location_id column in patient_identifier table
* Create table to store concept stop words to avoid in search key indexing
* Inserting the initial concept stop words
* Adding the discontinued_reason_non_coded column to orders.
* Adding 'start_date' column to person_address table
* Adding 'end_date' column to person_address table
* Adding "date_changed" column to patient_identifier table
* Adding "changed_by" column to patient_identifier table
* Adding "date_changed" column to relationship table
* Adding "changed_by" column to relationship table
* Increasing the serialized_data column of serialized_object to hold mediumtext
* Dropping unused date_started column from obs table
* Dropping unused date_stopped column from obs table
* Adding correct foreign key for concept_answer.answer_drug
* Create the person_merge_log table
* Create visit type table
* Create the visit table and add the foreign key for visit_type
* (Fixed)Changed visit.voided to BOOLEAN
* Adding visit_id column to encounter table
* Adding the start_date column to relationship.
* Adding the end_date column to relationship.
* Creating visit_attribute_type table
* (Fixed)Change visit_attribute_type.retired to BOOLEAN
* Refactoring visit_attribute_type table (devs only)
* Creating visit_attribute table
* (Fixed)Change visit_attribute.voided to BOOLEAN
* Increasing maximum length of patient identifier type regex format
* Change all empty concept_source.hl7_code to NULL
* Add unique constraint to the concept_source table
* Adding the outcomesConcept property to Program
* Adding the outcome property to PatientProgram
* Creating location_attribute_type table
* (Fixed)Change visit_attribute.retired to BOOLEAN
* Refactoring location_attribute_type table (devs only)
* Creating location_attribute table
* (Fixed)Change visit_attribute.retired to BOOLEAN
* Converting general address format (if applicable)
* Converting Spain address format (if applicable)
* Converting Rwanda address format (if applicable)
* Converting USA address format (if applicable)
* Converting Kenya address format (if applicable)
* Converting Lesotho address format (if applicable)
* Converting Malawi address format (if applicable)
* Converting Tanzania address format (if applicable)
* Renaming the concept_source table to concept_reference_source
* Adding concept_reference_term table
* (Fixed)Change concept_reference_term.retired to BOOLEAN
* Adding concept_map_type table
* (Fixed)Change concept_map_type.retired to BOOLEAN
* Renaming the concept_map table to concept_reference_map
* Adding concept_reference_term_id column to concept_reference_map table
* Renaming concept_map_type.isHidden to is_hidden
* Inserting core concept map types
* Adding concept_map_type_id column and a foreign key constraint to concept_reference_map table
* Adding changed_by column and a foreign key constraint to concept_reference_map table
* Adding date_changed column and a foreign key constraint to concept_reference_map table
* Adding concept_reference_term_map table
* Creating concept reference terms from existing rows in the concept_reference_map table
* Adding foreign key constraint to concept_reference_map.concept_reference_term_id column
* Dropping foreign key constraint on concept_reference_map.source column
* Dropping concept_reference_map.source column
* Dropping concept_reference_map.source_code column
* Dropping concept_reference_map.comment column
* Remove ON DELETE CASCADE from relationship table for person_a
* Remove ON DELETE CASCADE from relationship table for person_b
* (Fixed)Changing from smallint to BOOLEAN type on BOOLEAN properties
* Updating logging level global property
* Void all attributes that have empty string values.
* Create provider table
* (Fixed)Change provider.retired to BOOLEAN
* Creating provider_attribute_type table
* (Fixed)Change provider_attribute_type.retired to BOOLEAN
* Refactoring provider_attribute_type table (devs only)
* Creating provider_attribute table
* (Fixed)Change provider_attribute.voided to BOOLEAN
* Creating encounter_role table
* (Fixed)Change encounter_role.retired to BOOLEAN
* Creating encounter_provider table
* (Fixed)Change encounter_provider.voided to BOOLEAN
* Inserting the unknown encounter role into the encounter_role table
* Creating providers for persons from the encounter table
* Migrating providers from the encounter table to the encounter_provider table
* Dropping the provider_id column from the encounter table
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Allow Global Properties to be typed
* Add xslt column back to the form table
* Add template column back to the form table
* Add obs.previous_version column (TRUNK-420)
* Rename form_resource table to preserve data; 20111010-1515 reference is for bleeding-edge developers and can be generally ignored
* Creating form_resource table
* Fix all the old void_reason content and add in the new previous_version to the matching obs row (POTENTIALLY VERY SLOW FOR LARGE OBS TABLES)
* Inserting Auto Close Visits Task into 'schedule_task_config' table
* Deleting non-existing roles from the role_role table
* Associating daemon user with a person
* Add the not null person id contraint
* Setting super user gender
* Add unique uuid constraint and attributes inherited from BaseOpenmrsData to the person_merge_log table
* Fix empty descriptions on relationship types
* Change merged_data column type to CLOB in person_merge_log table
* Create clob_datatype_storage table
* Add date_changed column to drug table
* Add changed_by column to drug table
* Increase size of drug name column to 255 characters

End Of Life (EOL) announcement

OpenMRS 1.6 is no longer supported

As of described in /wiki/spaces/RES/pages/26287677, OpenMRS can only support up to three released versions at a time (the current release and then two versions back). With the release of OpenMRS 1.9.0, support is no longer provided by the core Development Team for OpenMRS 1.6.x and earlier. This announcement also serves as advance notice that support will end for OpenMRS 1.7.x, concurrent with the release of OpenMRS 1.10.