Просмотр исходного кода

/patients-suggest fixes and optimization

Vijayakrishnan Krishnan 2 дней назад
Родитель
Сommit
d427d8f697

+ 52 - 1
app/Http/Controllers/HomeController.php

@@ -1686,6 +1686,12 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
         $originalTerm = $term;
         if (empty($term)) return '';
 
+        // replace comma with space
+        $term = str_replace(',', ' ', $term);
+
+        // special param for phone matching
+        $phoneTerm = preg_replace('/[^a-zA-Z0-9]/', '', $originalTerm);
+
         // if multiple words in query, check for all (max 2)
         $term2 = '';
         if(strpos($term, ' ') !== FALSE) {
@@ -1699,8 +1705,41 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
             $phoneNumberTerm = $term;
         }
 
-        $clientQuery= Client::whereNull('shadow_pro_id');
+        // $clientQuery= Client::whereNull('shadow_pro_id');
+
+        $columns = "c.id, c.uid, c.mcp_pro_id, c.name_display, c.name_first, c.name_last, c.cell_number, c.phone_home, c.client_engagement_status_category, c.dob";
+
+        $termWhere = "AND (
+                  c.name_first ILIKE :term OR c.name_last ILIKE :term OR 
+                  " . (!empty($term2) ? "c.name_first ILIKE :term2 OR c.name_last ILIKE :term2 OR" : "") . "
+                  c.cell_number ILIKE :phoneTerm OR
+                  c.cell_number ILIKE :phoneTermRaw OR
+                  c.phone_home ILIKE :phoneTerm OR
+                  c.phone_home ILIKE :phoneTermRaw OR
+                  c.dob::text ILIKE :phoneTermRaw
+              )";
+
+        $proWhere = "";
+        if(!($pro->pro_type === 'ADMIN' || $pro->can_see_any_client_via_search)) {
+            $myClientIds = $pro->getMyClientIds(true);
+            $myClientIds = implode(',', $myClientIds);
+            if($pro->pro_type === 'ADMIN' || $pro->is_enrolled_as_mcp) {
+                $proWhere = "AND (c.mcp_pro_id IS NULL OR c.id IN ($myClientIds))";
+            }
+            else {
+                $proWhere = "AND c.id IN ($myClientIds)";
+            }
+        }
+
+        $sql = "
+        SELECT $columns FROM client c 
+        WHERE c.shadow_pro_id IS NULL
+              AND c.duplicate_of_client_id IS NULL
+              $termWhere
+              $proWhere
+        ";
 
+        /*
         //Don't show duplicates
         $clientQuery = $clientQuery->whereNull('duplicate_of_client_id');
 
@@ -1732,6 +1771,18 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
         }
 
         $clients = $clientQuery->get();
+        */
+
+        $params = [
+            'term' => '%' . $term . '%',
+            'phoneTerm' => '%' . $phoneTerm . '%',
+            'phoneTermRaw' => '%' . $originalTerm . '%',
+        ];
+        if(!empty($term2)) {
+            $params['term2'] = '%' . $term2 . '%';
+        }
+        $clients = DB::select($sql, $params);
+
         return view('app/patient-suggest', compact('clients'));
     }
 

+ 15 - 4
resources/views/app/patient-suggest.blade.php

@@ -4,10 +4,21 @@
 <?php $activeSet = false; ?>
 @foreach($clients as $client)
     <a class="d-block suggest-item patient-suggest text-nowrap {{ $activeSet ? '' : 'active'  }}"
-       href="" data-target-uid="{{$client->uid}}" {!! $client->mcp ? '' : 'title="Unclaimed Patient"' !!}>
-        <img src="/img/bluecircle.png" alt="Unclaimed Patient" class="mr-1 {{$client->mcp ? 'claimed' : 'unclaimed'}}">
-        {{$client->displayName()}}
-        {!! $client->cell_number ? '<span class="text-sm text-secondary ml-1">(' . $client->cell_number . ')</span>' : '' !!}
+       href="" data-target-uid="{{$client->uid}}" {!! $client->mcp_pro_id ? '' : 'title="Unclaimed Patient"' !!}>
+        <img src="/img/bluecircle.png" alt="Unclaimed Patient" class="mr-1 {{$client->mcp_pro_id ? 'claimed' : 'unclaimed'}}">
+
+        <?php
+        $name = $client->name_last . ', ' . $client->name_first;
+        if($client->client_engagement_status_category == 'DUMMY') {
+            $name .= ' [Test Record]';
+        }
+        if($client->client_engagement_status_category == 'DUPLICATE') {
+            $name .= ' [Duplicate Record]';
+        }
+        ?>
+        {{$name}}
+        {!! $client->cell_number ? '<span class="text-sm text-secondary ml-0"> - ' . $client->cell_number . '</span>' : '' !!}
+        {!! $client->dob ? '<span class="text-sm text-secondary ml-0"> - ' . $client->dob . '</span>' : '' !!}
     </a>
     <?php $activeSet = true; ?>
 @endforeach