November 8, 2011
What's New
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
A huge thanks to the 55 people that contributed code to this release: abbas, amala, asgoyal, ashishmittal, rubailly, ajanthan, gbalaji, bwolfe, bcstrick, duality72, cliff.mcintosh, corey.sobel, dkayiwa, djazayeri, bisanthe, gbathla, gauravpaliwal, gobi, goutham, grwarren, deuts20h, harsha, arbaughj, jeffrey.leegon, jkeiper, jwmajors81, jportela, jtellez, lara.kellett, gmario, mogoodrich, mblanchette, mseaton, nribeka, peichenauer, raff, arahulkmit, r.friedman, sapna, sunbiz, scottmuc, shanakaf, sneha, suho, sjmckee, stuartgunter, suneeth, surangak, tmdugan, cta, tabdelmaguid, upul, wyclif, zabilcm, zubair
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: pbiondich, mdowney
We welcome any user to download OpenMRS 1.9 Alpha and try it out, give us feedback, and potentially bug reports on this release. We especially ask current users to try this version out on their own database and with their custom modules.
If you are the lead developer of a module, then you should test out your module against this 1.9 alpha, so if you need to make any changes, you can do so well before the final release.
Even if you don't have time to do any thorough testing, we'd really appreciate it if you can upgrade a copy of your database to the 1.9 data model, and report on any errors than may occur in the upgrade script.
If a new bug is found, send an email to one of the mailing lists or create a new JIRA ticket (click upper right icon).
We do not recommend using this in a production environment!
Download
OpenMRS 1.9.0 Alpha represents version 1.9.0.24245 http://openmrs.org
Download OpenMRS 1.9 Alpha
Bundled Modules
These modules are bundled with the 1.9 alpha openmrs.war download. They will be started automatically.
- Logic 0.5
- HTML Form Entry 1.7.3
- Reporting 0.6.2
- HTML Widgets 1.5.7.1
- Reporting Compatibility 1.5.4.1
- Serialization.xstream 0.2.5
- Xforms 4.0.8
User Interface Changes
- The Manage Settings (formerly Global Properties from platform 1.8 downwards) link has been changed into Settings where the settings (formerly global properties from platform 1.8 downwards) 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.
Non-Backwards-Compatible Changes for Developers
Developers take note: unfortunately 1.9 includes a few non-backwards-compatible changes from 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.
Changelog
Database
* (Fixed)Modified edit_privilege to correct column size
* (Fixed)Add a table to enable generic storage of serialized objects
* (Fixed)users.retired to BOOLEAN
* (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_map table(For MySQL)
* Creating concept reference terms from existing rows in the concept_map table(For all databases except MySQL)
* Copying concept_map_id column to concept_reference_map.concept_reference_term_id column
* 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
* Creating provider_attribute_type table
* Refactoring provider_attribute_type table (devs only)
* Creating provider_attribute table
* Creating encounter_role table
* Creating encounter_provider table
* 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)
* 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)
Bugs
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 |
New Features