diff --git a/ehr/api-src/org/labkey/api/ehr/history/DefaultClinicalRemarksDataSource.java b/ehr/api-src/org/labkey/api/ehr/history/DefaultClinicalRemarksDataSource.java
index dbf242edd..7f5a70afe 100644
--- a/ehr/api-src/org/labkey/api/ehr/history/DefaultClinicalRemarksDataSource.java
+++ b/ehr/api-src/org/labkey/api/ehr/history/DefaultClinicalRemarksDataSource.java
@@ -44,7 +44,12 @@ public DefaultClinicalRemarksDataSource(Module module)
protected String getCategoryText(Results rs) throws SQLException
{
String category = rs.getString("category");
- return (category == null || REPLACED_SOAP.equals(category) || REPLACEMENT_SOAP.equals(category) ? "Clinical" : category) + " Remark";
+
+ FieldKey titleFk = FieldKey.fromString("category/title");
+ if (rs.hasColumn(titleFk))
+ category = rs.getString(titleFk);
+
+ return (category == null || REPLACED_SOAP.equals(category) || REPLACEMENT_SOAP.equals(category) ? "Clinical" : category) + " - Remark";
}
// @Override
diff --git a/ehr/resources/queries/study/blood.query.xml b/ehr/resources/queries/study/blood.query.xml
index 7dd11e98f..aff044512 100644
--- a/ehr/resources/queries/study/blood.query.xml
+++ b/ehr/resources/queries/study/blood.query.xml
@@ -19,11 +19,12 @@
Billed By
false
- true
+ false
ehr_lookups
blood_billed_by
value
+ title
diff --git a/ehr/src/org/labkey/ehr/query/EHRLookupsUserSchema.java b/ehr/src/org/labkey/ehr/query/EHRLookupsUserSchema.java
index e5e86014f..f7f2a0b3f 100644
--- a/ehr/src/org/labkey/ehr/query/EHRLookupsUserSchema.java
+++ b/ehr/src/org/labkey/ehr/query/EHRLookupsUserSchema.java
@@ -29,9 +29,9 @@
import org.labkey.api.data.TableSelector;
import org.labkey.api.ehr.security.EHRDataAdminPermission;
import org.labkey.api.ehr.security.EHRHousingTransferPermission;
-import org.labkey.api.ehr.security.EHRSnomedEditPermission;
import org.labkey.api.ehr.security.EHRLocationEditPermission;
import org.labkey.api.ehr.security.EHRProcedureManagementPermission;
+import org.labkey.api.ehr.security.EHRSnomedEditPermission;
import org.labkey.api.ldk.table.ContainerScopedTable;
import org.labkey.api.query.FieldKey;
import org.labkey.api.query.FilteredTable;
@@ -204,7 +204,7 @@ else if (TABLE_VETERINARIANS.equalsIgnoreCase(name))
return createVeterinariansTable(name, cf);
else if (EHRSchema.TABLE_LOOKUP_SETS.equalsIgnoreCase(name))
{
- ContainerScopedTable ret = new ContainerScopedTable<>(this, createSourceTable(name), cf, "setname");
+ ContainerScopedTable ret = new LookupSetsTable<>(this, createSourceTable(name), cf, "setname");
ret.addPermissionMapping(InsertPermission.class, EHRDataAdminPermission.class);
ret.addPermissionMapping(UpdatePermission.class, EHRDataAdminPermission.class);
ret.addPermissionMapping(DeletePermission.class, EHRDataAdminPermission.class);
diff --git a/ehr/src/org/labkey/ehr/query/LookupSetsTable.java b/ehr/src/org/labkey/ehr/query/LookupSetsTable.java
new file mode 100644
index 000000000..c31061065
--- /dev/null
+++ b/ehr/src/org/labkey/ehr/query/LookupSetsTable.java
@@ -0,0 +1,65 @@
+package org.labkey.ehr.query;
+
+import org.labkey.api.data.Container;
+import org.labkey.api.data.ContainerFilter;
+import org.labkey.api.data.TableInfo;
+import org.labkey.api.ldk.table.ContainerScopedTable;
+import org.labkey.api.query.BatchValidationException;
+import org.labkey.api.query.InvalidKeyException;
+import org.labkey.api.query.QueryUpdateService;
+import org.labkey.api.query.QueryUpdateServiceException;
+import org.labkey.api.query.SimpleUserSchema;
+import org.labkey.api.query.UserSchema;
+import org.labkey.api.security.User;
+import org.labkey.ehr.dataentry.DataEntryManager;
+
+import java.sql.SQLException;
+import java.util.Map;
+
+/**
+ * This TableInfo is for the actual ehr.lookupsets table. It is not a duplicate of LookupSetTable which
+ * is for the virtual tables created from the data in ehr.lookupsets.
+ */
+public class LookupSetsTable extends ContainerScopedTable
+{
+ public LookupSetsTable(SchemaType schema, TableInfo st, ContainerFilter cf, String newPk)
+ {
+ super(schema, st, cf, newPk);
+ }
+
+ @Override
+ public QueryUpdateService getUpdateService()
+ {
+ return new UpdateService(this);
+ }
+
+ private class UpdateService extends ContainerScopedTable.UpdateService
+ {
+ public UpdateService(SimpleUserSchema.SimpleTable ti)
+ {
+ super(ti);
+ }
+
+ @Override
+ protected void afterInsertUpdate(int count, BatchValidationException errors)
+ {
+ DataEntryManager.get().getCache().clear();
+ }
+
+ @Override
+ protected Map deleteRow(User user, Container container, Map oldRowMap) throws QueryUpdateServiceException, SQLException, InvalidKeyException
+ {
+ Map row = super.deleteRow(user, container, oldRowMap);
+ DataEntryManager.get().getCache().clear();
+ return row;
+ }
+
+ @Override
+ protected int truncateRows(User user, Container container) throws QueryUpdateServiceException, SQLException
+ {
+ int i = super.truncateRows(user, container);
+ DataEntryManager.get().getCache().clear();
+ return i;
+ }
+ }
+}