Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track progress of fhir task status #50

Merged
merged 4 commits into from
Sep 11, 2024
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.hl7.fhir.r4.model.Task;
import org.hl7.fhir.r4.model.codesystems.TaskStatus;
import org.openmrs.Order;
import org.openmrs.Order.FulfillerStatus;
import org.openmrs.api.OrderService;
import org.openmrs.module.fhir2.FhirConstants;
import org.openmrs.module.fhir2.api.FhirDiagnosticReportService;
Expand Down Expand Up @@ -119,13 +120,20 @@ public void execute() {
lastRequstDate = dateFormat.format(lastRequest.getRequestDate());
}

String practitionerId = config.getLisUserUuid();

String currentTime = dateFormat.format(newDate);
DateRangeParam lastUpdated = new DateRangeParam().setLowerBound(lastRequstDate).setUpperBound(currentTime);

// Get List of Tasks that belong to this instance and update them
Bundle taskBundle = client.search().forResource(Task.class)
.where(Task.IDENTIFIER.hasSystemWithAnyCode(FhirConstants.OPENMRS_FHIR_EXT_TASK_IDENTIFIER))
.where(Task.STATUS.exactly().code(TaskStatus.COMPLETED.toCode())).lastUpdated(lastUpdated)
.where(Task.OWNER.hasId(practitionerId))
.where(Task.STATUS.exactly().codes(
TaskStatus.COMPLETED.toCode(),
TaskStatus.ACCEPTED.toCode(),
TaskStatus.REJECTED.toCode(),
TaskStatus.CANCELLED.toCode())).lastUpdated(lastUpdated)
.returnBundle(Bundle.class).execute();

List<Bundle> taskBundles = new ArrayList<>();
Expand Down Expand Up @@ -158,6 +166,7 @@ public void shutdown() {

private Boolean updateTasksInBundle(List<Bundle> taskBundles) {
Boolean tasksUpdated = false;
String commentText = "Update Order with remote fhir status :)";
for (Bundle bundle : taskBundles) {
for (Iterator tasks = bundle.getEntry().iterator(); tasks.hasNext();) {
String openmrsTaskUuid = null;
Expand All @@ -172,19 +181,42 @@ private Boolean updateTasksInBundle(List<Bundle> taskBundles) {
// Only update if matching OpenMRS Task found
if (openmrsTask != null) {
// Handle status
openmrsTask.setStatus(openelisTask.getStatus());
if (openelisTask.getStatus().toString().equals(TaskStatus.COMPLETED.toString())) {

openmrsTask.setStatus(openelisTask.getStatus());

Boolean taskOutPutUpdated = false;
if(openmrsTask.hasBasedOn()){
setOrderNumberFromLIS(openmrsTask.getBasedOn());
Boolean taskOutPutUpdated = false;
if(openmrsTask.hasBasedOn()){
setOrderNumberFromLIS(openmrsTask.getBasedOn());
}
if (openelisTask.hasOutput()) {
// openmrsTask.setOutput(openelisTask.getOutput());
taskOutPutUpdated = updateOutput(openelisTask.getOutput(), openmrsTask);
}
if (taskOutPutUpdated) {
taskService.update(openmrsTaskUuid, openmrsTask);
tasksUpdated = taskOutPutUpdated;
}
}

if(openelisTask.getStatus().toString().equals(TaskStatus.REJECTED.toString()) ){
openmrsTask.setStatus(openelisTask.getStatus());
commentText = openelisTask.getStatusReason().getText().toString().isEmpty() ? commentText: openelisTask.getStatusReason().getText();
setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.EXCEPTION, commentText);
tasksUpdated = true;
}
if (openelisTask.hasOutput()) {
// openmrsTask.setOutput(openelisTask.getOutput());
taskOutPutUpdated = updateOutput(openelisTask.getOutput(), openmrsTask);

if(openelisTask.getStatus().toString().equals(TaskStatus.CANCELLED.toString()) ){
openmrsTask.setStatus(openelisTask.getStatus());
commentText = TaskStatus.CANCELLED.toString();
setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.EXCEPTION, commentText);
tasksUpdated = true;
}
if (taskOutPutUpdated) {
taskService.update(openmrsTaskUuid, openmrsTask);
tasksUpdated = taskOutPutUpdated;

if( openelisTask.getStatus().toString().equals(TaskStatus.ACCEPTED.toString()) ){
openmrsTask.setStatus(openelisTask.getStatus());
setOrderStatus(openmrsTask.getBasedOn(), openelisTask.getStatus().toCode(), Order.FulfillerStatus.IN_PROGRESS, commentText);
tasksUpdated = true;
}
}
}
Expand All @@ -210,7 +242,7 @@ private void setOrderNumberFromLIS(List<Reference> basedOn) {
if (order != null) {
String commentText = "Update Order with Accesion Number From LIS";
String accessionNumber = serviceRequest.getRequisition().getValue();
orderService.updateOrderFulfillerStatus(order, Order.FulfillerStatus.IN_PROGRESS,
orderService.updateOrderFulfillerStatus(order, Order.FulfillerStatus.COMPLETED,
commentText, accessionNumber);
}
}
Expand Down Expand Up @@ -285,6 +317,30 @@ private Boolean updateOutput(List<Task.TaskOutputComponent> output, Task openmrs
}
return taskOutPutUpdated;
}
private void setOrderStatus(List<Reference> basedOn, String string, FulfillerStatus fulfillerStatus, String commentText) {
basedOn.forEach(ref -> {
if (ref.hasReferenceElement()) {
IIdType referenceElement = ref.getReferenceElement();
if ("ServiceRequest".equals(referenceElement.getResourceType())) {
String serviceRequestUuid = referenceElement.getIdPart();
try {

Order order = orderService.getOrderByUuid(serviceRequestUuid);
if (order != null) {
String accessionNumber = "";
orderService.updateOrderFulfillerStatus(order, fulfillerStatus,
commentText, accessionNumber);
}

}
catch (ResourceNotFoundException e) {
log.error(
"Could not Fetch ServiceRequest/" + serviceRequestUuid + ":" + e.toString() + getStackTrace(e));
}
}
}
});
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Expand Down
Loading