Эх сурвалжийг харах

Tickets v1 (wip) - Save on changing assigned/ordering pro

Vijayakrishnan 4 жил өмнө
parent
commit
fe6ae1233f

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

@@ -320,4 +320,14 @@ class PatientController extends Controller
         $allPros = Pro::all();
         $allPros = Pro::all();
         return view('app.patient.tickets', compact('patient', 'pros', 'allPros'));
         return view('app.patient.tickets', compact('patient', 'pros', 'allPros'));
     }
     }
+
+    public function getTicket(Request $request, Ticket $ticket) {
+        $ticket->data = json_decode($ticket->data);
+//        $ticket->created_at = friendly_date_time($ticket->created_at);
+        $ticket->assignedPro;
+        $ticket->managerPro;
+        $ticket->orderingPro;
+        $ticket->initiatingPro;
+        return json_encode($ticket);
+    }
 }
 }

+ 4 - 2
public/js/pro-suggest.js

@@ -125,8 +125,11 @@
 
 
         });
         });
 
 
+        $(document).off('click', '.suggest-item.pro-suggest[data-target-uid]');
         $(document).on('click', '.suggest-item.pro-suggest[data-target-uid]', function () {
         $(document).on('click', '.suggest-item.pro-suggest[data-target-uid]', function () {
 
 
+            $('.suggestions-outer.pro-suggestions').addClass('d-none');
+
             let uid = $(this).attr('data-target-uid'),
             let uid = $(this).attr('data-target-uid'),
                 label = $.trim($(this).text());
                 label = $.trim($(this).text());
 
 
@@ -136,6 +139,7 @@
                 .prev('select[provider-search]');
                 .prev('select[provider-search]');
             select.empty().append($('<option value="' + uid + '" selected/>').text(label));
             select.empty().append($('<option value="' + uid + '" selected/>').text(label));
             select.val(uid).trigger('change');
             select.val(uid).trigger('change');
+            select.trigger('pro-changed');
 
 
             // set input value
             // set input value
             $(this).closest('.position-relative')
             $(this).closest('.position-relative')
@@ -143,8 +147,6 @@
                 .val(label)
                 .val(label)
                 .trigger('change');
                 .trigger('change');
 
 
-            $('.suggestions-outer.pro-suggestions').addClass('d-none');
-
             return false;
             return false;
         });
         });
 
 

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

@@ -157,7 +157,7 @@
 
 
                         <div class="row mb-2">
                         <div class="row mb-2">
                             <div class="col-3 d-inline-flex align-items-center">
                             <div class="col-3 d-inline-flex align-items-center">
-                                <label class="text-secondary m-0">Assignee Pro</label>
+                                <label class="text-secondary m-0">Assigned Pro</label>
                             </div>
                             </div>
                             <div class="col-9">
                             <div class="col-9">
                                 <div class="d-flex align-items-center">
                                 <div class="d-flex align-items-center">
@@ -168,6 +168,8 @@
                                     </div>
                                     </div>
                                     <div class="flex-grow-1 ml-2">
                                     <div class="flex-grow-1 ml-2">
                                         <select provider-search
                                         <select provider-search
+                                                data-field="assigned_pro_uid"
+                                                v-model="erxPopupItem.assigned_pro_uid"
                                                 :data-pro-name="[erxPopupItem.assigned_pro.name_last, erxPopupItem.assigned_pro.name_first].filter(Boolean).join(', ')"
                                                 :data-pro-name="[erxPopupItem.assigned_pro.name_last, erxPopupItem.assigned_pro.name_first].filter(Boolean).join(', ')"
                                                 class="form-control form-control-sm">
                                                 class="form-control form-control-sm">
                                             <option value=""> --select--</option>
                                             <option value=""> --select--</option>
@@ -190,6 +192,8 @@
                                     </div>
                                     </div>
                                     <div class="flex-grow-1 ml-2">
                                     <div class="flex-grow-1 ml-2">
                                         <select provider-search
                                         <select provider-search
+                                                data-field="ordering_pro_uid"
+                                                v-model="erxPopupItem.ordering_pro_uid"
                                                 :data-pro-name="[erxPopupItem.ordering_pro.name_last, erxPopupItem.ordering_pro.name_first].filter(Boolean).join(', ')"
                                                 :data-pro-name="[erxPopupItem.ordering_pro.name_last, erxPopupItem.ordering_pro.name_first].filter(Boolean).join(', ')"
                                                 class="form-control form-control-sm">
                                                 class="form-control form-control-sm">
                                             <option value=""> --select--</option>
                                             <option value=""> --select--</option>
@@ -395,7 +399,10 @@
                         erxPopupItem: {
                         erxPopupItem: {
                             uid: '',
                             uid: '',
                             is_open: true,
                             is_open: true,
+                            assigned_pro_uid: '',
+                            ordering_pro_uid: '',
                             data: {
                             data: {
+                                due_date: '',
                                 medication: '',
                                 medication: '',
                                 strength: '',
                                 strength: '',
                                 amount: '',
                                 amount: '',
@@ -410,6 +417,7 @@
                                 pharmacyAddressMemo: '',
                                 pharmacyAddressMemo: '',
                                 pharmacyPhone: '',
                                 pharmacyPhone: '',
                                 pharmacyFax: '',
                                 pharmacyFax: '',
+                                comments: [],
                             }
                             }
                         },
                         },
 
 
@@ -459,7 +467,10 @@
                             this.erxPopupItem = _item ? JSON.parse(JSON.stringify(_item)) : {
                             this.erxPopupItem = _item ? JSON.parse(JSON.stringify(_item)) : {
                                 uid: '',
                                 uid: '',
                                 is_open: true,
                                 is_open: true,
+                                assigned_pro_uid: '',
+                                ordering_pro_uid: '',
                                 data: {
                                 data: {
+                                    due_date: '',
                                     medication: '',
                                     medication: '',
                                     strength: '',
                                     strength: '',
                                     amount: '',
                                     amount: '',
@@ -474,8 +485,12 @@
                                     pharmacyAddressMemo: '',
                                     pharmacyAddressMemo: '',
                                     pharmacyPhone: '',
                                     pharmacyPhone: '',
                                     pharmacyFax: '',
                                     pharmacyFax: '',
+                                    comments: [],
                                 }
                                 }
                             };
                             };
+                            this.erxPopupItem.assigned_pro_uid = '';
+                            this.erxPopupItem.ordering_pro_uid = '';
+                            this.erxPopupItem.data.due_date = '';
                             showStagPopup('erx-popup', true);
                             showStagPopup('erx-popup', true);
                             Vue.nextTick(function() {
                             Vue.nextTick(function() {
                                 $('#ticketsApp [pro-suggest-initialized]').removeAttr('pro-suggest-initialized');
                                 $('#ticketsApp [pro-suggest-initialized]').removeAttr('pro-suggest-initialized');
@@ -524,6 +539,11 @@
                         // equipment
                         // equipment
 
 
                         // common
                         // common
+                        reloadPopupItem: function(_type) {
+                            $.get('/get-ticket/' + this[_type + 'PopupItem'].uid, (_data) => {
+                                this[_type + 'PopupItem'] = _data;
+                            }, 'json');
+                        },
                         closeItem: function(_item) {
                         closeItem: function(_item) {
                             showMask();
                             showMask();
                             $.post('/api/ticket/close', {
                             $.post('/api/ticket/close', {
@@ -592,6 +612,38 @@
                                 $(elem).attr('ac-initialized', 1);
                                 $(elem).attr('ac-initialized', 1);
                             });
                             });
                         },
                         },
+                        initProChangeEvents: function() {
+                            let self = this;
+                            $(document).off('pro-changed', '#ticketsApp select[provider-search]')
+                            $(document).on('pro-changed', '#ticketsApp select[provider-search]', function() {
+                                console.log('ALIX pro-changed', $(this).attr('data-field'), $(this).val());
+                                if(!!$(this).val()) {
+                                    self.erxPopupItem[$(this).attr('data-field')] = $(this).val();
+
+                                    // save
+                                    let proType = '';
+                                    switch($(this).attr('data-field')) {
+                                        case 'assigned_pro_uid':
+                                            proType = 'Assigned';
+                                            break;
+                                        case 'ordering_pro_uid':
+                                            proType = 'Ordering';
+                                            break;
+                                    }
+                                    if (proType) {
+                                        $.post('/api/ticket/update' + proType + 'Pro', {
+                                            uid: self.erxPopupItem.uid,
+                                            newProUid: $(this).val()
+                                        }, function(_data) {
+                                            if (!self.hasError(_data)) {
+                                                // toastr.success(proType + ' pro updated');
+                                                self.reloadPopupItem('erx');
+                                            }
+                                        });
+                                    }
+                                }
+                            });
+                        },
                         inWords: function (num) {
                         inWords: function (num) {
                             try {
                             try {
                                 num = +num;
                                 num = +num;
@@ -629,6 +681,7 @@
                         this.initICDAutoSuggest();
                         this.initICDAutoSuggest();
                         initFastLoad($('#ticketsApp'));
                         initFastLoad($('#ticketsApp'));
                         this.initPharmacySearch();
                         this.initPharmacySearch();
+                        this.initProChangeEvents();
                     }
                     }
                 })
                 })
             }
             }

+ 10 - 0
resources/views/app/patient/tickets/ticket_vue_methods.blade.php

@@ -123,4 +123,14 @@ undoSignAsInitiatingPro: function(_item){
     }, function(_data){
     }, function(_data){
         fastReload();
         fastReload();
     })
     })
+},
+
+hasError: function(_data) {     // check and report error if exists via toastr
+    let msg = 'Unknown error!';
+    if(_data) {
+        if(_data.success) return false;
+        else if(_data.message) msg = _data.message;
+    }
+    toastr.error(msg);
+    return true;
 }
 }

+ 3 - 0
routes/web.php

@@ -181,6 +181,9 @@ Route::middleware('pro.auth')->group(function () {
     // AJAX presence poll
     // AJAX presence poll
     Route::get('/patients/{patient}/presence', 'PatientController@presence');
     Route::get('/patients/{patient}/presence', 'PatientController@presence');
 
 
+    // refresh single ticket
+    Route::get('/get-ticket/{ticket}', 'PatientController@getTicket');
+
     // 2-pane outer page housing lhs (practice management) and rhs (video call)
     // 2-pane outer page housing lhs (practice management) and rhs (video call)
     Route::get('/mc/{fragment?}', 'HomeController@mc')
     Route::get('/mc/{fragment?}', 'HomeController@mc')
         ->where('fragment', '.*')
         ->where('fragment', '.*')