Skip to content

Commit

Permalink
Restrict post to eid indentifier to ccc no or HEI no for those with one
Browse files Browse the repository at this point in the history
  • Loading branch information
maikofelix47 committed May 19, 2022
1 parent 87e6551 commit c822f02
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 19 deletions.
92 changes: 85 additions & 7 deletions src/app/lab-order-search/lab-order-search-post.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,22 @@ import { HivSummaryService } from "../patient-dashboard/hiv/hiv-summary/hiv-summ
import { ConceptResourceService } from "../openmrs-api/concept-resource.service";
import { LabOrderPostService } from "./lab-order-post.service";

interface IdentifierType {
format: string;
formatDescription: string;
name: string;
uuid: string;
validator: string;
}

interface Identifier {
identifier: string;
identifierType: IdentifierType;
preferred: boolean;
uuid: string;
display?: string;
}

@Component({
selector: "lab-order-search-post",
templateUrl: "./lab-order-search-post.component.html",
Expand Down Expand Up @@ -75,6 +91,8 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
public selectedSampleType: any;
public dateReceived: any = Moment(new Date()).format("YYYY-MM-DD");
public orderPostSuccessful: boolean;
public cccIdentifierType = 'f2d6ff1a-8440-4d35-a150-1d4b5a930c5e';
public heiIdentifierType = 'ead42a8f-203e-4b11-a942-df03a460d617';

constructor(
private labOrdersSearchHelperService: LabOrdersSearchHelperService,
Expand Down Expand Up @@ -418,10 +436,33 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
public processPatientIdentifiers() {
const identifiers = [];
return new Promise((resolve, reject) => {
_.each(this.order.patient.identifiers, (identifier: any) => {
this.setDefaultIdentifier(identifier);
if (_.indexOf(identifier.display, "=") > 0) {
identifiers.push(identifier.display.split("=")[1].trim());
const patientIdentifiers: Identifier[] = this.order.patient.identifiers;
let allowedIdentifiers = patientIdentifiers;
const hasCccNo = this.hasIdentifier(
this.cccIdentifierType,
patientIdentifiers
);
const hasHeiNo = this.hasIdentifier(
this.heiIdentifierType,
patientIdentifiers
);
if (hasCccNo && !hasHeiNo) {
allowedIdentifiers = patientIdentifiers.filter((i: Identifier) => {
return i.identifierType.uuid === this.cccIdentifierType;
});
}
if (hasHeiNo && !hasCccNo) {
allowedIdentifiers = patientIdentifiers.filter((i: Identifier) => {
return i.identifierType.uuid === this.heiIdentifierType;
});
}
const defaultIdentifier: Identifier = this.selectDefaultIdentifier(
allowedIdentifiers
);
this.setDefaultIdentifier(defaultIdentifier);
_.each(allowedIdentifiers, (identifier: Identifier) => {
if (_.indexOf(identifier.display, '=') > 0) {
identifiers.push(identifier.display.split('=')[1].trim());
} else {
identifiers.push(identifier.identifier);
}
Expand All @@ -436,10 +477,47 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
this.reset = true;
}

private setDefaultIdentifier(identifier: any) {
if (identifier.preferred) {
this.selectedIdentifier = identifier.identifier;
public hasIdentifier(
identifierType: string,
patientIdentifiers: Identifier[]
): boolean {
return patientIdentifiers.some((identifier: Identifier) => {
return identifier.identifierType.uuid === identifierType;
});
}

private selectDefaultIdentifier(identifiers: Identifier[]): Identifier {
let defaultIdentifier: Identifier;
let cccIdentifier: Identifier;
let heiIdentifier: Identifier;
let prefIdentifier: Identifier;

identifiers.forEach((i: Identifier) => {
if (i.identifierType.uuid === this.cccIdentifierType) {
cccIdentifier = i;
}
if (i.identifierType.uuid === this.heiIdentifierType) {
heiIdentifier = i;
}
if (i.preferred) {
prefIdentifier = i;
}
});

if (cccIdentifier) {
defaultIdentifier = cccIdentifier;
}
if (heiIdentifier) {
defaultIdentifier = heiIdentifier;
}
if (!cccIdentifier && !heiIdentifier && prefIdentifier) {
defaultIdentifier = prefIdentifier;
}
return defaultIdentifier;
}

private setDefaultIdentifier(identifier: Identifier): void {
this.selectedIdentifier = identifier.identifier;
}

private setDefaultLocation() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,22 @@ import { ClinicLabOrdersResourceService } from "../../../etl-api/clinic-lab-orde
import { ObsResourceService } from "../../../openmrs-api/obs-resource.service";
import { DatePipe } from "@angular/common";

interface IdentifierType {
format: string;
formatDescription: string;
name: string;
uuid: string;
validator: string;
}

interface Identifier {
identifier: string;
identifierType: IdentifierType;
preferred: boolean;
uuid: string;
display?: string;
}

@Component({
selector: "lab-test-orders",
templateUrl: "./lab-test-orders.html",
Expand Down Expand Up @@ -53,6 +69,8 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
public hideDateField = false;
public disableButton = false;
public maxDate = new Date();
public heiIdentifierType = 'ead42a8f-203e-4b11-a942-df03a460d617';
public cccIdentifierType = 'f2d6ff1a-8440-4d35-a150-1d4b5a930c5e';
private _datePipe: DatePipe;

constructor(
Expand Down Expand Up @@ -86,19 +104,28 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
(patient) => {
if (patient) {
this.patient = patient;
const amrsId = _.find(
this.patient.identifiers.openmrsModel,
(identifer: any) => {
if (
identifer.identifierType.uuid ===
"58a4732e-1359-11df-a1f1-0026b9348838"
) {
return true;
}
}
const identifiers = this.patient.identifiers.openmrsModel
? this.patient.identifiers.openmrsModel
: [];
const hasCcc = this.hasIdentifierType(
this.cccIdentifierType,
identifiers
);
const hasHeiNo = this.hasIdentifierType(
this.heiIdentifierType,
identifiers
);
if (amrsId) {
this.patientIdentifer = amrsId.identifier;
if (hasCcc && !hasHeiNo) {
this.patientIdentifer = this.getIdentifierByTypeUuid(
this.cccIdentifierType,
identifiers
).identifier;
}
if (hasHeiNo && !hasCcc) {
this.patientIdentifer = this.getIdentifierByTypeUuid(
this.heiIdentifierType,
identifiers
).identifier;
}
this.getLabOrdersByPatientUuid();
this.getPatientLabOrders();
Expand All @@ -107,6 +134,24 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
);
}

public hasIdentifierType(
identifierTypeUuid: string,
identifiers: Identifier[]
): boolean {
return identifiers.some((i: Identifier) => {
return i.identifierType.uuid === identifierTypeUuid;
});
}

public getIdentifierByTypeUuid(
identifierTypeUuid: string,
identifiers: Identifier[]
): Identifier {
return identifiers.find((i: Identifier) => {
return i.identifierType.uuid === identifierTypeUuid;
});
}

public getPatientLabOrders() {
this.fetchingResults = true;
this.isBusy = true;
Expand Down

0 comments on commit c822f02

Please sign in to comment.