Samson Mutunga 1 vuosi sitten
vanhempi
commit
d5b1f3da92

+ 32 - 8
app/Http/Controllers/GuestController.php

@@ -117,8 +117,8 @@ class GuestController extends Controller
         }
 
         if(!$entity) abort(404);
-        $layout = 'app.admin.surveys.partials.form-layout';
-        return view('app.admin.surveys.forms.'.$survey->internal_name, compact('entity', 'survey', 'layout'));
+        $layout = 'app.patient.surveys.partials.form-layout';
+        return view('app.patient.surveys.forms.'.$survey->internal_name, compact('entity', 'survey', 'layout'));
     }
 
     public function viewSurveyFormSubmit(Request $request, $accessKey){
@@ -128,11 +128,14 @@ class GuestController extends Controller
         $data = $request->all();
         unset($data['_token']);
 
-        $url = '/survey/submitData';
-        $response = $this->calljava($request, $url, [
+        $formData = [
             'uid' => $survey->uid,
-            'surveyDataJson' => json_encode($data)
-        ]);
+            'surveyDataJson' => json_encode($data),
+            'surveyHTML' => (string) $this->viewSurveyFormPreview($request, $survey->uid),
+        ];
+        $url = '/survey/submitData';
+        $response = $this->calljava($request, $url, $formData);
+        
 
         if($response['success']){
             return redirect()->back()->with('success', 'Information saved!');
@@ -155,8 +158,29 @@ class GuestController extends Controller
 
         if(!$entity) return null;
         $preview = true;
-        $layout = 'app.admin.surveys.partials.preview-layout';
-        $html = (string) view('app.admin.surveys.forms.'.$survey->internal_name, compact('entity', 'survey', 'preview', 'layout'));
+        $layout = 'app.patient.surveys.partials.preview-layout';
+        $html = (string) view('app.patient.surveys.forms.'.$survey->internal_name, compact('entity', 'survey', 'preview', 'layout'));
+        return $html;
+        
+    }
+
+    public function surveyTemplatePreview(Request $request, $internalName){
+        
+        $surveyFormPath = resource_path(Survey::FORM_PATH . '/' . $internalName . '.blade.php');
+        if(!file_exists($surveyFormPath)) return null;
+
+        $entityType = $request->get('entityType');
+        $entityUid = $request->get('entityUid');
+        $entity = null;
+        if($entityType === 'Client'){
+            $entity = Client::where('uid', $entityUid)->first();
+        }
+
+        if(!$entity) return null;
+
+        $preview = true;
+        $layout = 'app.patient.surveys.partials.preview-layout';
+        $html = (string) view('app.patient.surveys.forms.'.$internalName, compact('entity', 'preview', 'layout'));
         return $html;
         
     }

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

@@ -807,7 +807,7 @@ class PatientController extends Controller
             $forms[] = $internalName;
         }
 
-        $records = Survey::where('entity_uid', $patient->id);
+        $records = Survey::where('entity_uid', $patient->uid);
         $searchString = $request->get('string');
         if($searchString){
             $searchString = strtolower($searchString);

+ 9 - 7
resources/views/app/patient/surveys/forms/sleep.blade.php

@@ -1,34 +1,36 @@
 @extends ($layout)
 @section('survey-header')
-<span>Hi {{ $entity->displayName() }}</span>
+<span>Hi {{ @$entity->displayName() }}</span>
 @endsection
 @section('survey-content')
 <fieldset @if(isset($preview)) disabled @endif>
-  <form action="{{ route('view-survey-form-submit', $survey->access_key) }}" method="POST">
-    @csrf
+  <form action="{{ @$survey->access_key ? route('view-survey-form-submit', @$survey->access_key) : '' }}" method="POST">
+    @if(!isset($preview))
+      @csrf
+    @endif
     <div class="row">
       <div class="col-md-4">
         <div class="form-group">
           <label>First Name</label>
-          <input type="text" class="form-control" name="nameFirst" value="{{ $survey->getFieldValue('nameFirst') }}" />
+          <input type="text" class="form-control" name="nameFirst" value="{{ @$survey ? $survey->getFieldValue('nameFirst') : '' }}" />
         </div>
       </div>
       <div class="col-md-4">
         <div class="form-group">
           <label>Middle Name</label>
-          <input type="text" class="form-control" name="nameMiddle" value="{{ $survey->getFieldValue('nameMiddle') }}" />
+          <input type="text" class="form-control" name="nameMiddle" value="{{ @$survey ? $survey->getFieldValue('nameMiddle') : '' }}" />
         </div>
       </div>
       <div class="col-md-4">
         <div class="form-group">
           <label>Last Name</label>
-          <input type="text" class="form-control" name="nameLast" value="{{ $survey->getFieldValue('nameLast') }}" />
+          <input type="text" class="form-control" name="nameLast" value="{{ @$survey ? $survey->getFieldValue('nameLast') : '' }}" />
         </div>
       </div>
       <div class="col-md-12">
         <div class="form-group">
           <label>Explain your sleep issue</label>
-          <textarea class="form-control" name="description">{{ $survey->getFieldValue('description') }}</textarea>
+          <textarea class="form-control" name="description">{{ @$survey ? $survey->getFieldValue('description') : '' }}</textarea>
         </div>
       </div>
       @if(!isset($preview))

+ 58 - 75
resources/views/app/patient/surveys/partials/create.blade.php

@@ -1,93 +1,76 @@
 <div moe wide relative center>
     <a href="" start show>+ Create Survey</a>
-
     <form url="/api/survey/create" class="mcp-theme-1" right>
-      <input type="hidden" name="entityType" value="Client">
-      <input type="hidden" name="entityUid" value="{{$patient->uid}}">
+        <input type="hidden" name="entityType" value="Client">
+        <input type="hidden" name="entityUid" value="{{ $patient->uid }}">
         <div id="createSurveyForm" v-cloak>
-          <div class="form-group">
-            <label>Survey Template</label>
-            <select name="internalName" class="form-control">
-              <option value=""></option>
-              @foreach ($forms as $form)
-              <option value="{{ $form }}">{{ formatAsTitle($form) }}</option>
-              @endforeach
-            </select>
-          </div>
             <div class="form-group">
-                <label>Title</label>
+                <label class="font-weight-bold">Title</label>
                 <input type="text" name="title" class="form-control" />
             </div>
+            <div class="form-group">
+                <label class="font-weight-bold">Survey Template</label>
+                <select name="internalName" class="form-control" v-model="form.internalName" @change="onTemplateChange">
+                    <option value=""></option>
+                    @foreach ($forms as $form)
+                        <option value="{{ $form }}">{{ formatAsTitle($form) }}</option>
+                    @endforeach
+                </select>
+            </div>
+             <div v-if="previewHtml" class="form-group">
+                <label class="font-weight-bold">Template Preview</label>
+                <div class="border p-2 d-flex justify-content-center" v-html="previewHtml"></div>
+            </div>
+
         </div>
         <div class="form-group text-nowrap mb-0">
             <button class="btn btn-sm btn-primary" submit>Submit</button>
             <button class="btn btn-sm btn-default border" close>Close</button>
         </div>
     </form>
-  </div>
-    <script>
-        (function() {
-            function init() {
-                new Vue({
-                    el: '#createSurveyForm',
-                    delimiters: ['@{{ ', ' }}'],
-                    data: {
-                        form: {
-                            entityType: null
-                        },
-                        entityRecords: []
+</div>
+<script>
+    (function() {
+        function init() {
+            new Vue({
+                el: '#createSurveyForm',
+                delimiters: ['@{{ ', ' }}'],
+                data: {
+                    form: {
+                        internalName: null
                     },
-                    methods: {
-                        onEntityTypeChange: function() {
-                            var self = this;
-                            if (!self.form.entityType.length) return;
-                            self.$nextTick(function(){
-                                self.initAutoSuggest();
-                            });
-                        },
-                        initAutoSuggest: function() {
-                            var self = this;
-                            var select2 = $("select[name=entityUid]").select2({
-                                placeholder: "Search " + self.form.entityType,
-                                minimumInputLength: 2,
-                                ajax: {
-                                    url: '{{ route("patients.view.get-entity-records", $patient) }}',
-                                    dataType: 'json',
-                                    type: "GET",
-                                    quietMillis: 50,
-                                    data: function(params) {
-                                        return {
-                                            term: params.term,
-                                            json: true,
-                                            type: self.form.entityType,
-                                        };
-                                    },
-                                    processResults: function(data) {
-                                        data = data.results || [];
-                                        return {
-                                            results: $.map(data, function(item) {
-                                                return {
-                                                    text: item.text,
-                                                    id: item.uid
-                                                }
-                                            })
-                                        };
-                                    }
-                                }
-                            });
-
-                        },
-                        init: function() {
-
-                        },
+                    entityRecords: [],
+                    previewHtml: null
+                },
+                methods: {
+                    onTemplateChange: function() {
+                        var self = this;
+                        if (!self.form.internalName.length) return;
+                        self.$nextTick(function() {
+                            self.loadSelectedTemplate();
+                        });
                     },
-                    mounted: function() {
-                        this.init();
+                    loadSelectedTemplate: function() {
+                        var self = this;
+                        var data = {
+                            entityType: "Client",
+                            entityUid: "{{ $patient->uid }}",
+                        };
+                       $.get("/survey/template/preview/"+self.form.internalName, data, function(response){
+                            self.previewHtml = response;
+                        });
+                    },
+                    init: function() {
+
                     },
-                });
+                },
+                mounted: function() {
+                    this.init();
+                },
+            });
 
 
-            }
-            addMCInitializer('createSurveyForm', init, '#createSurveyForm');
-        })();
-    </script>
+        }
+        addMCInitializer('createSurveyForm', init, '#createSurveyForm');
+    })();
+</script>

+ 1 - 0
routes/web.php

@@ -31,6 +31,7 @@ use App\Http\Controllers\RdController;
 Route::get('survey/{accessKey}', 'GuestController@viewSurveyForm')->name('view-survey-form');
 Route::post('survey/{accessKey}/submit', 'GuestController@viewSurveyFormSubmit')->name('view-survey-form-submit');
 Route::get('survey/{uid}/preview', 'GuestController@viewSurveyFormPreview')->name('view-survey-form-preview');
+Route::get('survey/template/preview/{internalName}', 'GuestController@surveyTemplatePreview')->name('survey-template-preview');
 Route::get('login', 'LoginController@showLoginForm')->name('login');
 Route::post('login', 'LoginController@login');
 Route::get('logout', 'LoginController@logout');