Quellcode durchsuchen

Merge branch 'dev-927' of https://rav.triplestart.com/jmudaka/stagfe2 into dev-927

Peter Muturi vor 3 Jahren
Ursprung
Commit
6e2e74ad37

+ 14 - 21
app/Http/Controllers/PayerController.php

@@ -6,29 +6,22 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
 
 use App\Models\Payer;
+use Illuminate\Support\Facades\DB;
+
 class PayerController extends Controller
 {
-
-    public function search(Request $request){
-		$validatedData = Validator::make($request->all(), [
-			'term' => 'required|string|min:2',
+	public function searchPayerV2JSON(Request $request)
+	{
+		$term = $request->input('term') ? trim($request->input('term')) : '';
+		if (empty($term)) return '';
+		$matches = DB::select(
+			"
+			SELECT id, uid, name as text FROM payer WHERE name ILIKE :term OR memo ILIKE :term", 
+			['term' => '%' . $term . '%']
+		);
+		return json_encode([
+			"success" => true,
+			"data" => $matches
 		]);
-
-		if ($validatedData->fails()) return $this->fail($validatedData->errors()->first());
-
-		[
-			'term' => $query,
-		] = $request->all();
-
-
-		$wildCardedQuery = '%' . $query . '%';
-
-		$payers = Payer::where(function ($query) use ($wildCardedQuery) {
-			return $query->where('name', 'ilike', $wildCardedQuery)
-			->orWhere('memo', 'ilike', $wildCardedQuery);
-		});
-		$payers = $payers->get();
-		return $this->pass($payers);
 	}
-    
 }

+ 0 - 50
public/js/stag.js

@@ -1,50 +0,0 @@
-(function ($) {
-	STAG = {
-		initSelect2RemoteSearch: function () {
-			var select2SearchFields = $('[select2-search]');
-			console.log({select2SearchFields});
-			$.each(select2SearchFields, function (i, select) {
-				select = $(select);
-				var url = select.data('url');
-				var text = select.data('text-prop');
-				text = text.split('|');
-				var id = select.data('id-prop');
-				var uid = select.data('uid-prop');
-				var placeholder = select.attr('placeholder');
-				select.select2({
-					placeholder: placeholder,
-					minimumInputLength: 2,
-					ajax: {
-						type: "GET",
-						url: url,
-						dataType: 'json',
-						processResults: function (response) {
-							var data = response.data;
-							return {
-								results: $.map(data, function (item) {
-									var textString = '';
-									for (var i = 0; i < text.length; i++) {
-										var prop = text[i];
-										var value = item[prop];
-										if (value) {
-											textString = textString + value + ' ';
-										}
-									}
-									return {
-										text: textString,
-										id: item[id]
-									}
-								})
-							};
-						}
-					}
-				});
-			});
-		},
-		init: function () {
-			this.initSelect2RemoteSearch();
-		}
-	};
-	STAG.init();
-		
-})(jQuery);

+ 198 - 151
resources/views/app/patient/primary-coverage-form.blade.php

@@ -1,33 +1,32 @@
 	<div id="new-coverage-form-{{$patient->uid}}">
 		<div class="p-3">
-		<form :url="url" class="mcp-theme-1">
-			<input type="hidden" name="clientUid" value="{{$patient->uid}}" class="form-control input-sm" />
-			<div class="row">
-				<div class="form-group col-md-12">
-					<p class="mb-1">Type of insurance card:</p>
-					<div class="form-check form-check-inline">
-					  <label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="medicare">Medicare Part B (Primary)</label>
-					</div>
-					<div class="form-check form-check-inline">
-					  <label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="medicaid">Medicaid (Primary)</label>
-					</div>
-					<div class="form-check form-check-inline">
-					  <label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="commercial">Commercial / Third Party (Primary)</label>
+			<form :url="url" class="mcp-theme-1" @submit.prevent="submitForm">
+				<input type="hidden" name="clientUid" value="{{$patient->uid}}" class="form-control input-sm" />
+				<div class="row">
+					<div class="form-group col-md-12">
+						<p class="mb-1">Type of insurance card:</p>
+						<div class="form-check form-check-inline">
+							<label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="medicare">Medicare Part B (Primary)</label>
+						</div>
+						<div class="form-check form-check-inline">
+							<label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="medicaid">Medicaid (Primary)</label>
+						</div>
+						<div class="form-check form-check-inline">
+							<label class="form-check-label"><input class="form-check-input" type="radio" v-model="insuranceCardType" @change="updateUrl" name="insuranceCardType" value="commercial">Commercial / Third Party (Primary)</label>
+						</div>
 					</div>
 				</div>
-			</div>
 
-			<div class="row" v-if="insuranceCardType == 'commercial'">
-				<div class="form-group col-md-12">
-					<label for="" class="control-label">Commercial Payer</label>
-					<select name="commercialPayerUid" data-url="{{ route('searchPayer') }}" data-text-prop="name" data-id-prop="uid" placeholder="Search" select2-search class="form-control input-sm">
-						<option value="">--</option>
-					</select>
+				<div class="row" v-show="insuranceCardType == 'commercial'">
+					<div class="form-group col-md-12">
+						<label for="" class="control-label">Commercial Payer</label>
+						<input name="commercialPayerUidSuggest" class="form-control input-sm" value="" stag-suggest stag-suggest-ep="/search-payer/json" />
+						<input type="hidden" name="commercialPayerUid" />
+					</div>
 				</div>
-			</div>
 
 
-			<div class="row" v-if="insuranceCardType">
+				<div class="row" v-if="insuranceCardType">
 					<div class="col-md-12 bg-light p-3 mb-2">
 						<h5 class="m-0 font-weight-bold">Patient Name / Demographics:</h5>
 					</div>
@@ -49,7 +48,7 @@
 					</div>
 					<div class="form-group col-md-4">
 						<label class="control-label">Patient Sex</label>
-						<select class="form-control input-sm" name="patientSex">
+						<select class="form-control input-sm" name="patientSex" select2>
 							<option value="">--</option>
 							<option value="M">Male</option>
 							<option value="F">Female</option>
@@ -64,23 +63,23 @@
 						<label class="control-label">Date Of Service</label>
 						<input type="date" name="dateOfService" value="{{date('Y-m-d')}}" class="form-control input-sm">
 					</div>
-			</div>
-			<div class="row">
-				<div class="form-group col-md-12" v-if="insuranceCardType == 'medicaid' || insuranceCardType == 'commercial'">
-					<p class="mb-1">Is Patient The Subscriber?</p>
-					<div class="form-check form-check-inline">
-					  <label class="form-check-label"><input class="form-check-input" type="radio" name="isPatientSubscriber" v-model="isPatientSubscriber" value="1">Yes</label>
-					</div>
-					<div class="form-check form-check-inline">
-					  <label class="form-check-label"><input class="form-check-input" type="radio" name="isPatientSubscriber" v-model="isPatientSubscriber" value="0">No</label>
+				</div>
+				<div class="row">
+					<div class="form-group col-md-12" v-if="insuranceCardType == 'medicaid' || insuranceCardType == 'commercial'">
+						<p class="mb-1">Is Patient The Subscriber?</p>
+						<div class="form-check form-check-inline">
+							<label class="form-check-label"><input class="form-check-input" type="radio" name="isPatientSubscriber" v-model="isPatientSubscriber" value="1">Yes</label>
+						</div>
+						<div class="form-check form-check-inline">
+							<label class="form-check-label"><input class="form-check-input" type="radio" name="isPatientSubscriber" v-model="isPatientSubscriber" value="0">No</label>
+						</div>
 					</div>
 				</div>
-			</div>
 
-			<div v-if="isPatientSubscriber == 0 && (insuranceCardType == 'medicaid' || insuranceCardType == 'commercial')" class="row">
-				<div class="col-md-12 bg-light p-3 mb-2">
-					<h5 class="m-0 font-weight-bold">Subscriber Details:</h5>
-				</div>
+				<div v-if="isPatientSubscriber == 0 && (insuranceCardType == 'medicaid' || insuranceCardType == 'commercial')" class="row">
+					<div class="col-md-12 bg-light p-3 mb-2">
+						<h5 class="m-0 font-weight-bold">Subscriber Details:</h5>
+					</div>
 					<div class="form-group col-md-4">
 						<label class="control-label">Subscriber First Name</label>
 						<input type="text" name="subscriberNameFirst" value="{{$patient->name_first}}" class="form-control input-sm">
@@ -124,127 +123,175 @@
 							<option value="UNKNOWN">Unknown</option>
 						</select>
 					</div>
-			</div>
-			<div class="mb-1" v-if="insuranceCardType == 'commercial'">
-				<p>Does the patient also have either a Medicare or Medicaid #? (optional)</p>
-			</div>
-			<div class="row" v-if="insuranceCardType == 'medicaid' || insuranceCardType == 'commercial'">
-				<div class="col-md-12 bg-light p-3 mb-2">
-					<h5 class="m-0 font-weight-bold">Medicaid Information:</h5>
 				</div>
-				<div class="form-group col-md-6">
-					<label for="" class="control-label">Medicaid State</label>
-					<select name="mcdPayerUid" id="" class="form-control input-sm">
-						<option value="">--</option>
-						<option>MEDICAID ALABAMA</option>
-						<option>MEDICAID ALASKA</option>
-						<option>MEDICAID ARIZONA</option>
-						<option>MEDICAID ARKANSAS</option>
-						<option>MEDICAID CALIFORNIA MEDI-CAL</option>
-						<option>MEDICAID COLORADO</option>
-						<option>MEDICAID CONNECTICUT</option>
-						<option>MEDICAID DELAWARE</option>
-						<option>MEDICAID DISTRICT OF COLUMBIA</option>
-						<option>MEDICAID FLORIDA</option>
-						<option>MEDICAID GEORGIA</option>
-						<option>MEDICAID HAWAII</option>
-						<option>MEDICAID IDAHO</option>
-						<option>MEDICAID ILLINOIS</option>
-						<option>MEDICAID INDIANA</option>
-						<option>MEDICAID IOWA</option>
-						<option>MEDICAID KANSAS</option>
-						<option>MEDICAID KENTUCKY</option>
-						<option>MEDICAID LOUISIANA</option>
-						<option>MEDICAID MAINE</option>
-						<option>MEDICAID MARYLAND</option>
-						<option>MEDICAID MARYLAND DHMH</option>
-						<option>MEDICAID MASSACHUSETTS</option>
-						<option>MEDICAID MICHIGAN</option>
-						<option>MEDICAID MINNESOTA</option>
-						<option>MEDICAID MISSISSIPPI</option>
-						<option>MEDICAID MISSISSIPPI</option>
-						<option>MEDICAID MISSOURI</option>
-						<option>MEDICAID MONTANA</option>
-						<option>MEDICAID NEBRASKA</option>
-						<option>MEDICAID NEVADA</option>
-						<option>MEDICAID NEW HAMPSHIRE</option>
-						<option>MEDICAID NEW JERSEY</option>
-						<option>MEDICAID NEW MEXICO</option>
-						<option>MEDICAID NEW YORK</option>
-						<option>MEDICAID NEW YORK</option>
-						<option>MEDICAID NORTH CAROLINA</option>
-						<option>MEDICAID NORTH DAKOTA</option>
-						<option>MEDICAID OHIO</option>
-						<option>MEDICAID OKLAHOMA</option>
-						<option>MEDICAID OREGON</option>
-						<option>MEDICAID OREGON (DHS OMAP)</option>
-						<option>MEDICAID PENNSYLVANIA</option>
-						<option>MEDICAID RHODE ISLAND</option>
-						<option>MEDICAID SOUTH CAROLINA</option>
-						<option>MEDICAID SOUTH DAKOTA</option>
-						<option>MEDICAID TENNESSEE</option>
-						<option>MEDICAID TEXAS</option>
-						<option>MEDICAID TEXAS AND TEXAS HEALTH STEPS</option>
-						<option>MEDICAID UTAH</option>
-						<option>MEDICAID VERMONT</option>
-						<option>MEDICAID VIRGINIA</option>
-						<option>MEDICAID WASHINGTON (PROVIDER ONE)</option>
-						<option>MEDICAID WEST VIRGINIA</option>
-						<option>MEDICAID WISCONSIN</option>
-						<option>MEDICAID WYOMING</option>
-					</select>
+				<div class="mb-1" v-if="insuranceCardType == 'commercial'">
+					<p>Does the patient also have either a Medicare or Medicaid #? (optional)</p>
 				</div>
+				<div class="row" v-if="insuranceCardType == 'medicaid' || insuranceCardType == 'commercial'">
+					<div class="col-md-12 bg-light p-3 mb-2">
+						<h5 class="m-0 font-weight-bold">Medicaid Information:</h5>
+					</div>
+					<div class="form-group col-md-6">
+						<label for="" class="control-label">Medicaid State</label>
+						<input class="form-control input-sm" list="mcdPayer" name="mcdPayerUid" id="mcdPayerUid">
+						<datalist id="mcdPayer">
+							<option value="">--</option>
+							<option>MEDICAID ALABAMA</option>
+							<option>MEDICAID ALASKA</option>
+							<option>MEDICAID ARIZONA</option>
+							<option>MEDICAID ARKANSAS</option>
+							<option>MEDICAID CALIFORNIA MEDI-CAL</option>
+							<option>MEDICAID COLORADO</option>
+							<option>MEDICAID CONNECTICUT</option>
+							<option>MEDICAID DELAWARE</option>
+							<option>MEDICAID DISTRICT OF COLUMBIA</option>
+							<option>MEDICAID FLORIDA</option>
+							<option>MEDICAID GEORGIA</option>
+							<option>MEDICAID HAWAII</option>
+							<option>MEDICAID IDAHO</option>
+							<option>MEDICAID ILLINOIS</option>
+							<option>MEDICAID INDIANA</option>
+							<option>MEDICAID IOWA</option>
+							<option>MEDICAID KANSAS</option>
+							<option>MEDICAID KENTUCKY</option>
+							<option>MEDICAID LOUISIANA</option>
+							<option>MEDICAID MAINE</option>
+							<option>MEDICAID MARYLAND</option>
+							<option>MEDICAID MARYLAND DHMH</option>
+							<option>MEDICAID MASSACHUSETTS</option>
+							<option>MEDICAID MICHIGAN</option>
+							<option>MEDICAID MINNESOTA</option>
+							<option>MEDICAID MISSISSIPPI</option>
+							<option>MEDICAID MISSISSIPPI</option>
+							<option>MEDICAID MISSOURI</option>
+							<option>MEDICAID MONTANA</option>
+							<option>MEDICAID NEBRASKA</option>
+							<option>MEDICAID NEVADA</option>
+							<option>MEDICAID NEW HAMPSHIRE</option>
+							<option>MEDICAID NEW JERSEY</option>
+							<option>MEDICAID NEW MEXICO</option>
+							<option>MEDICAID NEW YORK</option>
+							<option>MEDICAID NEW YORK</option>
+							<option>MEDICAID NORTH CAROLINA</option>
+							<option>MEDICAID NORTH DAKOTA</option>
+							<option>MEDICAID OHIO</option>
+							<option>MEDICAID OKLAHOMA</option>
+							<option>MEDICAID OREGON</option>
+							<option>MEDICAID OREGON (DHS OMAP)</option>
+							<option>MEDICAID PENNSYLVANIA</option>
+							<option>MEDICAID RHODE ISLAND</option>
+							<option>MEDICAID SOUTH CAROLINA</option>
+							<option>MEDICAID SOUTH DAKOTA</option>
+							<option>MEDICAID TENNESSEE</option>
+							<option>MEDICAID TEXAS</option>
+							<option>MEDICAID TEXAS AND TEXAS HEALTH STEPS</option>
+							<option>MEDICAID UTAH</option>
+							<option>MEDICAID VERMONT</option>
+							<option>MEDICAID VIRGINIA</option>
+							<option>MEDICAID WASHINGTON (PROVIDER ONE)</option>
+							<option>MEDICAID WEST VIRGINIA</option>
+							<option>MEDICAID WISCONSIN</option>
+							<option>MEDICAID WYOMING</option>
+						</datalist>
+					</div>
 
-				<div class="form-group col-md-6">
-					<label class="control-label">Medicaid Number</label>
-					<input type="text" name="mcdNumber"  class="form-control input-sm">
+					<div class="form-group col-md-6">
+						<label class="control-label">Medicaid Number</label>
+						<input type="text" name="mcdNumber" class="form-control input-sm">
+					</div>
 				</div>
-			</div>
 
-			<div class="row" v-if="insuranceCardType == 'medicare' || insuranceCardType == 'commercial'">
-				<div class="col-md-12 bg-light p-3 mb-2">
-					<h5 class="m-0 font-weight-bold">Medicare Information:</h5>
-				</div>
-				<div class="form-group col-md-6" >
-					<label class="control-label">Medicare Number</label>
-					<input type="text" name="mcrNumber" class="form-control input-sm">
+				<div class="row" v-if="insuranceCardType == 'medicare' || insuranceCardType == 'commercial'">
+					<div class="col-md-12 bg-light p-3 mb-2">
+						<h5 class="m-0 font-weight-bold">Medicare Information:</h5>
+					</div>
+					<div class="form-group col-md-6">
+						<label class="control-label">Medicare Number</label>
+						<input type="text" name="mcrNumber" class="form-control input-sm">
+					</div>
+
 				</div>
 
-			</div>
+				<div v-if="response" :class="response.success ? 'alert success' : 'alert alert-danger'">
+					@{{ response.message }}
+				</div>
 
-			<div class="form-group text-nowrap mb-0">
-				<button class="btn btn-sm btn-primary" type="submit" :disabled="url == ''">Submt</button>
-			</div>
-		</form>
+				<div class="form-group text-nowrap mb-0">
+					<button v-if="!processing" class="btn btn-sm btn-primary" type="submit" :disabled="url == ''">Submt</button>
+					<button v-else class="btn btn-sm btn-primary" type="button"><i class="fas fa-circle-notch fa-spin"></i> Processing...</button>
+				</div>
+			</form>
+		</div>
 	</div>
-</div>
-<script>
-    (function() {
-        function init() {
-						STAG.initSelect2RemoteSearch()
-            new Vue({
-                el: '#new-coverage-form-{{$patient->uid}}',
-								delimiters:['@{{','}}'],
-								data: {
-									url: '',
-									insuranceCardType: '',
-									isPatientSubscriber: 1
-								},
-								methods: {
-									updateUrl: function() {
-										if (this.insuranceCardType == 'medicare') {
-											this.url = '/api/clientPrimaryCoverage/createNewCoverageForMedicare';
-										}
-										if (this.insuranceCardType == 'medicaid') {
-											this.url = '/api/clientPrimaryCoverage/createNewCoverageForMedicaid';
-										}
-										if (this.insuranceCardType == 'commercial') {
-											this.url = '/api/clientPrimaryCoverage/createNewCoverageForCommercial';
-										}
-									}
+	<script>
+		(function() {
+			function init() {
+				new Vue({
+					el: '#new-coverage-form-{{$patient->uid}}',
+					delimiters: ['@{{', '}}'],
+					data: {
+						url: '',
+						insuranceCardType: '',
+						isPatientSubscriber: 1,
+						processing: false,
+						response: null
+					},
+					methods: {
+						updateUrl: function() {
+							if (this.insuranceCardType == 'medicare') {
+								this.url = '/api/clientPrimaryCoverage/createNewCoverageForMedicare';
+							}
+							if (this.insuranceCardType == 'medicaid') {
+								this.url = '/api/clientPrimaryCoverage/createNewCoverageForMedicaid';
+							}
+							if (this.insuranceCardType == 'commercial') {
+								this.url = '/api/clientPrimaryCoverage/createNewCoverageForCommercial';
+							}
+						},
+						onCommercialPayerChange: function() {
+							var input = $('input[name=commercialPayerUidSuggest]');
+							var hiddenInput = $('input[name=commercialPayerUid]');
+							input
+								.off('stag-suggest-selected')
+								.on('stag-suggest-selected', (e, input, _data) => {
+									hiddenInput.val(_data.uid);
+								});
+
+						},
+						submitForm: function(evt) {
+							var self = this;
+							var form = evt.target;
+							var data = $(form).serializeArray();
+							var url = $(form).attr('url');
+							if (!url) {
+								self.response = {
+									success: false,
+									message: 'Invalid url'
+								};
+								return;
+							}
+
+							self.processing = true;
+							$.post(url, data, function(response) {
+								self.processing = false;
+								if (response.success) {
+									closeStagPopup();
+									fastReload();
+								} else {
+									self.response = response;
 								}
-            });
-        }
-        addMCInitializer('new-coverage-form-{{$patient->uid}}', init, '#new-coverage-form-{{$patient->uid}}')
-    }).call(window);
-</script>
+							}, 'json');
+						},
+						init: function() {
+							initStagSuggest();
+							this.onCommercialPayerChange();
+						}
+					},
+					mounted: function() {
+						this.init();
+					}
+				});
+			}
+			addMCInitializer('new-coverage-form-{{$patient->uid}}', init, '#new-coverage-form-{{$patient->uid}}')
+		}).call(window);
+	</script>

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

@@ -394,9 +394,6 @@
     @endif
     <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.24/fc-3.3.2/fh-3.1.8/datatables.min.css"/>
     <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.24/fc-3.3.2/fh-3.1.8/datatables.min.js"></script>
-    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
-    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
-    <script src="/js/stag.js?v={{config('app.asset_version')}}" type="application/javascript"></script>
 </body>
 
 </html>

+ 1 - 1
routes/web.php

@@ -419,7 +419,7 @@ Route::middleware('pro.auth')->group(function () {
     Route::any('/fdb-drug-coadministration', 'FDBPGController@drugCoadministration');
     Route::any('/fdb-duplicate-therapy', 'FDBPGController@duplicateTherapy');
 
-    Route::get('/search-payer', 'PayerController@search')->name('searchPayer');
+    Route::get('/search-payer/json', 'PayerController@searchPayerV2JSON')->name('searchPayerV2JSON');
 
 });