Vijayakrishnan Krishnan vor 4 Jahren
Ursprung
Commit
1e2108305e

+ 20 - 0
app/Http/Controllers/HomeController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Lib\Backend;
+use App\Models\ClientSMS;
 use DateTime;
 
 use App\Models\Client;
@@ -269,6 +270,25 @@ class HomeController extends Controller
         return view('app/patients', compact('patients', 'filter'));
     }
 
+    public function unmappedSMS(Request $request, $filter = '') {
+        $proID = $this->performer()->pro->id;
+        if($this->performer()->pro->pro_type === 'ADMIN') {
+            $query = Client::where('id', '>', 0);
+        }
+        else {
+            $query = Client::where(function ($q) use($proID) {
+                $q->where('mcp_pro_id', $proID)
+                    ->orWhere('cm_pro_id', $proID)
+                    ->orWhere('rmm_pro_id', $proID)
+                    ->orWhere('rme_pro_id', $proID)
+                    ->orWhereRaw('id IN (SELECT client_id FROM client_pro_access WHERE is_active AND pro_id = ?)', [$proID]);
+            });
+        }
+        $patients = $query->orderBy('name_last', 'asc')->orderBy('name_first', 'asc')->get();
+        $unmappedSMS = ClientSMS::where('client_id', null)->where('incoming_or_outgoing', 'INCOMING')->get();
+        return view('app/unmapped-sms', compact('unmappedSMS', 'patients'));
+    }
+
     public function newPatient(Request $request)
     {
         return view('app/new-patient');

+ 10 - 0
app/Http/Controllers/PatientController.php

@@ -87,6 +87,16 @@ class PatientController extends Controller
         return view('app.patient.history', compact('patient', 'infoLines'));
     }
 
+    public function sms(Request $request, Client $patient )
+    {
+        return view('app.patient.sms', compact('patient'));
+    }
+
+    public function smsNumbers(Request $request, Client $patient )
+    {
+        return view('app.patient.sms-numbers', compact('patient'));
+    }
+
     public function immunizations(Request $request, Client $patient )
     {
         return view('app.patient.immunizations', compact('patient'));

+ 10 - 0
app/Models/Client.php

@@ -52,4 +52,14 @@ class Client extends Model
             ->orderBy('created_at', 'desc');
     }
 
+    public function smses() {
+        return $this->hasMany(ClientSMS::class, 'client_id', 'id')
+            ->orderBy('created_at', 'desc');
+    }
+
+    public function smsNumbers() {
+        return $this->hasMany(ClientSMSNumber::class, 'client_id', 'id')
+            ->orderBy('created_at', 'desc');
+    }
+
 }

+ 10 - 0
app/Models/ClientSMS.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+# use Illuminate\Database\Eloquent\Model;
+
+class ClientSMS extends Model
+{
+    protected $table = 'client_sms';
+}

+ 10 - 0
app/Models/ClientSMSNumber.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+# use Illuminate\Database\Eloquent\Model;
+
+class ClientSMSNumber extends Model
+{
+    protected $table = 'client_sms_number';
+}

+ 37 - 0
resources/views/app/patient/sms-numbers.blade.php

@@ -0,0 +1,37 @@
+@extends ('layouts.patient')
+@section('inner-content')
+    <div>
+        <div class="d-flex align-items-center pb-2">
+            <h4 class="font-weight-bold m-0">SMS Numbers</h4>
+            <span class="mx-2 text-secondary">|</span>
+            <div moe>
+                <a start show class="">Send SMS</a>
+                <form url="/api/clientInfoLine/create">
+                    <input type="hidden" name="clientUid" value="{{ $patient->uid }}">
+                    <input type="hidden" name="category" value="rx">
+                    <div class="mb-2"><input type="text" class="form-control form-control-sm" name="contentText" value="" placeholder="Medication"></div>
+                    <div class="d-flex align-items-center">
+                        <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
+                        <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+                    </div>
+                </form>
+            </div>
+        </div>
+        <table class="table table-striped table-sm table-bordered">
+            <thead>
+            <tr>
+                <th class="px-2 text-secondary">Created</th>
+                <th class="px-2 text-secondary w-75">Number</th>
+            </tr>
+            </thead>
+            <tbody>
+            @foreach($patient->smsNumbers as $number)
+                <tr>
+                    <td class="px-2">{{ friendly_date_time($sms->created_at) }}</td>
+                    <td class="px-2">{{ $sms->sms_number }}</td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+    </div>
+@endsection

+ 39 - 0
resources/views/app/patient/sms.blade.php

@@ -0,0 +1,39 @@
+@extends ('layouts.patient')
+@section('inner-content')
+    <div class="">
+        <div class="d-flex align-items-center pb-2">
+            <h4 class="font-weight-bold m-0">SMS Messages</h4>
+            <span class="mx-2 text-secondary">|</span>
+            <div moe>
+                <a start show class="">Send SMS</a>
+                <form url="/api/clientInfoLine/create">
+                    <input type="hidden" name="clientUid" value="{{ $patient->uid }}">
+                    <input type="hidden" name="category" value="rx">
+                    <div class="mb-2"><input type="text" class="form-control form-control-sm" name="contentText" value="" placeholder="Medication"></div>
+                    <div class="d-flex align-items-center">
+                        <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
+                        <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+                    </div>
+                </form>
+            </div>
+        </div>
+        <table class="table table-striped table-sm table-bordered">
+            <thead>
+            <tr>
+                <th class="px-2 text-secondary">Date &amp; Time</th>
+                <th class="px-2 text-secondary w-25">Type</th>
+                <th class="px-2 text-secondary w-50">Content</th>
+            </tr>
+            </thead>
+            <tbody>
+            @foreach($patient->smses as $sms)
+                <tr>
+                    <td class="px-2">{{ friendly_date_time($sms->created_at) }}</td>
+                    <td class="px-2">{{ ucwords($sms->incoming_or_outgoing) }}</td>
+                    <td class="px-2">{{ $sms->body }}</td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+    </div>
+@endsection

+ 62 - 0
resources/views/app/unmapped-sms.blade.php

@@ -0,0 +1,62 @@
+@extends ('layouts/template')
+
+@section('content')
+
+    <div class="p-3 mcp-theme-1">
+    <div class="card">
+
+        <div class="card-header px-3 py-2 d-flex align-items-center">
+            <strong class="mr-4">
+                <i class="fas fa-user-injured"></i>
+                Unmapped SMS
+            </strong>
+            {{--<select class="ml-auto max-width-300px form-control form-control-sm" onchange="fastLoad('/patients/' + this.value, true, false, false)">
+                <option value="" {{ $filter === '' ? 'selected' : '' }}>All patients</option>
+                <option value="not-yet-seen" {{ $filter === 'not-yet-seen' ? 'selected' : '' }}>Patients I have not seen yet</option>
+            </select>--}}
+        </div>
+        <div class="card-body p-0">
+            <table class="table table-condensed p-0 m-0">
+                <thead class="bg-light">
+                <tr>
+                    <th class="px-3 border-0 w-25">Date &amp; Time</th>
+                    <th class="border-0">From</th>
+                    <th class="border-0 w-50">Content</th>
+                    <th class="border-0 w-25">&nbsp;</th>
+                </tr>
+                </thead>
+                <tbody>
+                @foreach($unmappedSMS as $sms)
+                    <tr>
+                        <td class="px-3">{{ friendly_date_time($sms->created_at, true) }}</td>
+                        <td>{{ $sms->from_number }}</td>
+                        <td>{{ $sms->body }}</td>
+                        <td>
+                            <div moe>
+                                <a start show>Map to Client</a>
+                                <form url="/api/clientSms/assignIncomingSmsToClient">
+                                    <input type="hidden" name="uid" value="{{$sms->uid}}">
+                                    <div class="form-group mb-2">
+                                        <label for="" class="text-secondary text-sm mb-1">Client</label>
+                                        <select name="clientUid" class="form-control form-control-sm">
+                                            <option value=""> --select-- </option>
+                                            @foreach($patients as $patient)
+                                                <option value="{{$patient->uid}}">{{$patient->displayName()}}</option>
+                                            @endforeach
+                                        </select>
+                                    </div>
+                                    <div class="form-group m-0">
+                                        <button submit class="btn btn-primary btn-sm">submit</button>
+                                    </div>
+                                </form>
+                            </div>
+                        </td>
+                    </tr>
+                @endforeach
+                </tbody>
+            </table>
+        </div>
+    </div>
+    </div>
+
+@endsection

+ 30 - 4
resources/views/layouts/patient.blade.php

@@ -35,6 +35,12 @@
                         <li class="nav-item">
                             <a class="nav-link" href="{{ route('patients.view.history', ['patient' => $patient]) }}">History</a>
                         </li>
+                        <li class="nav-item">
+                            <a class="nav-link" href="{{ route('patients.view.sms', ['patient' => $patient]) }}">SMS</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link" href="{{ route('patients.view.sms-numbers', ['patient' => $patient]) }}">SMS Numbers</a>
+                        </li>
                         <li class="nav-item">
                             <a class="nav-link" href="/patients/view/{{ $patient->uid }}/intake">Intake</a>
                         </li>
@@ -351,15 +357,35 @@
                                             </div>
                                         </form>
                                     </div>
+                                    <div>
+                                        <div moe relative>
+                                            <button start show>+ SMS</button>
+                                            <form url="/api/clientSms/createOutgoing" right class="mcp-theme-1">
+                                                <input type="hidden" name="uid" value="{{ $patient->uid }}">
+                                                <div class="mb-2">
+                                                    <label for="" class="text-sm text-secondary mb-1">Cell Number</label>
+                                                    <input type="text" class="form-control form-control-sm" name="cellNumber" value="{{$patient->cell_number}}">
+                                                </div>
+                                                <div class="mb-2">
+                                                    <label for="" class="text-sm text-secondary mb-1">Message</label>
+                                                    <textarea type="text" class="form-control form-control-sm" name="message"></textarea>
+                                                </div>
+                                                <div class="d-flex align-items-center">
+                                                    <button class="btn btn-sm btn-primary mr-2" submit>Send</button>
+                                                    <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+                                                </div>
+                                            </form>
+                                        </div>
+                                    </div>
                                     <div>
                                         <button onclick="return openInRHS('/pro/meet/{{ $patient->uid }}')">Video</button>
                                         <span moe relative class="ml-1">
                                             <a start show title="SMS check-in link to the patient"><i class="on-hover-opaque fa fa-paper-plane"></i></a>
                                             <form url="/api/client/sendCheckInTokenViaSms" right class="mcp-theme-1">
                                                 <input type="hidden" name="uid" value="{{ $patient->uid }}">
-                                                <p class="small min-width-200px">Send SMS to patient with check-in link?</p>
-                                                <div class="form-group">
-                                                    <label for="" class="control-label">Cell Number</label>
+                                                <p class="small min-width-200px mb-2">Send SMS to patient with check-in link?</p>
+                                                <div class="mb-2">
+                                                    <label for="" class="text-sm text-secondary mb-1">Cell Number</label>
                                                     <input type="text" class="form-control input-sm" name="cellNumber" value="{{$patient->cell_number}}">
                                                 </div>
                                                 <div class="d-flex align-items-center">
@@ -579,7 +605,7 @@
                                         <div class="row">
                                             <div class="col-md-6">
                                                 <div class="form-group">
-                                                    <label for="" class="control-label">HCP Pro</label>
+                                                    <label for="" class="text-sm text-secondary mb-1">HCP Pro</label>
                                                     <select name="hcpProUid" class="form-control">
                                                         <option value="">-- select hcp pro --</option>
                                                         @foreach ($pros as $iPro)

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

@@ -69,6 +69,7 @@
                 <li class="nav-item"><a class="nav-link" href="{{ route('dashboard') }}"><i class="mr-1 fas fa-tachometer-alt"></i> Dashboard</a> </li>
                 <li class="nav-item"><a class="nav-link" href="{{ route('patients') }}"><i class="mr-1 fas fa-user-injured"></i> Patients</a> </li>
                 <li class="nav-item"><a class="nav-link" href="{{ route('new-patient') }}"><i class="mr-1 fas fa-user-plus"></i> New Patient</a> </li>
+                <li class="nav-item"><a class="nav-link" href="{{ route('unmapped-sms') }}"><i class="mr-1 fas fa-envelope"></i> Unmapped SMS</a> </li>
                 <li class="nav-item dropdown">
                     <a class="nav-link dropdown-toggle" href="#" id="practice-management" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="mr-1 fas fa-tasks"></i> Practice Management</a>
                     <div class="dropdown-menu" aria-labelledby="practice-management">

+ 4 - 0
routes/web.php

@@ -53,6 +53,8 @@ Route::middleware('pro.auth')->group(function () {
 
     Route::get('/patients/{filter?}', 'HomeController@patients')->name('patients');
 
+    Route::get('/unmapped-sms/{filter?}', 'HomeController@unmappedSMS')->name('unmapped-sms');
+
     Route::name('practice-management.')->prefix('practice-management')->group(function () {
         Route::get('rates', 'PracticeManagementController@rates')->name('rates');
         Route::get('dashboard', 'PracticeManagementController@dashboard')->name('dashboard');
@@ -77,6 +79,8 @@ Route::middleware('pro.auth')->group(function () {
         Route::get('measurements', 'PatientController@measurements')->name('measurements');
         Route::get('labs-and-studies', 'PatientController@labsAndStudies')->name('labs-and-studies');
         Route::get('history', 'PatientController@history')->name('history');
+        Route::get('sms', 'PatientController@sms')->name('sms');
+        Route::get('sms-numbers', 'PatientController@smsNumbers')->name('sms-numbers');
         Route::get('immunizations', 'PatientController@immunizations')->name('immunizations');
         Route::get('allergies', 'PatientController@allergies')->name('allergies');
         Route::get('action-items', 'PatientController@actionItems')->name('action-items');