= 4 жил өмнө
parent
commit
c75a86b6cb
52 өөрчлөгдсөн 1552 нэмэгдсэн , 230 устгасан
  1. 2 2
      app/Http/Controllers/PatientController.php
  2. 36 0
      app/Http/Controllers/PracticeManagementController.php
  3. 30 0
      app/Http/Controllers/TicketController.php
  4. 5 0
      app/Models/Client.php
  5. 1 1
      app/Models/Pro.php
  6. 5 0
      app/Models/Ticket.php
  7. 15 0
      app/Models/TicketFax.php
  8. 26 3
      public/css/style.css
  9. BIN
      public/img/dialmd-logo.png
  10. 10 0
      public/js/mc.js
  11. 3 2
      resources/views/app/dashboard/measurements.blade.php
  12. 8 1
      resources/views/app/log-in-as.blade.php
  13. 2 1
      resources/views/app/mc.blade.php
  14. 1 0
      resources/views/app/patient/action-items-equipment-single.blade.php
  15. 1 0
      resources/views/app/patient/action-items-erx-single.blade.php
  16. 1 0
      resources/views/app/patient/action-items-imaging-single.blade.php
  17. 1 0
      resources/views/app/patient/action-items-lab-single.blade.php
  18. 173 116
      resources/views/app/patient/eligible-refreshes.blade.php
  19. 2 1
      resources/views/app/patient/measurements.blade.php
  20. 16 1
      resources/views/app/patient/note/dashboard.blade.php
  21. 1 1
      resources/views/app/patient/partials/equipment.blade.php
  22. 1 0
      resources/views/app/patient/partials/erx.blade.php
  23. 1 0
      resources/views/app/patient/partials/imaging.blade.php
  24. 1 0
      resources/views/app/patient/partials/lab.blade.php
  25. 1 0
      resources/views/app/patient/partials/other.blade.php
  26. 1 0
      resources/views/app/patient/partials/ticket_action_links.blade.php
  27. 9 0
      resources/views/app/patient/partials/ticket_vue_collab_card.blade.php
  28. 1 0
      resources/views/app/patient/partials/ticket_vue_collab_column.blade.php
  29. 2 1
      resources/views/app/patient/partials/ticket_vue_data.blade.php
  30. 27 0
      resources/views/app/patient/partials/ticket_vue_methods.blade.php
  31. 208 20
      resources/views/app/patient/tickets.blade.php
  32. 1 1
      resources/views/app/patient/tickets/attachments.blade.php
  33. 25 2
      resources/views/app/patient/tickets/common-fields.blade.php
  34. 20 0
      resources/views/app/patient/tickets/erx-data.blade.php
  35. 79 30
      resources/views/app/patient/tickets/erx.blade.php
  36. 23 0
      resources/views/app/patient/tickets/faxes.blade.php
  37. 12 0
      resources/views/app/patient/tickets/imaging-data.blade.php
  38. 6 5
      resources/views/app/patient/tickets/imaging.blade.php
  39. 12 0
      resources/views/app/patient/tickets/lab-data.blade.php
  40. 6 5
      resources/views/app/patient/tickets/lab.blade.php
  41. 26 26
      resources/views/app/patient/tickets/pharmacy-suggest.blade.php
  42. 38 0
      resources/views/app/patient/tickets/pharmacy.blade.php
  43. 23 0
      resources/views/app/patient/tickets/ticket_send_fax_form.blade.php
  44. 15 6
      resources/views/app/practice-management/financial-transactions.blade.php
  45. 70 0
      resources/views/app/practice-management/processing-bill-matrix.blade.php
  46. 113 0
      resources/views/app/ticket/erx.blade.php
  47. 224 0
      resources/views/app/ticket/imaging.blade.php
  48. 224 0
      resources/views/app/ticket/lab.blade.php
  49. 13 0
      resources/views/app/ticket/pdf-preview.blade.php
  50. 24 2
      resources/views/layouts/patient.blade.php
  51. 3 2
      resources/views/layouts/template.blade.php
  52. 4 1
      routes/web.php

+ 2 - 2
app/Http/Controllers/PatientController.php

@@ -337,10 +337,10 @@ class PatientController extends Controller
         return view('app.patient.vitals-graph', compact('patient', 'pros', 'filter'));
         return view('app.patient.vitals-graph', compact('patient', 'pros', 'filter'));
     }
     }
 
 
-    public function tickets(Request $request, Client $patient) {
+    public function tickets(Request $request, Client $patient, $type = '') {
         $pros = $this->pros;
         $pros = $this->pros;
         $allPros = Pro::all();
         $allPros = Pro::all();
-        return view('app.patient.tickets', compact('patient', 'pros', 'allPros'));
+        return view('app.patient.tickets', compact('patient', 'pros', 'allPros', 'type'));
     }
     }
 
 
     public function appointments(Request $request, Client $patient, $forPro = 'all', $status = 'all') {
     public function appointments(Request $request, Client $patient, $forPro = 'all', $status = 'all') {

+ 36 - 0
app/Http/Controllers/PracticeManagementController.php

@@ -426,6 +426,42 @@ class PracticeManagementController extends Controller
             'view_treatment_service_utilization_by_patient'));
             'view_treatment_service_utilization_by_patient'));
     }
     }
 
 
+    public function processingBillMatrix(Request $request, $proUid = null)
+    {
+        $proUid = $proUid ? $proUid : $request->get('pro-uid');
+        $performerPro = $this->performer->pro;
+        $targetPro = null;
+        $allPros = [];
+        if ($performerPro->pro_type == 'ADMIN') {
+            $allPros = Pro::all();
+            $targetPro = Pro::where('uid', $proUid)->first();
+        } else {
+            $targetPro = $performerPro;
+        }
+        $bills = [];
+        if ($targetPro) {
+            $bills = Bill::where('hcp_pro_id', $targetPro->id)->
+            where('has_hcp_been_paid', false)->
+            where('is_cancelled', false)->
+            where('is_signed_by_hcp', true)->
+            orderBy('effective_date', 'desc')->paginate();
+        } else {
+            $bills = Bill::where('has_hcp_been_paid', false)->
+            where('is_cancelled', false)->
+            where('is_signed_by_hcp', true)->
+            orderBy('effective_date', 'desc')->
+            paginate();
+        }
+        $viewData = [
+            'bills' => $bills,
+            'allPros' => $allPros,
+            'targetPro' => $targetPro,
+            'performerPro' => $performerPro,
+            'proUid' => $proUid
+        ];
+        return view('app.practice-management.processing-bill-matrix', $viewData);
+    }
+
     public function hcpBillMatrix(Request $request, $proUid = null)
     public function hcpBillMatrix(Request $request, $proUid = null)
     {
     {
         $proUid = $proUid ? $proUid : $request->get('pro-uid');
         $proUid = $proUid ? $proUid : $request->get('pro-uid');

+ 30 - 0
app/Http/Controllers/TicketController.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Ticket;
+use Illuminate\Http\Request;
+
+use PDF;
+
+class TicketController extends Controller
+{
+
+    public function downloadAsPdf(Request $request, Ticket $ticket){
+        if($request->input('html')) {
+            return view('app.ticket.pdf-preview', compact('ticket'));
+        }
+        else {
+            $pdf = PDF::loadView('app.ticket.pdf-preview', compact('ticket'));
+            return $pdf->download('invoice.pdf');
+        }
+    }
+
+    public function getTicketFaxes(Request $request, Ticket $ticket) {
+        $result = $ticket->faxes->toArray();
+        foreach ($result as $k => $row) {
+            $result[$k]["sent_at"] = friendly_date_time($row["sent_at"]);
+        }
+        return json_encode($result);
+    }
+}

+ 5 - 0
app/Models/Client.php

@@ -118,7 +118,11 @@ class Client extends Model
         return $this->hasMany(Measurement::class, 'client_id', 'id')
         return $this->hasMany(Measurement::class, 'client_id', 'id')
             /*->distinct('label')*/
             /*->distinct('label')*/
             ->where('is_removed', false)
             ->where('is_removed', false)
+<<<<<<< HEAD
             ->orderBy('ts', 'desc');
             ->orderBy('ts', 'desc');
+=======
+            ->orderByRaw('ts DESC NULLS LAST');
+>>>>>>> ca71bbebc0f2ae7462c9b4b4a6248431147ac0f0
     }
     }
 
 
     public function nonZeroMeasurements()
     public function nonZeroMeasurements()
@@ -283,6 +287,7 @@ class Client extends Model
     public function tickets()
     public function tickets()
     {
     {
         return $this->hasMany(Ticket::class, 'client_id', 'id')
         return $this->hasMany(Ticket::class, 'client_id', 'id')
+            ->orderBy('is_open', 'desc')
             ->orderBy('created_at', 'desc');
             ->orderBy('created_at', 'desc');
     }
     }
 
 

+ 1 - 1
app/Models/Pro.php

@@ -334,7 +334,7 @@ class Pro extends Model
             $measurementsQuery
             $measurementsQuery
                 ->whereNotNull('client_bdt_measurement_id')
                 ->whereNotNull('client_bdt_measurement_id')
                 ->whereNotNull('ts')
                 ->whereNotNull('ts')
-                ->where('is_cellular_zero', '!=', true)
+                ->where('is_cellular_zero', false)
                 ->where(function ($q) {
                 ->where(function ($q) {
                     $q->whereNull('status')
                     $q->whereNull('status')
                         ->orWhere(function ($q2) {
                         ->orWhere(function ($q2) {

+ 5 - 0
app/Models/Ticket.php

@@ -28,4 +28,9 @@ class Ticket extends Model
         return $this->hasOne(Client::class, 'id', 'client_id');
         return $this->hasOne(Client::class, 'id', 'client_id');
     }
     }
 
 
+    public function faxes(){
+        return $this->hasMany(TicketFax::class, 'ticket_id', 'id')
+            ->orderBy('sent_at', 'desc');
+    }
+
 }
 }

+ 15 - 0
app/Models/TicketFax.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Models;
+
+# use Illuminate\Database\Eloquent\Model;
+
+class TicketFax extends Model
+{
+    protected $table = "ticket_fax";
+
+    public function ticket(){
+        return $this->hasOne(Ticket::class, 'id', 'ticket_id');
+    }
+
+}

+ 26 - 3
public/css/style.css

@@ -65,7 +65,7 @@
     list-style: none;
     list-style: none;
 }
 }
 .sidebar .nav-item .nav-child-list .nav-item .nav-link {
 .sidebar .nav-item .nav-child-list .nav-item .nav-link {
-    padding-left: 2.75rem;
+    padding-left: 2rem;
 }
 }
 .sidebar .if-not-collapsed, .sidebar .if-collapsed {
 .sidebar .if-not-collapsed, .sidebar .if-collapsed {
     display: none;
     display: none;
@@ -85,7 +85,7 @@
 .dropdown-menu {
 .dropdown-menu {
   margin-top: 7px;
   margin-top: 7px;
   border-radius: 0;
   border-radius: 0;
-  min-width: 100px;
+  min-width: 120px;
 }
 }
 .dropdown-item:not(:last-child) {
 .dropdown-item:not(:last-child) {
   border-bottom:1px solid #ddd;
   border-bottom:1px solid #ddd;
@@ -1122,6 +1122,9 @@ body .node input[type="number"] {
     border-color: #e24848;
     border-color: #e24848;
     box-shadow: 0 0 2px #c10707 !important;
     box-shadow: 0 0 2px #c10707 !important;
 }
 }
+.erx-line-item:nth-child(2n+1) {
+    background: #f0f8ffbb
+}
 
 
 .no-scroll {
 .no-scroll {
     overflow: hidden;
     overflow: hidden;
@@ -1391,7 +1394,7 @@ button.note-templates-trigger-assessment {
     display: none;
     display: none;
 }
 }
 .col-2-button {
 .col-2-button {
-    width: 80px;
+    width: 88px;
     text-align: left;
     text-align: left;
 }
 }
 
 
@@ -1435,3 +1438,23 @@ button.note-templates-trigger-assessment {
     overflow: unset;
     overflow: unset;
     text-overflow: unset;
     text-overflow: unset;
 }*/
 }*/
+.collapsible-tbody.collapsed {
+    display: none;
+}
+#send-fax-pdf-preview {
+    max-height: 350px;
+    overflow: auto;
+    box-shadow: 0 0 2px #ccc;
+}
+canvas.pdf-viewer-page.pdf-preview-page {
+    margin: 0.5rem auto;
+}
+.back-to-admin-button {
+    background: transparent;
+    border: 0;
+    padding: 0;
+    color: rgb(13, 89, 175);
+}
+.back-to-admin-button:hover {
+    text-decoration: underline;
+}

BIN
public/img/dialmd-logo.png


+ 10 - 0
public/js/mc.js

@@ -181,6 +181,16 @@ function onFastLoaded(_data, _href, _history) {
 }
 }
 function fastLoad(_href, _history = true, _useCache = true, _replaceState = false) {
 function fastLoad(_href, _history = true, _useCache = true, _replaceState = false) {
 
 
+    let domPro = $(window.top.document.body).attr('data-pro-uid'),
+        lsPro = window.top.localStorage.currentProUid;
+    console.log('ALIX DOM: ', domPro);
+    console.log('ALIX LS: ', lsPro);
+    if(lsPro && domPro && lsPro !== domPro) {
+        console.warn('ALIX Looks like you have a session as another pro on another tab. Refreshing window.top...');
+        window.top.location.href = _href;
+        return false;
+    }
+
     showMask();
     showMask();
 
 
     if (_href === '') _href = '/';
     if (_href === '') _href = '/';

+ 3 - 2
resources/views/app/dashboard/measurements.blade.php

@@ -43,7 +43,8 @@
                         @endif
                         @endif
                     </td>
                     </td>
                     <td>
                     <td>
-                        {{$measurement->ts}}
+                        {{ friendly_date_time_short_with_tz_from_timestamp_divide1000($measurement->ts, 'EASTERN') }}
+                        EST
                     </td>
                     </td>
                     <td class="px-2">
                     <td class="px-2">
                         @if($measurement->careMonth)
                         @if($measurement->careMonth)
@@ -134,7 +135,7 @@
             <?php endforeach ?>
             <?php endforeach ?>
         @else
         @else
             <tr>
             <tr>
-                <td class="text-secondary p-0 border-0 p-3" colspan="6">
+                <td class="text-secondary p-0 p-3" colspan="7">
                     No items to show
                     No items to show
                 </td>
                 </td>
             </tr>
             </tr>

+ 8 - 1
resources/views/app/log-in-as.blade.php

@@ -25,7 +25,7 @@
                                 <td>{{$pro->cell_number}}</td>
                                 <td>{{$pro->cell_number}}</td>
                                 <td>{{$pro->email}}</td>
                                 <td>{{$pro->email}}</td>
                                 <td class="text-right pr-2">
                                 <td class="text-right pr-2">
-                                    <form action="{{route('process-log-in-as')}}" method="POST" target="_top">
+                                    <form action="{{route('process-log-in-as')}}" onsubmit="saveProUid('{{$pro->uid}}')" method="POST" target="_top">
                                         @csrf
                                         @csrf
                                         <input type="hidden" name="proUid" value="{{$pro->uid}}">
                                         <input type="hidden" name="proUid" value="{{$pro->uid}}">
                                         <button class="btn btn-sm btn-primary font-weight-bold px-4 py-1">Login</button>
                                         <button class="btn btn-sm btn-primary font-weight-bold px-4 py-1">Login</button>
@@ -40,4 +40,11 @@
         </div>
         </div>
     </div>
     </div>
 
 
+    <script>
+    function saveProUid(_uid) {
+        window.top.localStorage.currentProUid = _uid;
+        return true;
+    }
+    </script>
+
 @endsection
 @endsection

+ 2 - 1
resources/views/app/mc.blade.php

@@ -14,7 +14,7 @@
     <script src="{{ asset('js/toastr.min.js') }}" type="application/javascript"></script>
     <script src="{{ asset('js/toastr.min.js') }}" type="application/javascript"></script>
     <title>Leadership Health</title>
     <title>Leadership Health</title>
 </head>
 </head>
-<body class="h-100">
+<body class="h-100" data-pro-uid="{{$pro ? $pro->uid : ''}}">
     <div class="row mx-0 h-100">
     <div class="row mx-0 h-100">
         <div class="col-9 px-0 app-left-panel">
         <div class="col-9 px-0 app-left-panel">
             <iframe id="stag_mcp_lhs" src="/blank" frameborder="0" class="h-100 w-100"></iframe>
             <iframe id="stag_mcp_lhs" src="/blank" frameborder="0" class="h-100 w-100"></iframe>
@@ -24,6 +24,7 @@
         </div>
         </div>
     </div>
     </div>
     <script>
     <script>
+        window.top.localStorage.currentProUid = "{{$pro ? $pro->uid : ''}}";
         initVSplitter('stag-mc-main', $('.app-left-panel'), $('.app-right-panel'));
         initVSplitter('stag-mc-main', $('.app-left-panel'), $('.app-right-panel'));
         window.openInLHS = function(_url) {
         window.openInLHS = function(_url) {
             $('#stag_mcp_lhs')[0].contentWindow.fastLoad(_url, true, false);
             $('#stag_mcp_lhs')[0].contentWindow.fastLoad(_url, true, false);

+ 1 - 0
resources/views/app/patient/action-items-equipment-single.blade.php

@@ -106,6 +106,7 @@
                 </form>
                 </form>
             </div>
             </div>
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'equipment'])
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'equipment'])
+            @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
         </div>
         </div>
         <script>
         <script>
             (function() {
             (function() {

+ 1 - 0
resources/views/app/patient/action-items-erx-single.blade.php

@@ -179,6 +179,7 @@
                 </form>
                 </form>
             </div>
             </div>
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'erx'])
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'erx'])
+            @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
         </div>
         </div>
         <script>
         <script>
             (function() {
             (function() {

+ 1 - 0
resources/views/app/patient/action-items-imaging-single.blade.php

@@ -108,6 +108,7 @@
                 </form>
                 </form>
             </div>
             </div>
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'imaging'])
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'imaging'])
+            @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
         </div>
         </div>
         <script>
         <script>
             (function() {
             (function() {

+ 1 - 0
resources/views/app/patient/action-items-lab-single.blade.php

@@ -108,6 +108,7 @@
                 </form>
                 </form>
             </div>
             </div>
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'lab'])
             @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'lab'])
+            @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
         </div>
         </div>
         <script>
         <script>
             (function() {
             (function() {

+ 173 - 116
resources/views/app/patient/eligible-refreshes.blade.php

@@ -1,124 +1,181 @@
 @extends ('layouts.patient')
 @extends ('layouts.patient')
 
 
 @section('inner-content')
 @section('inner-content')
-<div id="client-settings-container">
-    <div class="row">
-        <div class="col-md-12">
-            <h1>Eligible Refreshes</h1>
-            <div>
-                <div moe relative class="ml-2">
-                    <a href="" start show class="btn btn-sm btn-success text-white font-weight-bold small">Refresh Eligible Data</a>
-                    <form url="/api/client/refreshEligible" class="mcp-theme-1" right>
-                        <input type="hidden" name="uid" value="{{$patient->uid}}">
-                        <p>Refresh eligible data?</p>
-                        <div>
-                            <button submit class="btn btn-sm btn-primary mr-2">Yes</button>
-                            <button cancel class="btn btn-sm btn-default border">Cancel</button>
-                        </div>
-                    </form>
-                </div>
+    <?php
+    function toHumanReadable($name) {
+        return ucwords(preg_replace("/[^0-9a-z]/i", " ", $name));
+    }
+    function parseRender($_data) {
+        if($_data) {
+            $type = gettype($_data);
+            if(is_string($_data) || is_numeric($_data)) {
+                echo $_data;
+            }
+            else {
+                echo "<table class='table table-sm border w-100'>";
+                foreach($_data as $k => $v) {
+                    echo "<tr>";
+                    echo "<td><b class='text-secondary'>" . toHumanReadable($k) . "</b></td>";
+                    echo "<td>";
+                    if(is_object($v)) {
+                        parseRender($v);
+                    }
+                    elseif(is_array($v)) {
+                        foreach($v as $k2 => $v2) {
+                            parseRender($v2);
+                        }
+                    }
+                    else {
+                        echo $v;
+                    }
+                    echo "</td>";
+                    echo "</tr>";
+                }
+                echo "</table>";
+            }
+        }
+    }
+    ?>
+    <style>
+        .eligible-table td {
+            white-space: nowrap;
+        }
+    </style>
+<div>
+    <div class="d-flex align-items-center">
+        <h4 class="font-weight-bold m-0 font-size-16">Eligible Refreshes</h4>
+        <div class="ml-3">
+            <div moe relative>
+                <a href="" start show class="btn btn-sm btn-primary text-white font-weight-bold small">Refresh Eligible Data</a>
+                <form url="/api/client/refreshEligible" class="mcp-theme-1">
+                    <input type="hidden" name="uid" value="{{$patient->uid}}">
+                    <p class="text-nowrap">Refresh eligible data?</p>
+                    <div>
+                        <button submit class="btn btn-sm btn-primary mr-2">Yes</button>
+                        <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                    </div>
+                </form>
             </div>
             </div>
-            <hr>
-            <table class="table table-condensed table-striped">
-                <thead>
-                    <tr>
-                        <th>Timestamp</th>
-                        <th>Result</th>
-                    </tr>
-                </thead>
-                <tbody>
-                    @foreach($patient->eligibleRefreshes as $el)
-                    <tr>
-                        <td>{{friendly_date_time($el->ts)}}</td>
-                        <td>
-                        <table class="table table-sm table-striped table-condensed">
-                            <tr>
-                                <td>Was Successful</td>
-                                <td>{{$el->medicareResult->was_successful}}</td>
-                            </tr>
-                            <tr>
-                                <td>Reject Reason Code</td>
-                                <td>{{$el->medicareResult->reject_reason_code}}</td>
-                            </tr>
-                            <tr>
-                                <td>Reject Reason Description</td>
-                                <td>{{$el->medicareResult->reject_reason_description}}</td>
-                            </tr>
-                            <tr>
-                                <td>Follow Up Action Code</td>
-                                <td>{{$el->medicareResult->follow_up_action_code}}</td>
-                            </tr>
-                            <tr>
-                                <td>Follow Up Action Description</td>
-                                <td>{{$el->medicareResult->follow_up_action_description}}</td>
-                            </tr>
-                            <tr>
-                                <td>Details</td>
-                                <td>{{$el->medicareResult->details}}</td>
-                            </tr>
-                            <tr>
-                                <td>Is Mcn Valid Number</td>
-                                <td>{{$el->medicareResult->is_mcn_valid_number}}</td>
-                            </tr>
-                            <tr>
-                                <td>Address Street Line1</td>
-                                <td>{{$el->medicareResult->address_street_line1}}</td>
-                            </tr>
-                            <tr>
-                                <td>Address Street Line2</td>
-                                <td>{{$el->medicareResult->address_street_line2}}</td>
-                            </tr>
-                            <tr>
-                                <td>Address City</td>
-                                <td>{{$el->medicareResult->address_city}}</td>
-                            </tr>
-                            <tr>
-                                <td>Address State</td>
-                                <td>{{$el->medicareResult->address_state}}</td>
-                            </tr>
-                            <tr>
-                                <td>Address Zip</td>
-                                <td>{{$el->medicareResult->address_zip}}</td>
-                            </tr>
-                            <tr>
-                                <td>Is Partbprimary</td>
-                                <td>{{$el->medicareResult->is_partbprimary}}</td>
-                            </tr>
-                            <tr>
-                                <td>Is Hospice</td>
-                                <td>{{$el->medicareResult->is_hospice}}</td>
-                            </tr>
-                            <tr>
-                                <td>Mcn Response Detail</td>
-                                <td>{{$el->medicareResult->mcn_response_detail}}</td>
-                            </tr>
-                            <tr>
-                                <td>Billing Address</td>
-                                <td>{{$el->medicareResult->billing_address}}</td>
-                            </tr>
-                            <tr>
-                                <td>Reason Not Partb</td>
-                                <td>{{$el->medicareResult->reason_not_partb}}</td>
-                            </tr>
-                            <tr>
-                                <td>Reason Not Partbmemo</td>
-                                <td>{{$el->medicareResult->reason_not_partbmemo}}</td>
-                            </tr>
-                            <tr>
-                                <td>Is Medicare Advantage</td>
-                                <td>{{$el->medicareResult->is_medicare_advantage}}</td>
-                            </tr>
-                            <tr>
-                                <td>Medicare Advantage Plan</td>
-                                <td>{{$el->medicareResult->medicare_advantage_plan}}</td>
-                            </tr>
-                        </table>
-                        </td>
-                    </tr>
-                    @endforeach
-                </tbody>
-            </table>
         </div>
         </div>
     </div>
     </div>
+
+    <table class="table table-sm table-bordered mt-3 mb-0">
+        <thead>
+        <tr>
+            <th class="border-bottom-0 w-25">Timestamp</th>
+            <th class="border-bottom-0">Result</th>
+        </tr>
+        </thead>
+        <tbody>
+        @foreach($patient->eligibleRefreshes as $el)
+            <tr>
+                <td class="text-nowrap">{{friendly_date_time($el->ts)}}</td>
+                <td>
+                    <table class="table table-sm table-striped table-condensed eligible-table m-0">
+                        <tbody>
+                        <tr>
+                            <td class="w-25">Was Successful</td>
+                            <td>
+                                <div class="d-flex align-items-center">
+                                    <span>{{$el->medicareResult->was_successful}}</span>
+                                    <a href="#" class="ml-auto"
+                                       onclick="$(this).closest('table').find('.collapsible-tbody').toggleClass('collapsed'); return">
+                                        <i class="fa fa-sort"></i>
+                                    </a>
+                                </div>
+                            </td>
+                        </tr>
+                        </tbody>
+                        <tbody class="collapsible-tbody">
+                        <tr>
+                            <td>Reject Reason Code</td>
+                            <td>{{$el->medicareResult->reject_reason_code}}</td>
+                        </tr>
+                        <tr>
+                            <td>Reject Reason Description</td>
+                            <td>{{$el->medicareResult->reject_reason_description}}</td>
+                        </tr>
+                        <tr>
+                            <td>Follow Up Action Code</td>
+                            <td>{{$el->medicareResult->follow_up_action_code}}</td>
+                        </tr>
+                        <tr>
+                            <td>Follow Up Action Description</td>
+                            <td>{{$el->medicareResult->follow_up_action_description}}</td>
+                        </tr>
+                        <tr>
+                            <td>Details</td>
+                            <td>{{$el->medicareResult->details}}</td>
+                        </tr>
+                        <tr>
+                            <td>Is Mcn Valid Number</td>
+                            <td>{{$el->medicareResult->is_mcn_valid_number}}</td>
+                        </tr>
+                        <tr>
+                            <td>Address Street Line1</td>
+                            <td>{{$el->medicareResult->address_street_line1}}</td>
+                        </tr>
+                        <tr>
+                            <td>Address Street Line2</td>
+                            <td>{{$el->medicareResult->address_street_line2}}</td>
+                        </tr>
+                        <tr>
+                            <td>Address City</td>
+                            <td>{{$el->medicareResult->address_city}}</td>
+                        </tr>
+                        <tr>
+                            <td>Address State</td>
+                            <td>{{$el->medicareResult->address_state}}</td>
+                        </tr>
+                        <tr>
+                            <td>Address Zip</td>
+                            <td>{{$el->medicareResult->address_zip}}</td>
+                        </tr>
+                        <tr>
+                            <td>Is Partbprimary</td>
+                            <td>{{$el->medicareResult->is_partbprimary}}</td>
+                        </tr>
+                        <tr>
+                            <td>Is Hospice</td>
+                            <td>{{$el->medicareResult->is_hospice}}</td>
+                        </tr>
+                        <tr>
+                            <td>Mcn Response Detail</td>
+                            <td>
+                            @if($el->medicareResult->mcn_response_detail)
+                                <?php $parsed = json_decode($el->medicareResult->mcn_response_detail);?>
+                                <?php parseRender($parsed); ?>
+                            @else
+                                &hyphen;
+                            @endif
+                            </td>
+                        </tr>
+                        <tr>
+                            <td>Billing Address</td>
+                            <td>{{$el->medicareResult->billing_address}}</td>
+                        </tr>
+                        <tr>
+                            <td>Reason Not Partb</td>
+                            <td>{{$el->medicareResult->reason_not_partb}}</td>
+                        </tr>
+                        <tr>
+                            <td>Reason Not Partbmemo</td>
+                            <td>{{$el->medicareResult->reason_not_partbmemo}}</td>
+                        </tr>
+                        <tr>
+                            <td>Is Medicare Advantage</td>
+                            <td>{{$el->medicareResult->is_medicare_advantage}}</td>
+                        </tr>
+                        <tr>
+                            <td>Medicare Advantage Plan</td>
+                            <td>{{$el->medicareResult->medicare_advantage_plan}}</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </td>
+            </tr>
+        @endforeach
+        </tbody>
+    </table>
 </div>
 </div>
 @endsection
 @endsection

+ 2 - 1
resources/views/app/patient/measurements.blade.php

@@ -34,7 +34,7 @@
                         <div class="mb-2">
                         <div class="mb-2">
                             <label for="" class="control-label">Process client bd measurements report?</label>
                             <label for="" class="control-label">Process client bd measurements report?</label>
                         </div>
                         </div>
-                       
+
                         <div class="d-flex align-items-center">
                         <div class="d-flex align-items-center">
                             <button class="btn btn-sm btn-primary mr-2" submit>Yes</button>
                             <button class="btn btn-sm btn-primary mr-2" submit>Yes</button>
                             <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
                             <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
@@ -66,6 +66,7 @@
                                 @else
                                 @else
                                     {{ friendly_date_time_short_with_tz($measurement->effective_date, true, 'EASTERN') }}
                                     {{ friendly_date_time_short_with_tz($measurement->effective_date, true, 'EASTERN') }}
                                 @endif
                                 @endif
+                                EST
                             </td>
                             </td>
                             <td class="px-2">{{ $measurement->label }}</td>
                             <td class="px-2">{{ $measurement->label }}</td>
                             <td class="px-2">
                             <td class="px-2">

+ 16 - 1
resources/views/app/patient/note/dashboard.blade.php

@@ -356,7 +356,7 @@
                                     </td>
                                     </td>
                                     <td class="pl-2">
                                     <td class="pl-2">
                                         @if($bill->has_hcp_been_paid)
                                         @if($bill->has_hcp_been_paid)
-                                            <span class="text-dark">Received:</span><span class="font-weight-bold text-success ml-2">${{ $bill->hcp_payment_amount }}</span>
+                                            <span class="text-dark">Processed:</span><span class="font-weight-bold text-success ml-2">${{ $bill->hcp_payment_amount }}</span>
                                         @else
                                         @else
                                             <span class="text-dark">Expected:</span><span class="font-weight-bold text-dark ml-2">{{ $bill->hcp_expected_payment_amount ? '$' . $bill->hcp_expected_payment_amount : '-' }}</span>
                                             <span class="text-dark">Expected:</span><span class="font-weight-bold text-dark ml-2">{{ $bill->hcp_expected_payment_amount ? '$' . $bill->hcp_expected_payment_amount : '-' }}</span>
                                         @endif
                                         @endif
@@ -385,6 +385,21 @@
                                                     </span>
                                                     </span>
                                                 @endif
                                                 @endif
                                             @endif
                                             @endif
+                                                @if(!$bill->has_hcp_been_paid && $pro->pro_type === 'ADMIN')
+                                                    <span class="mx-2 text-secondary">|</span>
+                                                    <span class="d-block" moe>
+                                                    <a class="text-danger" href="" show start>Submit Payment</a>
+                                                    <form url="/api/bill/payHcpAmount">
+                                                        <input type="hidden" name="uid" value="{{$bill->uid}}">
+                                                        <p>Submit payment:</p>
+                                                        <div class="mb-0">
+                                                            <input type="text" class="text form-control form-control-sm" name="hcpPaymentAmount" value="{{$bill->hcp_expected_payment_amount}}" placeholder="amount"><br>
+                                                            <button class="btn btn-success btn-sm" submit>Submit</button>
+                                                            <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+                                                        </div>
+                                                    </form>
+                                                </span>
+                                                @endif
                                             @if($bill->is_cancelled)
                                             @if($bill->is_cancelled)
                                                 <span class="mx-2 text-secondary">|</span>
                                                 <span class="mx-2 text-secondary">|</span>
                                                 <span class="d-block text-secondary">
                                                 <span class="d-block text-secondary">

+ 1 - 1
resources/views/app/patient/partials/equipment.blade.php

@@ -108,7 +108,7 @@
         </form>
         </form>
     </div>
     </div>
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'equipment'])
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'equipment'])
-</div>
+    @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
 <script>
 <script>
     (function() {
     (function() {
         <?php
         <?php

+ 1 - 0
resources/views/app/patient/partials/erx.blade.php

@@ -182,6 +182,7 @@
         </form>
         </form>
     </div>
     </div>
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'erx'])
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'erx'])
+    @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
 </div>
 </div>
 <script>
 <script>
     (function() {
     (function() {

+ 1 - 0
resources/views/app/patient/partials/imaging.blade.php

@@ -110,6 +110,7 @@
         </form>
         </form>
     </div>
     </div>
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'imaging'])
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'imaging'])
+    @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
 </div>
 </div>
 <script>
 <script>
     (function() {
     (function() {

+ 1 - 0
resources/views/app/patient/partials/lab.blade.php

@@ -114,6 +114,7 @@
         </form>
         </form>
     </div>
     </div>
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'lab'])
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'lab'])
+    @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
 </div>
 </div>
 <script>
 <script>
     (function() {
     (function() {

+ 1 - 0
resources/views/app/patient/partials/other.blade.php

@@ -57,6 +57,7 @@
         </form>
         </form>
     </div>
     </div>
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'other'])
     @include('app.patient.partials.ticket_update_pro_form',['ticketType'=>'other'])
+    @include('app.patient.tickets.ticket_send_fax_form',['ticketType'=>'equipment'])
 </div>
 </div>
 
 
 <script>
 <script>

+ 1 - 0
resources/views/app/patient/partials/ticket_action_links.blade.php

@@ -1,3 +1,4 @@
 <a class="btn btn-sm btn-primary text-white font-weight-bold mr-2 c-pointer" v-if="!item.is_entry_error" v-on:click.prevent="setIsEntryErrorToTrue(item)">Mark As Entry Error</a>
 <a class="btn btn-sm btn-primary text-white font-weight-bold mr-2 c-pointer" v-if="!item.is_entry_error" v-on:click.prevent="setIsEntryErrorToTrue(item)">Mark As Entry Error</a>
 <a class="btn btn-sm btn-primary text-white font-weight-bold mr-2 c-pointer" v-if="item.is_entry_error" v-on:click.prevent="setIsEntryErrorToFalse(item)">Undo Mark As Entry Error</a>
 <a class="btn btn-sm btn-primary text-white font-weight-bold mr-2 c-pointer" v-if="item.is_entry_error" v-on:click.prevent="setIsEntryErrorToFalse(item)">Undo Mark As Entry Error</a>
 
 
+<a href="{{route('ticket-download-as-pdf', $ticket)}}" class="btn btn-sm btn-primary text-white font-weight-bold mr-2 c-pointer" target="_blank" native>Preview PDF</a>

+ 9 - 0
resources/views/app/patient/partials/ticket_vue_collab_card.blade.php

@@ -80,5 +80,14 @@
                    v-on:click.prevent="signAsInitiatingPro(item)">Sign</a>
                    v-on:click.prevent="signAsInitiatingPro(item)">Sign</a>
             </span>
             </span>
         </span>
         </span>
+        <span class="d-flex align-items-center">
+            <span class="text-secondary text-sm width-70px">Send Fax:</span>
+            <span class="d-inline-flex" v-if="item.manager_pro_id === {{$pro->id}}">
+                <span class="mx-2 opacity-60 text-secondary">•</span>
+                <a class="on-hover-opaque c-pointer" v-on:click.prevent="showSendFaxPopup('other-popup', item)">
+                    <i class="fa fa-edit"></i>
+                </a>
+            </span>
+        </span>
     </div>
     </div>
 </div>
 </div>

+ 1 - 0
resources/views/app/patient/partials/ticket_vue_collab_column.blade.php

@@ -30,4 +30,5 @@
             <span class="text-secondary text-sm" v-html="item.has_initiating_pro_signed ? '(signed)' : ''"></span>
             <span class="text-secondary text-sm" v-html="item.has_initiating_pro_signed ? '(signed)' : ''"></span>
         </span>
         </span>
     </span>
     </span>
+   
 </td>
 </td>

+ 2 - 1
resources/views/app/patient/partials/ticket_vue_data.blade.php

@@ -1,4 +1,5 @@
 allPros: {!! json_encode($allPros) !!},
 allPros: {!! json_encode($allPros) !!},
 proToUpdate: '',
 proToUpdate: '',
 proTypes: ['Assigned', 'Manager', 'Initiating', 'Ordering'],
 proTypes: ['Assigned', 'Manager', 'Initiating', 'Ordering'],
-newProUid:''
+newProUid:'',
+faxNumber:''

+ 27 - 0
resources/views/app/patient/partials/ticket_vue_methods.blade.php

@@ -43,6 +43,33 @@ updateTicketPro: function() {
     return false;
     return false;
 },
 },
 
 
+/*showSendFaxPopup: function(_name, _item) {
+    closeStagPopup();
+    this.popupItem =JSON.parse(JSON.stringify(_item))
+    let self = this;
+    Vue.nextTick(function() {
+        showStagPopup('send-fax-popup', true);
+    });
+},
+
+sendFax: function() {
+    let self  = this;
+    showMask();
+    let payload = this.popupItem;
+    payload.faxNumber = self.faxNumber;
+    payload.ticketUid = payload.uid;
+
+    $.post(
+        '/api/ticketFax/create',
+        payload,
+        function(_data) {
+            console.log(_data);
+            fastReload();
+        },
+        'json');
+
+    return false;
+},*/
 
 
 
 
 setIsEntryErrorToTrue: function(_item){
 setIsEntryErrorToTrue: function(_item){

+ 208 - 20
resources/views/app/patient/tickets.blade.php

@@ -53,8 +53,16 @@
     <script src="/select2/select2.min.js"></script>
     <script src="/select2/select2.min.js"></script>
     <div id="ticketsApp" v-cloak>
     <div id="ticketsApp" v-cloak>
         <div class="d-flex align-items-end pb-0">
         <div class="d-flex align-items-end pb-0">
-            <h4 class="font-weight-bold m-0 font-size-14">Tickets</h4>
-            <select class="ml-auto max-width-300px form-control form-control-sm pr-2"
+            <h4 class="font-weight-bold m-0 font-size-16">ERx / Orders</h4>
+            <select class="ml-auto max-width-200px form-control form-control-sm pr-2"
+                    onchange="return fastLoad('/patients/view/{{$patient->uid}}/tickets/' + this.value, true, false, false)">
+                <option value="" {{$type === '' ? 'selected' : ''}}>All</option>
+                <option value="erx" {{$type === 'erx' ? 'selected' : ''}}>ERx</option>
+                <option value="lab" {{$type === 'lab' ? 'selected' : ''}}>Lab Orders</option>
+                <option value="imaging" {{$type === 'imaging' ? 'selected' : ''}}>Imaging Orders</option>
+                <option value="equipment" {{$type === 'equipment' ? 'selected' : ''}}>Equipment Orders</option>
+            </select>
+            <select class="ml-2 max-width-200px form-control form-control-sm pr-2"
                     v-model="statusFilter">
                     v-model="statusFilter">
                 <option value="open">Open tickets (@{{ numOpen }})</option>
                 <option value="open">Open tickets (@{{ numOpen }})</option>
                 <option value="closed">Closed tickets (@{{ numClosed }})</option>
                 <option value="closed">Closed tickets (@{{ numClosed }})</option>
@@ -62,11 +70,20 @@
             </select>
             </select>
         </div>
         </div>
 
 
-        @include('app.patient.tickets.erx')
-        @include('app.patient.tickets.lab')
-        @include('app.patient.tickets.imaging')
-        @include('app.patient.tickets.equipment')
-
+        @if($type === '' || $type === 'erx')
+            @include('app.patient.tickets.erx')
+        @endif
+        @if($type === '' || $type === 'lab')
+            @include('app.patient.tickets.lab')
+        @endif
+        @if($type === '' || $type === 'imaging')
+            @include('app.patient.tickets.imaging')
+        @endif
+        @if($type === '' || $type === 'equipment')
+            @include('app.patient.tickets.equipment')
+        @endif
+
+        @include('app.patient.tickets.ticket_send_fax_form')
     </div>
     </div>
 
 
     <script>
     <script>
@@ -147,6 +164,9 @@
                         proToUpdate: '',
                         proToUpdate: '',
                         proTypes: ['Assigned', 'Manager', 'Initiating', 'Ordering'],
                         proTypes: ['Assigned', 'Manager', 'Initiating', 'Ordering'],
                         newProUid: '',
                         newProUid: '',
+                        faxes: [],
+                        loadingFaxes: false,
+                        faxNumber: '',
                         reloading: false,
                         reloading: false,
                         comment: '',
                         comment: '',
                         preparing: false,
                         preparing: false,
@@ -199,6 +219,8 @@
                         // common show popup
                         // common show popup
                         preparePopup: function(_type, _item) {
                         preparePopup: function(_type, _item) {
                             this.preparing = true;
                             this.preparing = true;
+                            this.loadingFaxes = true;
+                            this.faxes = [];
                             this[_type + 'PopupMode'] = _item ? 'edit' : 'add';
                             this[_type + 'PopupMode'] = _item ? 'edit' : 'add';
                             this[_type + 'PopupItem'] = _item ? JSON.parse(JSON.stringify(_item)) : JSON.parse(JSON.stringify(this[_type + 'Model']));
                             this[_type + 'PopupItem'] = _item ? JSON.parse(JSON.stringify(_item)) : JSON.parse(JSON.stringify(this[_type + 'Model']));
                             this[_type + 'PopupItem'].assigned_pro_uid = '';
                             this[_type + 'PopupItem'].assigned_pro_uid = '';
@@ -211,6 +233,24 @@
                             }
                             }
                             this.comment = '';
                             this.comment = '';
                             this.preparing = false;
                             this.preparing = false;
+
+                            // load tickets
+                            if(_item) {
+                                $.get('/get-ticket-faxes/' + _item.uid, (_data) => {
+                                    this.faxes = _data;
+                                    this.loadingFaxes = false;
+                                }, 'json')
+                            }
+                            else {
+                                this.loadingFaxes = false;
+                            }
+
+                            // empty additional items
+                            if((!this[_type + 'PopupItem'].data.items || !this[_type + 'PopupItem'].data.items.length) ||
+                                (!_item && _type === 'erx' && this[_type + 'PopupItem'].data.items.length === 1)) {
+                                this[_type + 'PopupItem'].data.items = [];
+                            }
+
                         },
                         },
                         reinitProSuggest: function() {
                         reinitProSuggest: function() {
                             $('#ticketsApp [pro-suggest-initialized]').removeAttr('pro-suggest-initialized');
                             $('#ticketsApp [pro-suggest-initialized]').removeAttr('pro-suggest-initialized');
@@ -288,7 +328,10 @@
                                 (_data) => {
                                 (_data) => {
                                     console.log(_data);
                                     console.log(_data);
                                     if(!_autoSave) {
                                     if(!_autoSave) {
-                                        fastReload();
+                                        if(_data.data) {
+                                            window.localStorage.autoOpen = 'erx|' + _data.data;
+                                            fastReload();
+                                        }
                                     }
                                     }
                                     else {
                                     else {
                                         this.reloadPopupItem('erx');
                                         this.reloadPopupItem('erx');
@@ -338,7 +381,10 @@
                                 (_data) => {
                                 (_data) => {
                                     console.log(_data);
                                     console.log(_data);
                                     if(!_autoSave) {
                                     if(!_autoSave) {
-                                        fastReload();
+                                        if(_data.data) {
+                                            window.localStorage.autoOpen = 'lab|' + _data.data;
+                                            fastReload();
+                                        }
                                     }
                                     }
                                     else {
                                     else {
                                         this.reloadPopupItem('lab');
                                         this.reloadPopupItem('lab');
@@ -390,7 +436,10 @@
                                 (_data) => {
                                 (_data) => {
                                     console.log(_data);
                                     console.log(_data);
                                     if(!_autoSave) {
                                     if(!_autoSave) {
-                                        fastReload();
+                                        if(_data.data) {
+                                            window.localStorage.autoOpen = 'imaging|' + _data.data;
+                                            fastReload();
+                                        }
                                     }
                                     }
                                     else {
                                     else {
                                         this.reloadPopupItem('imaging');
                                         this.reloadPopupItem('imaging');
@@ -442,7 +491,10 @@
                                 (_data) => {
                                 (_data) => {
                                     console.log(_data);
                                     console.log(_data);
                                     if(!_autoSave) {
                                     if(!_autoSave) {
-                                        fastReload();
+                                        if(_data.data) {
+                                            window.localStorage.autoOpen = 'equipment|' + _data.data;
+                                            fastReload();
+                                        }
                                     }
                                     }
                                     else {
                                     else {
                                         this.reloadPopupItem('equipment');
                                         this.reloadPopupItem('equipment');
@@ -502,6 +554,80 @@
                                 this.reloadPopupItem(this.currentCategory);
                                 this.reloadPopupItem(this.currentCategory);
                             }, 'json');
                             }, 'json');
                         },
                         },
+                        showSendFaxPopup: function() {
+                            this.faxNumber = this[this.currentCategory + 'PopupItem'].data.pharmacyFax;
+                            Vue.nextTick(() => {
+                                showStagPopup('send-fax-popup');
+                                this.sendFaxModalPDFPreview();
+                            });
+                        },
+                        sendFaxModalPDFPreview: function() {
+
+                            let _loadedPDF = null, _numPages = 1, _page = 1;
+
+                            function _load(_url) {
+
+                                _loadedPDF = null;
+                                _numPages = 1;
+                                _page = 1;
+
+                                $('#send-fax-pdf-preview>canvas').remove();
+
+                                let url = _url;
+                                let pdfjsLib = window['pdfjs-dist/build/pdf'];
+                                pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
+                                let loadingTask = pdfjsLib.getDocument(url);
+                                loadingTask.promise.then(function (pdf) {
+                                    _numPages = pdf.numPages;
+                                    _loadedPDF = pdf;
+                                    _page = 1;
+                                    _render();
+                                }, function (reason) {
+                                    // reason.message;
+                                });
+                            }
+                            function _render() {
+
+                                _loadedPDF.getPage(_page).then(function (page) {
+
+                                    // create canvas
+                                    let canvasElement = $('<canvas/>')
+                                        .addClass('pdf-viewer-page pdf-preview-page')
+                                        .appendTo('#send-fax-pdf-preview');
+
+                                    let canvas = canvasElement[0];
+                                    let viewport = page.getViewport({scale: 0.75});
+                                    let context = canvas.getContext('2d');
+                                    canvas.height = viewport.height;
+                                    canvas.width = viewport.width;
+                                    const $canvas = $(canvas);
+                                    let renderContext = {
+                                        canvasContext: context,
+                                        viewport: viewport
+                                    };
+                                    let renderTask = page.render(renderContext);
+                                    renderTask.promise.then(function () {
+                                        if(_page < _numPages) {
+                                            _page++;
+                                            _render();
+                                        }
+                                    });
+                                });
+                            }
+
+                            _load('/ticket-download-as-pdf/' + this[this.currentCategory + 'PopupItem'].uid);
+                        },
+                        sendFax: function(_item) {
+                            $.post('/api/ticketFax/create', {
+                                    faxNumber: this.faxNumber,
+                                    ticketUid: this[this.currentCategory + 'PopupItem'].uid
+                                },
+                                (_data) => {
+                                    this.reloadPopupItem(this.currentCategory);
+                                    closeStagPopup();
+                                },
+                                'json');
+                        },
                         signAsOrderingPro: function(_item) {
                         signAsOrderingPro: function(_item) {
                             $.post('/api/ticket/signAsOrderingPro', {
                             $.post('/api/ticket/signAsOrderingPro', {
                                 uid: _item.uid
                                 uid: _item.uid
@@ -552,8 +678,18 @@
                                     randPart = Math.ceil(Math.random() * 1000000),
                                     randPart = Math.ceil(Math.random() * 1000000),
                                     dynID = 'rx-' + randPart;
                                     dynID = 'rx-' + randPart;
                                 $(elem).attr('id', dynID);
                                 $(elem).attr('id', dynID);
-                                var strengthElem = $(elem).closest('.stag-popup').find('[data-field="strength"]')[0],
-                                    dynStrengthsID = 'rx-' + randPart + '-strengths';
+                                var dynStrengthsID = 'rx-' + randPart + '-strengths';
+                                var strengthElem = null;
+                                if($(elem).closest('.erx-line-item').length) {
+                                    strengthElem = $(elem).closest('.erx-line-item').find('[data-field="strength"]')[0]
+                                }
+                                else {
+                                    strengthElem = $(elem).closest('.stag-popup').find('[data-field="strength"]')[0]
+                                }
+                                var lineItemIndex = -1;
+                                if($(elem).is('[data-index]')) {
+                                    lineItemIndex = $(elem).attr('data-index');
+                                }
                                 $(strengthElem).attr('id', dynStrengthsID);
                                 $(strengthElem).attr('id', dynStrengthsID);
                                 $(strengthElem).attr('rx-id', dynID);
                                 $(strengthElem).attr('rx-id', dynID);
                                 new window.Def.Autocompleter.Prefetch(dynStrengthsID, [], {matchListValue: false});
                                 new window.Def.Autocompleter.Prefetch(dynStrengthsID, [], {matchListValue: false});
@@ -565,11 +701,21 @@
                                     if (strengths) {
                                     if (strengths) {
                                         strengthElem.autocomp.setListAndField(strengths, '');
                                         strengthElem.autocomp.setListAndField(strengths, '');
                                     }
                                     }
-                                    self.erxPopupItem.data.medication = $(elem).val();
+                                    if(lineItemIndex === -1) {
+                                        self.erxPopupItem.data.medication = $(elem).val();
+                                    }
+                                    else {
+                                        self.erxPopupItem.data.items[lineItemIndex].medication = $(elem).val();
+                                    }
                                 });
                                 });
                                 window.Def.Autocompleter.Event.observeListSelections(dynStrengthsID, function() {
                                 window.Def.Autocompleter.Event.observeListSelections(dynStrengthsID, function() {
                                     var autocomp = elem.autocomp, acData = autocomp.getSelectedItemData();
                                     var autocomp = elem.autocomp, acData = autocomp.getSelectedItemData();
-                                    self.erxPopupItem.data.strength = $(strengthElem).val();
+                                    if(lineItemIndex === -1) {
+                                        self.erxPopupItem.data.strength = $(strengthElem).val();
+                                    }
+                                    else {
+                                        self.erxPopupItem.data.items[lineItemIndex].strength = $(strengthElem).val();
+                                    }
                                 });
                                 });
                                 $(elem).attr('ac-initialized', 1);
                                 $(elem).attr('ac-initialized', 1);
                                 $(strengthElem).attr('ac-initialized', 1);
                                 $(strengthElem).attr('ac-initialized', 1);
@@ -592,7 +738,7 @@
                             $('#ticketsApp [stag-popup-key="erx-popup"] input[type="text"][data-field="icd"]:not([ac-initialized])').each(function() {
                             $('#ticketsApp [stag-popup-key="erx-popup"] input[type="text"][data-field="icd"]:not([ac-initialized])').each(function() {
                                 var elem = this,
                                 var elem = this,
                                     dynID = 'icd-' + Math.ceil(Math.random() * 1000000),
                                     dynID = 'icd-' + Math.ceil(Math.random() * 1000000),
-                                    vueIndex = $(this).attr('data-index');
+                                    vueIndex = $(this).is('[data-index]') ? $(this).attr('data-index') : -1;
                                 $(elem).attr('id', dynID);
                                 $(elem).attr('id', dynID);
                                 new window.Def.Autocompleter.Search(dynID,
                                 new window.Def.Autocompleter.Search(dynID,
                                     'https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&ef=name', {
                                     'https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&ef=name', {
@@ -603,7 +749,12 @@
                                 );
                                 );
                                 window.Def.Autocompleter.Event.observeListSelections(dynID, function() {
                                 window.Def.Autocompleter.Event.observeListSelections(dynID, function() {
                                     let autocomp = elem.autocomp, acData = autocomp.getSelectedItemData();
                                     let autocomp = elem.autocomp, acData = autocomp.getSelectedItemData();
-                                    self.erxPopupItem.data.purpose = acData[0].code + ' - ' + acData[0].data.name;
+                                    if(vueIndex === -1) {
+                                        self.erxPopupItem.data.purpose = acData[0].code + ' - ' + acData[0].data.name;
+                                    }
+                                    else {
+                                        self.erxPopupItem.data.items[vueIndex].purpose = acData[0].code + ' - ' + acData[0].data.name;
+                                    }
                                     return false;
                                     return false;
                                 });
                                 });
                                 $(elem).attr('ac-initialized', 1);
                                 $(elem).attr('ac-initialized', 1);
@@ -653,6 +804,25 @@
                                 $(elem).attr('ac-initialized', 1);
                                 $(elem).attr('ac-initialized', 1);
                             });
                             });
                         },
                         },
+                        addERxLineItem: function() {
+                            this.erxPopupItem.data.items.push({
+                                medication: '',
+                                strength: '',
+                                amount: '',
+                                route: '',
+                                frequency: '',
+                                dispense: '',
+                                refills: '',
+                                purpose: '',
+                            });
+                            Vue.nextTick(() => {
+                                this.initRxAutoSuggest();
+                                this.erxInitICDAutoSuggest();
+                            });
+                        },
+                        removeERxLineItem: function(_index) {
+                            this.erxPopupItem.data.items.splice(_index, 1);
+                        },
                         initDomElementEvents: function() {
                         initDomElementEvents: function() {
                             let self = this;
                             let self = this;
                             $(document).off('pro-changed', '#ticketsApp select[provider-search]')
                             $(document).off('pro-changed', '#ticketsApp select[provider-search]')
@@ -736,15 +906,34 @@
                                 _item.pharmacyFax,*/
                                 _item.pharmacyFax,*/
                             ].filter(Boolean).join(', ');
                             ].filter(Boolean).join(', ');
                         },
                         },
-                        @include('app.patient.tickets.pharmacy-suggest')
+                        initAutoOpen: function() {
+                            if(window.localStorage.autoOpen) {
+                                var parts = window.localStorage.autoOpen.split('|');
+                                if(parts.length === 2 && this.ticketsByType[parts[0]]) {
+                                    for (let i = 0; i < this.ticketsByType[parts[0]].length; i++) {
+                                        if(this.ticketsByType[parts[0]][i].uid === parts[1]) {
+                                            this[parts[0] + 'ShowPopup'](this.ticketsByType[parts[0]][i]);
+                                            break;
+                                        }
+                                    }
+                                }
+                                window.localStorage.autoOpen = '';
+                            }
+                        },
+                        @include('app.patient.tickets.pharmacy-suggest', ['category' => 'erx'])
+                        @include('app.patient.tickets.pharmacy-suggest', ['category' => 'lab'])
+                        @include('app.patient.tickets.pharmacy-suggest', ['category' => 'imaging'])
                         @include('app.patient.tickets.ticket_vue_methods')
                         @include('app.patient.tickets.ticket_vue_methods')
                     },
                     },
                     mounted: function () {
                     mounted: function () {
                         this.initRxAutoSuggest();
                         this.initRxAutoSuggest();
                         this.erxInitICDAutoSuggest();
                         this.erxInitICDAutoSuggest();
                         this.labInitICDAutoSuggest();
                         this.labInitICDAutoSuggest();
-                        this.initPharmacySearch();
+                        this.erxInitPharmacySearch();
+                        this.labInitPharmacySearch();
+                        this.imagingInitPharmacySearch();
                         this.initDomElementEvents();
                         this.initDomElementEvents();
+                        this.initAutoOpen();
 
 
                         <?php for ($i=0; $i<count($categories); $i++) { ?>
                         <?php for ($i=0; $i<count($categories); $i++) { ?>
                             this.{{ $categories[$i] }}AutoSave = debounce(() => {
                             this.{{ $categories[$i] }}AutoSave = debounce(() => {
@@ -758,5 +947,4 @@
             addMCInitializer('patient-tickets', init, '#ticketsApp');
             addMCInitializer('patient-tickets', init, '#ticketsApp');
         })();
         })();
     </script>
     </script>
-
 @endsection
 @endsection

+ 1 - 1
resources/views/app/patient/tickets/attachments.blade.php

@@ -1,4 +1,4 @@
-<div class="px-3 pt-3 pb-2 bg-light">
+<div class="px-3 pt-3 pb-2 bg-light" v-if="<?=$category?>PopupMode === 'edit'">
     <div class="row mb-2">
     <div class="row mb-2">
         <div class="col-12">
         <div class="col-12">
             <label class="text-secondary mb-0 font-weight-normal font-size-16 d-flex align-items-center">
             <label class="text-secondary mb-0 font-weight-normal font-size-16 d-flex align-items-center">

+ 25 - 2
resources/views/app/patient/tickets/common-fields.blade.php

@@ -68,7 +68,7 @@
         </div>
         </div>
     </div>
     </div>
 
 
-    <div class="row">
+    <div class="row mb-2">
         <div class="col-3 d-inline-flex align-items-center">
         <div class="col-3 d-inline-flex align-items-center">
             <label class="text-secondary m-0">Due Date</label>
             <label class="text-secondary m-0">Due Date</label>
         </div>
         </div>
@@ -76,7 +76,7 @@
             <div class="d-flex align-items-center">
             <div class="d-flex align-items-center">
                 <div class="pro-initials text-uppercase text-white bg-info"
                 <div class="pro-initials text-uppercase text-white bg-info"
                      title="Due Date">
                      title="Due Date">
-                    <i class="fa fa-calendar-day"></i>
+                    <i class="fa fa-calendar-day font-size-13"></i>
                 </div>
                 </div>
                 <div class="flex-grow-1 ml-2">
                 <div class="flex-grow-1 ml-2">
                     <input type="text" data-field="due_date" placeholder="Due Date"
                     <input type="text" data-field="due_date" placeholder="Due Date"
@@ -86,4 +86,27 @@
         </div>
         </div>
     </div>
     </div>
 
 
+    <div v-if="<?=$category?>PopupMode === 'edit'" class="row">
+        <div class="col-3 d-inline-flex align-items-center">
+            <label class="text-secondary m-0">Ticket PDF</label>
+        </div>
+        <div class="col-9">
+            <div class="d-flex align-items-center">
+                <div class="pro-initials text-uppercase text-white bg-danger mr-2"
+                     title="Due Date">
+                    <i class="fa fa-file-pdf font-size-13"></i>
+                </div>
+                <div class="flex-grow-1 border-left border-white d-inline-flex">
+                    <a class="pdf-viewer-trigger" native target="_blank"
+                       :href="'/ticket-download-as-pdf/' + <?=$category?>PopupItem.uid">View</a>
+                    <span class="mx-2 text-secondary">|</span>
+                    <a native target="_blank"
+                       :href="'/ticket-download-as-pdf/' + <?=$category?>PopupItem.uid">Download</a>
+                    <span class="mx-2 text-secondary">|</span>
+                    <a href="#" v-on:click.prevent="showSendFaxPopup()">Send Fax</a>
+                </div>
+            </div>
+        </div>
+    </div>
+
 </div>
 </div>

+ 20 - 0
resources/views/app/patient/tickets/erx-data.blade.php

@@ -16,6 +16,16 @@ erxModel: {
         dispense: '',
         dispense: '',
         refills: '',
         refills: '',
         purpose: '',
         purpose: '',
+        items: [{
+            medication: '',
+            strength: '',
+            amount: '',
+            route: '',
+            frequency: '',
+            dispense: '',
+            refills: '',
+            purpose: '',
+        }],
         pharmacyName: '',
         pharmacyName: '',
         pharmacyCity: '',
         pharmacyCity: '',
         pharmacyState: '',
         pharmacyState: '',
@@ -44,6 +54,16 @@ erxPopupItem: {
         dispense: '',
         dispense: '',
         refills: '',
         refills: '',
         purpose: '',
         purpose: '',
+        items: [{
+            medication: '',
+            strength: '',
+            amount: '',
+            route: '',
+            frequency: '',
+            dispense: '',
+            refills: '',
+            purpose: '',
+        }],
         pharmacyName: '',
         pharmacyName: '',
         pharmacyCity: '',
         pharmacyCity: '',
         pharmacyState: '',
         pharmacyState: '',

+ 79 - 30
resources/views/app/patient/tickets/erx.blade.php

@@ -92,16 +92,24 @@
             <!-- common - only applicable for edit -->
             <!-- common - only applicable for edit -->
             @include('app.patient.tickets.common-fields', ['category' => 'erx'])
             @include('app.patient.tickets.common-fields', ['category' => 'erx'])
 
 
-            <div class="p-3 border-bottom">
-
+            <div class="px-3 pt-3">
                 <div class="row mb-2">
                 <div class="row mb-2">
-                    <div class="col-12">
+                    <div class="col-12 d-flex align-items-center">
                         <label class="text-secondary mb-0 font-weight-normal font-size-16">ERx</label>
                         <label class="text-secondary mb-0 font-weight-normal font-size-16">ERx</label>
+                        <span class="text-secondary mx-2">|</span>
+                        <a href="#" v-on:click.prevent="addERxLineItem()">Add</a>
                     </div>
                     </div>
                 </div>
                 </div>
+            </div>
+
+            <div class="px-3 pb-3 border-bottom">
+
                 <div class="row mb-2">
                 <div class="row mb-2">
                     <div class="col-9">
                     <div class="col-9">
-                        <label class="text-sm text-secondary mb-1">Medication</label>
+                        <label class="text-sm text-secondary mb-1">
+                            <div class="pro-initials pro-initials-sm bg-info text-white font-size-13 mr-1 font-weight-bold">1</div>
+                            Medication
+                        </label>
                         <input type="hidden" v-model="erxPopupItem.data.medication">
                         <input type="hidden" v-model="erxPopupItem.data.medication">
                         <input required type="text" data-field="medication" placeholder="Medication"
                         <input required type="text" data-field="medication" placeholder="Medication"
                                v-model="erxPopupItem.data.medication"
                                v-model="erxPopupItem.data.medication"
@@ -164,52 +172,93 @@
                 </div>
                 </div>
 
 
             </div>
             </div>
-            <div class="p-3 border-bottom">
+
+            <div class="p-3 border-bottom erx-line-item" v-for="(item, itemIndex) in erxPopupItem.data.items">
+
                 <div class="row mb-2">
                 <div class="row mb-2">
-                    <div class="col-12">
-                        <label class="text-secondary mb-0 font-weight-normal font-size-16">Preferred Pharmacy</label>
+                    <div class="col-9">
+                        <label class="text-sm text-secondary mb-1 d-flex align-items-center">
+                            <div class="pro-initials pro-initials-sm bg-info text-white font-size-13 mr-1 font-weight-bold" v-html="itemIndex + 2"></div>
+                            Medication
+                            <span class="text-secondary mx-2">|</span>
+                            <a href="#" v-on:click.prevent="removeERxLineItem(itemIndex)" class="text-danger font-size-11">Remove</a>
+                        </label>
+                        <input type="hidden" v-model="item.medication">
+                        <input required type="text" data-field="medication" :data-index="itemIndex" placeholder="Medication"
+                               v-model="item.medication"
+                               class="form-control form-control-sm">
                     </div>
                     </div>
-                </div>
-                <div class="row mb-2">
-                    <div class="col-12">
-                        <label class="text-sm text-secondary mb-1">Business Name</label>
-                        <input type="text" autocomplete="donotdoit" placeholder="Business Name" id="pharmacy-search" v-model="erxPopupItem.data.pharmacyName" class="form-control form-control-sm">
-                        <div class="suggestions-outer pharmacy-suggestions position-absolute d-none"></div>
+                    <div class="col-3 pl-0">
+                        <label class="text-sm text-secondary mb-1">Strength</label>
+                        <input type="hidden" v-model="item.strength">
+                        <input type="text" data-field="strength" placeholder="Strength"
+                               :value="item.strength"
+                               class="form-control form-control-sm min-width-unset">
                     </div>
                     </div>
                 </div>
                 </div>
                 <div class="row mb-2">
                 <div class="row mb-2">
-                    <div class="col-4">
-                        <label class="text-sm text-secondary mb-1">City</label>
-                        <input type="text" placeholder="City" v-model="erxPopupItem.data.pharmacyCity" class="form-control form-control-sm min-width-unset">
+                    <div class="col-3">
+                        <label class="text-sm text-secondary mb-1">Frequency</label>
+                        <input type="text" placeholder="Frequency"
+                               v-model="item.frequency" class="form-control form-control-sm min-width-unset"
+                               data-option-list="frequency-options">
+                        <div id="frequency-options" class="data-option-list">
+                            <div>Once a day</div>
+                            <div>Twice a day</div>
+                        </div>
                     </div>
                     </div>
-                    <div class="col-2 pl-0">
-                        <label class="text-sm text-secondary mb-1">State</label>
-                        <input type="text" placeholder="State" v-model="erxPopupItem.data.pharmacyState" class="form-control form-control-sm min-width-unset">
+                    <div class="col-3 pl-0">
+                        <label class="text-sm text-secondary mb-1">Route</label>
+                        <input required type="text" placeholder="Route"
+                               v-model="item.route" class="form-control form-control-sm min-width-unset"
+                               data-option-list="route-options">
+                        <div id="route-options" class="data-option-list">
+                            <div>PO (by mouth)</div>
+                            <div>PR (per rectum)</div>
+                            <div>IM (intramuscular)</div>
+                            <div>IV (intravenous)</div>
+                            <div>ID (intradermal)</div>
+                            <div>IN (intranasal)</div>
+                            <div>TP (topical)</div>
+                            <div>SL (sublingual)</div>
+                            <div>BUCC (buccal)</div>
+                            <div>IP (intraperitoneal)</div>
+                        </div>
                     </div>
                     </div>
                     <div class="col-3 pl-0">
                     <div class="col-3 pl-0">
-                        <label class="text-sm text-secondary mb-1">Phone</label>
-                        <input type="text" placeholder="Phone" v-model="erxPopupItem.data.pharmacyPhone" class="form-control form-control-sm min-width-unset">
+                        <label class="text-sm text-secondary mb-1">Dispense Amount</label>
+                        <input required type="number" placeholder="Dispense Amount"
+                               v-model="item.dispense" class="form-control form-control-sm min-width-unset">
                     </div>
                     </div>
                     <div class="col-3 pl-0">
                     <div class="col-3 pl-0">
-                        <label class="text-sm text-secondary mb-1">Fax</label>
-                        <input type="text" placeholder="Fax" v-model="erxPopupItem.data.pharmacyFax" class="form-control form-control-sm min-width-unset">
+                        <label class="text-sm text-secondary mb-1">Refills</label>
+                        <input type="number" placeholder="Refills"
+                               v-model="item.refills" class="form-control form-control-sm min-width-unset">
                     </div>
                     </div>
                 </div>
                 </div>
-                <div class="row mb-2">
+                <div class="row">
                     <div class="col-12">
                     <div class="col-12">
-                        <label class="text-sm text-secondary mb-1">Address Memo</label>
-                        <input type="text" placeholder="Address Memo" autocomplete="donotdoit" v-model="erxPopupItem.data.pharmacyAddressMemo" class="form-control form-control-sm">
+                        <label class="text-sm text-secondary mb-1">Purpose</label>
+                        <input required type="text"  placeholder="Purpose" data-field="icd" :data-index="itemIndex"
+                               v-model="item.purpose" class="form-control form-control-sm">
                     </div>
                     </div>
                 </div>
                 </div>
-                <div v-if="erxPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3">
-                    <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="erxSavePopupItem()">Submit</button>
-                    <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
-                </div>
+
+            </div>
+
+            @include('app.patient.tickets.pharmacy', ['label' => 'Pharmacy', 'category' => 'erx'])
+
+            <div v-if="erxPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3 p-3 border-bottom">
+                <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="erxSavePopupItem()">Submit</button>
+                <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
             </div>
             </div>
 
 
             <!-- attachments -->
             <!-- attachments -->
             @include('app.patient.tickets.attachments', ['category' => 'erx'])
             @include('app.patient.tickets.attachments', ['category' => 'erx'])
 
 
+            <!-- faxes -->
+            @include('app.patient.tickets.faxes', ['category' => 'erx'])
+
             <!-- comments -->
             <!-- comments -->
             @include('app.patient.tickets.comments', ['category' => 'erx'])
             @include('app.patient.tickets.comments', ['category' => 'erx'])
 
 

+ 23 - 0
resources/views/app/patient/tickets/faxes.blade.php

@@ -0,0 +1,23 @@
+<div class="px-3 pt-3 pb-2 border-top" v-if="<?=$category?>PopupMode === 'edit'">
+    <div class="row mb-2">
+        <div class="col-12">
+            <label class="text-secondary mb-0 font-weight-normal font-size-16 d-flex align-items-center">
+                Ticket Faxes
+                (<span v-if="!loadingFaxes" v-html="faxes && faxes.length ? faxes.length : '0'"></span>)
+            </label>
+        </div>
+    </div>
+    <div v-if="!loadingFaxes && faxes && faxes.length" class="py-2">
+        <div v-for="(fax) in faxes" class="d-flex align-items-start pb-2">
+            <div class="flex-grow-1">Sent to
+                <span class="text-info" v-html="fax.to_fax_number"></span>
+                on
+                <span class="font-weight-bold text-secondary" v-html="fax.sent_at"></span></div>
+            <a class="pdf-viewer-trigger ml-auto" native target="_blank"
+               :href="'/api/ticketFax/download/' + fax.uid"
+               title="View">
+                View Fax
+            </a>
+        </div>
+    </div>
+</div>

+ 12 - 0
resources/views/app/patient/tickets/imaging-data.blade.php

@@ -11,6 +11,12 @@ imagingModel: {
         tests: [''],
         tests: [''],
         icds: [''],
         icds: [''],
         memo: '',
         memo: '',
+        pharmacyName: '',
+        pharmacyCity: '',
+        pharmacyState: '',
+        pharmacyAddressMemo: '',
+        pharmacyPhone: '',
+        pharmacyFax: '',
         comments: [{
         comments: [{
             pro_id: '',
             pro_id: '',
             message: '',
             message: '',
@@ -28,6 +34,12 @@ imagingPopupItem: {
         tests: [''],
         tests: [''],
         icds: [''],
         icds: [''],
         memo: '',
         memo: '',
+        pharmacyName: '',
+        pharmacyCity: '',
+        pharmacyState: '',
+        pharmacyAddressMemo: '',
+        pharmacyPhone: '',
+        pharmacyFax: '',
         comments: [{
         comments: [{
             pro_id: '',
             pro_id: '',
             message: '',
             message: '',

+ 6 - 5
resources/views/app/patient/tickets/imaging.blade.php

@@ -118,14 +118,15 @@
                 </div>
                 </div>
                 <div class="mb-2">
                 <div class="mb-2">
                     <label class="text-sm text-secondary mb-1">Memo</label>
                     <label class="text-sm text-secondary mb-1">Memo</label>
-                    <input type="text" v-model="imagingPopupItem.data.memo" class="form-control form-control-sm">
+                    <input type="text" v-model="imagingPopupItem.data.memo" placeholder="Memo" class="form-control form-control-sm">
                 </div>
                 </div>
+            </div>
 
 
+            @include('app.patient.tickets.pharmacy', ['label' => 'Facility', 'category' => 'imaging'])
 
 
-                <div v-if="imagingPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3">
-                    <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="saveimagingPopupItem()">Submit</button>
-                    <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
-                </div>
+            <div v-if="imagingPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3 p-3 border-bottom">
+                <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="imagingSavePopupItem()">Submit</button>
+                <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
             </div>
             </div>
 
 
             <!-- attachments -->
             <!-- attachments -->

+ 12 - 0
resources/views/app/patient/tickets/lab-data.blade.php

@@ -11,6 +11,12 @@ labModel: {
         tests: [''],
         tests: [''],
         icds: [''],
         icds: [''],
         memo: '',
         memo: '',
+        pharmacyName: '',
+        pharmacyCity: '',
+        pharmacyState: '',
+        pharmacyAddressMemo: '',
+        pharmacyPhone: '',
+        pharmacyFax: '',
         comments: [{
         comments: [{
             pro_id: '',
             pro_id: '',
             message: '',
             message: '',
@@ -28,6 +34,12 @@ labPopupItem: {
         tests: [''],
         tests: [''],
         icds: [''],
         icds: [''],
         memo: '',
         memo: '',
+        pharmacyName: '',
+        pharmacyCity: '',
+        pharmacyState: '',
+        pharmacyAddressMemo: '',
+        pharmacyPhone: '',
+        pharmacyFax: '',
         comments: [{
         comments: [{
             pro_id: '',
             pro_id: '',
             message: '',
             message: '',

+ 6 - 5
resources/views/app/patient/tickets/lab.blade.php

@@ -122,14 +122,15 @@
                 </div>
                 </div>
                 <div class="mb-2">
                 <div class="mb-2">
                     <label class="text-sm text-secondary mb-1">Memo</label>
                     <label class="text-sm text-secondary mb-1">Memo</label>
-                    <input type="text" v-model="labPopupItem.data.memo" class="form-control form-control-sm">
+                    <input type="text" v-model="labPopupItem.data.memo" placeholder="Memo" class="form-control form-control-sm">
                 </div>
                 </div>
+            </div>
 
 
+            @include('app.patient.tickets.pharmacy', ['label' => 'Facility', 'category' => 'lab'])
 
 
-                <div v-if="labPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3">
-                    <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="labSavePopupItem()">Submit</button>
-                    <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
-                </div>
+            <div v-if="labPopupMode === 'add'" class="d-flex align-items-center justify-content-start mt-3 p-3 border-bottom">
+                <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="labSavePopupItem()">Submit</button>
+                <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
             </div>
             </div>
 
 
             <!-- attachments -->
             <!-- attachments -->

+ 26 - 26
resources/views/app/patient/tickets/pharmacy-suggest.blade.php

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

+ 38 - 0
resources/views/app/patient/tickets/pharmacy.blade.php

@@ -0,0 +1,38 @@
+<div class="p-3 border-bottom">
+    <div class="row mb-2">
+        <div class="col-12">
+            <label class="text-secondary mb-0 font-weight-normal font-size-16">Preferred {{$label}}</label>
+        </div>
+    </div>
+    <div class="row mb-2">
+        <div class="col-12">
+            <label class="text-sm text-secondary mb-1">Business Name</label>
+            <input type="text" autocomplete="donotdoit" placeholder="Business Name" id="{{$category}}-pharmacy-search" v-model="{{$category}}PopupItem.data.pharmacyName" class="form-control form-control-sm">
+            <div class="suggestions-outer pharmacy-suggestions {{$category}}-pharmacy-suggestions position-absolute d-none"></div>
+        </div>
+    </div>
+    <div class="row mb-2">
+        <div class="col-4">
+            <label class="text-sm text-secondary mb-1">City</label>
+            <input type="text" placeholder="City" v-model="{{$category}}PopupItem.data.pharmacyCity" class="form-control form-control-sm min-width-unset">
+        </div>
+        <div class="col-2 pl-0">
+            <label class="text-sm text-secondary mb-1">State</label>
+            <input type="text" placeholder="State" v-model="{{$category}}PopupItem.data.pharmacyState" class="form-control form-control-sm min-width-unset">
+        </div>
+        <div class="col-3 pl-0">
+            <label class="text-sm text-secondary mb-1">Phone</label>
+            <input type="text" placeholder="Phone" v-model="{{$category}}PopupItem.data.pharmacyPhone" class="form-control form-control-sm min-width-unset">
+        </div>
+        <div class="col-3 pl-0">
+            <label class="text-sm text-secondary mb-1">Fax</label>
+            <input type="text" placeholder="Fax" v-model="{{$category}}PopupItem.data.pharmacyFax" class="form-control form-control-sm min-width-unset">
+        </div>
+    </div>
+    <div class="row mb-2">
+        <div class="col-12">
+            <label class="text-sm text-secondary mb-1">Address Memo</label>
+            <input type="text" placeholder="Address Memo" autocomplete="donotdoit" v-model="{{$category}}PopupItem.data.pharmacyAddressMemo" class="form-control form-control-sm">
+        </div>
+    </div>
+</div>

+ 23 - 0
resources/views/app/patient/tickets/ticket_send_fax_form.blade.php

@@ -0,0 +1,23 @@
+<div class="stag-popup stag-popup-sm mcp-theme-1" stag-popup-key="send-fax-popup">
+    <form method="POST" class="overflow-visible">
+        <h3 class="stag-popup-title mb-2">
+            <span><i class="fa fa-fax text-secondary font-size-13"></i> Send Fax</span>
+            <a href="#" class="ml-auto text-secondary"
+                onclick="return closeStagPopup()"><i class="fa fa-times"></i></a>
+        </h3>
+        <div class="mb-3">
+            <p class="text-secondary text-sm mb-2 text-center">Document Preview</p>
+            <div id="send-fax-pdf-preview">
+
+            </div>
+        </div>
+        <div class="form-group mb-2">
+            <label class="font-weight-bold mb-1">Fax Number</label>
+            <input type="text" v-model="faxNumber" class="form-control">
+        </div>
+        <div class="d-flex align-items-center justify-content-center mt-3">
+            <button type="button" class="btn btn-sm btn-primary mr-2" v-on:click.prevent="sendFax()">Submit</button>
+            <button type="button" class="btn btn-sm btn-default border" onclick="return closeStagPopup()">Cancel</button>
+        </div>
+    </form>
+</div>

+ 15 - 6
resources/views/app/practice-management/financial-transactions.blade.php

@@ -26,9 +26,7 @@
                             <th class="px-3 border-0">Date</th>
                             <th class="px-3 border-0">Date</th>
                             <th class="border-0">Type</th>
                             <th class="border-0">Type</th>
                             <th class="border-0">Client</th>
                             <th class="border-0">Client</th>
-                            <th class="border-0">Note</th>
-                            {{--<th class="border-0">Reason</th>--}}
-                            <th class="border-0">Memo</th>
+                            <th class="border-0">Context</th>
                             <th class="border-0">Amount</th>
                             <th class="border-0">Amount</th>
                             <th class="border-0">Balance</th>
                             <th class="border-0">Balance</th>
                         </tr>
                         </tr>
@@ -53,10 +51,14 @@
                                 </td>
                                 </td>
                                 <td>
                                 <td>
                                     @if($transaction->bill && $transaction->bill->note)
                                     @if($transaction->bill && $transaction->bill->note)
+                                        <a href="{{route('patients.view.notes.view.dashboard', ['patient'=>$transaction->client, 'note'=>$transaction->bill->note])}}">
+                                            ({{$transaction->bill->note->effective_dateest}})
                                         @if($transaction->bill->note->noteTemplate)
                                         @if($transaction->bill->note->noteTemplate)
                                             {{ $transaction->bill->note->noteTemplate->title }}
                                             {{ $transaction->bill->note->noteTemplate->title }}
                                         @endif
                                         @endif
-                                        <a href="{{route('patients.view.notes.view.dashboard', ['patient'=>$transaction->client, 'note'=>$transaction->bill->note])}}">Go to note</a>
+                                        </a>
+                                    @else
+                                        {{ $transaction->custom_memo ? $transaction->custom_memo : '-' }}
                                     @endif
                                     @endif
                                 </td>
                                 </td>
                                 {{--<td>
                                 {{--<td>
@@ -90,8 +92,15 @@
                                         -
                                         -
                                     @endif
                                     @endif
                                 </td>--}}
                                 </td>--}}
-                                <td>{{ $transaction->custom_memo ? $transaction->custom_memo : '-' }}</td>
-                                <td>${{ $transaction->amount }}</td>
+                                <td>
+                                    @if($transaction->amount > 0)
+                                        ${{ $transaction->amount }}
+                                    @else
+                                        <span class="text-success font-weight-bold">
+                                            ${{ $transaction->amount }}
+                                        </span>
+                                    @endif
+                                </td>
                                 <td>${{ $transaction->resulting_balance }}</td>
                                 <td>${{ $transaction->resulting_balance }}</td>
                             </tr>
                             </tr>
                         @endforeach
                         @endforeach

+ 70 - 0
resources/views/app/practice-management/processing-bill-matrix.blade.php

@@ -0,0 +1,70 @@
+@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>
+                    Processing Bills
+                </strong>
+                <select class="ml-auto max-width-300px form-control form-control-sm"
+                        onchange="fastLoad('/practice-management/processing-bill-matrix/' + this.value, true, false, false)">
+                    <option value="" {{ $proUid === '' ? 'selected' : '' }}>All Pros</option>
+                    @foreach($allPros as $_pro)
+                        <option value="{{$_pro->uid}}" {{ $proUid === $_pro->uid ? 'selected' : '' }}>{{$_pro->displayName()}}</option>
+                    @endforeach
+                </select>
+            </div>
+            <div class="card-body p-0">
+                <table class="table table-sm table-condensed p-0 m-0">
+                    <thead class="bg-light">
+                    <tr>
+                        <th>Note Link</th>
+                        <td>Effective Date</td>
+                        <td>Pro</td>
+                        <td>Client</td>
+                        <td>Code</td>
+                        <td>Units</td>
+                        <td>HCP Expected Amount</td>
+                        <td>HCP Signed?</td>
+{{--                        <td>HCP Signed At</td>--}}
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @foreach ($bills as $row)
+                        <tr class="">
+                            <td>
+                                @if($row->note)
+                                <a href="/patients/view/{{ $row->client->uid }}/notes/view/{{ $row->note->uid }}">
+                                    Note Link
+                                </a>
+                                @else
+                                    <a href="/patients/view/{{ $row->client->uid }}">
+                                        Chart
+                                    </a>
+                                @endif
+                            </td>
+                            <td>{{$row->effective_date}}</td>
+                            <td>{{$row->hcp->name_last}}, {{$row->hcp->name_first}}</td>
+                            <td>{{$row->client->name_last}}, {{$row->client->name_first}}</td>
+                            <td>{{$row->code}}</td>
+                            <td>{{$row->number_of_units}}</td>
+                            <td>{{$row->hcp_expected_payment_amount}}</td>
+                            <td>{{$row->is_signed_by_hcp}}</td>
+{{--                            <td>{{$row->signed_by_hcp_at}}</td>--}}
+                        </tr>
+                    @endforeach
+                    </tbody>
+                </table>
+            </div>
+        </div>
+        <div>
+            {{$bills->links()}}
+        </div>
+    </div>
+
+@endsection

+ 113 - 0
resources/views/app/ticket/erx.blade.php

@@ -0,0 +1,113 @@
+<section style="padding-top: 0.1rem;">
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
+        <tr>
+            <td style="width: 70%">
+                <b>Patient Information</b>
+            </td>
+            <td style="">
+                <div style="text-align: right">Date: <b>{{date('Y-m-d')}}</b></div>
+            </td>
+        </tr>
+    </table>
+
+    <div style="font-size: 14px; margin-top: 0.6rem; line-height: 1.4; opacity: 0.6">
+        <span>{{ $patient->displayName() }}, {{$patient->sex}}, {{$patient->age_in_years}} years old</span><br>
+        <?php
+        $addressParts = [];
+        if (!!$patient->mailing_address_line1) $addressParts[] = $patient->mailing_address_line1;
+        if (!!$patient->mailing_address_line2) $addressParts[] = $patient->mailing_address_line2;
+        $addressParts = implode(", ", $addressParts) . ", ";
+        $addressPart2 = [];
+        if (!!$patient->mailing_address_city) $addressPart2[] = $patient->mailing_address_city;
+        if (!!$patient->mailing_address_state) $addressPart2[] = $patient->mailing_address_state;
+        $addressParts .= implode(", ", $addressPart2);
+        ?>
+        <span>{!! $addressParts !!}</span>
+    </div>
+</section>
+
+<?php $rxData = json_decode($ticket->data); ?>
+<div style="margin: 1.5rem 0 1rem; font-weight: bold; opacity: 0.5"><span style="font-size: 24px">R</span><span style="font-size: 16px">x</span></div>
+<section style="font-size: 15px;">
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
+        <tr>
+            <td style="width: 20px; vertical-align: top; opacity: 0.75; font-size: 14px">
+                <span>1. </span>
+            </td>
+            <td style="vertical-align: top">
+                <div>
+                    <p style="margin: 0 0 0.5rem;">
+                        <b>{{ $rxData->medication }} {{ $rxData->strength }}
+                            @if($rxData->route)
+                                - {{ $rxData->route }}
+                            @endif
+                        </b>
+                    </p>
+                    <div style="">
+                        @if($rxData->frequency)
+                            <p style="margin: 0.5rem 0;">Frequency: {{ $rxData->frequency }}</p>
+                        @endif
+                        @if($rxData->dispense)
+                            <p style="margin: 0.5rem 0;">Dispense: {{ $rxData->dispense }}</p>
+                        @endif
+                        @if($rxData->refills)
+                            <p style="margin: 0.5rem 0;">Refills: {{ $rxData->refills }}</p>
+                        @endif
+                        @if($rxData->purpose)
+                            <p style="margin: 0.5rem 0;">Purpose: <b>{{ $rxData->purpose }}</b></p>
+                        @endif
+                    </div>
+                </div>
+            </td>
+        </tr>
+    </table>
+</section>
+<?php
+$additionalItems = @$rxData->items && count($rxData->items) ? $rxData->items : [];
+$itemNum = 2;
+?>
+@foreach($additionalItems as $item)
+    <hr style="margin: 0.5rem 0 1rem; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+    <section style="font-size: 15px;">
+        <table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
+            <tr>
+                <td style="width: 20px; vertical-align: top; opacity: 0.75; font-size: 14px">
+                    <span>{{$itemNum++}}. </span>
+                </td>
+                <td style="vertical-align: top">
+                    <div>
+                        <p style="margin: 0 0 0.5rem;">
+                            <b>{{ $item->medication }} {{ $item->strength }}
+                                @if($item->route)
+                                    - {{ $item->route }}
+                                @endif
+                            </b>
+                        </p>
+                        <div>
+                            @if($item->frequency)
+                                <p style="margin: 0.5rem 0;">Frequency: {{ $item->frequency }}</p>
+                            @endif
+                            @if($item->dispense)
+                                <p style="margin: 0.5rem 0;">Dispense: {{ $item->dispense }}</p>
+                            @endif
+                            @if($item->refills)
+                                <p style="margin: 0.5rem 0;">Refills: {{ $item->refills }}</p>
+                            @endif
+                            @if($item->purpose)
+                                <p style="margin: 0.5rem 0;">Purpose: <b>{{ $item->purpose }}</b></p>
+                            @endif
+                        </div>
+                    </div>
+                </td>
+            </tr>
+        </table>
+    </section>
+@endforeach
+<hr style="margin: 0.5rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+<p><b>Pharmacy Information</b>:</p>
+<div style="font-size: 14px; opacity: 0.75; ">
+    <p style="margin: 0.5rem 0;"><b>{{ $rxData->pharmacyName }}</b></p>
+    <p style="margin: 0.5rem 0;">{{$rxData->pharmacyAddressMemo}} {{$rxData->pharmacyCity}} {{$rxData->pharmacyState}}</p>
+    <p style="margin: 0.5rem 0;">Phone: {{$rxData->pharmacyPhone}}</p>
+</div>

+ 224 - 0
resources/views/app/ticket/imaging.blade.php

@@ -0,0 +1,224 @@
+<section style="padding-top: 0.1rem;">
+
+    <div style="margin: 0 0 1rem; font-weight: bold; opacity: 0.75"><span style="font-size: 16px">Specimen/Physician Information</span></div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Order Date:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{date('Y-m-d h:i a')}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">NPI:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Test Date:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Practice Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">202-935-1033</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Ordering Physician:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$ticket->orderingPro->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Practice Fax:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">202-935-1033</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75"><span style="font-size: 16px">Patient Information</span></div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Patient Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->home_address_line1}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">DoB:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->dob}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->home_address_city}} {{$patient->home_address_state}} {{$patient->home_address_zip}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Gender:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->sex}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Mobile Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->cell_number ? $patient->cell_number : '-'}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Patient ID:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->chart_number ? $patient->chart_number : '-'}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Home Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->phone_home ? $patient->phone_home : '-'}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">SSN:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->ssn ? $patient->ssn : '-'}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Work Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Billing Information</span>
+        &nbsp;&nbsp;&nbsp;&nbsp;
+        <span style="font-size: 16px; opacity: 0.5;">Bill to: Patient</span>
+    </div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Primary Ins. Code:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Secondary Ins. Code:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Primary Ins. Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Secondary Ins. Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Worker's Comp:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Worker's Comp:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Policy #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Policy #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Group #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Group #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Emp/Group Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Emp/Group Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Insured:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Insured:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Guarantor Information</span>
+    </div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Relationship:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Self</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;"></td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;"></td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Order Information</span>
+    </div>
+
+    <?php $labData = json_decode($ticket->data); ?>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Fasting:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Yes&nbsp;&nbsp;/&nbsp;&nbsp;No</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">ICD Codes:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">
+                <?php
+                $testIndex = 1;
+                foreach($labData->icds as $icd) {
+                    echo ($testIndex > 1 ? ', ' : '') . $icd;
+                    $testIndex++;
+                }
+                ?>
+            </td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Collect at Draw Site:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Yes&nbsp;&nbsp;/&nbsp;&nbsp;No</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;"></td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;"></td>
+        </tr>
+    </table>
+
+
+</section>
+
+
+<hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+<div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+    <span style="font-size: 16px">Studies/Imaging</span>
+</div>
+
+<section style="font-size: 15px;">
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
+        <?php $testIndex = 1; ?>
+        @foreach($labData->tests as $test)
+        <tr>
+            <td style="width: 20px; vertical-align: top; opacity: 0.75; font-size: 14px">
+                <span>{{$testIndex++}}. </span>
+            </td>
+            <td style="vertical-align: top">
+                <div style="padding-bottom: 0.3rem;">{{$test}}</div>
+            </td>
+        </tr>
+        @endforeach
+    </table>
+</section>
+
+@if(@$labData->pharmacyName)
+<hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+<div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+    <span style="font-size: 16px">Facility Information</span>
+</div>
+
+<div style="font-size: 14px; opacity: 0.75; ">
+    <p style="margin: 0.5rem 0;"><b>{{ @$labData->pharmacyName }}</b></p>
+    <p style="margin: 0.5rem 0;">{{@$labData->pharmacyAddressMemo}} {{@$labData->pharmacyCity}} {{@$labData->pharmacyState}}</p>
+    <p style="margin: 0.5rem 0;">Phone: {{@$labData->pharmacyPhone}}</p>
+</div>
+@endif

+ 224 - 0
resources/views/app/ticket/lab.blade.php

@@ -0,0 +1,224 @@
+<section style="padding-top: 0.1rem;">
+
+    <div style="margin: 0 0 1rem; font-weight: bold; opacity: 0.75"><span style="font-size: 16px">Specimen/Physician Information</span></div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Order Date:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{date('Y-m-d h:i a')}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">NPI:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Test Date:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Practice Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">202-935-1033</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Ordering Physician:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$ticket->orderingPro->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Practice Fax:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">202-935-1033</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75"><span style="font-size: 16px">Patient Information</span></div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Patient Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->home_address_line1}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">DoB:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->dob}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->home_address_city}} {{$patient->home_address_state}} {{$patient->home_address_zip}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Gender:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->sex}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Mobile Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->cell_number ? $patient->cell_number : '-'}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Patient ID:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->chart_number ? $patient->chart_number : '-'}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Home Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->phone_home ? $patient->phone_home : '-'}}</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">SSN:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->ssn ? $patient->ssn : '-'}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Work Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Billing Information</span>
+        &nbsp;&nbsp;&nbsp;&nbsp;
+        <span style="font-size: 16px; opacity: 0.5;">Bill to: Patient</span>
+    </div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Primary Ins. Code:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Secondary Ins. Code:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Primary Ins. Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Secondary Ins. Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Worker's Comp:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Worker's Comp:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Policy #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Policy #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Group #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Group #:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Emp/Group Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Emp/Group Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Insured:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75;">Insured:</td>
+            <td style="padding-bottom: 0.25rem; width: 25%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Guarantor Information</span>
+    </div>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Name:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">{{$patient->displayName()}}</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Relationship:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Self</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Address:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Phone:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">City, State, ZIP:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">-</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;"></td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;"></td>
+        </tr>
+    </table>
+
+    <hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+    <div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+        <span style="font-size: 16px">Order Information</span>
+    </div>
+
+    <?php $labData = json_decode($ticket->data); ?>
+
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%; font-size: 14px;">
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Fasting:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Yes&nbsp;&nbsp;/&nbsp;&nbsp;No</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">ICD Codes:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">
+                <?php
+                $testIndex = 1;
+                foreach($labData->icds as $icd) {
+                    echo ($testIndex > 1 ? ', ' : '') . $icd;
+                    $testIndex++;
+                }
+                ?>
+            </td>
+        </tr>
+        <tr>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;">Collect at Draw Site:</td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;">Yes&nbsp;&nbsp;/&nbsp;&nbsp;No</td>
+            <td style="padding-bottom: 0.25rem; width: 20%; opacity: 0.75;"></td>
+            <td style="padding-bottom: 0.25rem; width: 30%; opacity: 0.75; font-weight: bold;"></td>
+        </tr>
+    </table>
+
+
+</section>
+
+
+<hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+<div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+    <span style="font-size: 16px">Lab</span>
+</div>
+
+<section style="font-size: 15px;">
+    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
+        <?php $testIndex = 1; ?>
+        @foreach($labData->tests as $test)
+        <tr>
+            <td style="width: 20px; vertical-align: top; opacity: 0.75; font-size: 14px">
+                <span>{{$testIndex++}}. </span>
+            </td>
+            <td style="vertical-align: top">
+                <div style="padding-bottom: 0.3rem;">{{$test}}</div>
+            </td>
+        </tr>
+        @endforeach
+    </table>
+</section>
+
+@if(@$labData->pharmacyName)
+<hr style="margin: 1rem 0; border-top-width: 0; border-bottom-width: 1px; border-color: #bbb">
+
+<div style="margin: 1.25rem 0 1rem; font-weight: bold; opacity: 0.75">
+    <span style="font-size: 16px">Facility Information</span>
+</div>
+
+<div style="font-size: 14px; opacity: 0.75; ">
+    <p style="margin: 0.5rem 0;"><b>{{ @$labData->pharmacyName }}</b></p>
+    <p style="margin: 0.5rem 0;">{{@$labData->pharmacyAddressMemo}} {{@$labData->pharmacyCity}} {{@$labData->pharmacyState}}</p>
+    <p style="margin: 0.5rem 0;">Phone: {{@$labData->pharmacyPhone}}</p>
+</div>
+@endif

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 13 - 0
resources/views/app/ticket/pdf-preview.blade.php


+ 24 - 2
resources/views/layouts/patient.blade.php

@@ -82,8 +82,30 @@
                             </ul>
                             </ul>
                         </li> */ ?>
                         </li> */ ?>
                         <li class="nav-item">
                         <li class="nav-item">
-                            <a class="nav-link {{ strpos($routeName, 'patients.view.tickets') === 0 ? 'active' : '' }}"
-                               href="{{ route('patients.view.patient-tickets', ['patient' => $patient]) }}">Tickets</a>
+                            <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 ? 'active' : '' }}"
+                               href="{{ route('patients.view.patient-tickets', ['patient' => $patient]) }}">ERx / Orders</a>
+                            <ul class="m-0 p-0 nav-child-list">
+                                <li class="nav-item">
+                                    <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 && @$type === '' ? 'active' : '' }}"
+                                       href="{{ route('patients.view.patient-tickets', ['patient' => $patient, 'type' => '']) }}">All</a>
+                                </li>
+                                <li class="nav-item">
+                                    <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 && @$type === 'erx' ? 'active' : '' }}"
+                                       href="{{ route('patients.view.patient-tickets', ['patient' => $patient, 'type' => 'erx']) }}">ERx</a>
+                                </li>
+                                <li class="nav-item">
+                                    <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 && @$type === 'lab' ? 'active' : '' }}"
+                                       href="{{ route('patients.view.patient-tickets', ['patient' => $patient, 'type' => 'lab']) }}">Lab</a>
+                                </li>
+                                <li class="nav-item">
+                                    <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 && @$type === 'imaging' ? 'active' : '' }}"
+                                       href="{{ route('patients.view.patient-tickets', ['patient' => $patient, 'type' => 'imaging']) }}">Imaging</a>
+                                </li>
+                                <li class="nav-item">
+                                    <a class="nav-link {{ strpos($routeName, 'patients.view.patient-tickets') === 0 && @$type === 'equipment' ? 'active' : '' }}"
+                                       href="{{ route('patients.view.patient-tickets', ['patient' => $patient, 'type' => 'equipment']) }}">Equipment</a>
+                                </li>
+                            </ul>
                         </li>
                         </li>
                         <li class="nav-item">
                         <li class="nav-item">
                             <a class="nav-link {{ strpos($routeName, 'patients.view.incoming-reports') === 0 ? 'active' : '' }}"
                             <a class="nav-link {{ strpos($routeName, 'patients.view.incoming-reports') === 0 ? 'active' : '' }}"

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

@@ -116,6 +116,7 @@
                         <a class="dropdown-item" href="{{ route('practice-management.billingManager') }}">Billing Manager</a>
                         <a class="dropdown-item" href="{{ route('practice-management.billingManager') }}">Billing Manager</a>
 
 
                         @if($pro && $pro->pro_type == 'ADMIN')
                         @if($pro && $pro->pro_type == 'ADMIN')
+                            <a class="dropdown-item" href="{{ route('practice-management.processingBillMatrix') }}">Processing Bills</a>
                             <a class="dropdown-item" href="{{ route('practice-management.cellularMeasurements') }}">Cellular Measurements</a>
                             <a class="dropdown-item" href="{{ route('practice-management.cellularMeasurements') }}">Cellular Measurements</a>
                             <a class="dropdown-item" href="{{ route('practice-management.cellularDeviceManager') }}">Cellular Device Manager</a>
                             <a class="dropdown-item" href="{{ route('practice-management.cellularDeviceManager') }}">Cellular Device Manager</a>
                             <a class="dropdown-item" href="{{ route('practice-management.claims') }}">Claims</a>
                             <a class="dropdown-item" href="{{ route('practice-management.claims') }}">Claims</a>
@@ -147,8 +148,8 @@
                         @if($performer->logged_in_as_pro_from_admin_pro_app_session_id)
                         @if($performer->logged_in_as_pro_from_admin_pro_app_session_id)
                             <form action="{{route('back-to-admin-pro')}}" method="post" target="_top" class="d-block pt-1">
                             <form action="{{route('back-to-admin-pro')}}" method="post" target="_top" class="d-block pt-1">
                                 @csrf
                                 @csrf
-                                <button class="d-block ml-2">
-                                    Admin
+                                <button class="d-block ml-2 back-to-admin-button">
+                                    Back to Admin
                                 </button>
                                 </button>
                             </form>
                             </form>
                         @endif
                         @endif

+ 4 - 1
routes/web.php

@@ -45,6 +45,7 @@ Route::get("/appointment-confirmation/{appointmentUid}", 'GuestController@appoin
 Route::post("/process-appointment-confirmation", 'GuestController@processAppointmentConfirmation')->name('process-appointment_confirmation');
 Route::post("/process-appointment-confirmation", 'GuestController@processAppointmentConfirmation')->name('process-appointment_confirmation');
 
 
 Route::get('/ticket-download-as-pdf/{ticket}', 'TicketController@downloadAsPdf')->name('ticket-download-as-pdf');
 Route::get('/ticket-download-as-pdf/{ticket}', 'TicketController@downloadAsPdf')->name('ticket-download-as-pdf');
+Route::get('/get-ticket-faxes/{ticket}', 'TicketController@getTicketFaxes')->name('get-ticket-faxes');
 
 
 Route::middleware('pro.auth')->group(function () {
 Route::middleware('pro.auth')->group(function () {
 
 
@@ -95,6 +96,8 @@ Route::middleware('pro.auth')->group(function () {
 
 
             Route::get('cellular-measurements', 'PracticeManagementController@cellularMeasurements')->name('cellularMeasurements');
             Route::get('cellular-measurements', 'PracticeManagementController@cellularMeasurements')->name('cellularMeasurements');
 
 
+            Route::get('processing-bill-matrix/{proUid?}', 'PracticeManagementController@processingBillMatrix')->name('processingBillMatrix');
+
             Route::get('hcp-bill-matrix/{proUid?}', 'PracticeManagementController@hcpBillMatrix')->name('hcpBillMatrix');
             Route::get('hcp-bill-matrix/{proUid?}', 'PracticeManagementController@hcpBillMatrix')->name('hcpBillMatrix');
 
 
             Route::get('tickets', 'PracticeManagementController@tickets')->name('tickets');
             Route::get('tickets', 'PracticeManagementController@tickets')->name('tickets');
@@ -171,7 +174,7 @@ Route::middleware('pro.auth')->group(function () {
         Route::get('vitals-graph/{filter?}', 'PatientController@vitalsGraph')->name('vitals-graph');
         Route::get('vitals-graph/{filter?}', 'PatientController@vitalsGraph')->name('vitals-graph');
 
 
         // tickets
         // tickets
-        Route::get('tickets', 'PatientController@tickets')->name('patient-tickets');
+        Route::get('tickets/{type?}', 'PatientController@tickets')->name('patient-tickets');
 
 
         // appointments
         // appointments
         Route::get('appointments/{forPro}/{status}', 'PatientController@appointments')->name('appointments');
         Route::get('appointments/{forPro}/{status}', 'PatientController@appointments')->name('appointments');

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно