Kaynağa Gözat

added number of measurements filter

= 3 yıl önce
ebeveyn
işleme
fa46df0988

+ 34 - 0
app/Http/Controllers/AdminController.php

@@ -108,6 +108,40 @@ class AdminController extends Controller
         $this->filterMultiQuery($request, $patients, 'most_recent_weight_at', 'last_weighed_in_category', 'last_weighed_in_value_1', 'last_weighed_in_value_2');
         $this->filterMultiQuery($request, $patients, 'most_recent_bp_at', 'last_bp_category', 'last_bp_value_1', 'last_bp_value_2');
 
+        if($request->input('number_of_measurements')){
+            $keyName = $request->input('number_of_measurements');
+            $measurementCountQuery = '(SELECT COUNT(*) FROM measurement WHERE measurement.client_id = client.id AND is_active IS TRUE AND is_cellular IS TRUE AND is_cellular_zero IS NOT TRUE)';
+            switch($keyName) {
+                case 'EXACTLY':
+                    if($request->input('number_of_measurements_value_1')) {
+                        $patients->whereRaw($measurementCountQuery . '='.$request->input('number_of_measurements_value_1'));
+                    }
+                    break;
+                case 'LESS_THAN':
+                    if($request->input('number_of_measurements_value_1')) {
+                        $patients->whereRaw($measurementCountQuery . '<='.$request->input('number_of_measurements_value_1'));
+                    }
+                    break;
+                case 'GREATER_THAN':
+                    if($request->input('number_of_measurements_value_1')) {
+                        $patients->whereRaw($measurementCountQuery . '>='.$request->input('number_of_measurements_value_1'));
+                    }
+                    break;
+                case 'BETWEEN':
+                    if($request->input('number_of_measurements_value_1') && $request->input('number_of_measurements_value_2')) { 
+                        $patients->whereRaw($measurementCountQuery.'>='.$request->input('number_of_measurements_value_1') .' AND '. $measurementCountQuery . '<='.$request->input('number_of_measurements_value_2'));
+                    }
+                    break;
+                case 'NOT_BETWEEN':
+                    if($request->input('number_of_measurements_value_1') && $request->input('number_of_measurements_value_2')) {
+                        $patients->where(function ($q) use ($request, $measurementCountQuery) {
+                                $q->whereRaw($measurementCountQuery . '<'.$request->input('number_of_measurements_value_1') .' OR '. $measurementCountQuery . '>'.$request->input('number_of_measurements_value_2'));                               
+                        });
+                    }
+                    break;
+            }
+        }
+
         switch($request->input('status')) {
             case 'ACTIVE':
                 $patients->where('is_active', true)->where('has_mcp_done_onboarding_visit', true);

+ 10 - 0
app/Models/Client.php

@@ -208,6 +208,16 @@ class Client extends Model
             ->orderByRaw('ts DESC NULLS LAST');
     }
 
+    public function cellularMeasurements()
+    {
+        return $this->hasMany(Measurement::class, 'client_id', 'id')
+            /*->distinct('label')*/
+            ->where('is_active', true)
+            ->where('is_cellular', true)
+            ->where('is_cellular_zero', false)
+            ->orderByRaw('ts DESC NULLS LAST');
+    }
+
     public function recentMeasurements()
     {
         return $this->hasMany(Measurement::class, 'client_id', 'id')

+ 3 - 0
resources/views/app/admin/patients-table-extended.blade.php

@@ -27,6 +27,8 @@
             <th class="border-0">Weight</th>
             <th class="border-0">Weight Timestamp</th>
 
+            <th class="border-0"># Cellular Measurements</th>
+
             {{-- <th>Scale <i class="fa fa-battery"></i></th>--}}
             {{-- <th class="border-0">RPM</th>--}}
             {{-- <th class="border-0">CCM</th>--}}
@@ -304,6 +306,7 @@
                     <?php $m = $patient->lastMeasurementOfType('BP'); ?>
                     {{$m && $m->value ? $m->value : '-'}}
                 </td>
+                <td>{{count($patient->cellularMeasurements)}}</td>
                 <td>{{$patient->getMcpAssignedOn()}}</td>
                 @if($pro->pro_type == 'ADMIN')
                     <td>{{@$patient->mcp ? $patient->mcp->displayName() : '--'}}</td>

+ 26 - 0
resources/views/app/admin/patients_filters.blade.php

@@ -207,6 +207,29 @@
 	</div>
 	@endif
 
+	<!-- Number of measurements	 -->
+	<div class="sm-section">
+		<div class="">
+			<label># Measurements:</label>
+			<select name="number_of_measurements" class="form-control input-sm" v-model="filters.number_of_measurements">
+				<option value="">All</option>
+				<option value="EXACTLY">Exactly</option>
+				<option value="LESS_THAN">Less Than</option>
+				<option value="GREATER_THAN">Greater Than</option>
+				<option value="BETWEEN">Between</option>
+				<option value="NOT_BETWEEN">Not Between</option>
+			</select>
+			<div v-show="filters.number_of_measurements" class="mt-2">
+				<div>
+					<input  name="number_of_measurements_value_1" v-model="filters.number_of_measurements_value_1" type="number" class="form-control input-sm" :placeholder="(filters.number_of_measurements === 'BETWEEN' || filters.number_of_measurements === 'NOT_BETWEEN') ? 'From' : 'Number of measurements'" />
+				</div>
+				<div v-show="filters.number_of_measurements === 'BETWEEN' || filters.number_of_measurements === 'NOT_BETWEEN'" class="mt-2">
+					<input name="number_of_measurements_value_2" v-model="filters.number_of_measurements_value_2" type="number" class="form-control input-sm" placeholder="To" />
+				</div>
+			</div>
+		</div>
+	</div>
+
 	@if($performer->pro->pro_type == 'ADMIN')
 	<div class="sm-section">
 		<div class="">
@@ -302,6 +325,9 @@ $allFilterKeys = [
 	'initiative',
 	'insurance',
 	'include_test_records',
+	'number_of_measurements',
+	'number_of_measurements_value_1',
+	'number_of_measurements_value_2'
 ];
 for ($i=0; $i < count($allFilterKeys); $i++) {
 	if (!isset($loadedFilters[$allFilterKeys[$i]]) || !$loadedFilters[$allFilterKeys[$i]]) {