Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions snprc_ehr/resources/queries/study/demographicsCurLocation.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,11 @@ SELECT d2.id,
coalesce(d2.cage, '') AS cage_order,
d2.cage_sortValue @hidden
FROM study.housing d2
INNER JOIN (SELECT d3.id, MAX(d3.date) AS maxDate
FROM study.housing d3
WHERE d3.enddate IS NULL
AND d3.qcstate.publicdata = true
GROUP BY d3.id) latest
ON d2.id = latest.id AND d2.date = latest.maxDate
WHERE d2.enddate IS NULL
AND d2.qcstate.publicdata = true;
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ static SNPRC_schedulerService get()
}

List<JSONObject> getActiveTimelines(Container c, User u, String ProjectObjectId, BatchValidationException errors);
List<JSONObject> getScheduledTimelinesForSpecies(Container c, User u, String species, Date date, BatchValidationException errors);
List<JSONObject> getScheduledTimelinesForSpecies(Container c, User u, String species, Date date, String qcState, BatchValidationException errors);
List<Map<String, Object>> getActiveProjects(Container c, User u, ArrayList<SimpleFilter> filters, Boolean activeProjectItemsOnly, Date eventDate);
JSONObject saveTimelineData(Container c, User u, JSONObject json, BatchValidationException errors);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,14 @@ public ApiResponse execute(SimpleApiJsonForm form, BindException errors)
{
species = url.getParameter("species");
dateString = url.getParameter("date");
String qcState = url.getParameter("qcState");

// assume current date if date is not passed in
date = (dateString == null ? new Date() : DateUtil.parseDateTime(dateString, Timeline.TIMELINE_DATE_FORMAT));
if (species != null && date != null)
{
timelines = SNPRC_schedulerService.get().getScheduledTimelinesForSpecies(getContainer(), getUser(),
species, date, new BatchValidationException());
species, date, qcState, new BatchValidationException());

props.put("success", true);
props.put("rows", timelines);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,15 @@
import org.labkey.snprc_scheduler.domains.TimelineAnimalJunction;
import org.labkey.snprc_scheduler.domains.TimelineItem;
import org.labkey.snprc_scheduler.domains.TimelineProjectItem;
import org.labkey.snprc_scheduler.security.QCStateEnum;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

/**
* Created by thawkins on 10/21/2018
*/
Expand Down Expand Up @@ -87,37 +90,59 @@ public List<JSONObject> getActiveTimelines(Container c, User u, String projectOb
}


//TODO: need to add scheduleDate criteria
/**
* Retrieves timelines for a given species that have procedures scheduled on a specific date.
* Optionally filters by QC state.
*
* @param c = Container object
* @param u = User object
* @param species = species identifier to filter timelines
* @param date = schedule date to match against timeline items
* @param qcState = optional QC state name to further filter timelines
* @param errors = exception object for collecting validation errors
* @return list of timeline JSON objects matching the criteria
*/
@Override
public List<JSONObject> getScheduledTimelinesForSpecies(Container c, User u, String species, Date date, BatchValidationException errors) throws ApiUsageException
public List<JSONObject> getScheduledTimelinesForSpecies(Container c, User u, String species, Date date, String qcState, BatchValidationException errors) throws ApiUsageException
{
List<JSONObject> timelinesJson = new ArrayList<>();
try
{
SNPRC_schedulerUserSchema schema = SNPRC_schedulerManager.getSNPRC_schedulerUserSchema(c, u);
TableInfo timelineTable = schema.getTable(SNPRC_schedulerSchema.TABLE_NAME_TIMELINE, schema.getDefaultContainerFilter(), false, false);

// only return timelines with procedures scheduled on specified date
// Query for timeline ObjectIds that have items scheduled on the given date
SQLFragment sql = new SQLFragment();
sql.append("SELECT DISTINCT t." + Timeline.TIMELINE_OBJECTID);
sql.append(" FROM ");
sql.append(SNPRC_schedulerSchema.getInstance().getTableInfoTimeline(), "t");
sql.append(" JOIN ");
sql.append(SNPRC_schedulerSchema.getInstance().getTableInfoTimelineItem(), "ti");
sql.append(" ON t." + Timeline.TIMELINE_OBJECTID + " = ti." + TimelineItem.TIMELINEITEM_TIMELINE_OBJECT_ID);
sql.append(" WHERE " + "ti." + TimelineItem.TIMELINEITEM_SCHEDULE_DATE + " = ?" ).add(date);
sql.append(" WHERE ti." + TimelineItem.TIMELINEITEM_SCHEDULE_DATE + " = ?").add(date);

SqlSelector selector = new SqlSelector(SNPRC_schedulerSchema.getInstance().getSchema(), sql);

List<String> objectIds = new ArrayList<>();
selector.forEachMap(row -> objectIds.add( (String) row.get(Timeline.TIMELINE_OBJECTID)));

//SimpleFilter filter = new SimpleFilter(FieldKey.fromParts(Timeline.TIMELINE_SPECIES, "referenceId", "species"), species, CompareType.EQUAL);
// Build filter for species, matching ObjectIds, and optional QC state
SimpleFilter filter = new SimpleFilter(FieldKey.fromParts("sndProject", "referenceId", "species"), species, CompareType.EQUAL);
filter.addInClause(FieldKey.fromParts(Timeline.TIMELINE_OBJECTID), objectIds );
filter.addInClause(FieldKey.fromParts(Timeline.TIMELINE_OBJECTID), objectIds);

if (isNotBlank(qcState))
{
Integer qcStateId = QCStateEnum.getQCStateEnumId(c, u,
QCStateEnum.getQCStateEnumByName(qcState));
if (qcStateId != null)
{
filter.addCondition(FieldKey.fromParts(Timeline.TIMELINE_QCSTATE), qcStateId, CompareType.EQUAL);
}
}

List<Timeline> timelines = new TableSelector(timelineTable, filter, null).getArrayList(Timeline.class);

// Populate nested collections for each timeline and convert to JSON
for (Timeline timeline : timelines)
{
timeline.setTimelineItems(SNPRC_schedulerManager.get().getTimelineItems(c, u, timeline.getObjectId(), date));
Expand Down