Kaynağa Gözat

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

= 4 yıl önce
ebeveyn
işleme
ac88549cf4
30 değiştirilmiş dosya ile 2444 ekleme ve 522 silme
  1. 38 0
      app/Helpers/helpers.php
  2. 11 2
      app/Http/Controllers/HomeController.php
  3. 8 1
      app/Http/Controllers/PatientController.php
  4. 12 1
      app/Http/Controllers/PracticeManagementController.php
  5. 11 0
      app/Models/AccountClient.php
  6. 19 0
      app/Models/CareMonth.php
  7. 11 1
      app/Models/Client.php
  8. 4 2
      app/Models/Pro.php
  9. 11 0
      app/Models/SimpleSMSReminder.php
  10. 37 2
      public/css/style.css
  11. 9 0
      public/js/mc.js
  12. 52 26
      resources/views/app/dashboard.blade.php
  13. 90 0
      resources/views/app/patient/care-month/_create-bill.blade.php
  14. 239 0
      resources/views/app/patient/care-month/_create-claim.blade.php
  15. 144 0
      resources/views/app/patient/care-month/_create-rm-reason.blade.php
  16. 1113 383
      resources/views/app/patient/care-month/dashboard.blade.php
  17. 25 0
      resources/views/app/patient/care-month/rm-reasons.blade.php
  18. 4 4
      resources/views/app/patient/dashboard.blade.php
  19. 16 14
      resources/views/app/patient/note/dashboard.blade.php
  20. 135 0
      resources/views/app/patient/partials/_create-rm-reason.blade.php
  21. 25 0
      resources/views/app/patient/partials/rm-reasons.blade.php
  22. 90 62
      resources/views/app/patient/settings.blade.php
  23. 221 0
      resources/views/app/patient/sms-reminders.blade.php
  24. 5 6
      resources/views/app/patient/tickets.blade.php
  25. 8 0
      resources/views/app/patients.blade.php
  26. 1 1
      resources/views/app/practice-management/supply-orders-cancelled-but-unacknowledged.blade.php
  27. 45 0
      resources/views/app/practice-management/supply-orders-unsigned.blade.php
  28. 53 15
      resources/views/layouts/patient.blade.php
  29. 5 2
      resources/views/layouts/template.blade.php
  30. 2 0
      routes/web.php

+ 38 - 0
app/Helpers/helpers.php

@@ -138,6 +138,44 @@ if(!function_exists('friendly_date_time_short_with_tz_from_timestamp')) {
     }
 }
 
+if(!function_exists('postgres_date_time_short_with_tz')) {
+    function postgres_date_time_short_with_tz($value, $includeTime = true, $tz='UTC', $default = '-') {
+
+        if(!$value || empty($value)) return $default;
+        try {
+
+            $realTimezone = resolve_timezone($tz);
+            $date = new DateTime($value);
+            $date->setTimezone(new DateTimeZone($realTimezone));
+
+            return $date->format("Y-m-d" . ($includeTime ? " h:i:s" : ""));
+
+        }
+        catch (Exception $e) {
+            return $e->getMessage();
+        }
+    }
+}
+
+if(!function_exists('postgres_date_time_short_with_tz_from_timestamp')) {
+    function postgres_date_time_short_with_tz_from_timestamp($value, $tz='UTC', $default = '-') {
+
+        if(!$value || empty($value)) return $default;
+        try {
+
+            $realTimezone = resolve_timezone($tz);
+            $date = new DateTime("@$value");
+            $date->setTimezone(new DateTimeZone($realTimezone));
+
+            return $date->format("Y-m-d h:i:s");
+
+        }
+        catch (Exception $e) {
+            return $e->getMessage();
+        }
+    }
+}
+
 if(!function_exists('friendly_date_time_short_with_tz_from_timestamp_divide1000')) {
     function friendly_date_time_short_with_tz_from_timestamp_divide1000($value, $tz='UTC', $default = '-') {
 

+ 11 - 2
app/Http/Controllers/HomeController.php

@@ -263,6 +263,13 @@ class HomeController extends Controller
             ->where('is_cancellation_acknowledged', false)
             ->count();
 
+        // unsigned supply orders created by authed pro
+        $keyNumbers['unsignedSupplyOrders'] = SupplyOrder
+            ::where('is_cancelled', false)
+            ->where('is_signed_by_pro', false)
+            ->whereRaw('created_by_session_id IN (SELECT id FROM app_session WHERE pro_id = ?)', [$performerProID])
+            ->count();
+
         // patientsHavingBirthdayToday
         $queryClients = $this->performer()->pro->getAccessibleClientsQuery();
         $keyNumbers['patientsHavingBirthdayToday'] = $queryClients
@@ -466,7 +473,8 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
 
         $dates = [];
         foreach ($results as $result) {
-            $dates[] = strtotime($result->raw_date) . '000';
+            // $dates[] = strtotime($result->raw_date) . '000';
+            $dates[] = $result->raw_date;
         }
 
 //        foreach ($results as $result) {
@@ -482,7 +490,8 @@ WHERE measurement.label NOT IN ('SBP', 'DBP')
         $performerProID = $performer->pro->id;
         $isAdmin = ($performer->pro->pro_type === 'ADMIN');
 
-        $appointments = Appointment::where("start_time", '>=', $from)->where("start_time", '<=', $to.' 23:59:00+00');
+        // $appointments = Appointment::where("start_time", '>=', $from)->where("start_time", '<=', $to.' 23:59:00+00');
+        $appointments = Appointment::where("raw_date", '=', $from);
 
         if(!$isAdmin) {
             $appointments = $appointments->where("pro_id", $performerProID);

+ 8 - 1
app/Http/Controllers/PatientController.php

@@ -13,6 +13,7 @@ use App\Models\Handout;
 use App\Models\IncomingReport;
 use App\Models\MBClaim;
 use App\Models\MBPayer;
+use App\Models\Note;
 use App\Models\NoteTemplate;
 use App\Models\Pro;
 use App\Models\Product;
@@ -289,6 +290,11 @@ class PatientController extends Controller
         return view('app.patient.settings', compact('patient'));
     }
 
+    public function smsReminders(Request $request, Client $patient )
+    {
+        return view('app.patient.sms-reminders', compact('patient'));
+    }
+
     public function pros(Request $request, Client $patient )
     {
         return view('app.patient.pros', compact('patient'));
@@ -332,7 +338,8 @@ class PatientController extends Controller
     public function careMonths(Request $request, Client $patient )
     {
         $careMonths = CareMonth::where('client_id', $patient->id)->orderBy('start_date', 'desc')->get();
-        return view('app.patient.care-months', compact('patient', 'careMonths'));
+        $notes = Note::where('is_cancelled', false)->get();
+        return view('app.patient.care-months', compact('patient', 'careMonths', 'notes'));
     }
 
     public function presence(Request $request, Client $patient )

+ 12 - 1
app/Http/Controllers/PracticeManagementController.php

@@ -838,11 +838,22 @@ class PracticeManagementController extends Controller
         $supplyOrders = SupplyOrder::where('signed_by_pro_id', $this->performer()->pro->id)
             ->where('is_cancelled', true)
             ->where('is_cancellation_acknowledged', false)
-	    ->orderBy('created_at', 'desc')
+	        ->orderBy('created_at', 'desc')
             ->paginate();
         return view('app.practice-management.supply-orders-cancelled-but-unacknowledged', compact('supplyOrders'));
     }
 
+    public function supplyOrdersUnsigned(Request $request)
+    {
+        $supplyOrders = SupplyOrder
+            ::where('is_cancelled', false)
+            ->where('is_signed_by_pro', false)
+            ->whereRaw('created_by_session_id IN (SELECT id FROM app_session WHERE pro_id = ?)', [$this->performer()->pro->id])
+            ->orderBy('created_at', 'desc')
+            ->paginate();
+        return view('app.practice-management.supply-orders-unsigned', compact('supplyOrders'));
+    }
+
     private function getSupplyOrderCounts()
     {
         return [

+ 11 - 0
app/Models/AccountClient.php

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

+ 19 - 0
app/Models/CareMonth.php

@@ -38,6 +38,10 @@ class CareMonth extends Model
         return $this->hasMany(Bill::class, 'care_month_id', 'id');
     }
 
+    public function claims() {
+        return $this->hasMany(Claim::class, 'cm_id', 'id');
+    }
+
     public function getBillsOfType($_type) {
         $bills = $this->bills;
         $targetBills = new Collection();
@@ -52,4 +56,19 @@ class CareMonth extends Model
     public function rmBill(){
         return $this->hasOne(Bill::class, 'id', 'rm_bill_id');
     }
+
+    public function company()
+    {
+        return $this->hasOne(Company::class, 'id', 'company_id');
+    }
+
+    public function companyProPayer()
+    {
+        return $this->hasOne(CompanyProPayer::class, 'id', 'company_pro_payer_id');
+    }
+
+    public function companyLocation()
+    {
+        return $this->hasOne(CompanyLocation::class, 'id', 'company_location_id');
+    }
 }

+ 11 - 1
app/Models/Client.php

@@ -182,7 +182,7 @@ class Client extends Model
             ->whereRaw('EXTRACT(MONTH FROM effective_date) = ?', [$month])
             ->whereRaw('EXTRACT(YEAR FROM effective_date) = ?', [$year])
             ->where('is_removed', false)
-            ->orderBy('effective_date', 'desc')
+            ->orderBy('ts', 'desc')
             ->get();
         return $measurements;
     }
@@ -486,7 +486,17 @@ class Client extends Model
             ->where('is_cancelled', false)
             ->where('is_signed_by_hcp', true)
             ->count();
+    }
+
+    public function accountClient() {
+        return $this->hasOne(AccountClient::class, 'client_id', 'id')->where('is_removed', false);
+    }
 
+    public function smsReminders()
+    {
+        return $this->hasMany(SimpleSMSReminder::class, 'client_id', 'id')
+            ->where('is_active', true)
+            ->orderBy('created_at', 'asc');
     }
 
 }

+ 4 - 2
app/Models/Pro.php

@@ -292,7 +292,8 @@ class Pro extends Model
                     ->orWhereRaw('id IN (SELECT client_id FROM client_pro_access WHERE is_active AND pro_id = ?)', [$proID])
                     ->orWhereRaw('id IN (SELECT client_id FROM appointment WHERE status NOT IN (\'CANCELLED\', \'ABANDONED\') AND pro_id = ?)', [$proID])
                     ->orWhereRaw('id IN (SELECT mcp_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)')
-                    ->orWhereRaw('id IN (SELECT manager_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)');
+                    ->orWhereRaw('id IN (SELECT manager_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)')
+                    ->orWhereRaw('id IN (SELECT client_id FROM note WHERE ally_pro_id = ? AND is_cancelled = FALSE)', [$proID]);;
             });
         }
         return $query;
@@ -314,7 +315,8 @@ class Pro extends Model
                     ->orWhereRaw('id IN (SELECT client_id FROM client_pro_access WHERE is_active AND pro_id = ?)', [$proID])
                     ->orWhereRaw('id IN (SELECT client_id FROM appointment WHERE status NOT IN (\'CANCELLED\', \'ABANDONED\') AND pro_id = ?)', [$proID])
                     ->orWhereRaw('id IN (SELECT mcp_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)')
-                    ->orWhereRaw('id IN (SELECT manager_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)');
+                    ->orWhereRaw('id IN (SELECT manager_pro_id FROM client_program WHERE client_id = client.id AND is_active = TRUE)')
+                    ->orWhereRaw('id IN (SELECT client_id FROM note WHERE ally_pro_id = ? AND is_cancelled = FALSE)', [$proID]);
             })->count();
         return !!$canAccess;
     }

+ 11 - 0
app/Models/SimpleSMSReminder.php

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

+ 37 - 2
public/css/style.css

@@ -562,8 +562,14 @@ input.search_field, textarea.search_field {
     padding: 0.25rem 0;
     border-radius: 0;
 }
-.pro-dashboard-inline-calendar table.table-condensed td[has-events] {
-    background: #c5e4ff;
+.pro-dashboard-inline-calendar table.table-condensed td[has-events],
+.pro-dashboard-inline-calendar td.has-events a {
+    background: #c5e4ff !important;
+    font-weight: bold !important;
+    color: #000 !important;
+}
+.pro-dashboard-inline-calendar td a {
+    text-align: center !important;
 }
 [v-cloak] {
     opacity: 0;
@@ -1621,4 +1627,33 @@ th.only-screen, td.only-screen {
 }
 .stag-table-container-lg>table{
     min-width: 1450px;
+}
+
+#caremonth-measurements-calendar .fc-event.m-weight {
+    background: #38908f;
+    color: #fff;
+    padding-left: 5px;
+    margin-bottom: 2px;
+}
+#caremonth-measurements-calendar .fc-event.m-bp {
+    background: #5e96ae;
+    color: #fff;
+    padding-left: 5px;
+    margin-bottom: 2px;
+}
+#caremonth-measurements-calendar .fc-event.m-weight *,
+#caremonth-measurements-calendar .fc-event.m-bp *{
+    font-size: 10px !important;
+}
+#caremonth-measurements-calendar .fc-daygrid-event-dot {
+    display: none;
+}
+
+.pro-dashboard-inline-calendar>.ui-datepicker-inline {
+    width: 100%;
+    border: 0 !important;
+}
+#simpleSMSReminderComponent input[type="time"] {
+    max-width: 90px;
+    min-width: unset !important;
 }

+ 9 - 0
public/js/mc.js

@@ -169,6 +169,15 @@ function onFastLoaded(_data, _href, _history) {
                     $(window).scrollTop(0);
                 }
                 window.top.currentMcUrl = window.top.location.href;
+
+                let activeLeftNavLink = $('#sidebarMenu .nav-item>.nav-link.active').first();
+                if(activeLeftNavLink.length) {
+                    activeLeftNavLink[0].scrollIntoView({
+                        behavior: "smooth",
+                        block: "nearest",
+                        inline: "nearest"
+                    });
+                }
             }, 50);
         }
         else {

+ 52 - 26
resources/views/app/dashboard.blade.php

@@ -57,6 +57,12 @@
                                         <a href="/practice-management/supply-orders/cancelled-but-unacknowledged">Unacknowledged Cancelled Supply Orders</a>
                                     </th>
                                 </tr>
+                                <tr>
+                                    <th class="px-2 text-center">{{$keyNumbers['unsignedSupplyOrders']}}</th>
+                                    <th class="pl-2">
+                                        <a href="/practice-management/supply-orders/unsigned">Unsigned Supply Orders</a>
+                                    </th>
+                                </tr>
                                 <tr>
                                     <th class="px-2 text-center">{{$keyNumbers['patientsHavingBirthdayToday']}}</th>
                                     <th class="pl-2">
@@ -314,15 +320,20 @@
                     },
                     onDateChange: function (_newDate) {
                         let self = this;
-                        self.selectedDate = _newDate;
-                        showMask();
-                        this.loadEvents(self.selectedDate, function() {
-                            hideMask();
-                            Vue.nextTick(() => {
-                                this.highlightDatesWithEvents(this.datesWithEvents);
-                                initFastLoad($('.appointments-tab'));
+                        window.setTimeout(() => {
+                            // let dayValue = $('.pro-dashboard-inline-calendar td.day.active').first().text();
+                            // if(dayValue.length === 1) dayValue = '0' + dayValue;
+                            // self.selectedDate = _newDate.substr(0, 8) + dayValue;
+                            self.selectedDate = _newDate;
+                            showMask();
+                            self.loadEvents(self.selectedDate, function() {
+                                hideMask();
+                                Vue.nextTick(() => {
+                                    // self.highlightDatesWithEvents(self.datesWithEvents);
+                                    initFastLoad($('.appointments-tab'));
+                                });
                             });
-                        });
+                        }, 25);
                     },
                     selectToday: function () {
                         $('.pro-dashboard-inline-calendar table td[data-date]').removeClass('active');
@@ -390,7 +401,7 @@
                         form.hide();
                     },
                     loadEventDates: function(_refDate = false) {
-                        let today = new Date(_refDate ? +_refDate : '{{date('Y-m-d')}}'),
+                        let today = new Date(_refDate ? _refDate : '{{date('Y-m-d')}}'),
                             firstOfMonth = new Date(today.getFullYear(), today.getMonth(), 1),
                             lastOfMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
 
@@ -401,7 +412,9 @@
                             this.formatDate(firstOfMonth) + '/' +
                             this.formatDate(lastOfMonth), (_data) => {
                             this.datesWithEvents = _data;
-                            this.highlightDatesWithEvents(this.datesWithEvents);
+                            console.log(this.datesWithEvents);
+                            this.calendarElem.datepicker('refresh');
+                            // this.highlightDatesWithEvents(this.datesWithEvents);
 
                             this.currentMonth = firstOfMonth.getMonth();
                             this.currentYear = firstOfMonth.getFullYear();
@@ -415,9 +428,7 @@
                     },
                     loadEvents: function(_date, _callback) {
                         let self = this;
-                        $.get('/pro-dashboard-events/' +
-                            this.formatDate(_date) + '/' +
-                            this.formatDate(_date), function(_data) {
+                        $.get('/pro-dashboard-events/' + _date + '/' + _date, function(_data) {
                             self.events = _data;
                             self.numEventsForDate = (_data && _data.length) ? 1 : 0;
                             _callback.call(self);
@@ -497,20 +508,35 @@
                     let self = this;
                     this.calendarElem = $('.pro-dashboard-inline-calendar');
                     this.calendarElem.datepicker({
-                        format: 'yyyy-mm-dd'
+                        dateFormat: 'yy-mm-dd',
+                        onSelect: function(_date) {
+                            self.onDateChange(_date);
+                        },
+                        onChangeMonthYear: function(_year, _month) {
+                            let date = _year + '-' + (_month < 10 ? '0' : '') + _month + '-05';
+                            self.loadEventDates(date);
+                        },
+                        beforeShowDay: function(d) {
+                            if(self.datesWithEvents && self.datesWithEvents.indexOf(self.formatDate(d)) !== -1) {
+                                return [true, 'has-events'];
+                            }
+                            return [true, 'no-events'];
+                        }
                     });
-                    this.calendarElem
-                        .on('changeDate', function () {
-                            self.onDateChange(self.calendarElem.datepicker('getFormattedDate'));
-                        })
-                        .on('changeMonth', function () {
-                            window.setTimeout(function() {
-                                let ts = $('td.day[data-date]').first().closest('tr').find('td.day[data-date]').last().attr('data-date');
-                                if(ts) {
-                                    self.loadEventDates(ts);
-                                }
-                            }, 10);
-                        });
+                    // this.calendarElem
+                    //     .on('changeDate', function () {
+                    //         self.onDateChange(self.calendarElem.datepicker('getFormattedDate'));
+                    //     })
+                    //     .on('changeMonth', function () {
+                    //         window.setTimeout(function() {
+                    //             let ts = $('td.day[data-date]').first().closest('tr').find('td.day[data-date]').last().attr('data-date');
+                    //             if(ts) {
+                    //                 self.loadEventDates(ts);
+                    //             }
+                    //         }, 10);
+                    //     });
+
+
 
                     $('#pro-dashboard-container').find('[moe][initialized]').removeAttr('initialized');
                     initMoes();

+ 90 - 0
resources/views/app/patient/care-month/_create-bill.blade.php

@@ -0,0 +1,90 @@
+<?php $rmRates = $pro->rmRates(); ?>
+@if(!$careMonth->is_bill_closed && !$careMonth->is_billing_marked_done)
+    <span class="mx-2 text-secondary">|</span>
+    <div moe wide class="">
+        <a class="" href="" show start>Create Bill</a>
+        <form url="/api/careMonth/generateBillForRm">
+            <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+            <div class="mb-2">
+                <select autofocus class="form-control" name="rmCode">
+                    <option value="">-- Select Code --</option>
+                    @foreach($rmRates as $rmRate)
+                        <option data-amount="{{ $rmRate->amount }}" value="{{ $rmRate->code }}">
+                            {{ $rmRate->code }} (${{ $rmRate->amount }})
+                        </option>
+                    @endforeach
+                </select>
+            </div>
+
+            <div class="my-3">
+                <input type="checkbox" name="signAndMarkBillingDone" checked>&nbsp;Sign and Mark Billing Done
+            </div>
+
+            <div class="">
+                <button class="btn btn-primary btn-sm" submit>Submit</button>
+                <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+            </div>
+        </form>
+    </div>
+@endif
+@if($careMonth->is_bill_closed)
+    <b class="ml-2 text-info">[BILLING CLOSED]</b>
+@endif
+@if($pro->pro_type === 'ADMIN')
+    @if(!$careMonth->is_bill_closed)
+        <span class="mx-2 text-secondary">|</span>
+        <span class="d-block" moe>
+            <a class="text-danger" href="" show start>Close Billing</a>
+            <form url="/api/careMonth/closeBilling">
+                <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+                <p>Close billing?</p>
+                <div class="mb-0">
+                    <button class="btn btn-success btn-sm" submit>Submit</button>
+                    <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+                </div>
+            </form>
+        </span>
+    @elseif($careMonth->is_bill_closed)
+        <span class="mx-2 text-secondary">|</span>
+        <span class="d-block" moe>
+            <a class="text-danger" href="" show start>Reopen Billing</a>
+            <form url="/api/careMonth/reopenBilling">
+                <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+                <p>Reopen billing?</p>
+                <div class="mb-0">
+                    <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
+@endif
+@if(!$careMonth->is_billing_marked_done)
+    <span class="mx-2 text-secondary">|</span>
+    <span class="d-block" moe>
+        <a class="text-danger" href="" show start>Mark Billing Done</a>
+        <form url="/api/careMonth/setIsBillingMarkedDoneToTrue">
+            <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+            <p>Mark billing on this care month as done?</p>
+            <div class="mb-0">
+                <button class="btn btn-success btn-sm" submit>Submit</button>
+                <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+            </div>
+        </form>
+    </span>
+@else
+    <span class="mx-2 text-secondary">|</span>
+    <span class="d-block" moe>
+        <i class="fa fa-check"></i>
+        <a class="text-danger" href="" show start>Undo Mark Billing Done</a>
+        <form url="/api/careMonth/setIsBillingMarkedDoneToFalse">
+            <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+            <p>Mark billing on this care month as not done?</p>
+            <div class="mb-0">
+                <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
+

+ 239 - 0
resources/views/app/patient/care-month/_create-claim.blade.php

@@ -0,0 +1,239 @@
+<span class="mx-2 text-secondary">|</span>
+<a href="#" onclick="return showStagPopup('create-claim')">Create Claim</a>
+@if($pro->pro_type === 'ADMIN')
+    @if(!$careMonth->is_claim_closed)
+        <span class="mx-2 text-secondary">|</span>
+        <span class="d-block" moe>
+            <a class="text-danger" href="" show start>Close Claiming</a>
+            <form url="/api/careMonth/closeClaiming">
+                <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+                <p>Close claiming?</p>
+                <div class="mb-0">
+                    <button class="btn btn-success btn-sm" submit>Submit</button>
+                    <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+                </div>
+            </form>
+        </span>
+    @elseif($careMonth->is_claim_closed)
+        <span class="mx-2 text-secondary">|</span>
+        <span class="d-block" moe>
+            <a class="text-danger" href="" show start>Reopen Claiming</a>
+            <form url="/api/careMonth/reopenClaiming">
+                <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+                <p>Reopen claiming?</p>
+                <div class="mb-0">
+                    <button class="btn btn-success btn-sm" submit>Submit</button>
+                    <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+                </div>
+            </form>
+        </span>
+        <span class="mx-2 text-secondary">|</span>
+        <span class="d-block" moe>
+            <a class="text-danger" href="" show start>Update Claim Total Paid</a>
+            <form url="/api/careMonth/updateClaimTotalPaid">
+                <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+                <div class="form-group">
+                    <input type="number" class="form-control" name="claimTotalPaid">
+                </div>
+                <div class="mb-0">
+                    <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
+@endif
+<div class="stag-popup stag-popup-md mcp-theme-1" stag-popup-key="create-claim">
+    <form action="/api/claim/createForCareMonth" id="createCareMonthClaimApp">
+        <h3 class="stag-popup-title border-bottom-0 mb-0">
+            <span>Create Claim</span>
+            <span class="mx-2 text-secondary">|</span>
+            <a href="#" v-on:click.prevent="addLine()">Add Line</a>
+            <a href="#" class="ml-auto text-secondary"
+               onclick="return closeStagPopup()"><i class="fa fa-times-circle"></i></a>
+        </h3>
+        <input type="hidden" name="careMonthUid" value="{{$careMonth->uid}}">
+        <table class="table table-sm table-condensed mb-3 border-left border-right border-bottom">
+            <thead>
+            <tr class="bg-light">
+                <th class="width-100px border-bottom-0">CPT Code</th>
+                <th class="width-100px border-bottom-0">Date of Service</th>
+                <th class="border-bottom-0">ICDs</th>
+                <th class="border-bottom-0">&nbsp;</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr v-for="(line, lineIndex) in payload.lines">
+                <td class="py-2">
+                    <input required type="text" class="min-width-unset form-control form-control-sm" v-model="line.cpt">
+                </td>
+                <td class="py-2">
+                    <input required type="date" class="min-width-unset form-control form-control-sm" v-model="line.dateOfService">
+                </td>
+                <td class="p-2 bg-light">
+                    <div class="d-flex align-items-baseline">
+                        <a href="#" class="text-nowrap text-primary mr-2"
+                           v-on:click.prevent="addICD(lineIndex)" title="Add ICD">
+                            <i class="fa fa-plus-square text-primary"></i>
+                        </a>
+                        <div class="flex-grow-1">
+                            <div v-for="(icd, icdIndex) in line.icds" class="d-flex align-items-center" :class="icdIndex > 0 ? 'mt-1' : ''">
+                                <input required type="text" class="form-control form-control-sm width-100px"
+                                       data-field="icd"
+                                       :data-line-index="lineIndex"
+                                       :data-icd-index="icdIndex"
+                                       v-model="icd.code">
+                                <input required type="text" class="form-control form-control-sm flex-grow-1 ml-2"
+                                       v-model="icd.description">
+                                <a href="#" class="text-nowrap text-danger ml-2"
+                                   v-on:click.prevent="removeICD(lineIndex, icdIndex)"
+                                   v-if="line.icds.length > 1" title="Remove ICD">
+                                    <i class="fa fa-trash-alt text-danger"></i>
+                                </a>
+                            </div>
+                        </div>
+                    </div>
+                </td>
+                <td class="text-center pt-2">
+                    <a href="#" class="text-nowrap text-danger d-block mt-1"
+                       :class="payload.lines.length <= 1 ? 'opacity-60' : ''"
+                       v-on:click.prevent="removeLine(lineIndex)">
+                        <i class="fa fa-trash-alt text-danger"></i>
+                        Remove Line
+                    </a>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+
+        <div class="mt-2">
+            <button type="button" class="btn btn-primary btn-sm font-weight-bold" v-on:click.prevent="saveClaim()">Create</button>
+            <button type="button" class="btn btn-default border btn-sm font-weight-bold ml-2" onclick="return closeStagPopup()">Cancel</button>
+        </div>
+    </form>
+</div>
+<script>
+    window.createCareMonthClaimApp = new Vue({
+        el: '#createCareMonthClaimApp',
+        delimiters: ['@{{', '}}'],
+        data: {
+            payload: {
+                lines: [
+                    {
+                        cpt: '',
+                        dateOfService: '{{date('Y-m-d')}}',
+                        icds: window.rmReasons.map(_x => {
+                            return {
+                                code: _x.icd,
+                                description: _x.description
+                            };
+                        })
+                    }
+                ]
+            }
+        },
+        methods: {
+            addLine: function () {
+                this.payload.lines.push({
+                    cpt: '',
+                    dateOfService: '{{date('Y-m-d')}}',
+                    icds: window.rmReasons.map(_x => {
+                        return {
+                            code: _x.icd,
+                            description: _x.description
+                        };
+                    })
+                });
+                Vue.nextTick(() => {
+                    this.initICDAutoSuggest();
+                });
+            },
+            removeLine: function (_index) {
+                if(this.payload.lines.length > 1) {
+                    this.payload.lines.splice(_index, 1);
+                }
+            },
+            addICD: function(_lineIndex) {
+                this.payload.lines[_lineIndex].icds.push({
+                    code: '',
+                    description: '',
+                });
+                Vue.nextTick(() => {
+                    this.initICDAutoSuggest();
+                });
+            },
+            removeICD: function(_lineIndex, _icdIndex) {
+                if(this.payload.lines[_lineIndex].icds.length > 1) {
+                    this.payload.lines[_lineIndex].icds.splice(_icdIndex, 1);
+                }
+            },
+            initICDAutoSuggest: function () {
+                let self = this;
+                $('#createCareMonthClaimApp input[type="text"][data-field="icd"]:not([ac-initialized])').each(function () {
+                    var elem = this,
+                        dynID = 'icd-' + Math.ceil(Math.random() * 1000000),
+                        lineIndex = $(this).attr('data-line-index'),
+                        icdIndex = $(this).attr('data-icd-index');
+                    $(elem).attr('id', dynID);
+                    new window.Def.Autocompleter.Search(dynID,
+                        'https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&ef=name', {
+                            tableFormat: true,
+                            valueCols: [0],
+                            colHeaders: ['Code', 'Name'],
+                        }
+                    );
+                    window.Def.Autocompleter.Event.observeListSelections(dynID, function () {
+                        let acData = elem.autocomp.getSelectedItemData();
+                        console.log('ALIX', lineIndex, icdIndex);
+                        self.payload.lines[lineIndex].icds[icdIndex].code = acData[0].code;
+                        self.payload.lines[lineIndex].icds[icdIndex].description = acData[0].data.name;
+                        return false;
+                    });
+                    $(elem).attr('ac-initialized', 1);
+                });
+            },
+            saveClaim: function() {
+                let form = $('form#createCareMonthClaimApp').first();
+                if(!form[0].checkValidity()) {
+                    form[0].reportValidity();
+                    return false;
+                }
+
+                $.post('/api/claim/createForCareMonth', {
+                    careMonthUid: '{{$careMonth->uid}}',
+                    data: JSON.stringify(this.payload)
+                }, function(_data) {
+                    if (!_data.success) {
+                        if (_data.message) {
+                            toastr.error(_data.message);
+                        }
+                        else {
+                            toastr.error('Unable to save the claim!');
+                        }
+                    }
+                    else {
+                        toastr.success('Claim saved!');
+                        closeStagPopup();
+                        fastReload();
+                    }
+                }, 'json')
+            },
+            getPrefillValues: function() {
+                this.payload.lines = [{
+                    cpt: '',
+                    dateOfService: '{{date('Y-m-d')}}',
+                    icds: window.rmReasons.map(_x => {
+                        return {
+                            code: _x.icd,
+                            description: _x.description
+                        };
+                    })
+                }];
+            }
+        },
+        mounted: function () {
+            this.initICDAutoSuggest();
+            this.getPrefillValues();
+        }
+    })
+</script>

+ 144 - 0
resources/views/app/patient/care-month/_create-rm-reason.blade.php

@@ -0,0 +1,144 @@
+<script>
+    window.rmReasons = [];
+    <?php
+    $rmReasons = [];
+    if($careMonth->rm_reasons) {
+        $rmReasons = json_decode($careMonth->rm_reasons);
+    }
+    ?>
+    @if(count($rmReasons))
+        @foreach($rmReasons as $reason)
+        window.rmReasons.push({
+            icd: '{{$reason->icd}}',
+            description: '{{$reason->description}}'
+        });
+        @endforeach
+    @endif
+</script>
+<div moe wide class="" id="careMonth_rmReasonsComponent">
+    <a class="" href="" show start><i class="fa fa-edit"></i></a>
+    <form url="/api/careMonth/updateRmReasons">
+        <input type="hidden" name="uid" value="{{$careMonth->uid}}">
+        <table class="table table-sm table-condensed table-borderless my-0" id="rm-reasons-table">
+            <thead>
+                <tr>
+                    <th class="pl-0">Code</th>
+                    <th>Description</th>
+                    <th></th>
+                </tr>
+            </thead>
+            <tbody>
+                @if(count($rmReasons))
+                    @foreach($rmReasons as $reason)
+                    <tr class="data-row">
+                        <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="{{$loop->index}}" id="rm_icd_{{$loop->index}}" value="{{$reason->icd}}"></td>
+                        <td class=""><input type="text" class="form-control rm-reason-description" data-index="{{$loop->index}}" id="rm_description_{{$loop->index}}" value="{{$reason->description}}"></td>
+                        <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                    </tr>
+                    @endforeach
+                @else
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd"  data-index="0" id="rm_icd_0" name="rmReasonDTOs[0].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="0" id="rm_description_0" name="rmReasonDTOs[0].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="1" id="rm_icd_1" name="rmReasonDTOs[1].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="1" id="rm_description_1" name="rmReasonDTOs[1].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="2" id="rm_icd_2" name="rmReasonDTOs[2].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="2" id="rm_description_2" name="rmReasonDTOs[2].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                @endif
+            </tbody>
+        </table>
+        <div class="form-group my-2">
+            <button class="btn btn-outline-primary btn-sm btn-add-row">Add row</button>
+        </div>
+        <div class="form-group mb-0">
+            <button class="btn btn-primary btn-sm" id="btnUpdateRmReasons" type="button">Submit</button>
+            <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+        </div>
+    </form>
+</div>
+<script>
+    (function() {
+
+        function init() {
+            $("#careMonth_rmReasonsComponent .btn-add-row").click(function() {
+                var rowCount = $('#rm-reasons-table').find('tr').length;
+                var nextIndex = rowCount -1;
+                var clone = $('#rm-reasons-table tr.data-row:first').clone();
+                clone.find('input').attr('data-index', nextIndex);
+                clone.find('input.rm-reason-icd').attr('name','rmReasonDTOs['+nextIndex+'].code').val('');
+                clone.find('input.rm-reason-icd').attr('id','rm_icd_'+nextIndex);
+                clone.find('input.rm-reason-description').attr('name','rmReasonDTOs['+nextIndex+'].description').val('');
+                clone.find('input.rm-reason-description').attr('id','rm_description_'+nextIndex);
+                $('#rm-reasons-table').append(clone);
+                attachAutocompleterToField(nextIndex);
+                return false;
+            });
+
+            $('#rm-reasons-table').on('click', '.btn-remove-row', function() {
+                $(this).closest('tr').remove();
+                return false;
+            });
+
+            $('#rm-reasons-table .rm-reason-icd').each(function(i,e) {
+                var fieldIndex = $(e).attr('data-index');
+                attachAutocompleterToField(fieldIndex);
+            });
+
+            $("#careMonth_rmReasonsComponent #btnUpdateRmReasons").click(function() {
+                let rmReasons = [];
+                $('tr.data-row').each(function() {
+                    let icd = $.trim($(this).find('input.rm-reason-icd').val());
+                    if(icd) {
+                        rmReasons.push({
+                            icd: icd,
+                            description: $.trim($(this).find('input.rm-reason-description').val())
+                        });
+                    }
+                });
+                if(!rmReasons.length) return false;
+                showMask();
+                rmReasons = JSON.stringify(rmReasons);
+                $.post('/api/careMonth/updateRmReasons', {
+                    uid: '{{$careMonth->uid}}',
+                    rmReasons: rmReasons
+                }, (_data) => {
+                    hideMask();
+                    if(_data && _data.success) {
+                        fastReload();
+                    }
+                    else {
+                        toastr.error(_data.message ? _data.message : 'Unable to update RM reasons!');
+                    }
+                }, 'json');
+                return false;
+            });
+
+            function attachAutocompleterToField(fieldIndex){
+                var e = $('#rm_icd_'+fieldIndex)[0];
+                new Def.Autocompleter.Search('rm_icd_'+fieldIndex, 'https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name', {
+                    tableFormat: true,
+                    valueCols: [1],
+                    colHeaders: ['Code', 'Name']
+                });
+                Def.Autocompleter.Event.observeListSelections('rm_icd_'+fieldIndex, function(data) {
+                    console.log("Setting value of e to : ", data.item_code);
+                    $('#rm_icd_'+fieldIndex).val(data.item_code);
+                    $('#rm_description_'+fieldIndex).val(data.final_val);
+                    $('#rm_icd_'+fieldIndex).focus();
+                    return false;
+                });
+            }
+        }
+
+        addMCInitializer('careMonth_rmReasonsComponent', init, '#careMonth_rmReasonsComponent');
+
+    })();
+</script>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1113 - 383
resources/views/app/patient/care-month/dashboard.blade.php


+ 25 - 0
resources/views/app/patient/care-month/rm-reasons.blade.php

@@ -0,0 +1,25 @@
+<div class="">
+    <div class="">
+        <div class="d-flex align-items-center mb-2">
+            <p class="font-weight-bold text-secondary m-0 mr-2">RM Reasons</p>
+            @include('app/patient/care-month/_create-rm-reason')
+        </div>
+        <div class="d-flex align-items-start flex-wrap">
+            <?php
+            $rmReasons = [];
+            if($careMonth->rm_reasons) {
+                $rmReasons = json_decode($careMonth->rm_reasons);
+            }
+            ?>
+            @if(count($rmReasons))
+                @foreach ($rmReasons as $reason)
+                    <span class="badge badge-info p-2 mb-2 mr-2">
+                        {{ $reason->description}} ({{ $reason->icd }})
+                    </span>
+                @endforeach
+            @else
+                <div class="alert alert-info">No RM reasons</div>
+            @endif
+        </div>
+    </div>
+</div>

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

@@ -63,10 +63,10 @@
                 </div>
                 <div class="stag-popup stag-popup-lg ticket-popup mcp-theme-1" stag-popup-key="ticket-popup"></div>
 
-                {{-- programs --}}
-                @if($pro->pro_type == 'ADMIN')
-                    @include('app/patient/partials/programs')
-                @endif
+                {{-- rm reasons --}}
+                <div class="pt-2 mt-2 border-top">
+                    @include('app/patient/partials/rm-reasons')
+                </div>
 
                 {{-- devices --}}
                 <?php

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

@@ -161,23 +161,25 @@
             </div>
 
 
-            @if($performer->pro->pro_type == 'ADMIN')
+            @if($performer->pro->pro_type == 'ADMIN' || ($note->allyPro && $note->allyPro->uid === $performer->pro->uid))
                 <span class="px-2 border-right d-flex">
                     @if($note->allyPro)
                         <span class="mr-2"><span class="text-secondary">NA:</span>  {{$note->allyPro->name_first}} {{$note->allyPro->name_last}}</span>
-                        <span class="d-inline-block" moe>
-                            <a class="text-danger" href="" show start>
-                                <i class="fa fa-times"></i>
-                            </a>
-                            <form url="/api/note/removeNa">
-                                <input type="hidden" name="uid" value="{{$note->uid}}">
-                                <p>Remove NA?</p>
-                                <div class="mb-0">
-                                    <button class="btn btn-success btn-sm" submit>Submit</button>
-                                    <button class="btn btn-default border btn-sm" cancel>Cancel</button>
-                                </div>
-                            </form>
-                        </span>
+                        @if($performer->pro->pro_type == 'ADMIN')
+                            <span class="d-inline-block" moe>
+                                <a class="text-danger" href="" show start>
+                                    <i class="fa fa-times"></i>
+                                </a>
+                                <form url="/api/note/removeNa">
+                                    <input type="hidden" name="uid" value="{{$note->uid}}">
+                                    <p>Remove NA?</p>
+                                    <div class="mb-0">
+                                        <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
                     @else
                         <span class="mr-2"><span class="text-secondary">NA:</span> - </span>
                         <span class="d-block" moe>

+ 135 - 0
resources/views/app/patient/partials/_create-rm-reason.blade.php

@@ -0,0 +1,135 @@
+<script>
+    <?php
+    $rmReasons = [];
+    if($patient->rm_reasons) {
+        $rmReasons = json_decode($patient->rm_reasons);
+    }
+    ?>
+</script>
+<div moe wide class="" id="rmReasonsComponent">
+    <a class="" href="" show start><i class="fa fa-edit"></i></a>
+    <form url="/api/client/updateRmReasons">
+        <input type="hidden" name="uid" value="{{$patient->uid}}">
+        <table class="table table-sm table-condensed table-borderless my-0" id="rm-reasons-table">
+            <thead>
+                <tr>
+                    <th class="pl-0">Code</th>
+                    <th>Description</th>
+                    <th></th>
+                </tr>
+            </thead>
+            <tbody>
+                @if(count($rmReasons))
+                    @foreach($rmReasons as $reason)
+                    <tr class="data-row">
+                        <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="{{$loop->index}}" id="rm_icd_{{$loop->index}}" value="{{$reason->icd}}"></td>
+                        <td class=""><input type="text" class="form-control rm-reason-description" data-index="{{$loop->index}}" id="rm_description_{{$loop->index}}" value="{{$reason->description}}"></td>
+                        <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                    </tr>
+                    @endforeach
+                @else
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd"  data-index="0" id="rm_icd_0" name="rmReasonDTOs[0].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="0" id="rm_description_0" name="rmReasonDTOs[0].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="1" id="rm_icd_1" name="rmReasonDTOs[1].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="1" id="rm_description_1" name="rmReasonDTOs[1].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                <tr class="data-row">
+                    <td class="pl-0"><input type="text" class="form-control rm-reason-icd" data-index="2" id="rm_icd_2" name="rmReasonDTOs[2].code"></td>
+                    <td class=""><input type="text" class="form-control rm-reason-description" data-index="2" id="rm_description_2" name="rmReasonDTOs[2].description"></td>
+                    <td class="pr-0 align-middle"><a href="#" class="btn-remove-row text-danger"><i class="fa fa-trash-alt"></i></a></td>
+                </tr>
+                @endif
+            </tbody>
+        </table>
+        <div class="form-group my-2">
+            <button class="btn btn-outline-primary btn-sm btn-add-row">Add row</button>
+        </div>
+        <div class="form-group mb-0">
+            <button class="btn btn-primary btn-sm" id="btnUpdateRmReasons" type="button">Submit</button>
+            <button class="btn btn-default border btn-sm" cancel>Cancel</button>
+        </div>
+    </form>
+</div>
+<script>
+    (function() {
+
+        function init() {
+            $("#rmReasonsComponent .btn-add-row").click(function() {
+                var rowCount = $('#rm-reasons-table').find('tr').length;
+                var nextIndex = rowCount -1;
+                var clone = $('#rm-reasons-table tr.data-row:first').clone();
+                clone.find('input').attr('data-index', nextIndex);
+                clone.find('input.rm-reason-icd').attr('name','rmReasonDTOs['+nextIndex+'].code').val('');
+                clone.find('input.rm-reason-icd').attr('id','rm_icd_'+nextIndex);
+                clone.find('input.rm-reason-description').attr('name','rmReasonDTOs['+nextIndex+'].description').val('');
+                clone.find('input.rm-reason-description').attr('id','rm_description_'+nextIndex);
+                $('#rm-reasons-table').append(clone);
+                attachAutocompleterToField(nextIndex);
+                return false;
+            });
+
+            $('#rm-reasons-table').on('click', '.btn-remove-row', function() {
+                $(this).closest('tr').remove();
+                return false;
+            });
+
+            $('#rm-reasons-table .rm-reason-icd').each(function(i,e) {
+                var fieldIndex = $(e).attr('data-index');
+                attachAutocompleterToField(fieldIndex);
+            });
+
+            $("#rmReasonsComponent #btnUpdateRmReasons").click(function() {
+                let rmReasons = [];
+                $('tr.data-row').each(function() {
+                    let icd = $.trim($(this).find('input.rm-reason-icd').val());
+                    if(icd) {
+                        rmReasons.push({
+                            icd: icd,
+                            description: $.trim($(this).find('input.rm-reason-description').val())
+                        });
+                    }
+                });
+                if(!rmReasons.length) return false;
+                showMask();
+                rmReasons = JSON.stringify(rmReasons);
+                $.post('/api/client/updateRmReasons', {
+                    uid: '{{$patient->uid}}',
+                    rmReasons: rmReasons
+                }, (_data) => {
+                    hideMask();
+                    if(_data && _data.success) {
+                        fastReload();
+                    }
+                    else {
+                        toastr.error(_data.message ? _data.message : 'Unable to update RM reasons!');
+                    }
+                }, 'json');
+                return false;
+            });
+
+            function attachAutocompleterToField(fieldIndex){
+                var e = $('#rm_icd_'+fieldIndex)[0];
+                new Def.Autocompleter.Search('rm_icd_'+fieldIndex, 'https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name', {
+                    tableFormat: true,
+                    valueCols: [1],
+                    colHeaders: ['Code', 'Name']
+                });
+                Def.Autocompleter.Event.observeListSelections('rm_icd_'+fieldIndex, function(data) {
+                    console.log("Setting value of e to : ", data.item_code);
+                    $('#rm_icd_'+fieldIndex).val(data.item_code);
+                    $('#rm_description_'+fieldIndex).val(data.final_val);
+                    $('#rm_icd_'+fieldIndex).focus();
+                    return false;
+                });
+            }
+        }
+
+        addMCInitializer('rmReasonsComponent', init, '#rmReasonsComponent');
+
+    })();
+</script>

+ 25 - 0
resources/views/app/patient/partials/rm-reasons.blade.php

@@ -0,0 +1,25 @@
+<div class="">
+    <div class="">
+        <div class="d-flex align-items-center mb-2">
+            <p class="font-weight-bold text-secondary m-0 mr-2">RM Reasons</p>
+            @include('app/patient/partials/_create-rm-reason')
+        </div>
+        <div class="d-flex align-items-start flex-wrap">
+            <?php
+            $rmReasons = [];
+            if($patient->rm_reasons) {
+                $rmReasons = json_decode($patient->rm_reasons);
+            }
+            ?>
+            @if(count($rmReasons))
+                @foreach ($rmReasons as $reason)
+                    <span class="badge badge-info p-2 mb-2 mr-2">
+                        {{ $reason->description}} ({{ $reason->icd }})
+                    </span>
+                @endforeach
+            @else
+                <div class="alert alert-info">No RM reasons</div>
+            @endif
+        </div>
+    </div>
+</div>

+ 90 - 62
resources/views/app/patient/settings.blade.php

@@ -448,73 +448,101 @@
                 <hr class="m-negator-3 my-3">
                 <span>MCP Onboarding Visit: <b>{{ $patient->has_mcp_done_onboarding_visit }}</b></span>
                 <span moe class="ml-2">
-            <a start show><i class="fa fa-edit"></i></a>
-            <form url="/api/client/updateMcpOnboardingVisitInfo" class="mcp-theme-1">
-                <input type="hidden" name="uid" value="{{$patient->uid}}">
-                <div class="mb-2">
-                    <select name="hasMcpDoneOnboardingVisit"
-                            class="form-control form-control-sm"
-                            onchange="toggleDisabledAsNeeded(this, 'YES', 'if-visit-done')">
-                        <option value="">-- Select Status --</option>
-                        <option
-                            value="YES" {{ $patient->has_mcp_done_onboarding_visit === 'YES' ? 'selected' : '' }}>YES</option>
-                        <option
-                            value="NO" {{ $patient->has_mcp_done_onboarding_visit === 'NO' ? 'selected' : '' }}>NO</option>
-                        <option value="UNKNOWN" {{ $patient->has_mcp_done_onboarding_visit === 'UNKNOWN' ? 'selected' : '' }}>UNKNOWN</option>
-                    </select>
-                </div>
-                <div class="mb-2">
-                    <input type="date" class="if-visit-done form-control form-control-sm" disabled
-                           name="mcpOnboardingVisitDate" value="{{ date('Y-m-d') }}" max="{{ date('Y-m-d') }}">
-                </div>
-                <div class="mb-2">
-                    <select name="mcpOnboardingVisitNoteUid" disabled
-                            class="form-control form-control-sm if-visit-done"
-                            onchange="if(this.value === '-- create --') createNewNote('{{$patient->uid}}', '{{$pro->uid}}', '{{date('Y-m-d')}}');">
-                        <option value="">-- Visit Note --</option>
-                        <?php $notes = \App\Models\Note::where('client_id', $patient->id)->get() ?>
-                        @foreach ($notes as $note)
-                            @if(!empty($note->title) && $note->client_id === $patient->id && !$note->is_cancelled)
+                    <a start show><i class="fa fa-edit"></i></a>
+                    <form url="/api/client/updateMcpOnboardingVisitInfo" class="mcp-theme-1">
+                        <input type="hidden" name="uid" value="{{$patient->uid}}">
+                        <div class="mb-2">
+                            <select name="hasMcpDoneOnboardingVisit"
+                                    class="form-control form-control-sm"
+                                    onchange="toggleDisabledAsNeeded(this, 'YES', 'if-visit-done')">
+                                <option value="">-- Select Status --</option>
                                 <option
-                                    {{ $patient->mcp_onboarding_visit_note_id === $note->id ? 'selected' : '' }}
-                                    value="{{$note->uid}}">{{$note->title}} ({{friendly_date_time($note->effective_dateest, false)}})</option>
-                            @endif
-                        @endforeach
-                        {{--<option value="-- create --">-- Create Note --</option>--}}
-                    </select>
-                </div>
-                <div class="mb-2 if-note-outside-system">
-                    <textarea class="form-control form-control-sm" name="reasonOnboardingVisitNoteOutsideSystem"
-                              placeholder="Visit note outside the system reason" spellcheck="false"
-                              data-gramm="false"></textarea>
-                </div>
-                <div>
-                    <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
-                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
-                </div>
-            </form>
-        </span>
+                                    value="YES" {{ $patient->has_mcp_done_onboarding_visit === 'YES' ? 'selected' : '' }}>YES</option>
+                                <option
+                                    value="NO" {{ $patient->has_mcp_done_onboarding_visit === 'NO' ? 'selected' : '' }}>NO</option>
+                                <option value="UNKNOWN" {{ $patient->has_mcp_done_onboarding_visit === 'UNKNOWN' ? 'selected' : '' }}>UNKNOWN</option>
+                            </select>
+                        </div>
+                        <div class="mb-2">
+                            <input type="date" class="if-visit-done form-control form-control-sm" disabled
+                                   name="mcpOnboardingVisitDate" value="{{ date('Y-m-d') }}" max="{{ date('Y-m-d') }}">
+                        </div>
+                        <div class="mb-2">
+                            <select name="mcpOnboardingVisitNoteUid" disabled
+                                    class="form-control form-control-sm if-visit-done"
+                                    onchange="if(this.value === '-- create --') createNewNote('{{$patient->uid}}', '{{$pro->uid}}', '{{date('Y-m-d')}}');">
+                                <option value="">-- Visit Note --</option>
+                                <?php $notes = \App\Models\Note::where('client_id', $patient->id)->get() ?>
+                                @foreach ($notes as $note)
+                                    @if(!empty($note->title) && $note->client_id === $patient->id && !$note->is_cancelled)
+                                        <option
+                                            {{ $patient->mcp_onboarding_visit_note_id === $note->id ? 'selected' : '' }}
+                                            value="{{$note->uid}}">{{$note->title}} ({{friendly_date_time($note->effective_dateest, false)}})</option>
+                                    @endif
+                                @endforeach
+                                {{--<option value="-- create --">-- Create Note --</option>--}}
+                            </select>
+                        </div>
+                        <div class="mb-2 if-note-outside-system">
+                            <textarea class="form-control form-control-sm" name="reasonOnboardingVisitNoteOutsideSystem"
+                                      placeholder="Visit note outside the system reason" spellcheck="false"
+                                      data-gramm="false"></textarea>
+                        </div>
+                        <div>
+                            <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                        </div>
+                    </form>
+                </span>
 
                 <hr class="m-negator-3 my-3">
                 <span>Initiative: <b>{{$patient->initiative ? $patient->initiative : 'N/A'}}</b></span>
                 <span moe class="ml-2">
-            <a start show><i class="fa fa-edit"></i></a>
-            <form url="/api/client/updateInitiative" class="mcp-theme-1">
-                <input type="hidden" name="uid" value="{{$patient->uid}}">
-                <div class="mb-2">
-                    <select name="initiative" class="form-control">
-                        <option value="">-- select --</option>
-                        @foreach($intiatives as $initiative)
-                            <option value="{{$initiative}}">{{$initiative}}</option>
-                        @endforeach
-                    </select>
-                </div>
-                <div>
-                    <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
-                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
-                </div>
-            </form>
-        </span>
+                    <a start show><i class="fa fa-edit"></i></a>
+                    <form url="/api/client/updateInitiative" class="mcp-theme-1">
+                        <input type="hidden" name="uid" value="{{$patient->uid}}">
+                        <div class="mb-2">
+                            <select name="initiative" class="form-control">
+                                <option value="">-- select --</option>
+                                @foreach($intiatives as $initiative)
+                                    <option value="{{$initiative}}">{{$initiative}}</option>
+                                @endforeach
+                            </select>
+                        </div>
+                        <div>
+                            <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                        </div>
+                    </form>
+                </span>
+
+                <hr class="m-negator-3 my-3">
+                <span>Send SMS for device measurements: <b>{{$patient->send_sms_on_bdt_measurement ? 'YES' : 'NO'}}</b></span>
+                @if($patient->send_sms_on_bdt_measurement)
+                    <span moe class="ml-2">
+                        <a start show>Turn Off</a>
+                        <form url="/api/client/setSendSmsOnBdtMeasurementToFalse" class="mcp-theme-1">
+                            <input type="hidden" name="uid" value="{{$patient->uid}}">
+                            <p>Turn off SMS on device measurements?</p>
+                            <div>
+                                <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                                <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                            </div>
+                        </form>
+                    </span>
+                @else
+                    <span moe class="ml-2">
+                        <a start show>Turn On</a>
+                        <form url="/api/client/setSendSmsOnBdtMeasurementToTrue" class="mcp-theme-1">
+                            <input type="hidden" name="uid" value="{{$patient->uid}}">
+                            <p>Turn on SMS on device measurements?</p>
+                            <div>
+                                <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                                <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                            </div>
+                        </form>
+                    </span>
+                @endif
 
                 <hr class="m-negator-3 mt-3">
                 <div id="preferredPharmacyApp">

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

@@ -0,0 +1,221 @@
+@extends ('layouts.patient')
+
+@section('inner-content')
+
+    <div id="simpleSMSReminderComponent">
+        <div class="pt-2 d-flex align-items-start">
+            <h6 class="my-0 text-secondary d-flex align-items-center w-100">
+                <span class="font-weight-bold text-secondary">SMS Reminders</span>
+                <span class="mx-2 text-secondary">|</span>
+                <div moe>
+                    <a start show class="py-0 mb-3">Add</a>
+                    <form url="/api/simpleSmsReminder/create" class="mcp-theme-1">
+                        <input type="hidden" name="clientUid" value="{{$patient->uid}}">
+                        <div class="row mb-2">
+                            <div class="col-5 pr-0">
+                                <label class="text-sm text-secondary mb-1">To Number</label>
+                                <input type="text" name="smsNumber" class="form-control form-control-sm">
+                            </div>
+                        </div>
+                        <div class="row mb-2">
+                            <div class="col-12">
+                                <label class="text-sm text-secondary mb-1">Message</label>
+                                <textarea name="message" class="form-control form-control-sm"></textarea>
+                            </div>
+                        </div>
+                        <div class="row mb-2">
+                            <div class="col-12">
+                                <label class="text-sm text-secondary mb-1">Schedule</label>
+                                <table class="table table-sm table-bordered mb-0">
+                                    <thead>
+                                    <tr class="bg-light">
+                                        <th class="border-bottom-0 text-center">Sun</th>
+                                        <th class="border-bottom-0 text-center">Mon</th>
+                                        <th class="border-bottom-0 text-center">Tue</th>
+                                        <th class="border-bottom-0 text-center">Wed</th>
+                                        <th class="border-bottom-0 text-center">Thu</th>
+                                        <th class="border-bottom-0 text-center">Fri</th>
+                                        <th class="border-bottom-0 text-center">Sat</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    <tr>
+                                        <td class="text-center"><input type="checkbox" data-day="sun"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="mon"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="tue"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="wed"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="thu"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="fri"></td>
+                                        <td class="text-center"><input type="checkbox" data-day="sat"></td>
+                                    </tr>
+                                    <tr>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="sun" name="timeOfDaySunday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="mon" name="timeOfDayMonday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="tue" name="timeOfDayTuesday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="wed" name="timeOfDayWednesday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="thu" name="timeOfDayThursday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="fri" name="timeOfDayFriday" readonly></td>
+                                        <td><input type="time" class="form-control form-control-sm" data-day="sat" name="timeOfDaySaturday" readonly></td>
+                                    </tr>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                        <div>
+                            <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                            <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                        </div>
+                    </form>
+                </div>
+            </h6>
+        </div>
+
+        <table class="table table-sm table-striped table-bordered mb-0 mt-2 notes-list">
+            <thead>
+            <tr>
+                <th class="px-2 text-secondary border-bottom-0">#</th>
+                <th class="px-2 text-secondary border-bottom-0">To Number</th>
+                <th class="px-2 text-secondary border-bottom-0">Message</th>
+                <th class="px-2 text-secondary border-bottom-0">Schedule</th>
+                <th class="px-2 text-secondary border-bottom-0">Actions</th>
+            </tr>
+            </thead>
+            <tbody>
+            <?php $index = 0; ?>
+            @foreach ($patient->smsReminders as $smsReminder)
+                <?php $index++; ?>
+                <tr>
+                    <td class="px-2">{{$index}}</td>
+                    <td class="px-2">{{$smsReminder->sms_number}}</td>
+                    <td class="px-2">{{$smsReminder->message}}</td>
+                    <td class="px-2">
+                        @if($smsReminder->time_of_day_sunday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Sun:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_sunday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_monday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Mon:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_monday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_tuesday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Tue:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_tuesday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_wednesday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Wed:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_wednesday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_thursday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Thu:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_thursday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_friday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Fri:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_friday)}}</b>
+                            </div>
+                        @endif
+                        @if($smsReminder->time_of_day_saturday)
+                            <div>
+                                <span class="text-secondary width-40px d-inline-block">Sat:</span>
+                                <b>{{friendly_time($smsReminder->time_of_day_saturday)}}</b>
+                            </div>
+                        @endif
+                    </td>
+                    <td class="px-2">
+                        <div moe relative="">
+                            <a start show class="py-0 mb-3">Edit</a>
+                            <form url="/api/simpleSmsReminder/update" class="mcp-theme-1" right="">
+                                <input type="hidden" name="uid" value="{{$smsReminder->uid}}">
+                                <div class="row mb-2">
+                                    <div class="col-5 pr-0">
+                                        <label class="text-sm text-secondary mb-1">To Number</label>
+                                        <input type="text" name="smsNumber" class="form-control form-control-sm" value="{{$smsReminder->sms_number}}">
+                                    </div>
+                                </div>
+                                <div class="row mb-2">
+                                    <div class="col-12">
+                                        <label class="text-sm text-secondary mb-1">Message</label>
+                                        <textarea name="message" class="form-control form-control-sm">{{$smsReminder->message}}</textarea>
+                                    </div>
+                                </div>
+                                <div class="row mb-2">
+                                    <div class="col-12">
+                                        <label class="text-sm text-secondary mb-1">Schedule</label>
+                                        <table class="table table-sm table-bordered mb-0">
+                                            <thead>
+                                            <tr class="bg-light">
+                                                <th class="border-bottom-0 text-center">Sun</th>
+                                                <th class="border-bottom-0 text-center">Mon</th>
+                                                <th class="border-bottom-0 text-center">Tue</th>
+                                                <th class="border-bottom-0 text-center">Wed</th>
+                                                <th class="border-bottom-0 text-center">Thu</th>
+                                                <th class="border-bottom-0 text-center">Fri</th>
+                                                <th class="border-bottom-0 text-center">Sat</th>
+                                            </tr>
+                                            </thead>
+                                            <tbody>
+                                            <tr>
+                                                <td class="text-center"><input type="checkbox" data-day="sun" {{$smsReminder->time_of_day_sunday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="mon" {{$smsReminder->time_of_day_monday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="tue" {{$smsReminder->time_of_day_tuesday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="wed" {{$smsReminder->time_of_day_wednesday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="thu" {{$smsReminder->time_of_day_thursday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="fri" {{$smsReminder->time_of_day_friday ? 'checked' : ''}}></td>
+                                                <td class="text-center"><input type="checkbox" data-day="sat" {{$smsReminder->time_of_day_saturday ? 'checked' : ''}}></td>
+                                            </tr>
+                                            <tr>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="sun" name="timeOfDaySunday" {{$smsReminder->time_of_day_sunday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_sunday ? substr($smsReminder->time_of_day_sunday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="mon" name="timeOfDayMonday" {{$smsReminder->time_of_day_monday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_monday ? substr($smsReminder->time_of_day_monday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="tue" name="timeOfDayTuesday" {{$smsReminder->time_of_day_tuesday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_tuesday ? substr($smsReminder->time_of_day_tuesday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="wed" name="timeOfDayWednesday" {{$smsReminder->time_of_day_wednesday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_wednesday ? substr($smsReminder->time_of_day_wednesday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="thu" name="timeOfDayThursday" {{$smsReminder->time_of_day_thursday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_thursday ? substr($smsReminder->time_of_day_thursday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="fri" name="timeOfDayFriday" {{$smsReminder->time_of_day_friday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_friday ? substr($smsReminder->time_of_day_friday, 0, 5) : ''}}"></td>
+                                                <td><input type="time" class="form-control form-control-sm" data-day="sat" name="timeOfDaySaturday" {{$smsReminder->time_of_day_saturday ? '' : 'readonly'}} value="{{$smsReminder->time_of_day_saturday ? substr($smsReminder->time_of_day_saturday, 0, 5) : ''}}"></td>
+                                            </tr>
+                                            </tbody>
+                                        </table>
+                                    </div>
+                                </div>
+                                <div>
+                                    <button submit class="btn btn-sm btn-primary mr-1">Submit</button>
+                                    <button cancel class="btn btn-sm btn-default border">Cancel</button>
+                                </div>
+                            </form>
+                        </div>
+                    </td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+    </div>
+
+    <script>
+        (function () {
+            function init() {
+                $('input[type="checkbox"][data-day]').change(function() {
+                    let input = $(this).closest('form')
+                        .find('input[type="time"][data-day="' + $(this).attr('data-day') + '"]');
+                    input.prop('readonly', !this.checked);
+                    if(this.checked) {
+                        input.focus();
+                    }
+                    else {
+                        input.val('');
+                    }
+                });
+            }
+            addMCInitializer('simpleSMSReminderComponent', init, '#simpleSMSReminderComponent');
+        }).call(window);
+    </script>
+@endsection

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

@@ -912,12 +912,11 @@
                                 .datepicker({
                                     autoclose: true,
                                     todayHighlight: true,
-                                    format: 'yyyy-mm-dd'
-                                })
-                                .off('changeDate')
-                                .on('changeDate', function() {
-                                    self[self.currentCategory + 'PopupItem'].data.due_date = $(this).val();
-                                    self[self.currentCategory + 'SavePopupItem'].call(self, true);
+                                    format: 'yyyy-mm-dd',
+                                    onSelect: function(_date) {
+                                        self[self.currentCategory + 'PopupItem'].data.due_date = $(this).val();
+                                        self[self.currentCategory + 'SavePopupItem'].call(self, true);
+                                    }
                                 });
 
                             $(document).off('focus', '#ticketsApp input.form-control');

+ 8 - 0
resources/views/app/patients.blade.php

@@ -55,6 +55,7 @@
                     <th class="border-0">PCP</th>
                     {{--<th class="border-0">RMM</th>--}}
                     <th class="border-0">Appointments</th>
+                    <th class="border-0">Account</th>
                 </tr>
                 </thead>
                 <tbody>
@@ -180,6 +181,13 @@
                                 </tbody>
                             </table>
                         </td>
+                        <td>
+                            @if($patient->accountClient)
+                                <span class="font-weight-bold text-info"><i class="fa fa-check"></i></span>
+                            @else
+                                <span class="text-secondary">-</span>
+                            @endif
+                        </td>
                     </tr>
                 @endforeach
                 </tbody>

+ 1 - 1
resources/views/app/practice-management/supply-orders-cancelled-but-unacknowledged.blade.php

@@ -7,7 +7,7 @@
 
             <div class="card-header px-3 py-3 d-flex align-items-center bg-white">
                 <strong class="font-size-14">
-                    Supply Orders - Cancelled but unacknowledged
+                    Supply Orders - Cancelled but Unacknowledged
                 </strong>
             </div>
             <div class="card-body p-0">

+ 45 - 0
resources/views/app/practice-management/supply-orders-unsigned.blade.php

@@ -0,0 +1,45 @@
+@extends ('layouts/template')
+
+@section('content')
+
+    <div id="practice-supply-orders" class="p-3 mcp-theme-1">
+        <div class="card">
+
+            <div class="card-header px-3 py-3 d-flex align-items-center bg-white">
+                <strong class="font-size-14">
+                    Supply Orders - Unsigned
+                </strong>
+            </div>
+            <div class="card-body p-0">
+                <table class="table table-sm table-condensed p-0 m-0" style="table-layout: fixed">
+                    <thead class="bg-light">
+                    <tr>
+                        <th class="border-0">Patient</th>
+                        <th class="border-0">Address</th>
+                        <th class="border-0">Item(s)</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @foreach ($supplyOrders as $supplyOrder)
+                        <tr data-client-uid="{{$supplyOrder->client->uid}}">
+                            <td class="align-top border-top">
+                                <a href="{{route('patients.view.supply-orders',['patient'=>$supplyOrder->client, 'supplyOrder'=>$supplyOrder, 'filter' => 'all'])}}"> {{$supplyOrder->client->displayName()}}</a>
+                            </td>
+                            <td class="align-top border-top">
+                                {!! $supplyOrder->mailing_address_full ? implode(" ", [$supplyOrder->mailing_address_line1 . ' ' . $supplyOrder->mailing_address_line2, $supplyOrder->mailing_address_city . ' ' . $supplyOrder->mailing_address_state . ' ' . $supplyOrder->mailing_address_zip]) : '-'  !!}
+                            </td>
+                            <td class="align-top border-top">
+                                {{$supplyOrder->product->title}}
+                            </td>
+                        </tr>
+                    @endforeach
+                    </tbody>
+                </table>
+                <div>
+                    {{$supplyOrders->links()}}
+                </div>
+            </div>
+        </div>
+    </div>
+
+@endsection

+ 53 - 15
resources/views/layouts/patient.blade.php

@@ -157,6 +157,10 @@
                             <a class="nav-link {{ strpos($routeName, 'patients.view.settings') === 0 ? 'active' : '' }}"
                                href="{{ route('patients.view.settings', ['patient' => $patient]) }}">Settings</a>
                         </li>
+                        <li class="nav-item">
+                            <a class="nav-link {{ strpos($routeName, 'patients.view.sms-reminders') === 0 ? 'active' : '' }}"
+                               href="{{ route('patients.view.sms-reminders', ['patient' => $patient]) }}">SMS Reminders</a>
+                        </li>
                         <li class="nav-item">
                             <a class="nav-link {{ strpos($routeName, 'patients.view.pros') === 0 ? 'active' : '' }}"
                                href="{{ route('patients.view.pros', ['patient' => $patient]) }}">Pros</a>
@@ -845,8 +849,9 @@
 
                                     <ul class="vbox ml-auto mt-2 align-self-start patient-header-address">
                                         <li class="d-flex align-items-start">
-                                            <span class="aligned-icon"><i class="fa fa-map-marker-alt"
-                                                                          aria-hidden="true"></i></span>
+                                            <span class="aligned-icon">
+                                                <i class="fa fa-map-marker-alt" aria-hidden="true"></i>
+                                            </span>
                                             <div class="position-relative">
                                                 <?php
                                                 $addressParts = [];
@@ -861,25 +866,27 @@
                                                 ?>
                                                 {{ $patient->mailing_address_zip ? $patient->mailing_address_zip : '' }}
                                                 @if($patient->mailing_address_memo)
-                                                    <span
-                                                        class="position-relative c-pointer text-center stag-tooltip ml-2">
-                                                    <i class="fa fa-info-circle"></i>
-                                                    <div
-                                                        class="position-absolute bg-white border rounded p-2 stag-tooltip-content">
-                                                        <div class="text-left font-weight-bold pb-1">Special Instructions</div>
+                                                    <span class="position-relative c-pointer text-center stag-tooltip ml-2">
+                                                        <i class="fa fa-info-circle"></i>
                                                         <div
-                                                            class="text-left font-weight-normal">{{$patient->mailing_address_memo}}</div>
-                                                    </div>
-                                                </span>
+                                                            class="position-absolute bg-white border rounded p-2 stag-tooltip-content">
+                                                            <div class="text-left font-weight-bold pb-1">Special Instructions</div>
+                                                            <div
+                                                                class="text-left font-weight-normal">{{$patient->mailing_address_memo}}</div>
+                                                        </div>
+                                                    </span>
                                                 @endif
                                             </div>
                                         </li>
                                         @if($patient->cell_number)
                                             <li>
-                                                <span class="aligned-icon"><i class="fa fa-phone-alt"
-                                                                              aria-hidden="true"></i></span>
-                                                {{$patient->cell_number}}<span
-                                                    class="small text-secondary ml-1">{{ $patient->cell_number_memo ? '(' . $patient->cell_number_memo . ')' : '' }}</span>
+                                                <span class="aligned-icon">
+                                                    <i class="fa fa-phone-alt" aria-hidden="true"></i>
+                                                </span>
+                                                {{$patient->cell_number}}
+                                                <span class="small text-secondary ml-1">
+                                                    {{ $patient->cell_number_memo ? '(' . $patient->cell_number_memo . ')' : '' }}
+                                                </span>
                                             </li>
                                         @endif
                                         @if($patient->phone_home)
@@ -892,6 +899,37 @@
                                             <span class="aligned-icon"><i class="fa fa-envelope" aria-hidden="true"></i></span>
                                             {{$confirmedEmail}}
                                         </li>
+                                        @if(!$patient->accountClient)
+                                        <li>
+                                            <span class="aligned-icon">
+                                                <i class="fa fa-link" aria-hidden="true"></i>
+                                            </span>
+                                            <div moe relative class="">
+                                                <a href="#" start show class="col-2-button">
+                                                    Create/Link Account
+                                                </a>
+                                                <form url="/api/client/linkOrCreateAccountClient" class="mcp-theme-1" right>
+                                                    <input type="hidden" name="uid" value="{{$patient->uid}}">
+                                                    <div class="mb-2">
+                                                        <label class="text-secondary text-sm">Email Address</label>
+                                                        <input type="email" name="accountEmail" value="{{ $confirmedEmail }}"
+                                                               class="form-control form-control-sm">
+                                                    </div>
+                                                    <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>
+                                        </li>
+                                        @else
+                                            <li>
+                                                <span class="aligned-icon text-info">
+                                                    <i class="fa fa-check" aria-hidden="true"></i>
+                                                </span>
+                                                <span class="text-info">Account Linked</span>
+                                            </li>
+                                        @endif
                                     </ul>
                                 </div>
                             </div>

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

@@ -55,8 +55,11 @@
     <script src='/js/autocomplete-lhc.js'></script>
 
     {{-- inline bootstrap datepicker --}}
-    <link href='/bootstrap-datepicker/css/bootstrap-datepicker.standalone.min.css' rel="stylesheet">
-    <script src='/bootstrap-datepicker/js/bootstrap-datepicker.min.js'></script>
+{{--    <link href='/bootstrap-datepicker/css/bootstrap-datepicker.standalone.min.css' rel="stylesheet">
+    <script src='/bootstrap-datepicker/js/bootstrap-datepicker.min.js'></script>--}}
+
+    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
+    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
 
     {{-- pdfjs --}}
     <script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>

+ 2 - 0
routes/web.php

@@ -136,6 +136,7 @@ Route::middleware('pro.auth')->group(function () {
         });
 
         Route::get('supply-orders/cancelled-but-unacknowledged', 'PracticeManagementController@supplyOrdersCancelledButUnacknowledged')->name('supply-orders-cancelled-but-unacknowledged');
+        Route::get('supply-orders/unsigned', 'PracticeManagementController@supplyOrdersUnsigned')->name('supply-orders-unsigned');
     });
 
     Route::middleware('pro.auth.admin')->group(function(){
@@ -181,6 +182,7 @@ Route::middleware('pro.auth')->group(function () {
             Route::get('sections', 'PatientController@sections')->name('sections');
             Route::get('handouts', 'PatientController@handouts')->name('handouts');
             Route::get('settings', 'PatientController@settings')->name('settings');
+            Route::get('sms-reminders', 'PatientController@smsReminders')->name('sms-reminders');
             Route::get('pros', 'PatientController@pros')->name('pros');
             Route::get('account', 'PatientController@account')->name('account');
             Route::get('care-checklist', 'PatientController@careChecklist')->name('care-checklist');

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor