@@ -18,6 +18,22 @@ import { HivSummaryService } from "../patient-dashboard/hiv/hiv-summary/hiv-summ
18
18
import { ConceptResourceService } from "../openmrs-api/concept-resource.service" ;
19
19
import { LabOrderPostService } from "./lab-order-post.service" ;
20
20
21
+ interface IdentifierType {
22
+ format : string ;
23
+ formatDescription : string ;
24
+ name : string ;
25
+ uuid : string ;
26
+ validator : string ;
27
+ }
28
+
29
+ interface Identifier {
30
+ identifier : string ;
31
+ identifierType : IdentifierType ;
32
+ preferred : boolean ;
33
+ uuid : string ;
34
+ display ?: string ;
35
+ }
36
+
21
37
@Component ( {
22
38
selector : "lab-order-search-post" ,
23
39
templateUrl : "./lab-order-search-post.component.html" ,
@@ -75,6 +91,8 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
75
91
public selectedSampleType : any ;
76
92
public dateReceived : any = Moment ( new Date ( ) ) . format ( "YYYY-MM-DD" ) ;
77
93
public orderPostSuccessful : boolean ;
94
+ public cccIdentifierType = 'f2d6ff1a-8440-4d35-a150-1d4b5a930c5e' ;
95
+ public heiIdentifierType = 'ead42a8f-203e-4b11-a942-df03a460d617' ;
78
96
79
97
constructor (
80
98
private labOrdersSearchHelperService : LabOrdersSearchHelperService ,
@@ -418,10 +436,33 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
418
436
public processPatientIdentifiers ( ) {
419
437
const identifiers = [ ] ;
420
438
return new Promise ( ( resolve , reject ) => {
421
- _ . each ( this . order . patient . identifiers , ( identifier : any ) => {
422
- this . setDefaultIdentifier ( identifier ) ;
423
- if ( _ . indexOf ( identifier . display , "=" ) > 0 ) {
424
- identifiers . push ( identifier . display . split ( "=" ) [ 1 ] . trim ( ) ) ;
439
+ const patientIdentifiers : Identifier [ ] = this . order . patient . identifiers ;
440
+ let allowedIdentifiers = patientIdentifiers ;
441
+ const hasCccNo = this . hasIdentifier (
442
+ this . cccIdentifierType ,
443
+ patientIdentifiers
444
+ ) ;
445
+ const hasHeiNo = this . hasIdentifier (
446
+ this . heiIdentifierType ,
447
+ patientIdentifiers
448
+ ) ;
449
+ if ( hasCccNo && ! hasHeiNo ) {
450
+ allowedIdentifiers = patientIdentifiers . filter ( ( i : Identifier ) => {
451
+ return i . identifierType . uuid === this . cccIdentifierType ;
452
+ } ) ;
453
+ }
454
+ if ( hasHeiNo && ! hasCccNo ) {
455
+ allowedIdentifiers = patientIdentifiers . filter ( ( i : Identifier ) => {
456
+ return i . identifierType . uuid === this . heiIdentifierType ;
457
+ } ) ;
458
+ }
459
+ const defaultIdentifier : Identifier = this . selectDefaultIdentifier (
460
+ allowedIdentifiers
461
+ ) ;
462
+ this . setDefaultIdentifier ( defaultIdentifier ) ;
463
+ _ . each ( allowedIdentifiers , ( identifier : Identifier ) => {
464
+ if ( _ . indexOf ( identifier . display , '=' ) > 0 ) {
465
+ identifiers . push ( identifier . display . split ( '=' ) [ 1 ] . trim ( ) ) ;
425
466
} else {
426
467
identifiers . push ( identifier . identifier ) ;
427
468
}
@@ -436,10 +477,47 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
436
477
this . reset = true ;
437
478
}
438
479
439
- private setDefaultIdentifier ( identifier : any ) {
440
- if ( identifier . preferred ) {
441
- this . selectedIdentifier = identifier . identifier ;
480
+ public hasIdentifier (
481
+ identifierType : string ,
482
+ patientIdentifiers : Identifier [ ]
483
+ ) : boolean {
484
+ return patientIdentifiers . some ( ( identifier : Identifier ) => {
485
+ return identifier . identifierType . uuid === identifierType ;
486
+ } ) ;
487
+ }
488
+
489
+ private selectDefaultIdentifier ( identifiers : Identifier [ ] ) : Identifier {
490
+ let defaultIdentifier : Identifier ;
491
+ let cccIdentifier : Identifier ;
492
+ let heiIdentifier : Identifier ;
493
+ let prefIdentifier : Identifier ;
494
+
495
+ identifiers . forEach ( ( i : Identifier ) => {
496
+ if ( i . identifierType . uuid === this . cccIdentifierType ) {
497
+ cccIdentifier = i ;
498
+ }
499
+ if ( i . identifierType . uuid === this . heiIdentifierType ) {
500
+ heiIdentifier = i ;
501
+ }
502
+ if ( i . preferred ) {
503
+ prefIdentifier = i ;
504
+ }
505
+ } ) ;
506
+
507
+ if ( cccIdentifier ) {
508
+ defaultIdentifier = cccIdentifier ;
509
+ }
510
+ if ( heiIdentifier ) {
511
+ defaultIdentifier = heiIdentifier ;
512
+ }
513
+ if ( ! cccIdentifier && ! heiIdentifier && prefIdentifier ) {
514
+ defaultIdentifier = prefIdentifier ;
442
515
}
516
+ return defaultIdentifier ;
517
+ }
518
+
519
+ private setDefaultIdentifier ( identifier : Identifier ) : void {
520
+ this . selectedIdentifier = identifier . identifier ;
443
521
}
444
522
445
523
private setDefaultLocation ( ) {
0 commit comments