Procházet zdrojové kódy

Main dashboard measurements tab - pagination

Vijayakrishnan před 4 roky
rodič
revize
efab72b6cf

+ 83 - 45
app/Http/Controllers/HomeController.php

@@ -311,50 +311,6 @@ class HomeController extends Controller
 
         $milliseconds = strtotime(date('Y-m-d')) . '000';
 
-        // $measurements = $performer->pro->getMeasurements();
-
-        $myClientIDs = [];
-        if ($performer->pro->pro_type != 'ADMIN') {
-            $myClientIDs = $this->getMyClientIds();
-        }
-
-        $measurements = DB::select(
-            DB::raw(
-"
-SELECT measurement.uid as uid,
-       care_month.uid as care_month_uid,
-       measurement.label,
-       measurement.value,
-       measurement.sbp_mm_hg,
-       measurement.dbp_mm_hg,
-       measurement.numeric_value,
-       measurement.ts,
-       client.uid as client_uid,
-       client.name_last,
-       client.name_first,
-       care_month.rm_total_time_in_seconds
-FROM measurement
-         join client on measurement.client_id = client.id
-         join care_month on client.id = care_month.client_id
-WHERE measurement.label NOT IN ('SBP', 'DBP')
-  AND (measurement.is_cellular_zero = FALSE or measurement.is_cellular_zero IS NULL)
-  AND measurement.is_removed IS FALSE
-  AND measurement.ts IS NOT NULL
-  AND measurement.client_bdt_measurement_id IS NOT NULL
-  AND (measurement.status IS NULL OR (measurement.status <> 'ACK' AND measurement.status <> 'INVALID_ACK'))
-  AND EXTRACT(MONTH from care_month.start_date) = EXTRACT(MONTH from now())
-  AND EXTRACT(YEAR from care_month.start_date) = EXTRACT(YEAR from now())
-" .
-                (
-                    $performer->pro->pro_type != 'ADMIN' && count($myClientIDs) ?
-                        ' AND client.id IN (' . implode(", ", $myClientIDs) . ')' :
-                        ''
-                )
-            ) .
-" ORDER BY measurement.ts DESC LIMIT 12"
-
-        );
-
         // bills & claims
         $businessNumbers = [];
 
@@ -408,11 +364,93 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
             ->whereRaw('created_by_session_id IN (SELECT id FROM app_session where pro_id = ?)', [$performer->pro->id])
             ->count();
 
-        return view('app/dashboard', compact('keyNumbers', 'reimbursement', 'milliseconds', 'measurements', 'businessNumbers',
+        return view('app/dashboard', compact('keyNumbers', 'reimbursement', 'milliseconds',
+            'businessNumbers',
             'incomingReports', 'tickets', 'supplyOrders',
             'numERx', 'numLabs', 'numImaging', 'numSupplyOrders'));
     }
 
+    public function dashboardMeasurementsTab(Request $request, $page = 1) {
+
+        $performer = $this->performer();
+
+        $myClientIDs = [];
+        if ($performer->pro->pro_type != 'ADMIN') {
+            $myClientIDs = $this->getMyClientIds();
+            $myClientIDs = implode(", ", $myClientIDs);
+        }
+
+        $ifNotAdmin = " AND (
+            client.mcp_pro_id = {$performer->pro->id}
+            OR client.rmm_pro_id = {$performer->pro->id}
+            OR client.rme_pro_id = {$performer->pro->id}
+            OR client.physician_pro_id = {$performer->pro->id}
+            OR client.id in (SELECT client_id FROM client_pro_access WHERE is_active AND pro_id = {$performer->pro->id})
+            OR client.id in (SELECT client_id FROM appointment WHERE status NOT IN ('CANCELLED', 'ABANDONED') AND pro_id = {$performer->pro->id})
+        )";
+
+        $numMeasurements = DB::select(
+            DB::raw(
+                "
+SELECT count(measurement.id) as cnt
+FROM measurement
+         join client on measurement.client_id = client.id
+         join care_month on client.id = care_month.client_id
+WHERE measurement.label NOT IN ('SBP', 'DBP')
+  AND (measurement.is_cellular_zero = FALSE or measurement.is_cellular_zero IS NULL)
+  AND measurement.is_removed IS FALSE
+  AND measurement.ts IS NOT NULL
+  AND measurement.client_bdt_measurement_id IS NOT NULL
+  AND (measurement.status IS NULL OR (measurement.status <> 'ACK' AND measurement.status <> 'INVALID_ACK'))
+  AND EXTRACT(MONTH from care_month.start_date) = EXTRACT(MONTH from now())
+  AND EXTRACT(YEAR from care_month.start_date) = EXTRACT(YEAR from now())
+" .
+                (
+                $performer->pro->pro_type != 'ADMIN' ? $ifNotAdmin : ''
+                )
+            )
+        );
+
+        $numMeasurements = $numMeasurements[0]->cnt;
+
+        $measurements = DB::select(
+            DB::raw(
+                "
+SELECT measurement.uid as uid,
+       care_month.uid as care_month_uid,
+       measurement.label,
+       measurement.value,
+       measurement.sbp_mm_hg,
+       measurement.dbp_mm_hg,
+       measurement.numeric_value,
+       measurement.ts,
+       client.uid as client_uid,
+       client.name_last,
+       client.name_first,
+       care_month.rm_total_time_in_seconds
+FROM measurement
+         join client on measurement.client_id = client.id
+         join care_month on client.id = care_month.client_id
+WHERE measurement.label NOT IN ('SBP', 'DBP')
+  AND (measurement.is_cellular_zero = FALSE or measurement.is_cellular_zero IS NULL)
+  AND measurement.is_removed IS FALSE
+  AND measurement.ts IS NOT NULL
+  AND measurement.client_bdt_measurement_id IS NOT NULL
+  AND (measurement.status IS NULL OR (measurement.status <> 'ACK' AND measurement.status <> 'INVALID_ACK'))
+  AND EXTRACT(MONTH from care_month.start_date) = EXTRACT(MONTH from now())
+  AND EXTRACT(YEAR from care_month.start_date) = EXTRACT(YEAR from now())
+" .
+                (
+                $performer->pro->pro_type != 'ADMIN' ? $ifNotAdmin : ''
+                )
+            ) .
+            " ORDER BY measurement.ts DESC LIMIT 20 OFFSET " . (($page - 1) * 20)
+
+        );
+
+        return view('app.dashboard.measurements', compact('numMeasurements', 'measurements', 'page'));
+    }
+
     public function dashboardAppointments(Request $request, $from, $to) {
 
         $performer = $this->performer();

+ 19 - 2
resources/views/app/dashboard.blade.php

@@ -143,7 +143,7 @@
                     <li class="nav-item">
                         <a native data-tab="measurements" class="nav-link"
                            :class="tab == 'measurements' ? 'active' : ''" href="#"
-                           v-on:click.prevent="tab='measurements'">
+                           v-on:click.prevent="tab='measurements'; loadMeasurements();">
                             Measurements
                         </a>
                     </li>
@@ -247,7 +247,7 @@
                         </div>
                     </div>
                     <div v-show="tab==='measurements'">
-                        @include('app.dashboard.measurements')
+                        <div id="measurements-tab">Loading...</div>
                     </div>
                     <div v-show="tab==='incoming_reports'">
                         @include('app.dashboard.incoming_reports')
@@ -483,6 +483,12 @@
                         this.selectToday();
                         this.updateNumEventsForDate();
                         $('.datepicker-days .day.active').trigger('click');
+                    },
+                    loadMeasurements: function() {
+                        $('#measurements-tab').load('/pro-dashboard-measurements-tab', () => {
+                            initMoes();
+                            initFastLoad($('#measurements-tab'));
+                        });
                     }
                 },
                 mounted: function () {
@@ -511,6 +517,17 @@
                     // init fast load
                     initFastLoad($('#pro-dashboard-container'));
 
+                    $(document)
+                        .off('click', '.dashboard-measurements.pagination a.page-link')
+                        .on('click', '.dashboard-measurements.pagination a.page-link', function() {
+                            $('#measurements-tab').text('Loading...').load('/pro-dashboard-measurements-tab/' + $(this).attr('data-target-page'), () => {
+                                initMoes();
+                                initFastLoad($('#measurements-tab'));
+                            });
+                            return false;
+                        });
+
+                    this.loadMeasurements();
                 }
             });
             // refresh once ticket popup is closed

+ 23 - 1
resources/views/app/dashboard/measurements.blade.php

@@ -9,7 +9,7 @@
             <th class="border-0 px-2 text-secondary">Value</th>
             <th class="border-0 px-2 text-secondary">Timestamp</th>
             <th class="border-0 px-2 text-secondary">Mins this month</th>
-            <th class="border-0 px-2 text-secondary text-center">Stamp</th>
+            <th class="border-0 px-2 text-secondary">Stamp</th>
             <th class="border-0 px-2 text-secondary text-center">Entry</th>
         </tr>
     </thead>
@@ -125,3 +125,25 @@
         @endif
     </tbody>
 </table>
+<ul class="dashboard-measurements pagination mt-3">
+
+    <?php $totalPages = ceil($numMeasurements / $page); ?>
+
+    <li class="page-item {{ $page === 1 ? 'disabled' : ''}}" aria-disabled="true" aria-label="« Previous">
+        @if($page == 1)
+            <span class="page-link" aria-hidden="true">‹</span>
+        @else
+            <a native target="_top" class="page-link" href="#" data-target-page="{{$page - 1}}">‹</a>
+        @endif
+    </li>
+
+    <li class="page-item"><span class="page-link text-secondary">Showing {{(($page-1) * 20) + 1}} to {{$numMeasurements < $page * 20 ? $numMeasurements : $page * 20}} of {{$numMeasurements}} measurements</span></li>
+
+    <li class="page-item {{ $page === $totalPages ? 'disabled' : ''}}">
+        @if($page === $totalPages)
+            <span class="page-link" aria-hidden="true">›</span>
+        @else
+            <a native target="_top" class="page-link" href="#" data-target-page="{{$page + 1}}">›</a>
+        @endif
+    </li>
+</ul>

+ 1 - 0
routes/web.php

@@ -60,6 +60,7 @@ Route::middleware('pro.auth')->group(function () {
     Route::get('/blank', 'HomeController@blank')->name('blank');
 
     Route::get('/', 'HomeController@dashboard')->name('dashboard');
+    Route::get('/pro-dashboard-measurements-tab/{page?}', 'HomeController@dashboardMeasurementsTab')->name('dashboard-measurements-tab');
 
     Route::get('/new-patient', 'HomeController@newPatient')->name('new-patient');
     Route::get('/new-non-mcn-patient', 'HomeController@newNonMcnPatient')->name('new-non-mcn-patient');