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

Added patients without default settings filter

Samson Mutunga 3 лет назад
Родитель
Сommit
82ff03e4b8

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

@@ -463,4 +463,75 @@ class AdminController extends Controller
         return view('app.admin.bdt_devices', compact('bdtDevices', 'filters'));
     }
 
+    public function patientsMissingDefasultSettings(Request $request){
+        $filters = $request->all();
+        $patients = Client::whereNull('shadow_pro_id');
+
+        $patients = $patients->where(function($qry){
+            return $qry->orWhereNull('mcp_pro_id')->orWhereNull('default_mcp_company_pro_id')->orWhereNull('default_mcp_company_pro_payer_id')->orWhereNull('default_mcp_company_location_id');
+        });
+
+        if ($request->input('name')) {
+            $name = trim($request->input('name'));
+            if ($name) {
+                $patients = $patients->where(function ($q) use ($name) {
+                    $q->where('name_first', 'ILIKE', '%' . $name . '%')
+                        ->orWhere('name_last', 'ILIKE', '%' . $name . '%');
+                });
+            }
+        }
+
+        if ($request->input('mcp')) {
+            if($request->input('mcp') == 'NO_MCP'){
+                $patients = $patients->whereNull('mcp_pro_id');
+            }else{
+                $mcp = Pro::where('uid', trim($request->input('mcp')))->first();
+                if ($mcp) {
+                    $patients = $patients->where('mcp_pro_id', $mcp->id);
+                }
+            }
+        }
+
+        if ($request->input('chart_number')) {
+            $patients = $patients->where('chart_number', 'ILIKE' , '%'.$request->input('chart_number').'%');
+        }
+
+        $status = $request->input('status');
+        if($status){
+            if($status == 'ACTIVE'){
+                $patients->where('is_active', true)->where(function($q) use ($status){
+                    return $q->where('client_engagement_status_category', $status)
+                    ->orWhereNull('client_engagement_status_category');
+                });    
+            }else {
+                $patients->where('client_engagement_status_category', $status);
+            }
+
+        }
+
+        $insurance = $request->get('insurance');
+        if($insurance){
+            if($insurance === 'MEDICARE'){
+                $patients = $patients->whereHas('latestClientPrimaryCoverage', function($cpcQuery){
+                    return $cpcQuery->where('is_partbprimary', '=', 'YES');
+                });
+            }else{
+                $patients = $patients->whereDoesntHave('latestClientPrimaryCoverage', function($cpcQuery){
+                    return $cpcQuery->where('is_partbprimary', '=', 'YES');
+                });
+            }
+        }
+        
+        $missing_default_settings = $request->get('missing_default_settings');
+        if($missing_default_settings){
+            if($missing_default_settings === 'NO_MCP') $patients = $patients->whereNull('mcp_pro_id');
+            if($missing_default_settings === 'NO_MCP_COMPANY_PRO') $patients = $patients->whereNull('default_mcp_company_pro_id');
+            if($missing_default_settings === 'NO_MCP_COMPANY_PRO_PAYER') $patients = $patients->whereNull('default_mcp_company_pro_payer_id');
+            if($missing_default_settings === 'NO_MCP_COMPANY_LOCATION') $patients = $patients->whereNull('default_mcp_company_location_id');
+        }
+
+        $patients = $patients->orderBy('created_at', 'DESC')->paginate(50);
+        return view('app.admin.patients_missing_default_settings', compact('patients', 'filters'));
+    }
+
 } 

+ 64 - 0
resources/views/app/admin/patients_missing_default_settings.blade.php

@@ -0,0 +1,64 @@
+@extends ('layouts/template')
+
+@section('content')
+<div class="p-3 mcp-theme-1" id="patients-list">
+	<div class="card border-bottom-0">
+
+		<div class="card-header px-3 py-2 d-flex align-items-center">
+			<strong class="mr-4">
+				<i class="fas fa-users"></i>
+				PatientsMissing Default Settings
+			</strong>
+		</div>
+		<div class="p-3">
+			@include('app.admin.patients_missing_defsult_settings_filters')
+		</div>
+		<table class="table table-striped p-0 m-0 table-sm border-top border-bottom ">
+			<thead class="bg-light">
+				<tr>
+					<th class="border-0">Chart #</th>
+					<th class="border-0">Patient</th>
+					<th class="border-0">MCP</th>
+					<th class="border-0">Default MCP Company Pro</th>
+					<th class="border-0">Default MCP Company Pro Payer</th>
+					<th class="border-0">Default MCP Company Location</th>
+
+				</tr>
+			</thead>
+			<tbody>
+				@foreach($patients as $patient)
+				<tr>
+					<td>
+						<a href="{{route('patients.view.settings', $patient)}}">
+							{{$patient->chart_number}}
+						</a>
+					</td>
+					<td>
+						<a href="{{route('patients.view.settings', $patient)}}">
+							{{$patient->displayName()}}
+						</a>
+					</td>
+					<td>{{ $patient->mcp ? $patient->mcp->displayName() : 'NO' }}</td>
+					<td>{{ $patient->defaultMcpCompanyPro ? $patient->defaultMcpCompanyPro->company->name : 'NO' }}</td>
+					<td>{{ $patient->defaultMcpCompanyProPayer ? $patient->defaultMcpCompanyProPayer->payer->name : 'NO' }}</td>
+					<td>{{$patient->default_mcp_company_location_id? implode(" ", [$patient->defaultMcpCompanyLocation->line1, $patient->defaultMcpCompanyLocation->city, $patient->defaultMcpCompanyLocation->state]):'NO'}}</td>
+				</tr>
+				@endforeach
+
+				@if(count($patients) === 0)
+				<tr>
+					<td colspan="6">No records found!</td>
+				</tr>
+				@endif
+			</tbody>
+
+		</table>
+	</div>
+	<div class="p-3">
+		{{$patients->withQueryString()->links()}}
+	</div>
+
+</div>
+</div>
+</div>
+@endsection

+ 145 - 0
resources/views/app/admin/patients_missing_defsult_settings_filters.blade.php

@@ -0,0 +1,145 @@
+<style>
+	#admin-patients-filters label {
+		font-weight: bold;
+	}
+
+	#admin-patients-filters .mw-100px {
+		min-width: 100px;
+	}
+	.filter-container{
+		display: flex;
+		align-items: flex-start;
+		flex-wrap: wrap;
+	}
+	.filter-container >div {
+		width: 165px;
+	}
+	.filter-container >div:not(:last-child) {
+		margin-right: 10px;
+	}
+	.sm-section {
+		width: 150px !important;
+	}
+</style>
+<form id="admin-patients-filters" method="GET" action="{{ route('admin.patientsMissingDefasultSettings') }}" class="filter-container" v-cloak>
+	<div class="sm-section">
+		<div class="">
+			<label>Name:</label>
+			<input name="name" class="form-control input-sm" v-model="filters.name">
+		</div>
+	</div>
+
+	<div class="sm-section">
+		<div class="mcp-filter-container">
+			<label>MCP:</label>
+		</div>
+	</div>
+
+	<!-- STATUS -->
+	<div class="sm-section">
+		<div class="">
+			<label>Status:</label>
+			<select name="status" class="form-control input-sm" v-model="filters.status">
+				<option value="">All</option>
+ 				<option value="ACTIVE">Active</option>
+ 				<option value="DUMMY">Test Record</option>
+ 				<option value="NO_LONGER_INTERESTED">No Longer Interested</option>
+ 				<option value="INACTIVE">Inactive</option>
+ 				<option value="ENTRY_ERROR">Entry Error</option>
+ 				<option value="DUPLICATE">Duplicate</option>
+ 				<option value="DECEASED">Deceased</option>
+ 				<option value="BAD_RECORD">Bad Record</option>
+			</select>
+		</div>
+	</div>
+
+	<div class="sm-section">
+		<div class="">
+			<label>Insurance:</label>
+			<select class="form-control"  name="insurance" v-model="filters.insurance">
+				<option value=""></option>
+				<option value="MEDICARE">Medicare (Part B)</option>
+				<option value="OTHER">Other</option>
+			</select>
+		</div>
+	</div>
+
+	<div class="sm-section">
+		<div class="">
+			<label>Chart #</label>
+			<input class="form-control"  name="chart_number" v-model="filters.chart_number">
+		</div>
+	</div>
+
+	<div class="sm-section" style="width: 185px !important;">
+		<div class="">
+			<label>Missing Default Setting(s):</label>
+			<select class="form-control"  name="missing_default_settings" v-model="filters.missing_default_settings">
+				<option value="">Any</option>
+				<option value="NO_MCP">No MCP</option>
+				<option value="NO_MCP_COMPANY_PRO">No MCP Company Pro</option>
+				<option value="NO_MCP_COMPANY_PRO_PAYER">No MCP Company Pro Payer</option>
+				<option value="NO_MCP_COMPANY_LOCATION">No MCP Company Location</option>
+			</select>
+		</div>
+	</div>
+	
+	<div>
+		<div class="">
+			<label>&nbsp;</label>
+			<div class=" d-flex">
+				<button type="button" v-on:click.prevent="doSubmit()" class="btn btn-primary btn-sm mr-2"><i class="fas fa-filter"></i> Filter</button>
+				<a href="#" v-on:click.prevent="fastLoad('{{route('admin.patientsMissingDefasultSettings')}}')" class="btn btn-link btn-sm text-danger">Clear</a>
+			</div>
+		</div>
+	</div>
+</form>
+
+<?php
+$loadedFilters = $filters;
+$allFilterKeys = [
+	'name',	
+	'status',
+	'insurance',
+	'chart_number',
+	'missing_default_settings'
+];
+for ($i=0; $i < count($allFilterKeys); $i++) {
+	if (!isset($loadedFilters[$allFilterKeys[$i]]) || !$loadedFilters[$allFilterKeys[$i]]) {
+		$loadedFilters[$allFilterKeys[$i]] = '';
+	}
+}
+?>
+<script>
+	(function() {
+		function init() {
+			new Vue({
+				el: '#admin-patients-filters',
+				delimiters: ['@{{', '}}'],
+				data: {
+					filters: <?= json_encode($loadedFilters) ?>
+				},
+				methods: {
+					init: function() {
+
+					},
+					doSubmit: function() {
+						fastLoad("{{ route('admin.patientsMissingDefasultSettings') }}?" + $('#admin-patients-filters').serialize());
+						return false;
+					}
+				},
+				mounted: function() {
+					console.log(this.filters);
+					this.init();
+
+					let mcpSelect = $('<select name="mcp" class="form-control min-width-unset input-sm" provider-search data-pro-uid="{{request()->input("mcp")}}" provider-type="hcp"><option value="">--select--</option></select>').appendTo('.mcp-filter-container');
+					let naSelect = $('<select name="na" class="form-control min-width-unset input-sm" provider-search data-pro-uid="{{request()->input("na")}}" provider-type="non-hcp"><option value="">--select--</option></select>').appendTo('.na-filter-container');
+					initProSuggest();
+				},
+			});
+
+
+		}
+		addMCInitializer('admin-patients-filters', init, '#admin-patients-filters');
+	})();
+</script>

+ 1 - 0
resources/views/layouts/template.blade.php

@@ -193,6 +193,7 @@
                             <a class="dropdown-item" href="{{ route('practice-management.visitTemplates') }}">Visit Templates</a>
                             <a class="dropdown-item" href="{{ route('admin.part_b_patients') }}">Part B Patients</a>
                             <a class="dropdown-item" href="{{ route('admin.bdt_devices') }}">BDT Devices</a>
+                            <a class="dropdown-item" href="{{ route('admin.patientsMissingDefasultSettings') }}">Patients Missing Default Settings</a>
                         @elseif($pro->is_enrolled_as_mcp && $pro->is_considered_for_mcp_assignment)
 
                             <a class="dropdown-item" href="{{ route('practice-management.financialTransactions') }}">Financial Transactions</a>

+ 1 - 1
routes/web.php

@@ -219,7 +219,7 @@ Route::middleware('pro.auth')->group(function () {
         Route::get('reports', 'AdminController@reports')->name('reports');
         Route::get('supply-orders', 'AdminController@supply_orders')->name('supply_orders');
         Route::get('get-create-new-patient-script-template', 'AdminController@getCreateNewPatientScriptTemplate')->name('getCreateNewPatientScriptTemplate');
-    
+        Route::get('patients-missing-defult-settings', 'AdminController@patientsMissingDefasultSettings')->name('patientsMissingDefasultSettings');
        
     });