Skip to content

Commit

Permalink
Add careSetting property to Order class - TRUNK-4156
Browse files Browse the repository at this point in the history
TRUNK-4156-redesign. Introduce care_setting table
1. Introduce new care_setting table.
2. Replace existing care_setting varchar to care_setting_id referencing the care_setting table.
3. Make OUTPATIENT as default care_setting for existing orders that do not have a care_setting.
4. Introduce new method in OrderService. This fixes a test and provides a way to retrieve a care setting.

Minor documentation fix

TRUNK-4156 - Changes based on comments.

Made some changes as a follow up in update file - TRUNK-4156

Fixed test data, order and caresetting hbm files - TRUNK-4156
  • Loading branch information
Vinay Venu authored and wluyima committed Jan 8, 2014
1 parent 7ab4014 commit 3863412
Show file tree
Hide file tree
Showing 18 changed files with 256 additions and 47 deletions.
47 changes: 31 additions & 16 deletions api/src/main/java/org/openmrs/CareSetting.java
Expand Up @@ -13,36 +13,51 @@
*/
package org.openmrs;

public class CareSetting implements java.io.Serializable {
/**
* @since 1.10
*/
public class CareSetting extends BaseOpenmrsMetadata implements java.io.Serializable {

private static final String OUT_PATIENT = "OUTPATIENT";
public enum CareSettingType {
OUTPATIENT, INPATIENT
}

private static final String IN_PATIENT = "INPATIENT";
private Integer careSettingId;

public static CareSetting OUTPATIENT = new CareSetting(OUT_PATIENT);
private CareSettingType careSettingType;

public CareSetting() {
}

public static CareSetting INPATIENT = new CareSetting(IN_PATIENT);
public CareSetting(String name, String description, CareSettingType careSettingType) {
setName(name);
setDescription(description);
setCareSettingType(careSettingType);
}

private String careSetting;
public Integer getCareSettingId() {
return careSettingId;
}

public CareSetting() {
this.careSetting = OUT_PATIENT;
public void setCareSettingId(Integer careSettingId) {
this.careSettingId = careSettingId;
}

public CareSetting(String careSetting) {
this.careSetting = careSetting;
public CareSettingType getCareSettingType() {
return careSettingType;
}

public String getCareSetting() {
return careSetting;
public void setCareSettingType(CareSettingType careSettingType) {
this.careSettingType = careSettingType;
}

public void setCareSetting(String careSetting) {
this.careSetting = careSetting;
@Override
public Integer getId() {
return getCareSettingId();
}

@Override
public String toString() {
return careSetting;
public void setId(Integer id) {
setCareSettingId(id);
}
}
10 changes: 9 additions & 1 deletion api/src/main/java/org/openmrs/api/OrderService.java
Expand Up @@ -179,7 +179,7 @@ public <Ord extends Order> List<Ord> getOrders(Class<Ord> orderClassType, List<P
public Long getNextOrderNumberSeedSequenceValue();

/**
* Gets the order matching the specified order number and its previous orders in the
* Gets the order matching the specified order number and its previous orders in the
* ordering they occurred, i.e if this order has a previous order,
* fetch it and if it also has a previous order then fetch it until
* the original one with no previous order is reached
Expand All @@ -203,4 +203,12 @@ public <Ord extends Order> List<Ord> getOrders(Class<Ord> orderClassType, List<P
*/
public <Ord extends Order> List<Ord> getActiveOrders(Patient patient, Class<Ord> orderClass, CareSetting careSetting,
Boolean includeVoided);

/** Retrieve care setting by type
*
* @param careSettingId
* @return the care setting
* @since 1.10
*/
public CareSetting getCareSetting(Integer careSettingId);
}
8 changes: 8 additions & 0 deletions api/src/main/java/org/openmrs/api/db/OrderDAO.java
Expand Up @@ -88,4 +88,12 @@ public <Ord extends Order> List<Ord> getOrders(Class<Ord> orderClassType, List<P
*/
public <Ord extends Order> List<Ord> getActiveOrders(Patient patient, Class<Ord> orderClass, CareSetting careSetting,
Boolean includeVoided);

/**
* Get care setting by type
*
* @param careSettingId
* @return the care setting type
*/
public CareSetting getCareSetting(Integer careSettingId);
}
Expand Up @@ -210,4 +210,12 @@ public <Ord extends Order> List<Ord> getActiveOrders(Patient patient, Class<Ord>

return crit.list();
}

/**
* @see org.openmrs.api.db.OrderDAO#getCareSetting(Integer)
*/
@Override
public CareSetting getCareSetting(Integer careSettingId) {
return (CareSetting) sessionFactory.getCurrentSession().get(CareSetting.class, careSettingId);
}
}
8 changes: 8 additions & 0 deletions api/src/main/java/org/openmrs/api/impl/OrderServiceImpl.java
Expand Up @@ -248,4 +248,12 @@ public <Ord extends Order> List<Ord> getActiveOrders(Patient patient, Class<Ord>
Boolean includeVoided) {
return dao.getActiveOrders(patient, orderClass, careSetting, includeVoided);
}

/**
* @see org.openmrs.api.OrderService#getCareSetting(Integer)
*/
@Override
public CareSetting getCareSetting(Integer careSettingId) {
return dao.getCareSetting(careSettingId);
}
}
1 change: 1 addition & 0 deletions api/src/main/resources/hibernate.cfg.xml
Expand Up @@ -71,6 +71,7 @@
<mapping resource="org/openmrs/api/db/hibernate/Relationship.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/RelationshipType.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/Order.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/CareSetting.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/Location.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/LocationTag.hbm.xml" />
<mapping resource="org/openmrs/api/db/hibernate/LocationAttributeType.hbm.xml" />
Expand Down
117 changes: 117 additions & 0 deletions api/src/main/resources/liquibase-update-to-latest.xml
Expand Up @@ -6806,4 +6806,121 @@
<dropColumn tableName="orders" columnName="discontinued_by" />
</changeSet>

<changeSet id="201312271822-TRUNK-4156" author="vinay">
<preConditions onFail="MARK_RAN">
<not><tableExists tableName="care_setting"/></not>
</preConditions>
<comment>Adding care_setting table</comment>
<createTable tableName="care_setting">
<column name="care_setting_id" type="int(11)" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false" />
</column>
<column name="description" type="varchar(255)"></column>
<column name="care_setting_type" type="varchar(50)">
<constraints nullable="false" />
</column>
<column name="creator" type="int(11)" >
<constraints nullable="false" />
</column>
<column name="date_created" type="datetime" >
<constraints nullable="false"/>
</column>
<column name="retired" type="tinyint" defaultValueNumeric="0">
<constraints nullable="false"/>
</column>
<column name="retired_by" type="int(11)" />
<column name="date_retired" type="datetime" />
<column name="retired_reason" type="varchar(255)" defaultValue="null"/>
<column name="uuid" type="char(38)">
<constraints nullable="false"/>
</column>
</createTable>

<addForeignKeyConstraint constraintName="care_setting_creator"
baseTableName="care_setting" baseColumnNames="creator"
referencedTableName="users" referencedColumnNames="user_id"/>
<addForeignKeyConstraint constraintName="care_setting_retired_by"
baseTableName="care_setting" baseColumnNames="retired_by"
referencedTableName="users" referencedColumnNames="user_id"/>
</changeSet>

<changeSet id="201312271823-TRUNK-4156" author="vinay">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM care_setting where care_setting_type = 'OUTPATIENT'
</sqlCheck>
</preConditions>
<comment>Adding OUTPATIENT care setting</comment>
<insert tableName="care_setting">
<column name="name" value="Outpatient"/>
<column name="description" value="Out-patient care setting"/>
<column name="care_setting_type" value="OUTPATIENT"/>
<column name="creator" valueNumeric="1"/>
<column name="date_created" valueDate="2013-12-27T00:00:00"/>
<column name="uuid" value="6f0c9a92-6f24-11e3-af88-005056821db0"/>
</insert>
</changeSet>

<changeSet id="201312271824-TRUNK-4156" author="vinay">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM care_setting where care_setting_type = 'INPATIENT'
</sqlCheck>
</preConditions>
<comment>Adding INPATIENT care setting</comment>
<insert tableName="care_setting">
<column name="name" value="Inpatient"/>
<column name="description" value="In-patient care setting"/>
<column name="care_setting_type" value="INPATIENT"/>
<column name="creator" valueNumeric="1"/>
<column name="date_created" valueDate="2013-12-27T00:00:00"/>
<column name="uuid" value="6f0c9a92-6f24-11e3-af88-005056821db0"/>

This comment has been minimized.

Copy link
@dkayiwa

dkayiwa Apr 11, 2014

Member

Are we intentionally having the same uuid for the in patient and out patient care settings?

This comment has been minimized.

Copy link
@wluyima

wluyima Apr 11, 2014

Member

This is wrong and i have just noticed we are missing a unique key constraint on the uuid column, i will fix this

</insert>
</changeSet>

<changeSet id="201312271826-TRUNK-4156" author="vinay">
<preConditions onFail="MARK_RAN">
<not><columnExists tableName="orders" columnName="care_setting"/></not>
</preConditions>
<comment>Add care_setting column to orders table</comment>
<addColumn tableName="orders">
<column name="care_setting" type="int(11)"/>
</addColumn>
</changeSet>

<changeSet id="201312271827-TRUNK-4156" author="vinay">
<preConditions>
<not>
<sqlCheck expectedResult="0">
SELECT * FROM orders WHERE care_setting IS NULL
</sqlCheck>
</not>
</preConditions>
<comment>Set default value for orders.care_setting column for existing rows</comment>
<sql splitStatements="false">
<![CDATA[
update orders set care_setting = (select care_setting_id from care_setting where care_setting_type = 'OUTPATIENT' limit 1)
where care_setting is null;
]]>
</sql>
</changeSet>

<changeSet id="201312271828-TRUNK-4156" author="vinay">
<comment>Make care_setting column non-nullable</comment>
<addNotNullConstraint tableName="orders" columnName="care_setting" columnDataType="int(11)"/>
</changeSet>


<changeSet id="201312271829-TRUNK-4156" author="vinay">
<preConditions onFail="MARK_RAN">
<not><foreignKeyConstraintExists foreignKeyName="orders_care_setting"/></not>
</preConditions>
<comment>Add foreign key constraint</comment>
<addForeignKeyConstraint constraintName="orders_care_setting"
baseTableName="orders" baseColumnNames="care_setting"
referencedTableName="care_setting" referencedColumnNames="care_setting_id"/>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,41 @@
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

<class name="org.openmrs.CareSetting" table="care_setting">

<id name="careSettingId" type="java.lang.Integer" column="care_setting_id" unsaved-value="0">
<generator class="native">
<param name="sequence">care_setting_care_setting_id_seq</param>
</generator>
</id>

<property name="careSettingType" column="care_setting_type" length="50" not-null="true">
<type name="org.openmrs.util.HibernateEnumType">
<param name="enumClassName">org.openmrs.CareSetting$CareSettingType</param>
</type>
</property>

<property name="name" type="java.lang.String"
not-null="true" length="255" />
<property name="description" type="java.lang.String"
not-null="true" length="255" />
<property name="dateCreated" type="java.util.Date"
column="date_created" not-null="true" length="19" />
<many-to-one name="creator" class="org.openmrs.User"
not-null="true" />
<property name="uuid" type="java.lang.String"
column="uuid" length="38" unique="true" />
<many-to-one name="retiredBy" class="org.openmrs.User"
column="retired_by" />
<property name="dateRetired" type="java.util.Date"
column="date_retired" length="19" />
<property name="retireReason" type="java.lang.String"
column="retire_reason" length="255" />
<property name="retired" type="boolean"
length="1" not-null="true" />

</class>
</hibernate-mapping>
Expand Up @@ -41,11 +41,9 @@
</type>
</property>

<!-- If more attributes are required for care settings, this can potentially
be moved out to a separate table later -->
<component name="careSetting" class="org.openmrs.CareSetting">
<property name="careSetting" column="care_setting" length="50" not-null="true"/>
</component>
<many-to-one name="careSetting" class="org.openmrs.CareSetting" not-null="true">
<column name="care_setting"/>
</many-to-one>

<!-- bi-directional many-to-one association to Order -->
<many-to-one name="previousOrder" class="org.openmrs.Order">
Expand Down
3 changes: 2 additions & 1 deletion api/src/test/java/org/openmrs/api/EncounterServiceTest.java
Expand Up @@ -499,7 +499,8 @@ public void saveEncounter_shouldNotOverwriteObsAndOrdersCreatorOrDateCreated() t

order.setDateCreated(date);
order.setCreator(creator);
order.setCareSetting(CareSetting.OUTPATIENT);

order.setCareSetting(Context.getOrderService().getCareSetting(1));
encounter.addOrder(order);

// make sure the logged in user isn't the user we're testing with
Expand Down
5 changes: 3 additions & 2 deletions api/src/test/java/org/openmrs/api/OrderServiceTest.java
Expand Up @@ -241,7 +241,8 @@ public void getOrderHistoryByOrderNumber_shouldReturnAllOrderHistoryForGivenOrde
public void getActiveOrders_shouldReturnAllOrderHistoryForGivenPatientParameters() throws Exception {
executeDataSet(DRUG_ORDERS_DATASET_XML);
Patient patient = Context.getPatientService().getPatient(2);
List<DrugOrder> orders = Context.getOrderService().getActiveOrders(patient, DrugOrder.class, new CareSetting(),
OrderService os = Context.getOrderService();
List<DrugOrder> orders = Context.getOrderService().getActiveOrders(patient, DrugOrder.class, os.getCareSetting(1),
false);
Assert.assertEquals(4, orders.size());

Expand All @@ -251,7 +252,7 @@ public void getActiveOrders_shouldReturnAllOrderHistoryForGivenPatientParameters
Assert.assertTrue(isOrderActive(orders.get(3)));

//we should not have any in patients;
orders = Context.getOrderService().getActiveOrders(patient, DrugOrder.class, CareSetting.INPATIENT, false);
orders = Context.getOrderService().getActiveOrders(patient, DrugOrder.class, os.getCareSetting(2), false);
Assert.assertEquals(0, orders.size());
}

Expand Down
Expand Up @@ -800,9 +800,9 @@
<user_role user_id="8" role="System Developer"/>
<user_role user_id="16461" role="System Developer"/>
<user_role user_id="18804" role="System Developer"/>
<orders order_id="13031" order_number="13031" urgency="ROUTINE" concept_id="9" orderer="8" encounter_id="86653" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:40:50.0" voided="false" patient_id="13731" accession_number="354" order_action="NEW" care_setting="OUTPATIENT"/>
<orders order_id="13032" order_number="13032" urgency="ROUTINE" concept_id="9" orderer="8" encounter_id="86654" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:41:30.0" voided="false" patient_id="13731" accession_number="423" order_action="NEW" care_setting="OUTPATIENT"/>
<orders order_id="13033" order_number="13033" urgency="ROUTINE" concept_id="1019" orderer="8" encounter_id="86655" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:45:50.0" voided="false" patient_id="13731" accession_number="566" order_action="NEW" care_setting="OUTPATIENT"/>
<orders order_id="13031" order_number="13031" urgency="ROUTINE" concept_id="9" orderer="8" encounter_id="86653" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:40:50.0" voided="false" patient_id="13731" accession_number="354" order_action="NEW" care_setting="1"/>
<orders order_id="13032" order_number="13032" urgency="ROUTINE" concept_id="9" orderer="8" encounter_id="86654" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:41:30.0" voided="false" patient_id="13731" accession_number="423" order_action="NEW" care_setting="1"/>
<orders order_id="13033" order_number="13033" urgency="ROUTINE" concept_id="1019" orderer="8" encounter_id="86655" start_date="2009-02-14 00:00:00.0" creator="8" date_created="2009-02-15 20:45:50.0" voided="false" patient_id="13731" accession_number="566" order_action="NEW" care_setting="1"/>
<encounter encounter_id="20808" encounter_type="2" patient_id="7" location_id="26" form_id="28" encounter_datetime="2006-12-07 00:00:00.0" creator="1959" date_created="2006-12-07 16:09:18.0" voided="false" uuid="4a903934-26fe-102b-80cb-0017a47871b2"/>
<encounter encounter_id="14943" encounter_type="2" patient_id="14493" location_id="26" form_id="1" encounter_datetime="2006-05-30 00:00:00.0" creator="1138" date_created="2006-09-08 00:00:00.0" voided="false" uuid="49c5cc24-26fe-102b-80cb-0017a47871b2"/>
<encounter encounter_id="20807" encounter_type="2" patient_id="20447" location_id="26" form_id="28" encounter_datetime="2006-12-07 00:00:00.0" creator="1959" date_created="2006-12-07 16:09:18.0" voided="false" uuid="4a903234-26fe-102b-80cb-0017a47871b2"/>
Expand Down

0 comments on commit 3863412

Please sign in to comment.