|
@@ -1,41 +1,65 @@
|
|
|
@extends ('layouts/template')
|
|
|
|
|
|
@section('content')
|
|
|
-
|
|
|
- <div class="p-3 mcp-theme-1" id="admin-remote-monitoring">
|
|
|
+ <style>
|
|
|
+ #admin-table-rm-matrix_wrapper {
|
|
|
+ padding-top: 10px;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+ <link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css">
|
|
|
+ <script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
|
|
|
+ <style>
|
|
|
+ #table-rm-matrix_length, #table-rm-matrix_info {
|
|
|
+ padding-left: 0.5rem;
|
|
|
+ }
|
|
|
+ #table-rm-matrix_filter {
|
|
|
+ padding-right: 0.5rem;
|
|
|
+ }
|
|
|
+ #table-rm-matrix_paginate {
|
|
|
+ padding: 0.5rem;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+ <div class="p-3 mcp-theme-1" id="practice-remote-monitoring" v-cloak>
|
|
|
|
|
|
<div class="card">
|
|
|
|
|
|
- <div class="card-header px-2 py-2 d-flex align-items-center">
|
|
|
+ <div class="card-header px-2 py-2 d-flex align-items-baseline">
|
|
|
<span class="mr-4">
|
|
|
<span class="font-size-14">Remote Monitoring</span>
|
|
|
<i class="fas fa-arrow-right text-sm mx-1"></i>
|
|
|
<b class="font-size-14">{{friendly_month(date((request()->input('y') ?: 'Y') . '-' . (request()->input('m') ?: 'm') . '-d'))}}</b>
|
|
|
</span>
|
|
|
- <form class="ml-auto d-inline-flex flex-nowrap align-items-center" action="" method="GET">
|
|
|
+ <?php
|
|
|
|
|
|
+ $mStr = request()->input('m') ? request()->input('m') : date('m');
|
|
|
+ $yStr = request()->input('y') ? request()->input('y') : date('Y');
|
|
|
+ $rcmStartDate = $yStr . '-' . $mStr . '-' . '01';
|
|
|
+ $m = +$mStr;
|
|
|
+ $y = +$yStr;
|
|
|
+ ?>
|
|
|
+ <form class="ml-auto d-inline-flex flex-nowrap align-items-center" action="" method="GET">
|
|
|
<span class="mr-2">Month</span>
|
|
|
<select class="form-control form-control-sm min-width-unset width-100px mr-3" name="m"
|
|
|
- onchange="fastLoad('{{route('practice-management.remote-monitoring-admin')}}?' + $(this).closest('form').serialize())">
|
|
|
- <option value="01" {{request()->input('m') === '01' ? 'selected' : ''}}>Jan</option>
|
|
|
- <option value="02" {{request()->input('m') === '02' ? 'selected' : ''}}>Feb</option>
|
|
|
- <option value="03" {{request()->input('m') === '03' ? 'selected' : ''}}>Mar</option>
|
|
|
- <option value="04" {{request()->input('m') === '04' ? 'selected' : ''}}>Apr</option>
|
|
|
- <option value="05" {{request()->input('m') === '05' ? 'selected' : ''}}>May</option>
|
|
|
- <option value="06" {{request()->input('m') === '06' ? 'selected' : ''}}>Jun</option>
|
|
|
- <option value="07" {{request()->input('m') === '07' ? 'selected' : ''}}>Jul</option>
|
|
|
- <option value="08" {{request()->input('m') === '08' ? 'selected' : ''}}>Aug</option>
|
|
|
- <option value="09" {{request()->input('m') === '09' ? 'selected' : ''}}>Sep</option>
|
|
|
- <option value="10" {{request()->input('m') === '10' ? 'selected' : ''}}>Oct</option>
|
|
|
- <option value="11" {{request()->input('m') === '11' ? 'selected' : ''}}>Nov</option>
|
|
|
- <option value="12" {{request()->input('m') === '12' ? 'selected' : ''}}>Dec</option>
|
|
|
+ onchange="fastLoad('{{route('practice-management.remote-monitoring')}}?' + $(this).closest('form').serialize())">
|
|
|
+ <option value="01" {{$m === 1 ? 'selected' : ''}}>Jan</option>
|
|
|
+ <option value="02" {{$m === 2 ? 'selected' : ''}}>Feb</option>
|
|
|
+ <option value="03" {{$m === 3 ? 'selected' : ''}}>Mar</option>
|
|
|
+ <option value="04" {{$m === 4 ? 'selected' : ''}}>Apr</option>
|
|
|
+ <option value="05" {{$m === 5 ? 'selected' : ''}}>May</option>
|
|
|
+ <option value="06" {{$m === 6 ? 'selected' : ''}}>Jun</option>
|
|
|
+ <option value="07" {{$m === 7 ? 'selected' : ''}}>Jul</option>
|
|
|
+ <option value="08" {{$m === 8 ? 'selected' : ''}}>Aug</option>
|
|
|
+ <option value="09" {{$m === 9 ? 'selected' : ''}}>Sep</option>
|
|
|
+ <option value="10" {{$m === 10 ? 'selected' : ''}}>Oct</option>
|
|
|
+ <option value="11" {{$m === 11 ? 'selected' : ''}}>Nov</option>
|
|
|
+ <option value="12" {{$m === 12 ? 'selected' : ''}}>Dec</option>
|
|
|
</select>
|
|
|
<span class="mr-2">Year</span>
|
|
|
<select class="form-control form-control-sm min-width-unset width-100px" name="y"
|
|
|
- onchange="fastLoad('{{route('practice-management.remote-monitoring-admin')}}?' + $(this).closest('form').serialize())">
|
|
|
- <option value="2020" {{request()->input('y') === '2020' ? 'selected' : ''}}>2020</option>
|
|
|
- <option value="2021" {{request()->input('y') === '2021' ? 'selected' : ''}}>2021</option>
|
|
|
- <option value="2022" {{request()->input('y') === '2022' ? 'selected' : ''}}>2022</option>
|
|
|
+ onchange="fastLoad('{{route('practice-management.remote-monitoring')}}?' + $(this).closest('form').serialize())">
|
|
|
+ <option value="2020" {{$y === 2020 ? 'selected' : ''}}>2020</option>
|
|
|
+ <option value="2021" {{$y === 2021 ? 'selected' : ''}}>2021</option>
|
|
|
+ <option value="2022" {{$y === 2022 ? 'selected' : ''}}>2022</option>
|
|
|
</select>
|
|
|
</form>
|
|
|
</div>
|
|
@@ -44,94 +68,69 @@
|
|
|
|
|
|
<div class="card-body p-0">
|
|
|
<div class="d-flex align-items-start m-0">
|
|
|
- <div class="p-0">
|
|
|
- @include('app.practice-management.remote-monitoring-admin-tree')
|
|
|
- </div>
|
|
|
- <div class="flex-grow-1 border-left p-0">
|
|
|
- @if($rc == 4)
|
|
|
- <?php $rc2 = request()->input('rc2') ? request()->input('rc2') : 2; ?>
|
|
|
- <div class="d-flex align-items-baseline p-2 border-bottom">
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=4&rc2=1" class="border p-2 mr-2 {{$rc2 == 1 ? 'bg-aliceblue font-weight-bold' : ''}}" >Patients not seen in over 90 days</a>
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=4&rc2=2" class="border p-2 mr-2 {{$rc2 == 2 ? 'bg-aliceblue font-weight-bold' : ''}}" >Patients seen w/in last 90 days</a>
|
|
|
- </div>
|
|
|
- @elseif($rc == 5)
|
|
|
- <?php $rc2 = request()->input('rc2') ? request()->input('rc2') : 2; ?>
|
|
|
- <div class="d-flex align-items-baseline p-2 border-bottom">
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=5&rc2=1" class="border p-2 mr-2 {{$rc2 == 1 ? 'bg-aliceblue font-weight-bold' : ''}}" >Patients not spoken to this month</a>
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=5&rc2=2" class="border p-2 mr-2 {{$rc2 == 2 ? 'bg-aliceblue font-weight-bold' : ''}}" >Patients spoken to this month</a>
|
|
|
- </div>
|
|
|
- @elseif($rc == 6)
|
|
|
- <?php $rc2 = request()->input('rc2') ? request()->input('rc2') : 2; ?>
|
|
|
- <div class="d-flex align-items-baseline p-2 border-bottom">
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=6&rc2=1" class="border p-2 mr-2 {{$rc2 == 1 ? 'bg-aliceblue font-weight-bold' : ''}}" >Unstamped Measurements > 0</a>
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=6&rc2=2" class="border p-2 mr-2 {{$rc2 == 2 ? 'bg-aliceblue font-weight-bold' : ''}}" >All Measurements Stamped</a>
|
|
|
- </div>
|
|
|
- @elseif($rc == 7)
|
|
|
- <?php $rc2 = request()->input('rc2') ? request()->input('rc2') : 2; ?>
|
|
|
- <div class="d-flex align-items-baseline p-2 border-bottom">
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=7&rc2=1" class="border p-2 mr-2 {{$rc2 == 1 ? 'bg-aliceblue font-weight-bold' : ''}}" >Measurement Days < 16</a>
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=7&rc2=2" class="border p-2 mr-2 {{$rc2 == 2 ? 'bg-aliceblue font-weight-bold' : ''}}" >Measurement Days >= 16</a>
|
|
|
- </div>
|
|
|
- @elseif($rc == 10)
|
|
|
- <?php $rc2 = request()->input('rc2') ? request()->input('rc2') : 2; ?>
|
|
|
- <div class="d-flex align-items-baseline p-2 border-bottom">
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=10&rc2=1" class="border p-2 mr-2 {{$rc2 == 1 ? 'bg-aliceblue font-weight-bold' : ''}}" >Billing Minutes < 20</a>
|
|
|
- <a href="{{route('practice-management.remote-monitoring-admin')}}?m={{request()->input('m')}}&y={{request()->input('y')}}&rc=10&rc2=2" class="border p-2 mr-2 {{$rc2 == 2 ? 'bg-aliceblue font-weight-bold' : ''}}" >Billing Minutes >= 20</a>
|
|
|
- </div>
|
|
|
- @endif
|
|
|
- <table class="table table-sm table-striped table-hover p-0 m-0 foo-bar-t" id="admin-table-rm-matrix">
|
|
|
+ <div class="flex-grow-1 px-0 pt-2">
|
|
|
+ <?php $trIndex = 0; ?>
|
|
|
+ @foreach ($patients as $iPatient)
|
|
|
+ <script>
|
|
|
+ addMCHook(
|
|
|
+ 'refresh-rpm-row-{{$trIndex}}',
|
|
|
+ function () {
|
|
|
+ refreshRpmRow({{$trIndex}});
|
|
|
+ }
|
|
|
+ );
|
|
|
+ </script>
|
|
|
+ <?php $trIndex++; ?>
|
|
|
+ @endforeach
|
|
|
+ <table class="table table-sm table-striped table-hover p-0 m-0 border-top" id="table-rm-matrix">
|
|
|
<thead class="bg-light">
|
|
|
- <tr>
|
|
|
- <th class="border-0">Patient</th>
|
|
|
- <th class="border-0">MCP</th>
|
|
|
+ <tr stag-title="Click to sort. Shift+Click to multi-sort.">
|
|
|
+ <th class="border-0 pl-2">Name</th>
|
|
|
<th class="border-0">DOB</th>
|
|
|
- <th class="border-0">Enrolled in RPM?</th>
|
|
|
- <th class="border-0">Cellular BP?</th>
|
|
|
- <th class="border-0">Cellular Scale?</th>
|
|
|
- <th class="border-0">Latest BP</th>
|
|
|
- <th class="border-0">Latest Weight</th>
|
|
|
- <th class="border-0">Latest Visit</th>
|
|
|
- <th class="border-0">RPM Interaction This Month?</th>
|
|
|
- <th class="border-0">Measurements Pending Stamp</th>
|
|
|
- <th class="border-0"># Meas. Days This Month</th>
|
|
|
- <th class="border-0"># RPM Minutes</th>
|
|
|
-
|
|
|
+ <th class="border-0">RPM?</th>
|
|
|
+ <th class="border-0">Cell. BP?</th>
|
|
|
+ <th class="border-0">Cell. Scale?</th>
|
|
|
+ <th class="border-0">Last BP</th>
|
|
|
+ <th class="border-0">Last Wt</th>
|
|
|
+ <th class="border-0">Last Visit</th>
|
|
|
+ <th class="border-0">Days Since<br>Last Visit</th>
|
|
|
+ <th class="border-0">Interacted?</th>
|
|
|
+ <th class="border-0">#Meas. Days</th>
|
|
|
+ <th class="border-0">#Unstamped</th>
|
|
|
+ <th class="border-0">MCP Mins.</th>
|
|
|
+ <th class="border-0">RMM Mins.</th>
|
|
|
+ <th class="border-0">MCP</th>
|
|
|
+ <th class="border-0">RMM</th>
|
|
|
+ <th class="border-0">MCP Billable</th>
|
|
|
+ <th class="border-0">RMM Billable</th>
|
|
|
+ <th class="border-0">454</th>
|
|
|
+ <th class="border-0">457</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
+ <?php $trIndex = 0; ?>
|
|
|
@foreach ($patients as $iPatient)
|
|
|
- <?php $oPatient = \App\Models\Client::where('uid', $iPatient->client_uid)->first(); ?>
|
|
|
- <tr>
|
|
|
- <td class="">
|
|
|
- <a href="/patients/view/{{ $iPatient->client_uid }}" class="text-nowrap">{{ $oPatient->displayName() }}</a>
|
|
|
- </td>
|
|
|
- <td class="">
|
|
|
- {{$oPatient->mcp ? $oPatient->mcp->displayName() : '-'}}
|
|
|
- </td>
|
|
|
+ <?php
|
|
|
+
|
|
|
+ $daysDiff = -1;
|
|
|
+ if($iPatient->most_recent_completed_mcp_note_date) {
|
|
|
+ $careMonthLastDay = date_add(date_create($rcmStartDate), date_interval_create_from_date_string("1 month"));
|
|
|
+ $careMonthLastDay = date_sub($careMonthLastDay, date_interval_create_from_date_string("1 day"));
|
|
|
+ $daysDiff = date_diff($careMonthLastDay, date_create($iPatient->most_recent_completed_mcp_note_date))->days;
|
|
|
+ }
|
|
|
+ $lastVisitWithin90Days = ($daysDiff !== -1 && $daysDiff <= 90);
|
|
|
|
|
|
- <td>{{friendly_date($iPatient->dob)}}</td>
|
|
|
- <td>{{ucwords(strtolower($iPatient->is_enrolled_in_rm ?: ''))}}</td>
|
|
|
- <td>{{$oPatient->hasBPDevice() ? 'Yes' : 'No'}}</td>
|
|
|
- <td>{{$oPatient->hasBPDevice() ? 'Yes' : 'No'}}</td>
|
|
|
- <td>
|
|
|
- {{$iPatient->most_recent_cellular_bp_sbp_mm_hg ?: '-'}}/{{$iPatient->most_recent_cellular_bp_dbp_mm_hg ?: '-'}}
|
|
|
- @if($iPatient->most_recent_cellular_bp_measurement_at)
|
|
|
- <div class="text-sm text-secondary text-nowrap">{{friendly_date_time($iPatient->most_recent_cellular_bp_measurement_at)}}</div>
|
|
|
- @endif
|
|
|
- </td>
|
|
|
- <td>
|
|
|
- {{$iPatient->most_recent_cellular_weight_value ? round($iPatient->most_recent_cellular_weight_value, 1) : '-'}}
|
|
|
- @if($iPatient->most_recent_cellular_weight_measurement_at)
|
|
|
- <div class="text-sm text-secondary text-nowrap">{{friendly_date_time($iPatient->most_recent_cellular_weight_measurement_at)}}</div>
|
|
|
- @endif
|
|
|
- </td>
|
|
|
- <td>{{$iPatient->most_recent_completed_mcp_note_date ? friendly_date($iPatient->most_recent_completed_mcp_note_date) : '-'}}</td>
|
|
|
- <td>{{$iPatient->has_anyone_interacted_with_client_about_rm_outside_note ? 'Yes' : 'No'}}</td>
|
|
|
- <td>{{$iPatient->rm_num_measurements_not_stamped_by_mcp}}</td>
|
|
|
- <td>{{$iPatient->number_of_days_with_remote_measurements ?: 0}}</td>
|
|
|
- <td>{{floor($iPatient->rm_total_time_in_seconds_by_mcp / 60)}}</td>
|
|
|
+ $performerRole = false;
|
|
|
+ if ($pro->pro_type === 'ADMIN') {
|
|
|
+ $performerRole = 'ADMIN';
|
|
|
+ } else if ($iPatient->care_month_mcp_pro_id === $pro->id) {
|
|
|
+ $performerRole = 'MCP';
|
|
|
+ } else if ($iPatient->care_month_rmm_pro_id === $pro->id) {
|
|
|
+ $performerRole = 'RMM';
|
|
|
+ }
|
|
|
|
|
|
- </tr>
|
|
|
+ ?>
|
|
|
+ @include('app.practice-management.remote-monitoring-admin-row-markup')
|
|
|
+ <?php $trIndex++; ?>
|
|
|
@endforeach
|
|
|
</tbody>
|
|
|
</table>
|
|
@@ -142,12 +141,66 @@
|
|
|
</div>
|
|
|
<script>
|
|
|
(function() {
|
|
|
+ let dataTableInst = null;
|
|
|
+ window.refreshRpmRow = function(_index) {
|
|
|
+ let tr = $('#table-rm-matrix tbody tr:eq(' + _index + ')');
|
|
|
+ if(!tr.length) return;
|
|
|
+ let clientUid = tr.attr('data-client-uid'), careMonthUid = tr.attr('data-care-month-uid');
|
|
|
+ $.get('/rpm-matrix-row?m={{$mStr}}&y={{$yStr}}&clientUid=' + clientUid + '&careMonthUid=' + careMonthUid + '&trIndex=' + _index, _data => {
|
|
|
+ let row = $(_data);
|
|
|
+ row.find('>td').each(function(_columnIndex) {
|
|
|
+ dataTableInst.cell(_index, _columnIndex).data(this.innerHTML); //.draw();
|
|
|
+ });
|
|
|
+ $('#practice-remote-monitoring [moe][initialized]').removeAttr('initialized');
|
|
|
+ initMoes();
|
|
|
+ tr.addClass('post-refresh-highlight');
|
|
|
+ setTimeout(function() {
|
|
|
+ tr.removeClass('post-refresh-highlight');
|
|
|
+ }, 1000);
|
|
|
+ });
|
|
|
+ }
|
|
|
function init() {
|
|
|
- $('#admin-table-rm-matrix').DataTable({
|
|
|
- "pageLength": 100
|
|
|
+ dataTableInst = $('#table-rm-matrix').DataTable({
|
|
|
+ paging: false,
|
|
|
+ columnDefs: [
|
|
|
+ {
|
|
|
+ targets: 0,
|
|
|
+ type: 'string',
|
|
|
+ render: function (data, type, row, meta) {
|
|
|
+ if(type === 'sort') {
|
|
|
+ return $(data).find('.sort-data').first().text();
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {targets: 1, type: 'date'},
|
|
|
+ {
|
|
|
+ targets: 7,
|
|
|
+ type: 'date',
|
|
|
+ render: function (data, type, row, meta) {
|
|
|
+ if(type === 'sort') {
|
|
|
+ return $(data).find('.sort-data').first().text();
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ targets: [5, 6, 8, 10, 11, 12],
|
|
|
+ type: 'num',
|
|
|
+ render: function (data, type, row, meta) {
|
|
|
+ if(type === 'sort') {
|
|
|
+ return +($(data).find('.sort-data').first().text());
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ]
|
|
|
});
|
|
|
+ $('#practice-remote-monitoring').removeAttr('v-cloak');
|
|
|
+ $('#practice-remote-monitoring [moe][initialized]').removeAttr('initialized');
|
|
|
+ initMoes();
|
|
|
}
|
|
|
- addMCInitializer('admin-remote-monitoring', init, '#admin-remote-monitoring');
|
|
|
+ addMCInitializer('practice-remote-monitoring', init, '#practice-remote-monitoring');
|
|
|
}).call(window);
|
|
|
</script>
|
|
|
@endsection
|