浏览代码

Merge branch 'dev' of rav.triplestart.com:jmudaka/stagfe2 into master

= 4 年之前
父节点
当前提交
8488d7e590

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

@@ -6,6 +6,7 @@ use App\Lib\Backend;
 use App\Models\Appointment;
 use App\Models\Appointment;
 use App\Models\AppSession;
 use App\Models\AppSession;
 use App\Models\ClientSMS;
 use App\Models\ClientSMS;
+use App\Models\Facility;
 use App\Models\Ticket;
 use App\Models\Ticket;
 use DateTime;
 use DateTime;
 
 
@@ -241,6 +242,9 @@ class HomeController extends Controller
             })
             })
             ->count();
             ->count();
 
 
+        // num measurements that need stamping
+        $keyNumbers['measurementsToBeStamped'] = count($this->performer()->pro->getMeasurements(true));
+
         $reimbursement = [];
         $reimbursement = [];
         $reimbursement["currentBalance"] =  $performer->pro->balance;
         $reimbursement["currentBalance"] =  $performer->pro->balance;
         $reimbursement["nextPaymentDate"] = '--';
         $reimbursement["nextPaymentDate"] = '--';
@@ -334,6 +338,11 @@ class HomeController extends Controller
         return json_encode($appointments);
         return json_encode($appointments);
     }
     }
 
 
+    public function dashboardMeasurements(Request $request, $filter) {
+        $measurements = $this->performer()->pro->getMeasurements($filter === 'NEED_ACK');
+        return json_encode($measurements);
+    }
+
     public function patients(Request $request, $filter = '')
     public function patients(Request $request, $filter = '')
     {
     {
         $performer = $this->performer();
         $performer = $this->performer();
@@ -386,6 +395,29 @@ class HomeController extends Controller
         return view('app/patient-suggest', compact('clients'));
         return view('app/patient-suggest', compact('clients'));
     }
     }
 
 
+    public function pharmacySuggest(Request $request)
+    {
+        $term = $request->input('term') ? trim($request->input('term')) : '';
+        if (empty($term)) return '';
+        $term = strtolower($term);
+        $pharmacies = Facility::where('facility_type', 'Pharmacy')
+            ->where(function ($q) use ($term) {
+                $q->orWhereRaw('LOWER(name::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(address_line1::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(address_line2::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(address_city::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(address_state::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(phone::text) LIKE ?', ['%' . $term . '%'])
+                    ->orWhereRaw('LOWER(address_zip::text) LIKE ?', ['%' . $term . '%']);
+            })
+            ->orderBy('name', 'asc')
+            ->orderBy('address_line1', 'asc')
+            ->orderBy('address_city', 'asc')
+            ->orderBy('address_state', 'asc')
+            ->get();
+        return view('app/pharmacy-suggest', compact('pharmacies'));
+    }
+
     public function unmappedSMS(Request $request, $filter = '')
     public function unmappedSMS(Request $request, $filter = '')
     {
     {
         $proID = $this->performer()->pro->id;
         $proID = $this->performer()->pro->id;

+ 11 - 0
app/Models/Client.php

@@ -95,6 +95,17 @@ class Client extends Model
             ->orderBy('effective_date', 'desc');
             ->orderBy('effective_date', 'desc');
     }
     }
 
 
+    public function currentCareMonth() {
+        $cmStartDate = strtotime(date('Y-m-d'));
+        $month = date("n", $cmStartDate);
+        $year = date("Y", $cmStartDate);
+        return CareMonth
+            ::where('client_id', $this->id)
+            ->whereRaw('EXTRACT(MONTH FROM start_date) = ?', [$month])
+            ->whereRaw('EXTRACT(YEAR FROM start_date) = ?', [$year])
+            ->first();
+    }
+
     public function measurementsInCareMonth(CareMonth $careMonth) {
     public function measurementsInCareMonth(CareMonth $careMonth) {
         $cmStartDate = strtotime($careMonth->start_date);
         $cmStartDate = strtotime($careMonth->start_date);
         $month = date("n", $cmStartDate);
         $month = date("n", $cmStartDate);

+ 12 - 0
app/Models/Facility.php

@@ -9,4 +9,16 @@ class Facility extends Model
 
 
     protected $table = 'facility';
     protected $table = 'facility';
 
 
+    public function displayString()
+    {
+        return implode(", ", array_filter([
+            $this->name,
+            $this->address_line1,
+            $this->address_city,
+            $this->address_state,
+        ], function ($_item) {
+            return !empty($_item);
+        }));
+    }
+
 }
 }

+ 41 - 0
app/Models/Pro.php

@@ -321,4 +321,45 @@ class Pro extends Model
 
 
         return $allowed ? $clientPrograms : FALSE;
         return $allowed ? $clientPrograms : FALSE;
     }
     }
+
+    public function getMeasurements($_onlyUnstamped = false)
+    {
+        $measurementsQuery = Measurement::where('is_removed', false);
+        if ($this->pro_type != 'ADMIN') {
+            $measurementsQuery
+                ->whereIn('client_id', $this->getMyClientIds());
+        }
+        if ($_onlyUnstamped) {
+            $measurementsQuery
+                ->whereNotNull('client_bdt_measurement_id')
+                ->where(function ($q) {
+                    $q->whereNull('status')
+                        ->orWhere(function ($q2) {
+                            $q2->where('status', '<>', 'ACK')
+                                ->where('status', '<>', 'INVALID_ACK');
+                        });
+                });
+        }
+        $measurements = $measurementsQuery->orderBy('id', 'desc')->get();
+
+        // eager load stuff needed in JS
+        foreach ($measurements as $measurement) {
+            if ($measurement->client_bdt_measurement_id) {
+                $measurement->bdtMeasurement = $measurement->clientBDTMeasurement->measurement;
+            }
+            unset($measurement->clientBDTMeasurement); // we do not need this travelling to the frontend
+
+            $client = [
+                "uid" => $measurement->client->uid,
+                "name" => $measurement->client->displayName(),
+            ];
+            $measurement->patient = $client;
+
+            $measurement->careMonth = $measurement->client->currentCareMonth();
+
+            unset($measurement->client); // we do not need this travelling to the frontend
+        }
+
+        return $measurements;
+    }
 }
 }

+ 11 - 4
public/css/style.css

@@ -163,16 +163,16 @@ body.stag_rhs_collapsed .app-right-panel {
     border-color: rgb(13, 89, 175);
     border-color: rgb(13, 89, 175);
     box-shadow: none;
     box-shadow: none;
 }
 }
-.mcp-theme-1 .nav-item {
+#sidebarMenu .mcp-theme-1 .nav-item {
     margin: 0;
     margin: 0;
 }
 }
-.mcp-theme-1 .nav-link:hover {
+#sidebarMenu .mcp-theme-1 .nav-link:hover {
     background: #e3e3e394;
     background: #e3e3e394;
 }
 }
-.mcp-theme-1 .nav-link {
+#sidebarMenu .mcp-theme-1 .nav-link {
     border-top: 1px solid transparent;
     border-top: 1px solid transparent;
 }
 }
-.mcp-theme-1 .nav-link.active {
+#sidebarMenu .mcp-theme-1 .nav-link.active {
     border-top: 1px solid #f8f9fa;
     border-top: 1px solid #f8f9fa;
     background: #e2e2e2;
     background: #e2e2e2;
 }
 }
@@ -264,6 +264,9 @@ body>nav.navbar {
 .mcp-theme-1 .width-200px {
 .mcp-theme-1 .width-200px {
     width: 200px !important;
     width: 200px !important;
 }
 }
+.mcp-theme-1 .width-22px {
+    width: 22px !important;
+}
 .mcp-theme-1 .width-30px {
 .mcp-theme-1 .width-30px {
     width: 30px !important;
     width: 30px !important;
 }
 }
@@ -1194,3 +1197,7 @@ button.note-templates-trigger-assessment {
 .in-table-markup p:last-of-type {
 .in-table-markup p:last-of-type {
     margin-bottom: 0;
     margin-bottom: 0;
 }
 }
+.suggestions-outer.pharmacy-suggestions {
+    left: 1rem;
+    width: calc(100% - 2rem);
+}

+ 284 - 114
resources/views/app/dashboard.blade.php

@@ -5,7 +5,7 @@
     <div class="m-0 mt-4">
     <div class="m-0 mt-4">
         <div class="row mcp-theme-1" id="pro-dashboard-container" v-cloak>
         <div class="row mcp-theme-1" id="pro-dashboard-container" v-cloak>
             <div class="col-md-3 mcp-theme-1">
             <div class="col-md-3 mcp-theme-1">
-                <div class="mb-4">
+                <div class="mb-4" v-show="tab==='appointments'">
                     <div class="pro-dashboard-inline-calendar"></div>
                     <div class="pro-dashboard-inline-calendar"></div>
                 </div>
                 </div>
                 <div class="card mb-4">
                 <div class="card mb-4">
@@ -16,11 +16,11 @@
                         </strong>
                         </strong>
                     </div>
                     </div>
                     <div class="card-body p-0">
                     <div class="card-body p-0">
-                        <table class="table table-condensed table-bordered m-0">
+                        <table class="table mb-0">
                             <tbody>
                             <tbody>
                                 <tr>
                                 <tr>
-                                    <th class="px-2 text-center">{{$keyNumbers['totalPatients']}}</th>
-                                    <th class="pl-2"><a native target="_top" href="/patients">Total patients</a></th>
+                                    <th class="border-top-0 px-2 text-center">{{$keyNumbers['totalPatients']}}</th>
+                                    <th class="border-top-0 pl-2"><a native target="_top" href="/patients">Total patients</a></th>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
                                     <th class="px-2 text-center">{{$keyNumbers['patientsNotSeenYet']}}</th>
                                     <th class="px-2 text-center">{{$keyNumbers['patientsNotSeenYet']}}</th>
@@ -38,7 +38,14 @@
                                     <th class="px-2 text-center">{{$keyNumbers['numOpenTickets']}}</th>
                                     <th class="px-2 text-center">{{$keyNumbers['numOpenTickets']}}</th>
                                     <th class="pl-2"><a native target="_top" href="/practice-management/my-tickets/open">Open tickets</a></th>
                                     <th class="pl-2"><a native target="_top" href="/practice-management/my-tickets/open">Open tickets</a></th>
                                 </tr>
                                 </tr>
-
+                                <tr>
+                                    <th class="px-2 text-center">{{$keyNumbers['measurementsToBeStamped']}}</th>
+                                    <th class="pl-2">
+                                        <a native target="_top"
+                                           href="#"
+                                           v-on:click.prevent="tab='measurements'">Unstamped Measurements</a>
+                                    </th>
+                                </tr>
                             </tbody>
                             </tbody>
                         </table>
                         </table>
                     </div>
                     </div>
@@ -50,11 +57,11 @@
                         </strong>
                         </strong>
                     </div>
                     </div>
                     <div class="card-body p-0">
                     <div class="card-body p-0">
-                        <table class="table table-condensed table-bordered m-0">
+                        <table class="table mb-0">
                             <tbody>
                             <tbody>
                                 <tr>
                                 <tr>
-                                    <th class="px-2">${{friendly_money($reimbursement['currentBalance'])}}</th>
-                                    <th class="pl-2"><a target="_top" href="/mc/practice-management/financial-transactions">Current balance</a></th>
+                                    <th class="border-top-0 px-2">${{friendly_money($reimbursement['currentBalance'])}}</th>
+                                    <th class="border-top-0 pl-2 w-100"><a target="_top" href="/mc/practice-management/financial-transactions">Current balance</a></th>
                                 </tr>
                                 </tr>
                                 <!-- <tr>
                                 <!-- <tr>
                                     <th class="px-2">{{friendly_date_time($reimbursement['nextPaymentDate'], false)}}</th>
                                     <th class="px-2">{{friendly_date_time($reimbursement['nextPaymentDate'], false)}}</th>
@@ -80,119 +87,216 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="col-md-9">
             <div class="col-md-9">
-                <div class="d-flex align-items-end mb-3">
-                    <b class="large">@{{ selectedDate }}</b>
-                    <div class="ml-auto">
-                        <label class="text-secondary mb-1">Filter by status:</label>
-                        <select v-model="filterStatus"
-                                class="form-control form-control-sm"
-                                v-on:change="updateNumEventsForDate()">
-                            <option value="">ALL</option>
-                            <option value="CREATED">CREATED</option>
-                            <option value="CONFIRMED">CONFIRMED</option>
-                            <option value="CANCELLED">CANCELLED</option>
-                            <option value="COMPLETED">COMPLETED</option>
-                            <option value="ABANDONED">ABANDONED</option>
-                        </select>
-                    </div>
-                </div>
-                <div v-for="event in events" class="align-items-end p-3 border rounded mb-3"
-                     :class="event.dateYMD === selectedDate && (filterStatus === '' || filterStatus === event.status) ? 'd-flex' : 'd-none'">
-                    <div class="patient-avatar mr-3 align-self-center">@{{ event.proInitials }}</div>
-                    <div>
-                        <div class="pb-1">
-                            <b class="text-info">@{{ event.proName }}</b>
-                            &nbsp;/&nbsp;
-                            @{{ event.friendlyStartTime }} - @{{ event.friendlyEndTime }} <span class="text-secondary">@{{ event.timezone }}</span>
-                            &nbsp;/&nbsp;
-                            <span class="d-inline-block ml- 2 text-secondary font-weight-bold">@{{ event.title }}</span>
+
+                <ul class="nav nav-tabs">
+                    <li class="nav-item">
+                        <a class="nav-link" :class="tab == 'appointments' ? 'active' : ''" href="#" v-on:click.prevent="tab='appointments'">Appointments</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" :class="tab == 'measurements' ? 'active' : ''" href="#" v-on:click.prevent="tab='measurements'">Measurements</a>
+                    </li>
+                </ul>
+
+                <div class="border-left border-right border-bottom p-3">
+                    <div v-show="tab==='appointments'">
+                        <div class="d-flex align-items-end mb-3">
+                            <b class="large"><span class="text-secondary">Today:</span> @{{ selectedDate }}</b>
+                            <div class="ml-auto d-inline-flex align-items-center">
+                                <label class="text-secondary mr-2 my-0 text-nowrap">Filter by status:</label>
+                                <select v-model="filterStatus"
+                                        class="form-control form-control-sm"
+                                        v-on:change="updateNumEventsForDate()">
+                                    <option value="">All</option>
+                                    <option value="CREATED">Created</option>
+                                    <option value="CONFIRMED">Confirmed</option>
+                                    <option value="CANCELLED">Cancelled</option>
+                                    <option value="COMPLETED">Completed</option>
+                                    <option value="ABANDONED">Abandoned</option>
+                                </select>
+                            </div>
                         </div>
                         </div>
-                        <div class="pb-1">
-                            <a target="_top" :href="'/mc/patients/view/' + event.clientUid" class="font-weight-bold">@{{ event.clientName }}</a>
-                            <span class="small d-inline-block pl-2 text-secondary font-weight-normal">@{{ event.clientSummary }}</span>
+                        <div v-for="event in events" class="align-items-end p-3 border rounded mb-3"
+                             :class="event.dateYMD === selectedDate && (filterStatus === '' || filterStatus === event.status) ? 'd-flex' : 'd-none'">
+                            <div class="patient-avatar mr-3 align-self-center">@{{ event.proInitials }}</div>
+                            <div>
+                                <div class="pb-1">
+                                    <b class="text-info">@{{ event.proName }}</b>
+                                    &nbsp;/&nbsp;
+                                    @{{ event.friendlyStartTime }} - @{{ event.friendlyEndTime }} <span class="text-secondary">@{{ event.timezone }}</span>
+                                    &nbsp;/&nbsp;
+                                    <span class="d-inline-block ml- 2 text-secondary font-weight-bold">@{{ event.title }}</span>
+                                </div>
+                                <div class="pb-1">
+                                    <a target="_top" :href="'/mc/patients/view/' + event.clientUid" class="font-weight-bold">@{{ event.clientName }}</a>
+                                    <span class="small d-inline-block pl-2 text-secondary font-weight-normal">@{{ event.clientSummary }}</span>
+                                </div>
+                                <div>
+                                    Status: <b class="text-secondary">@{{ event.status }}</b>
+                                    &nbsp;/&nbsp;
+                                    <a target="_top" :href="'/patients/view/' + event.clientUid + '/calendar/' + event.uid">
+                                        <i class="fa fa-edit"></i>
+                                        Edit Appointment
+                                    </a>
+                                </div>
+                            </div>
+                            <div class="ml-auto">
+                                <select v-model="event.newStatus"
+                                        class="form-control form-control-sm bg-light"
+                                        v-on:change="updateStatus(event)">
+                                    <option value="CREATED">CREATED</option>
+                                    <option value="CONFIRMED">CONFIRMED</option>
+                                    <option value="CANCELLED">CANCELLED</option>
+                                    <option value="COMPLETED">COMPLETED</option>
+                                    <option value="ABANDONED">ABANDONED</option>
+                                </select>
+                                <div v-if="selectedDate === '{{ date('Y-m-d') }}'"
+                                     class="pt-1 text-right" :class="event.started ? 'text-danger': 'text-secondary'">
+                                    @{{ event.inHowManyHours }}
+                                </div>
+                            </div>
                         </div>
                         </div>
-                        <div>
-                            Status: <b class="text-secondary">@{{ event.status }}</b>
-                            &nbsp;/&nbsp;
-                            <a target="_top" :href="'/patients/view/' + event.clientUid + '/calendar/' + event.uid">
-                                <i class="fa fa-edit"></i>
-                                Edit Appointment
-                            </a>
-                            {{--<span relative class="ml-1" moe>
-                                <a start show v-on:click.prevent="return showEditForm($event.target)">
-                                    <i class="fa fa-edit"></i>
-                                    Edit Appointment
-                                </a>
-                                <form url="/api/appointment/update" right>
-                                    <input type="hidden" name="uid" :value="event.uid">
-                                    <div class="mb-2">
-                                        <label class="text-secondary text-sm mb-1">Pro</label>
-                                        <select name="proUid" class="form-control form-control-sm">
-                                            <option value=""> --select-- </option>
-                                            @foreach($pros as $iPro)
-                                                <option :selected="event.proUid === '{{$iPro->uid}}'" value="{{$iPro->uid}}">{{$iPro->displayName()}}</option>
-                                            @endforeach
-                                        </select>
-                                    </div>
-                                    <div class="mb-2">
-                                        <label class="text-secondary text-sm mb-1">Date</label>
-                                        <input autofocus type="date" name="date" min="{{ date('Y-m-d') }}"
-                                               :value="event.dateYMD" class="form-control form-control-sm">
-                                    </div>
-                                    <div class="mb-2">
-                                        <label class="text-secondary text-sm mb-1">Start Time</label>
-                                        <input type="time" name="startTime" class="form-control form-control-sm"
-                                               :value="event.raw_start_time ? event.raw_start_time.substr(0, 5) : ''">
-                                    </div>
-                                    <div class="mb-2">
-                                        <label class="text-secondary text-sm mb-1">End Time</label>
-                                        <input type="time" name="endTime" class="form-control form-control-sm"
-                                               :value="event.raw_end_time ? event.raw_end_time.substr(0, 5) : ''">
+                        <div v-if="numEventsForDate === 0" class="bg-light p-3 text-secondary border bounded">
+                        <span v-if="filterStatus === ''">You have no appointments on <b>@{{ selectedDate }}</b></span>
+                        <span v-if="filterStatus !== ''">You have no appointments on <b>@{{ selectedDate }}</b> with status <b>@{{ filterStatus }}</b></span>
+                    </div>
+                    </div>
+                    <div v-show="tab==='measurements'">
+                        <div class="d-flex align-items-end mb-3">
+                            <b class="large">Measurements in {{friendly_month(date('Y-m-d'))}}</b>
+                            <div class="ml-auto d-inline-flex align-items-center">
+                                <label class="text-secondary mr-2 my-0 text-nowrap">Filter by status:</label>
+                                <select v-model="measurementFilterStatus"
+                                        class="form-control form-control-sm"
+                                        v-on:change="updateMeasurements()">
+                                    <option value="ALL">All</option>
+                                    <option value="NEED_ACK">Needs Stamping</option>
+                                </select>
+                            </div>
+                        </div>
+                        <table class="table table-striped table-sm table-bordered mb-0">
+                            <thead>
+                            <tr>
+                                <th class="border-0 px-2 text-secondary">Patient</th>
+                                <th class="border-0 px-2 text-secondary">Category</th>
+                                <th class="border-0 px-2 text-secondary">Value</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 text-center">Entry</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            <tr v-for="measurement in measurements">
+                                <td class="px-2">
+                                    <a native
+                                       target="_top" :href="'/mc/patients/view/' + measurement.patient.uid"
+                                       class="font-weight-bold">
+                                        @{{ measurement.patient.name }}
+                                    </a>
+                                </td>
+                                <td class="px-2">@{{ measurement.label }}</td>
+                                <td class="px-2">
+                                    <div v-if="!measurement.client_bdt_measurement_id"><b>@{{ measurement.value }}</b></div>
+                                    <div v-else>
+                                        <div v-if="measurement.label === 'BP'">
+                                            <b>@{{ measurement.bdtMeasurement.systolic_bp_in_mm_hg }}</b>/<b>@{{ measurement.bdtMeasurement.diastolic_bp_in_mm_hg }}</b> mmHg
+                                        </div>
+                                        <div v-if="measurement.label === 'SBP'">
+                                            <b>@{{ measurement.bdtMeasurement.systolic_bp_in_mm_hg }}</b> mmHg
+                                        </div>
+                                        <div v-if="measurement.label === 'DBP'">
+                                            <b>@{{ measurement.bdtMeasurement.diastolic_bp_in_mm_hg }}</b> mmHg
+                                        </div>
+                                        <div v-if="measurement.label === 'Wt. (lbs.)'">
+                                            <b>@{{ parseFloat(measurement.bdtMeasurement.weight_in_pounds).toFixed(1) }}</b> lbs
+                                        </div>
                                     </div>
                                     </div>
-                                    <div class="mb-2">
-                                        <label class="text-secondary text-sm mb-1">Timezone *</label>
-                                        <select name="timeZone" class="form-control form-control-sm"
-                                                :value="event.timezone" required>
-                                            <option value=""> --select-- </option>
-                                            <option value="EASTERN">Eastern</option>
-                                            <option value="CENTRAL">Central</option>
-                                            <option value="MOUNTAIN">Mountain</option>
-                                            <option value="PACIFIC">Pacific</option>
-                                            <option value="ALASKA">Alaska</option>
-                                            <option value="HAWAII">Hawaii</option>
-                                            <option value="PUERTO_RICO">Puerto Rico</option>
-                                        </select>
+                                </td>
+                                <td class="px-2">
+                                    @{{Math.floor(measurement.careMonth.rm_total_time_in_seconds/60).toFixed(0)}}
+                                </td>
+                                <td colspan="px-2">
+                                    <div v-if="measurement.client_bdt_measurement_id" class="d-flex align-items-center justify-content-center">
+                                        <button class="btn btn-sm py-0 px-1 width-22px" v-on:click.prevent="setMeasurementStatus(measurement.uid, 'ACK')"
+                                                :class="measurement.status === 'ACK' ? 'bg-success text-white' : 'text-success'">
+                                            <i class="fa fa-check"></i>
+                                        </button>
+                                        <button class="btn btn-sm py-0 px-1 width-22px ml-0" v-on:click.prevent="setMeasurementStatus(measurement.uid, 'INVALID_ACK')"
+                                                :class="measurement.status === 'INVALID_ACK' ? 'bg-danger text-white' : 'text-danger'">
+                                            <i class="fa fa-times"></i>
+                                        </button>
                                     </div>
                                     </div>
-                                    <div>
-                                        <button submit class="btn btn-sm btn-primary mr-1"
-                                                v-on:click.prevent="return submitEditForm($event.target)">Submit</button>
-                                        <button cancel class="btn btn-sm btn-default border"
-                                                v-on:click.prevent="return cancelEditForm($event.target)">Cancel</button>
+                                    <div v-else class="text-center">-</div>
+                                </td>
+                                <td colspan="px-2">
+                                    <div v-if="measurement.client_bdt_measurement_id" class="text-center">
+                                        <span moe large relative>
+                                            <a start show class="py-0 mb-3 font-weight-bold">Add</a>
+                                            <form url="/api/careMonthEntry/createForRm" right>
+                                                <p class="mb-2 d-block text-left"><b>Add RM Entry</b></p>
+                                                <input type="hidden" name="careMonthUid" :value="measurement.careMonth.uid">
+                                                <input type="hidden" name="proUid" value="{{$pro->uid}}">
+                                                <input type="hidden" name="effectiveDate" value="{{date('Y-m-d')}}">
+                                                <div class="bg-light border rounded p-2 mb-2">
+                                                    <div class="mb-1 d-flex align-items-center">
+                                                        <span class="width-50px text-left text-secondary">Type</span>
+                                                        <div><b>@{{ measurement.label }}</b></div>
+                                                    </div>
+                                                    <div class="d-flex align-items-center">
+                                                        <span class="width-50px text-left text-secondary">Value</span>
+                                                        <div v-if="!measurement.client_bdt_measurement_id"><b>@{{ measurement.value }}</b></div>
+                                                        <div v-else>
+                                                            <div v-if="measurement.label === 'BP'">
+                                                                <b>@{{ measurement.bdtMeasurement.systolic_bp_in_mm_hg }}</b>/<b>@{{ measurement.bdtMeasurement.diastolic_bp_in_mm_hg }}</b> mmHg
+                                                            </div>
+                                                            <div v-if="measurement.label === 'SBP'">
+                                                                <b>@{{ measurement.bdtMeasurement.systolic_bp_in_mm_hg }}</b> mmHg
+                                                            </div>
+                                                            <div v-if="measurement.label === 'DBP'">
+                                                                <b>@{{ measurement.bdtMeasurement.diastolic_bp_in_mm_hg }}</b> mmHg
+                                                            </div>
+                                                            <div v-if="measurement.label === 'Wt. (lbs.)'">
+                                                                <b>@{{ parseFloat(measurement.bdtMeasurement.weight_in_pounds).toFixed(1) }}</b> lbs
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="mb-2">
+                                                    <div class="row">
+                                                        <div class="col-6 d-flex align-items-center">
+                                                            <label class="text-secondary text-sm my-0 mr-3 text-nowrap">Time (mins)</label>
+                                                            <input type="number" min="0" max="5400"
+                                                                   class="form-control form-control-sm w-100 cm-time-value"
+                                                                   name="timeInMinutes" value="" placeholder="Time (mins.)" required>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="mb-2">
+                                                    <div class="row">
+                                                        <div class="col-12 text-left">
+                                                            <label class="text-secondary text-sm mb-1">Details</label>
+                                                            <textarea class="form-control form-control-sm" rows="4"
+                                                                      name="contentText">@{{ 'Reviewed ' + measurement.label + ' measurement' }}</textarea>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div class="d-flex align-items-center">
+                                                    <button class="btn btn-sm btn-success mr-2" submit>Submit</button>
+                                                    <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+                                                </div>
+                                            </form>
+                                        </span>
                                     </div>
                                     </div>
-                                </form>
-                            </span>--}}
-                        </div>
-                    </div>
-                    <div class="ml-auto">
-                        <select v-model="event.newStatus"
-                                class="form-control form-control-sm bg-light"
-                                v-on:change="updateStatus(event)">
-                            <option value="CREATED">CREATED</option>
-                            <option value="CONFIRMED">CONFIRMED</option>
-                            <option value="CANCELLED">CANCELLED</option>
-                            <option value="COMPLETED">COMPLETED</option>
-                            <option value="ABANDONED">ABANDONED</option>
-                        </select>
-                        <div v-if="selectedDate === '{{ date('Y-m-d') }}'"
-                             class="pt-1 text-right" :class="event.started ? 'text-danger': 'text-secondary'">
-                            @{{ event.inHowManyHours }}
-                        </div>
+                                </td>
+                            </tr>
+                            <tr v-if="!measurements || !measurements.length">
+                                <td class="text-secondary p-0 border-0 p-3" colspan="6">
+                                    No items to show
+                                </td>
+                            </tr>
+                            </tbody>
+                        </table>
                     </div>
                     </div>
                 </div>
                 </div>
-                <div v-if="numEventsForDate === 0" class="bg-light p-3 text-secondary border bounded">
-                    <span v-if="filterStatus === ''">You have no appointments on <b>@{{ selectedDate }}</b></span>
-                    <span v-if="filterStatus !== ''">You have no appointments on <b>@{{ selectedDate }}</b> with status <b>@{{ filterStatus }}</b></span>
-                </div>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
@@ -205,6 +309,7 @@
                 el: '#pro-dashboard-container',
                 el: '#pro-dashboard-container',
                 delimiters: ['@{{', '}}'],
                 delimiters: ['@{{', '}}'],
                 data: {
                 data: {
+                    tab: 'measurements', // appointments | measurements
                     selectedDate: '{{ date('Y-m-d') }}',
                     selectedDate: '{{ date('Y-m-d') }}',
                     selectedStatus: 'CREATED',
                     selectedStatus: 'CREATED',
                     events: [],
                     events: [],
@@ -213,6 +318,8 @@
                     calendarElem: null,
                     calendarElem: null,
                     currentMonth: null,
                     currentMonth: null,
                     currentYear: null,
                     currentYear: null,
+                    measurementFilterStatus: 'ALL',
+                    measurements: {!! json_encode($pro->getMeasurements()) !!}
                 },
                 },
                 methods: {
                 methods: {
                     formatDate: function (date) {
                     formatDate: function (date) {
@@ -330,6 +437,65 @@
                                 _callback.call(self);
                                 _callback.call(self);
                             }, 'json');
                             }, 'json');
                         }
                         }
+                    },
+                    updateMeasurements: function() {
+                        $.get('/pro-dashboard-measurements/' + this.measurementFilterStatus, (_data) => {
+                            this.measurements = _data;
+                            Vue.nextTick(() => {
+                                // this.initCMRTE();
+                                $('#pro-dashboard-container').find('[moe][initialized]').removeAttr('initialized');
+                                initMoes();
+                            });
+                        }, 'json');
+                    },
+                    setMeasurementStatus: function(_uid, _status) {
+                        $.post('/api/measurement/updateStatus', {
+                            uid: _uid,
+                            status: _status
+                        }, (_data) => {
+                            this.updateMeasurements();
+                        }, 'json');
+                    },
+                    initCMRTE: function() {
+                        $('#pro-dashboard-container [cm-rte]').each(function() {
+
+                            $(this).wrap(
+                                $('<div class="border-left border-right rte-holder"/>')
+                                    .attr('data-shortcuts', '')
+                            );
+
+                            // give a unique id to this editor instance
+                            var editorID = Math.ceil(Math.random() * 99999), fieldName = $(this).attr('data-name');
+
+                            var el = this;
+                            var existingContent = $(el).attr('data-content');
+                            var quill = new Quill(el, {
+                                theme: 'snow',
+                                modules: stagQuillConfig
+                            });
+
+                            var toolbar = $(quill.container).prev('.ql-toolbar');
+
+                            // add button for new shortcut
+                            var newSCButton = $('<button class="btn bg-white btn-sm btn-default text-primary w-auto px-2 border py-0 ' +
+                                'text-sm add-shortcut" data-editor-id="' + editorID + '">+ Shortcut</button>');
+                            toolbar.append(newSCButton);
+
+                            quill.root.innerHTML = existingContent;
+
+                            $('<input type="hidden" name="' + fieldName + '">').val(existingContent).insertAfter(el);
+
+                            quill.on('text-change', function(delta, oldDelta, source) {
+                                $(el).next('[name="' + fieldName + '"]').val(quill.root.innerHTML);
+                            });
+
+                            $(quill.container)
+                                .find('.ql-editor[contenteditable]')
+                                .attr('data-field', fieldName)
+                                .attr('data-editor-id', editorID)
+                                .attr('with-shortcuts', 1);
+
+                        })
                     }
                     }
                 },
                 },
                 mounted: function () {
                 mounted: function () {
@@ -346,6 +512,10 @@
 
 
                     // this.loadEvents();
                     // this.loadEvents();
                     $('.datepicker-days .day.active').trigger('click');
                     $('.datepicker-days .day.active').trigger('click');
+
+                    // this.initCMRTE();
+                    $('#pro-dashboard-container').find('[moe][initialized]').removeAttr('initialized');
+                    initMoes();
                 }
                 }
             });
             });
         }
         }

+ 1 - 1
resources/views/app/patient-suggest.blade.php

@@ -3,7 +3,7 @@
 @endif
 @endif
 <?php $activeSet = false; ?>
 <?php $activeSet = false; ?>
 @foreach($clients as $client)
 @foreach($clients as $client)
-    <a class="d-block suggest-item text-nowrap {{ $activeSet ? '' : 'active'  }}"
+    <a class="d-block suggest-item patient-suggest text-nowrap {{ $activeSet ? '' : 'active'  }}"
        href="" data-target-uid="{{$client->uid}}">
        href="" data-target-uid="{{$client->uid}}">
         {{$client->displayName()}}
         {{$client->displayName()}}
         {!! $client->cell_number ? '<span class="text-sm text-secondary ml-1">(' . $client->cell_number . ')</span>' : '' !!}
         {!! $client->cell_number ? '<span class="text-sm text-secondary ml-1">(' . $client->cell_number . ')</span>' : '' !!}

+ 5 - 2
resources/views/app/patient/action-items-erx-single.blade.php

@@ -139,9 +139,10 @@
                         </div>
                         </div>
                     </div>
                     </div>
                     <div class="row mb-2">
                     <div class="row mb-2">
-                        <div class="col-8">
+                        <div class="col-12">
                             <label class="text-sm text-secondary mb-1">Business Name</label>
                             <label class="text-sm text-secondary mb-1">Business Name</label>
-                            <input type="text" v-model="popupItem.pharmacyName" class="form-control form-control-sm">
+                            <input type="text" autocomplete="donotdoit" id="pharmacy-search" v-model="popupItem.pharmacyName" class="form-control form-control-sm">
+                            <div class="suggestions-outer pharmacy-suggestions position-absolute d-none"></div>
                         </div>
                         </div>
                     </div>
                     </div>
                     <div class="row mb-2">
                     <div class="row mb-2">
@@ -382,12 +383,14 @@
                                     this.item.pharmacyFax,
                                     this.item.pharmacyFax,
                                 ].filter(Boolean).join('<br>');
                                 ].filter(Boolean).join('<br>');
                             },
                             },
+                            @include('app.patient.partials.pharmacy-suggest')
                             @include('app.patient.partials.ticket_vue_methods',['ticketType'=>'erx'])
                             @include('app.patient.partials.ticket_vue_methods',['ticketType'=>'erx'])
                         },
                         },
                         mounted: function () {
                         mounted: function () {
                             this.initRxAutoSuggest();
                             this.initRxAutoSuggest();
                             this.initICDAutoSuggest();
                             this.initICDAutoSuggest();
                             initFastLoad($('#erxSingleApp'));
                             initFastLoad($('#erxSingleApp'));
+                            this.initPharmacySearch();
                         }
                         }
                     })
                     })
                 }
                 }

+ 3 - 3
resources/views/app/patient/dashboard.blade.php

@@ -57,9 +57,9 @@
                 </div>
                 </div>
 
 
                 {{-- programs --}}
                 {{-- programs --}}
-                @if($pro->pro_type == 'ADMIN')
+                {{-- @if($pro->pro_type == 'ADMIN')
                     @include('app/patient/partials/programs')
                     @include('app/patient/partials/programs')
-                @endif
+                @endif --}}
 
 
                 {{-- devices --}}
                 {{-- devices --}}
                 <?php $availableDevices = 0; ?>
                 <?php $availableDevices = 0; ?>
@@ -173,7 +173,7 @@
                 </div>
                 </div>
 
 
                 {{-- device measurements --}}
                 {{-- device measurements --}}
-                @include('app/patient/partials/device-measurements')
+                {{-- @include('app/patient/partials/device-measurements') --}}
 
 
                 {{-- measurements --}}
                 {{-- measurements --}}
                 @include('app/patient/partials/measurements')
                 @include('app/patient/partials/measurements')

+ 5 - 2
resources/views/app/patient/partials/erx.blade.php

@@ -142,9 +142,10 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="row mb-2">
             <div class="row mb-2">
-                <div class="col-8">
+                <div class="col-12">
                     <label class="text-sm text-secondary mb-1">Business Name</label>
                     <label class="text-sm text-secondary mb-1">Business Name</label>
-                    <input type="text" v-model="popupItem.pharmacyName" class="form-control form-control-sm">
+                    <input type="text" autocomplete="donotdoit" id="pharmacy-search" v-model="popupItem.pharmacyName" class="form-control form-control-sm">
+                    <div class="suggestions-outer pharmacy-suggestions position-absolute d-none"></div>
                 </div>
                 </div>
             </div>
             </div>
             <div class="row mb-2">
             <div class="row mb-2">
@@ -394,12 +395,14 @@
                             _item.pharmacyFax,
                             _item.pharmacyFax,
                         ].filter(Boolean).join('<br>');
                         ].filter(Boolean).join('<br>');
                     },
                     },
+                    @include('app.patient.partials.pharmacy-suggest')
                     @include('app.patient.partials.ticket_vue_methods',['ticketType'=>'erx'])
                     @include('app.patient.partials.ticket_vue_methods',['ticketType'=>'erx'])
                 },
                 },
                 mounted: function () {
                 mounted: function () {
                     this.initRxAutoSuggest();
                     this.initRxAutoSuggest();
                     this.initICDAutoSuggest();
                     this.initICDAutoSuggest();
                     initFastLoad($('#erxApp'));
                     initFastLoad($('#erxApp'));
+                    this.initPharmacySearch();
                 }
                 }
             })
             })
         }
         }

+ 19 - 5
resources/views/app/patient/partials/measurements.blade.php

@@ -1,4 +1,4 @@
-<div class="mt-2 pb-1">
+<div class="mt-2 mb-3">
     <div class="d-flex align-items-center mb-2 py-2 border-top border-bottom">
     <div class="d-flex align-items-center mb-2 py-2 border-top border-bottom">
         <h6 class="my-0 font-weight-bold text-secondary">Measurements</h6>
         <h6 class="my-0 font-weight-bold text-secondary">Measurements</h6>
         <span class="mx-2 text-secondary">|</span>
         <span class="mx-2 text-secondary">|</span>
@@ -30,7 +30,7 @@
     <table class="table table-sm border-0 m-0">
     <table class="table table-sm border-0 m-0">
         <tbody>
         <tbody>
         @foreach($patient->measurements as $measurement)
         @foreach($patient->measurements as $measurement)
-            @if(!empty($measurement->label) && !in_array($measurement->label, $vitalLabels))
+            @if(1 || !empty($measurement->label) && !in_array($measurement->label, $vitalLabels))
                 <tr>
                 <tr>
                     <td class="text-black p-0 border-0">
                     <td class="text-black p-0 border-0">
                         <div class="d-flex align-items-center">
                         <div class="d-flex align-items-center">
@@ -69,16 +69,30 @@
                                 </form>
                                 </form>
                             </div>
                             </div>
                             <span>{{ $measurement->label }}:</span>
                             <span>{{ $measurement->label }}:</span>
-                            <span class="font-weight-bold ml-1">{{ $measurement->value }}</span>
+                            <span class="font-weight-bold ml-1">
+                                @if(empty($measurement->client_bdt_measurement_id))
+                                    {{ $measurement->value }}
+                                @else
+                                    @if($measurement->label === 'BP')
+                                        {{ $measurement->clientBDTMeasurement->measurement->systolic_bp_in_mm_hg }}/{{ $measurement->clientBDTMeasurement->measurement->diastolic_bp_in_mm_hg }} mmHg
+                                    @elseif($measurement->label === 'SBP')
+                                        {{ $measurement->clientBDTMeasurement->measurement->systolic_bp_in_mm_hg }} mmHg
+                                    @elseif($measurement->label === 'DBP')
+                                        {{ $measurement->clientBDTMeasurement->measurement->diastolic_bp_in_mm_hg }} mmHg
+                                    @elseif($measurement->label === 'Wt. (lbs.)')
+                                        {{ round($measurement->clientBDTMeasurement->measurement->weight_in_pounds, 1) }} lbs
+                                    @endif
+                                @endif
+                            </span>
                             <span class="font-weight-normal text-secondary ml-2 text-sm">(as on {{ friendly_date_time($measurement->effective_date, false) }})</span>
                             <span class="font-weight-normal text-secondary ml-2 text-sm">(as on {{ friendly_date_time($measurement->effective_date, false) }})</span>
                         </div>
                         </div>
                     </td>
                     </td>
                 </tr>
                 </tr>
             @endif
             @endif
         @endforeach
         @endforeach
-        @if(!$patient->measurements || !count($patient->measurements) === 0)
+        @if(!$patient->measurements || !count($patient->measurements))
             <tr>
             <tr>
-                <td class="text-secondary p-0 border-0">
+                <td class="text-secondary p-0 border-0 pl-2">
                     No items to show
                     No items to show
                 </td>
                 </td>
             </tr>
             </tr>

+ 98 - 0
resources/views/app/patient/partials/pharmacy-suggest.blade.php

@@ -0,0 +1,98 @@
+initPharmacySearch: function () {
+    let self = this;
+    const debounce = (func, wait) => {
+        let timeout;
+        return function executedFunction(...args) {
+            const later = () => {
+                clearTimeout(timeout);
+                func(...args);
+            };
+            clearTimeout(timeout);
+            timeout = setTimeout(later, wait);
+        };
+    };
+    var lastTerm = '';
+    var returnedFunction = debounce(function () {
+        var term = $('#pharmacy-search').val();
+        if (!!term && lastTerm !== term) {
+            $.get('/pharmacy-suggest?term=' + $.trim(term), function (_data) {
+                $('.suggestions-outer.pharmacy-suggestions').html(_data).removeClass('d-none');
+            });
+            lastTerm = term;
+        } else {
+            $('.suggestions-outer.pharmacy-suggestions').addClass('d-none');
+        }
+    }, 250);
+    $('#pharmacy-search')
+        .on('keydown', function (e) {
+            var term = $.trim($('#pharmacy-search').val());
+            var activeItem = $('.suggestions-outer.pharmacy-suggestions .suggest-item.active');
+            switch (e.which) {
+                case 27:
+                    $('.suggestions-outer.pharmacy-suggestions').addClass('d-none');
+                    return false;
+                case 38:
+                    if (activeItem.prev().length) {
+                        activeItem.prev()
+                            .addClass('active')
+                            .siblings().removeClass('active');
+                        activeItem = $('.suggestions-outer.pharmacy-suggestions .suggest-item.active');
+                        if (activeItem.length) {
+                            activeItem[0].scrollIntoView();
+                        }
+                    }
+                    return false;
+                case 40:
+                    if (activeItem.next().length) {
+                        activeItem.next()
+                            .addClass('active')
+                            .siblings().removeClass('active');
+                        activeItem = $('.suggestions-outer.pharmacy-suggestions .suggest-item.active');
+                        if (activeItem.length) {
+                            activeItem[0].scrollIntoView();
+                        }
+                    }
+                    return false;
+                case 13:
+                    if (activeItem.length) {
+                        activeItem.first().click();
+                    }
+                    return false;
+                default:
+                    if (!!term) {
+                        $('.suggestions-outer.pharmacy-suggestions')
+                            .html('<span class="d-block no-suggest-items">Searching...</span>')
+                            .removeClass('d-none');
+                        returnedFunction();
+                    } else {
+                        $('.suggestions-outer.pharmacy-suggestions').addClass('d-none');
+                    }
+                    break;
+            }
+        })
+        .on('keypress', function (e) {
+            var term = $.trim($('#pharmacy-search').val());
+            if (!!term) {
+                $('.suggestions-outer.pharmacy-suggestions')
+                    .html('<span class="d-block no-suggest-items">Searching...</span>')
+                    .removeClass('d-none');
+                returnedFunction();
+            } else {
+                $('.suggestions-outer.pharmacy-suggestions').addClass('d-none');
+            }
+        });
+    $(document).on('click', '.suggest-item.pharmacy-suggest[data-target-uid]', function () {
+        $('#pharmacy-search').val('');
+        $('.suggestions-outer.pharmacy-suggestions').addClass('d-none');
+        self.applySuggestion(this);
+        return false;
+    });
+},
+applySuggestion: function(_elem) {
+    this.popupItem.pharmacyName = $(_elem).attr('data-pharmacyName');
+    this.popupItem.pharmacyCity = $(_elem).attr('data-pharmacyCity');
+    this.popupItem.pharmacyState = $(_elem).attr('data-pharmacyState');
+    this.popupItem.pharmacyAddressMemo = $(_elem).attr('data-pharmacyAddressMemo');
+    this.popupItem.pharmacyPhone = $(_elem).attr('data-pharmacyPhone');
+    this.popupItem.pharmacyFax = $(_elem).attr('data-pharmacyFax');
+},

+ 18 - 0
resources/views/app/pharmacy-suggest.blade.php

@@ -0,0 +1,18 @@
+@if(!count($pharmacies))
+    <span class="d-block no-suggest-items">No matching pharmacies!</span>
+@endif
+<?php $activeSet = false; ?>
+@foreach($pharmacies as $pharmacy)
+    <a native class="d-block suggest-item pharmacy-suggest text-nowrap {{ $activeSet ? '' : 'active'  }}" href="#"
+       data-target-uid="{{$pharmacy->uid}}"
+       data-pharmacyName="{{$pharmacy->name}}"
+       data-pharmacyCity="{{$pharmacy->address_city}}"
+       data-pharmacyState="{{$pharmacy->address_state}}"
+       data-pharmacyAddressMemo="{{$pharmacy->address_line1}}"
+       data-pharmacyPhone="{{$pharmacy->phone}}"
+       data-pharmacyFax="{{$pharmacy->fax}}"
+    >
+        {{$pharmacy->displayString()}}
+    </a>
+    <?php $activeSet = true; ?>
+@endforeach

+ 1 - 1
resources/views/layouts/guest_template.blade.php

@@ -173,7 +173,7 @@
                         $('.suggestions-outer').addClass('d-none');
                         $('.suggestions-outer').addClass('d-none');
                     }
                     }
                 });
                 });
-            $(document).on('click', '.suggest-item[data-target-uid]', function() {
+            $(document).on('click', '.suggest-item.patient-suggest[data-target-uid]', function() {
                 $('#patient-search').val('');
                 $('#patient-search').val('');
                 $('.suggestions-outer').addClass('d-none');
                 $('.suggestions-outer').addClass('d-none');
                 fastLoad('/patients/view/' + $(this).attr('data-target-uid'), true, false, false);
                 fastLoad('/patients/view/' + $(this).attr('data-target-uid'), true, false, false);

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

@@ -276,7 +276,7 @@
                     $('.suggestions-outer').addClass('d-none');
                     $('.suggestions-outer').addClass('d-none');
                 }
                 }
             }
             }
-            $(document).on('click', '.suggest-item[data-target-uid]', function() {
+            $(document).on('click', '.suggest-item.patient-suggest[data-target-uid]', function() {
                 $('#patient-search').val('');
                 $('#patient-search').val('');
                 $('.suggestions-outer').addClass('d-none');
                 $('.suggestions-outer').addClass('d-none');
                 fastLoad('/patients/view/' + $(this).attr('data-target-uid'), true, false, false);
                 fastLoad('/patients/view/' + $(this).attr('data-target-uid'), true, false, false);

+ 7 - 1
routes/web.php

@@ -81,7 +81,7 @@ Route::middleware('pro.auth')->group(function () {
         Route::get('my-favorites/{filter?}', 'PracticeManagementController@myFavorites')->name('myFavorites');
         Route::get('my-favorites/{filter?}', 'PracticeManagementController@myFavorites')->name('myFavorites');
         Route::get('pro-availability/{proUid?}', 'PracticeManagementController@proAvailability')->name('proAvailability');
         Route::get('pro-availability/{proUid?}', 'PracticeManagementController@proAvailability')->name('proAvailability');
         Route::get('calendar/{proUid?}', 'PracticeManagementController@calendar')->name('proCalendar');
         Route::get('calendar/{proUid?}', 'PracticeManagementController@calendar')->name('proCalendar');
-       
+
         Route::middleware('pro.auth.admin')->group(function(){
         Route::middleware('pro.auth.admin')->group(function(){
             Route::get('billing-manager/{proUid?}', 'PracticeManagementController@billingManager')->name('billingManager');
             Route::get('billing-manager/{proUid?}', 'PracticeManagementController@billingManager')->name('billingManager');
             Route::get('tickets', 'PracticeManagementController@tickets')->name('tickets');
             Route::get('tickets', 'PracticeManagementController@tickets')->name('tickets');
@@ -146,6 +146,9 @@ Route::middleware('pro.auth')->group(function () {
     // pro dashboard events (ajax)
     // pro dashboard events (ajax)
     Route::get('pro-dashboard-events/{from}/{to}', 'HomeController@dashboardAppointments')->name('pro-dashboard-events');
     Route::get('pro-dashboard-events/{from}/{to}', 'HomeController@dashboardAppointments')->name('pro-dashboard-events');
 
 
+    // pro dashboard measurements
+    Route::get('pro-dashboard-measurements/{filter}', 'HomeController@dashboardMeasurements')->name('pro-dashboard-measurements');
+
     // events for fc
     // events for fc
     Route::get('/appointment/getAllAppointmentsForPros', 'AppointmentController@events')->name('events');
     Route::get('/appointment/getAllAppointmentsForPros', 'AppointmentController@events')->name('events');
 
 
@@ -160,6 +163,9 @@ Route::middleware('pro.auth')->group(function () {
     // Patient suggest
     // Patient suggest
     Route::get('/patients-suggest', 'HomeController@patientsSuggest');
     Route::get('/patients-suggest', 'HomeController@patientsSuggest');
 
 
+    // Pharmacy suggest
+    Route::get('/pharmacy-suggest', 'HomeController@pharmacySuggest');
+
     // embeddable sections
     // embeddable sections
     Route::get('/embed/{patient}/{section}/{selectable}', 'PatientController@embedSection')->name('embed-section');
     Route::get('/embed/{patient}/{section}/{selectable}', 'PatientController@embedSection')->name('embed-section');