Ver código fonte

RPM manager - specific date filter (meas + entries) from that day only

Vijayakrishnan 2 anos atrás
pai
commit
d48f6c33f6

+ 17 - 0
app/Helpers/helpers.php

@@ -280,6 +280,23 @@ if(!function_exists('friendly_date_est_compact')) {
     }
 }
 
+if(!function_exists('friendly_date_compact')) {
+    function friendly_date_compact($value, $default = '-') {
+
+        if(!$value || empty($value)) return $default;
+        try {
+
+            $date = new DateTime($value);
+
+            return $date->format('y') === date('y') ? $date->format("m/d") : $date->format("m/d/y");
+
+        }
+        catch (Exception $e) {
+            return $e->getMessage();
+        }
+    }
+}
+
 
 if(!function_exists('friendly_date_time')) {
     function friendly_date_time($value, $includeTime = true, $default = '-', $long_year=false) {

+ 10 - 4
app/Http/Controllers/PracticeManagementController.php

@@ -2458,7 +2458,7 @@ WHERE
 
         $conditions = [];
 
-        switch($viewingAs) {
+        /*switch($viewingAs) {
             case 'MCP':
                 $conditions[] = "(care_month.mcp_pro_id = {$pro->id})";
                 break;
@@ -2468,7 +2468,7 @@ WHERE
             case 'RME':
                 $conditions[] = "(care_month.rme_pro_id = {$pro->id})";
                 break;
-        }
+        }*/
 
         // show only if enrolled in RPM
         $conditions[] = "(care_month.is_client_enrolled_in_rm IS TRUE AND client.has_mcp_done_onboarding_visit = 'YES')";
@@ -2487,6 +2487,10 @@ WHERE
         $yStr = request()->input('y') ? request()->input('y') : date('Y');
         $cmStartDate = $yStr . '-' . $mStr . '-' . '01';
 
+        $cmEndDate = date_add(date_create($cmStartDate), date_interval_create_from_date_string("1 month"));
+        $cmEndDate = date_sub($cmEndDate, date_interval_create_from_date_string("1 day"));
+        $cmEndDate = date_format($cmEndDate, "Y-m-d");
+
         // count query
         $countQuery = "
 SELECT count(*) 
@@ -2605,7 +2609,7 @@ WHERE
         $paginator = new LengthAwarePaginator($patients, $total, $request->input('per_page') ?: $defaultPageSize, $request->input('page') ?: 1);
         $paginator->setPath(route('practice-management.rpm-manager'));
 
-        return view('app.practice-management.rpm-manager.index', compact('patients', 'month', 'year','paginator', 'perPage', 'proRoles', 'viewingAs', 'cmStartDate'));
+        return view('app.practice-management.rpm-manager.index', compact('patients', 'month', 'year', 'paginator', 'perPage', 'proRoles', 'viewingAs', 'cmStartDate', 'cmEndDate'));
     }
 
     public function rpmManagerRow(Request $request, $uid) {
@@ -2714,7 +2718,9 @@ WHERE
 
         $updateModel = true;
 
-        return view('app.practice-management.rpm-manager.row', compact('iPatient', 'index', 'month', 'year', 'viewingAs', 'updateModel', 'daysRemaining'));
+        $specificDate = $request->input('specificDate');
+
+        return view('app.practice-management.rpm-manager.row', compact('iPatient', 'index', 'month', 'year', 'viewingAs', 'updateModel', 'daysRemaining', 'specificDate'));
     }
 
     public function claimsReport(Request $request) {

+ 28 - 8
resources/views/app/practice-management/rpm-manager/index.blade.php

@@ -37,7 +37,7 @@
                 $timestampInSec = floor($iPatient->measurements_bp_json[$i]->ts / 1000);
                 $iPatient->measurements_bp_json[$i]->date_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'm/d/y');
                 $iPatient->measurements_bp_json[$i]->date_standard = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'Y-m-d');
-                $iPatient->measurements_bp_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A') . ' EST';
+                $iPatient->measurements_bp_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A');
             }
         }
         if(!!$iPatient->measurements_weight_json) {
@@ -46,13 +46,14 @@
                 $timestampInSec = floor($iPatient->measurements_weight_json[$i]->ts / 1000);
                 $iPatient->measurements_weight_json[$i]->date_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'm/d/y');
                 $iPatient->measurements_weight_json[$i]->date_standard = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'Y-m-d');
-                $iPatient->measurements_weight_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A') . ' EST';
+                $iPatient->measurements_weight_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A');
                 $iPatient->measurements_weight_json[$i]->numericValue = round($iPatient->measurements_weight_json[$i]->numericValue, 1);
             }
         }
         $iPatient->month_display = friendly_month($iPatient->care_month_start_date);
         $careMonths[$iPatient->care_month_uid] = $iPatient;
     }
+    $specificDate = request()->input('specificDate');
     ?>
 
     <div class="p-3 mcp-theme-1" id="practice-rpm-manager">
@@ -109,12 +110,20 @@
                                     @endforeach
                                 </select>
                             </div>
+                            <div class="mr-3 d-inline-flex align-items-center">
+                                <label class="mb-0 mr-2 text-nowrap">Date</label>
+                                <input name="specificDate" class="form-control form-control-sm min-width-unset pl-1 font-weight-bold"
+                                       value="{{$specificDate}}"
+                                       type="date" min="{{$cmStartDate}}" max="{{$cmEndDate}}"
+                                       onchange="fastLoad('{{route('practice-management.rpm-manager')}}?' + $(this).closest('form').serialize())">
+                            </div>
+                            <a href="#" onclick="return fastLoad('{{route('practice-management.rpm-manager')}}')">Clear</a>
                         </form>
                     </div>
                     @if($paginator->total())
                         <div class="d-inline-flex align-items-baseline ml-auto mb-0-pagination">
-                            <div class="mr-2"><b>{{$paginator->firstItem()}}</b> to <b>{{$paginator->lastItem()}}</b> (page {{$paginator->currentPage()}}) of <b>{{$paginator->total()}}</b> care months</div>
-                            {!! $paginator->onEachSide(2)->withQueryString()->links() !!}
+                            <div class="mr-2"><b>{{$paginator->firstItem()}}</b> to <b>{{$paginator->lastItem()}}</b> (page {{$paginator->currentPage()}}) of <b>{{$paginator->total()}}</b></div>
+                            {!! $paginator->onEachSide(1)->withQueryString()->links() !!}
                             <select class="form-control form-control-sm min-width-unset width-140px px-2 ml-2" onchange="fastLoad('{{ route('practice-management.rpm-manager') }}?{{queryLineExcept(['per_page', 'page'])}}&per_page=' + this.value)">
                                 <option {{$perPage == 25 ? 'selected' : ''}} value="25">25/page</option>
                                 <option {{$perPage == 50 ? 'selected' : ''}} value="50">50/page</option>
@@ -138,10 +147,21 @@
                             @endif
                             <th class="border-top-0 border-bottom-0"></th>
                             <th class="border-top-0 border-bottom-0 bg-aliceblue text-nowrap" colspan="3"># Meas. Days</th>
-                            <th class="border-top-0 border-bottom-0"></th>
-                            <th class="border-top-0 border-bottom-0"></th>
+                            <th class="border-top-0 border-bottom-0 text-nowrap" colspan="2">
+                                @if($specificDate)
+                                    Values: <span class="text-info">{{$specificDate}}</span>
+                                @else
+                                    Latest Value
+                                @endif
+                            </th>
                             @if($viewingAs !== 'RME')
-                                <th class="border-top-0 border-bottom-0 bg-aliceblue" colspan="2">Entries</th>
+                                <th class="border-top-0 border-bottom-0 bg-aliceblue text-nowrap" colspan="2">
+                                    @if($specificDate)
+                                        Entries: <span class="text-info">{{$specificDate}}</span>
+                                    @else
+                                        Latest Entry
+                                    @endif
+                                </th>
                             @endif
                             <th class="border-top-0 border-bottom-0"></th>
                             @if($viewingAs !== 'RME')
@@ -227,7 +247,7 @@
                         $index = $paginator->firstItem();
                         ?>
                         @foreach ($patients as $iPatient)
-                            @include('app.practice-management.rpm-manager.row', compact('iPatient', 'index', 'month', 'year', 'viewingAs', 'daysRemaining'))
+                            @include('app.practice-management.rpm-manager.row', compact('iPatient', 'index', 'month', 'year', 'viewingAs', 'daysRemaining', 'specificDate'))
                             <?php
                             $index++;
                             ?>

+ 110 - 30
resources/views/app/practice-management/rpm-manager/row.blade.php

@@ -20,25 +20,34 @@
             if(!!$iPatient->measurements_json) {
                 $iPatient->measurements_json = json_decode($iPatient->measurements_json);
             }
+            else {
+                $iPatient->measurements_json = [];
+            }
             if(!!$iPatient->measurements_bp_json) {
                 $iPatient->measurements_bp_json = json_decode($iPatient->measurements_bp_json);
                 for ($i = 0; $i < count($iPatient->measurements_bp_json); $i++) {
                     $timestampInSec = floor($iPatient->measurements_bp_json[$i]->ts / 1000);
                     $iPatient->measurements_bp_json[$i]->date_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'm/d/y');
                     $iPatient->measurements_bp_json[$i]->date_standard = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'Y-m-d');
-                    $iPatient->measurements_bp_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A') . ' EST';
+                    $iPatient->measurements_bp_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A');
                 }
             }
+            else {
+                $iPatient->measurements_bp_json = [];
+            }
             if(!!$iPatient->measurements_weight_json) {
                 $iPatient->measurements_weight_json = json_decode($iPatient->measurements_weight_json);
                 for ($i = 0; $i < count($iPatient->measurements_weight_json); $i++) {
                     $timestampInSec = floor($iPatient->measurements_weight_json[$i]->ts / 1000);
                     $iPatient->measurements_weight_json[$i]->date_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'm/d/y');
                     $iPatient->measurements_weight_json[$i]->date_standard = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'Y-m-d');
-                    $iPatient->measurements_weight_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A') . ' EST';
+                    $iPatient->measurements_weight_json[$i]->time_display = friendly_date_time_short_with_tz_from_timestamp($timestampInSec, 'EASTERN', '-', 'h:i A');
                     $iPatient->measurements_weight_json[$i]->numericValue = round($iPatient->measurements_weight_json[$i]->numericValue, 1);
                 }
             }
+            else {
+                $iPatient->measurements_weight_json = [];
+            }
             $iPatient->month_display = friendly_month($iPatient->care_month_start_date);
             ?>
             <script>
@@ -54,6 +63,7 @@
                     viewingAs: '{{$viewingAs}}',
                     m: '{{request()->input('m')}}',
                     y: '{{request()->input('y')}}',
+                    specificDate: '{{request()->input('specificDate')}}',
                 }, _data => {
                     $('tr[data-care-month-uid="{{$iPatient->care_month_uid}}"]').replaceWith(_data);
                 })
@@ -124,13 +134,31 @@
             @endif
         @else
             @if($iPatient->most_recent_cellular_bp_sbp_mm_hg && $iPatient->most_recent_cellular_bp_dbp_mm_hg)
-                <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
-                    <span class="sort-data">{{$iPatient->most_recent_cellular_bp_sbp_mm_hg}}</span>/{{$iPatient->most_recent_cellular_bp_dbp_mm_hg}}
-                    @if($iPatient->most_recent_cellular_bp_measurement_at)
-                        <span class="text-sm text-secondary text-nowrap ml-1"
-                              title="{{friendly_date_time($iPatient->most_recent_cellular_bp_measurement_at)}}">{{friendly_date_est_compact($iPatient->most_recent_cellular_bp_measurement_at)}}</span>
+                @if(!$specificDate)
+                    <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
+                        <span class="sort-data">{{$iPatient->most_recent_cellular_bp_sbp_mm_hg}}</span>/{{$iPatient->most_recent_cellular_bp_dbp_mm_hg}}
+                        @if($iPatient->most_recent_cellular_bp_measurement_at)
+                            <span class="text-sm text-secondary text-nowrap ml-1"
+                                  title="{{friendly_date_time($iPatient->most_recent_cellular_bp_measurement_at)}}">{{friendly_date_compact($iPatient->most_recent_cellular_bp_measurement_at)}}</span>
+                        @endif
+                    </div>
+                @else
+                    <?php $hasM = false; ?>
+                    @if(!!$iPatient->measurements_bp_json)
+                        @for ($i = 0; $i < count($iPatient->measurements_bp_json); $i++)
+                            @if($iPatient->measurements_bp_json[$i]->date_standard === $specificDate)
+                                <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
+                                    <span class="sort-data">{{$iPatient->measurements_bp_json[$i]->sbpMmHg}}</span>/{{$iPatient->measurements_bp_json[$i]->dbpMmHg}}
+                                    <span class="text-sm text-secondary text-nowrap ml-1">{{$iPatient->measurements_bp_json[$i]->time_display}}</span>
+                                </div>
+                                <?php $hasM = true; ?>
+                            @endif
+                        @endfor
                     @endif
-                </div>
+                    @if(!$hasM)
+                        <span class="text-secondary">-</span>
+                    @endif
+                @endif
             @else
                 <span class="text-danger opacity-60">Not used yet</span>
             @endif
@@ -170,13 +198,31 @@
             @endif
         @else
             @if($iPatient->most_recent_cellular_weight_value)
-                <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
-                    <span class="sort-data">{{round($iPatient->most_recent_cellular_weight_value, 1)}}</span>
-                    @if($iPatient->most_recent_cellular_weight_measurement_at)
-                        <span class="text-sm text-secondary text-nowrap ml-1"
-                              title="{{friendly_date_time($iPatient->most_recent_cellular_weight_measurement_at)}}">{{friendly_date_est_compact($iPatient->most_recent_cellular_weight_measurement_at)}}</span>
+                @if(!$specificDate)
+                    <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
+                        <span class="sort-data">{{round($iPatient->most_recent_cellular_weight_value, 1)}}</span>
+                        @if($iPatient->most_recent_cellular_weight_measurement_at)
+                            <span class="text-sm text-secondary text-nowrap ml-1"
+                                  title="{{friendly_date_time($iPatient->most_recent_cellular_weight_measurement_at)}}">{{friendly_date_compact($iPatient->most_recent_cellular_weight_measurement_at, 'm/d')}}</span>
+                        @endif
+                    </div>
+                @else
+                    <?php $hasM = false; ?>
+                    @if(!!$iPatient->measurements_weight_json)
+                        @for ($i = 0; $i < count($iPatient->measurements_weight_json); $i++)
+                            @if($iPatient->measurements_weight_json[$i]->date_standard === $specificDate)
+                                <div class="text-nowrap d-flex align-items-baseline flex-nowrap">
+                                    <span class="sort-data">{{$iPatient->measurements_weight_json[$i]->numericValue}}</span>
+                                    <span class="text-sm text-secondary text-nowrap ml-1">{{$iPatient->measurements_weight_json[$i]->time_display}}</span>
+                                </div>
+                                <?php $hasM = true; ?>
+                            @endif
+                        @endfor
                     @endif
-                </div>
+                    @if(!$hasM)
+                        <span class="text-secondary">-</span>
+                    @endif
+                @endif
             @else
                 <span class="text-danger opacity-60">Not used yet</span>
             @endif
@@ -210,30 +256,64 @@
     @if($viewingAs !== 'RME')
         <td>
             @if(@$iPatient->myEntries && count($iPatient->myEntries))
-                <div class="d-flex align-items-baseline" title="Me: {{strip_tags($iPatient->myEntries[0]->contentText)}}">
-                    <span class="text-info mr-1">{{round($iPatient->myEntries[0]->timeInSeconds/60)}}m</span>
-                    <span class="flex-grow-1 max-width-200px text-ellipsis mr-1">{{strip_tags($iPatient->myEntries[0]->contentText)}}</span>
-                    @if(gettype($iPatient->myEntries[0]->effectiveDate) === 'string')
-                        <span class="text-secondary text-sm">{{friendly_date_est_compact($iPatient->myEntries[0]->effectiveDate)}}</span>
+                @if(!$specificDate)
+                    <div class="d-flex align-items-baseline" title="Me: {{strip_tags($iPatient->myEntries[0]->contentText)}}">
+                        <span class="text-info mr-1">{{round($iPatient->myEntries[0]->timeInSeconds/60)}}m</span>
+                        <span class="flex-grow-1 max-width-200px text-ellipsis mr-1">{{strip_tags($iPatient->myEntries[0]->contentText)}}</span>
+                        @if(gettype($iPatient->myEntries[0]->effectiveDate) === 'string')
+                            <span class="text-secondary text-sm">{{friendly_date_compact($iPatient->myEntries[0]->effectiveDate)}}</span>
+                        @endif
+                    </div>
+                @else
+                    <?php $hasM = false; ?>
+                    @for ($i = 0; $i < count($iPatient->myEntries); $i++)
+                        @if($iPatient->myEntries[$i]->effectiveDate === $specificDate)
+                            <div class="d-flex align-items-baseline" title="Me: {{strip_tags($iPatient->myEntries[$i]->contentText)}}">
+                                <span class="text-info mr-1">{{round($iPatient->myEntries[$i]->timeInSeconds/60)}}m</span>
+                                <span class="flex-grow-1 max-width-200px text-ellipsis">{{strip_tags($iPatient->myEntries[$i]->contentText)}}</span>
+                            </div>
+                            <?php $hasM = true; ?>
+                        @endif
+                    @endfor
+                    @if(!$hasM)
+                        <span class="text-secondary">-</span>
                     @endif
-                </div>
+                @endif
             @else
-                <span class="text-secondary">None</span>
+                <span class="text-secondary">-</span>
             @endif
         </td>
         <td>
             @if(@$iPatient->otherEntries && count($iPatient->otherEntries))
-                <div class="d-flex align-items-baseline" title="{{$iPatient->otherEntries[0]->proNameFirst}} {{$iPatient->otherEntries[0]->proNameLast}}: {{strip_tags($iPatient->otherEntries[0]->contentText)}}">
-                    @if($viewingAs === 'ADMIN')
-                        <span class="text-info mr-1">{{round($iPatient->otherEntries[0]->timeInSeconds/60)}}m</span>
-                    @endif
-                    <span class="flex-grow-1 max-width-200px text-ellipsis mr-1">{{strip_tags($iPatient->otherEntries[0]->contentText)}}</span>
-                    @if(gettype($iPatient->otherEntries[0]->effectiveDate) === 'string')
-                        <span class="text-secondary text-sm">{{friendly_date_est_compact($iPatient->otherEntries[0]->effectiveDate)}}</span>
+                @if(!$specificDate)
+                    <div class="d-flex align-items-baseline" title="{{$iPatient->otherEntries[0]->proNameFirst}} {{$iPatient->otherEntries[0]->proNameLast}}: {{strip_tags($iPatient->otherEntries[0]->contentText)}}">
+                        @if($viewingAs === 'ADMIN')
+                            <span class="text-info mr-1">{{round($iPatient->otherEntries[0]->timeInSeconds/60)}}m</span>
+                        @endif
+                        <span class="flex-grow-1 max-width-200px text-ellipsis mr-1">{{strip_tags($iPatient->otherEntries[0]->contentText)}}</span>
+                        @if(gettype($iPatient->otherEntries[0]->effectiveDate) === 'string')
+                            <span class="text-secondary text-sm">{{friendly_date_compact($iPatient->otherEntries[0]->effectiveDate)}}</span>
+                        @endif
+                    </div>
+                @else
+                    <?php $hasM = false; ?>
+                    @for ($i = 0; $i < count($iPatient->otherEntries); $i++)
+                        @if($iPatient->otherEntries[$i]->effectiveDate === $specificDate)
+                            <div class="d-flex align-items-baseline" title="{{$iPatient->otherEntries[$i]->proNameFirst}} {{$iPatient->otherEntries[$i]->proNameLast}}: {{strip_tags($iPatient->otherEntries[$i]->contentText)}}">
+                                @if($viewingAs === 'ADMIN')
+                                    <span class="text-info mr-1">{{round($iPatient->otherEntries[$i]->timeInSeconds/60)}}m</span>
+                                @endif
+                                <span class="flex-grow-1 max-width-200px text-ellipsis">{{strip_tags($iPatient->otherEntries[$i]->contentText)}}</span>
+                            </div>
+                            <?php $hasM = true; ?>
+                        @endif
+                    @endfor
+                    @if(!$hasM)
+                        <span class="text-secondary">-</span>
                     @endif
-                </div>
+                @endif
             @else
-                <span class="text-secondary">None</span>
+                <span class="text-secondary">-</span>
             @endif
         </td>
     @endif