Quellcode durchsuchen

Support custom-items in pmhx

Vijayakrishnan Krishnan vor 4 Jahren
Ursprung
Commit
130ecbcf36

+ 7 - 0
app/Models/SectionTemplate.php

@@ -7,4 +7,11 @@ namespace App\Models;
 class SectionTemplate extends Model
 {
     protected $table = 'section_template';
+
+    public function customItems()
+    {
+        return $this->hasMany(SectionTemplateCustomItem::class, 'section_template_id', 'id')
+            ->where('is_removed', false)
+            ->orderBy('label', 'asc');
+    }
 }

+ 8 - 0
app/Models/SectionTemplateCustomItem.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace App\Models;
+
+class SectionTemplateCustomItem extends Model
+{
+    protected $table = 'section_template_custom_item';
+}

+ 51 - 47
public/js/yemi.js

@@ -363,59 +363,63 @@ var initMoes = function() {
                 }
             }
 
-            // trigger validation
-            if(!$(form)[0].checkValidity()) {
-                $(form)[0].reportValidity();
-                return;
-            }
+            if($(form).is('form')) {
 
-            moe.isProcessing = true;
-            var data = {};
-            var formData = $(form).serializeArray();
-            formData.forEach(function (field) {
-                if (data[field.name]) {
-                    if (data[field.name] instanceof Array) {
-                        data[field.name].push(field.value);
-                    } else {
-                        var arr = [];
-                        arr.push(data[field.name]);
-                        arr.push(field.value);
-                        data[field.name] = arr;
-                    }
-                } else {
-                    data[field.name] = field.value;
+                // trigger validation
+                if (!$(form)[0].checkValidity()) {
+                    $(form)[0].reportValidity();
+                    return;
                 }
-            });
-            console.log(data);
-            //var doAjax = function (url, data, pre, post, onSuccess, onFailure, suppressErrorMessage, onHttpFailure, shouldHideMask, immediatelyHideMaskOnReply)
-            doAjax(url, data, null, function () {
-                moe.isProcessing = false;
-            }, function (data) {
-                if (justLog) { // this is to test!
-                    console.log('RETURNED', data);
-                } else if (redir) {
-                    if (redir == "back") {
-                        window.top.history.back();
+
+                // submit
+                moe.isProcessing = true;
+                var data = {};
+                var formData = $(form).serializeArray();
+                formData.forEach(function (field) {
+                    if (data[field.name]) {
+                        if (data[field.name] instanceof Array) {
+                            data[field.name].push(field.value);
+                        } else {
+                            var arr = [];
+                            arr.push(data[field.name]);
+                            arr.push(field.value);
+                            data[field.name] = arr;
+                        }
                     } else {
-                        if (redir.indexOf('[data]') > -1) {
-                            redir = redir.replace('[data]', data);
+                        data[field.name] = field.value;
+                    }
+                });
+                console.log(data);
+                //var doAjax = function (url, data, pre, post, onSuccess, onFailure, suppressErrorMessage, onHttpFailure, shouldHideMask, immediatelyHideMaskOnReply)
+                doAjax(url, data, null, function () {
+                    moe.isProcessing = false;
+                }, function (data) {
+                    if (justLog) { // this is to test!
+                        console.log('RETURNED', data);
+                    } else if (redir) {
+                        if (redir == "back") {
+                            window.top.history.back();
+                        } else {
+                            if (redir.indexOf('[data]') > -1) {
+                                redir = redir.replace('[data]', data);
+                            }
+                            fastLoad(redir, true, false);
                         }
-                        fastLoad(redir, true, false);
+                    } else if (moeParent.length) {
+                        showMask();
+                        $.get(moeParent.attr('url'), function (_data) {
+                            moeParent.html(_data);
+                            hideMask();
+                            hideMoeFormMask();
+                            initMoes();
+                        });
+                    } else {
+                        pageReload();
                     }
-                } else if (moeParent.length) {
-                    showMask();
-                    $.get(moeParent.attr('url'), function(_data) {
-                        moeParent.html(_data);
-                        hideMask();
-                        hideMoeFormMask();
-                        initMoes();
-                    });
-                } else {
-                    pageReload();
-                }
-            }, function (errorMessage) {
+                }, function (errorMessage) {
 
-            }, false);
+                }, false);
+            }
         });
 
         moe.attr('initialized', 1); // mark as initialized

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

@@ -239,6 +239,7 @@
                         @foreach($note->sections as $section)
                         <div class="p-3 border-bottom note-section {{ $section->is_initialized ? '' : 'pending-initialization' }}"
                              data-section-uid="{{ $section->uid }}"
+                             data-section-template-uid="{{ $section->sectionTemplate->uid }}"
                              data-section-template-name="{{ $section->sectionTemplate->internal_name }}">
                             <div class="d-flex align-items-start">
                                 <a class="font-weight-bold mb-2 d-flex align-items-center c-pointer">

+ 118 - 56
storage/sections/pmhx/form.blade.php

@@ -26,20 +26,39 @@ $fields = [
     ]
 ];
 
-$customFields = [
-    [
-        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
-    ],
-    [
-        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
-    ],
-    [
-        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
-    ],
-    [
-        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
-    ]
-];
+$customFields = [];
+
+if($section) {
+    $customItems = $section->sectionTemplate->customItems;
+    $perColumn = floor(count($customItems) / 4);
+    if($perColumn < 5) $perColumn = 5;
+    $inColumn = 0;
+    foreach ($customItems as $customItem) {
+        if(!isset($customFields[$inColumn])) $customFields[$inColumn] = [];
+        $customFields[$inColumn][] = $customItem->label;
+        if(count($customFields[$inColumn]) >= $perColumn) {
+            $inColumn++;
+        }
+    }
+    for ($i=0; $i<count($customFields); $i++) {
+        $customFields[$i] = [':::' . implode("|", $customFields[$i])];
+    }
+}
+
+//$customFields = [
+//    [
+//        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
+//    ],
+//    [
+//        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
+//    ],
+//    [
+//        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
+//    ],
+//    [
+//        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
+//    ]
+//];
 
 $contentData = false;
 if($section){
@@ -158,56 +177,81 @@ $formID = rand(0, 100000);
         @endfor
     </div>
 
-    <div class="font-weight-bold mb-2">Custom Items</div>
+    <div class="row border-top pt-3">
+        <div class="col-12">
+            <div class="d-flex align-items-center mb-2">
+                <span class="font-weight-bold">Custom Items</span>
+                <span class="mx-2 text-secondary">|</span>
+                <div moe>
+                    <a href="#" start show>Add</a>
+                    <div url="/api/sectionTemplateCustomItem/create">
+                        <div class="mb-2">
+                            <input type="text" placeholder="Label" class="form-control form-control-sm label_new_custom_item">
+                        </div>
+                        <div>
+                            <button type="button" class="btn btn-sm btn-primary mr-1"
+                                    onclick="return saveCustomItem_{{ $formID }}($(this).closest('[moe]'))">Submit</button>
+                            <button type="button" class="btn btn-sm btn-default border"
+                                    onclick="return cancelCustomItem_{{ $formID }}()">Cancel</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
 
-    <div class="row">
-        @for ($i = 0; $i < count($customFields); $i++)
-            <div class="col-md-3">
-                @for($j = 0; $j < count($customFields[$i]); $j++)
-                    <?php
-                    $parts = explode(":::", $customFields[$i][$j]);
-                    $head = 'custom';
-                    if(!empty($parts[0])) $head = $parts[0];
-                    $values = explode("|", $parts[1]);
-                    ?>
-                    <div class="mb-3">
-                        @if($head !== 'custom')
-                            <div class="font-weight-bold mb-2">{{ $head }}</div>
-                        @endif
-                        @for($k = 0; $k < count($values); $k++)
-                            <?php
-                            $fName = $head . '_' . sanitize_field_name($values[$k]);
-                            ?>
-                            <label class="d-flex align-items-center mb-1">
-                                <input type="checkbox" name="{{ $fName }}" class="m-0"
-                                       onchange="onItemSelected_{{ $formID }}(this)"
-                                       {{ $contentData[$fName] ? 'checked' : '' }}>
-                                <span class="mx-2">{{ $values[$k] }}</span>
-                                <div moe>
-                                    <a href="#" start show>
-                                        <i class="<?= trim(@$contentData[$fName . '__comments']) === '' ? 'far' : 'fas' ?> <?= $contentData[$fName] ? '' : 'd-none' ?> fa-comment"></i>
-                                    </a>
-                                    <div url="/nop">
-                                        <div class="mb-2">
+            @if($customFields && count($customFields))
+
+                <div class="row">
+                    @for ($i = 0; $i < count($customFields); $i++)
+                        <div class="col-md-3">
+                            @for($j = 0; $j < count($customFields[$i]); $j++)
+                                <?php
+                                $parts = explode(":::", $customFields[$i][$j]);
+                                $head = 'custom';
+                                if(!empty($parts[0])) $head = $parts[0];
+                                $values = explode("|", $parts[1]);
+                                ?>
+                                <div class="mb-3">
+                                    @if($head !== 'custom')
+                                        <div class="font-weight-bold mb-2">{{ $head }}</div>
+                                    @endif
+                                    @for($k = 0; $k < count($values); $k++)
+                                        <?php
+                                        $fName = $head . '_' . sanitize_field_name($values[$k]);
+                                        ?>
+                                        <label class="d-flex align-items-center mb-1">
+                                            <input type="checkbox" name="{{ $fName }}" class="m-0"
+                                                   onchange="onItemSelected_{{ $formID }}(this)"
+                                                {{ $contentData[$fName] ? 'checked' : '' }}>
+                                            <span class="mx-2">{{ $values[$k] }}</span>
+                                            <div moe>
+                                                <a href="#" start show>
+                                                    <i class="<?= trim(@$contentData[$fName . '__comments']) === '' ? 'far' : 'fas' ?> <?= $contentData[$fName] ? '' : 'd-none' ?> fa-comment"></i>
+                                                </a>
+                                                <div url="/nop">
+                                                    <div class="mb-2">
                                             <textarea name="{{ $fName }}__comments"
                                                       onchange="onCommentChange_{{ $formID }}(this)"
                                                       onkeyup="onCommentChange_{{ $formID }}(this)"
                                                       onpaste="onCommentChange_{{ $formID }}(this)"
                                                       class="form-control form-control-sm ns-custom-comment"
                                             >{{ @$contentData[$fName . '__comments'] }}</textarea>
-                                        </div>
-                                        <div class="">
-                                            <button type="button" class="btn btn-sm btn-primary" cancel>Close
-                                            </button>
-                                        </div>
-                                    </div>
+                                                    </div>
+                                                    <div class="">
+                                                        <button type="button" class="btn btn-sm btn-primary" cancel>Close
+                                                        </button>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </label>
+                                    @endfor
                                 </div>
-                            </label>
-                        @endfor
-                    </div>
-                @endfor
-            </div>
-        @endfor
+                            @endfor
+                        </div>
+                    @endfor
+                </div>
+
+            @endif
+        </div>
     </div>
 
     <div class="row mb-3">
@@ -254,4 +298,22 @@ $formID = rand(0, 100000);
             $(_trigger).siblings('[moe]').find('i').first().addClass('d-none');
         }
     }
+    function saveCustomItem_{{ $formID }}(_moe) {
+        console.log('saveCustomItem_{{ $formID }}');
+        let label = $.trim(_moe.find('.label_new_custom_item').first().val());
+        if(!label) return false;
+        showMask();
+        $.post('/api/sectionTemplateCustomItem/create', {
+            sectionTemplateUid: '{{ $section->sectionTemplate->uid }}',
+            label: label
+        }, function(_data) {
+            fastReload();
+        });
+        return false;
+    }
+    function cancelCustomItem_{{ $formID }}(_moe) {
+        hideMoeFormMask();
+        $('div[moe]').hide();
+        return false;
+    }
 </script>

+ 33 - 14
storage/sections/pmhx/processor.php

@@ -26,20 +26,39 @@ $fields = [
     ]
 ];
 
-$customFields = [
-    [
-        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
-    ],
-    [
-        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
-    ],
-    [
-        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
-    ],
-    [
-        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
-    ]
-];
+$customFields = [];
+
+if($section) {
+    $customItems = $section->sectionTemplate->customItems;
+    $perColumn = floor(count($customItems) / 4);
+    if($perColumn < 5) $perColumn = 5;
+    $inColumn = 0;
+    foreach ($customItems as $customItem) {
+        if(!isset($customFields[$inColumn])) $customFields[$inColumn] = [];
+        $customFields[$inColumn][] = $customItem->label;
+        if(count($customFields[$inColumn]) >= $perColumn) {
+            $inColumn++;
+        }
+    }
+    for ($i=0; $i<count($customFields); $i++) {
+        $customFields[$i] = [':::' . implode("|", $customFields[$i])];
+    }
+}
+
+//$customFields = [
+//    [
+//        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
+//    ],
+//    [
+//        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
+//    ],
+//    [
+//        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
+//    ],
+//    [
+//        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
+//    ]
+//];
 
 $newContentData = [];
 

+ 33 - 14
storage/sections/pmhx/summary.php

@@ -26,20 +26,39 @@ $fields = [
     ]
 ];
 
-$customFields = [
-    [
-        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
-    ],
-    [
-        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
-    ],
-    [
-        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
-    ],
-    [
-        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
-    ]
-];
+$customFields = [];
+
+if($section) {
+    $customItems = $section->sectionTemplate->customItems;
+    $perColumn = floor(count($customItems) / 4);
+    if($perColumn < 5) $perColumn = 5;
+    $inColumn = 0;
+    foreach ($customItems as $customItem) {
+        if(!isset($customFields[$inColumn])) $customFields[$inColumn] = [];
+        $customFields[$inColumn][] = $customItem->label;
+        if(count($customFields[$inColumn]) >= $perColumn) {
+            $inColumn++;
+        }
+    }
+    for ($i=0; $i<count($customFields); $i++) {
+        $customFields[$i] = [':::' . implode("|", $customFields[$i])];
+    }
+}
+
+//$customFields = [
+//    [
+//        ":::Anxiety disorder|BPH|carpal tunnel|CHF|Degernative Disc Disorder|Fibromyalgia",
+//    ],
+//    [
+//        ":::Hard of Hearing|Hearing Impairment|Lupus|Multiple Falls|Multiple kidney stones|Multiple Rib Fractures",
+//    ],
+//    [
+//        ":::Neuropathy|Obesity|Obstructive Sleep Apnea|Primary immunodeficiency diso|pulmonary hypertension|Restless Leg Syndrome",
+//    ],
+//    [
+//        ":::Rhinitis|Russell Silver Syndrome|transverse myelitis|Vertigo",
+//    ]
+//];
 
 $blood = [];
 if(isset($newContentData['blood_type'])) {