Vijayakrishnan 3 жил өмнө
parent
commit
1694e85f47

+ 263 - 1
resources/views/app/patient/segment-templates/history_surgical/edit.blade.php

@@ -1 +1,263 @@
-<h1>Edit for history_surgical</h1>
+<?php
+
+use App\Models\Client;
+use App\Models\Point;
+use App\Models\Note;
+/** @var Client $patient */
+/** @var Note $note */
+
+$fields = [
+    [
+        "" => ["Aneurysm repair", "Appendectomy", "Back surgery", "Bariatric surgery/gastric bypass", "Bilateral tubal ligation", "Breast resection/mastectomy", "CABG", "Carotid endarterectomy/stent", "Carpal tunnel release surgery",]
+    ],
+    [
+        "" => ["Cataract/lens surgery", "Cesarean section", "Cholecystectomy/bile duct surgery", "Dilation and curettage", "Hemorrhoid surgery", "Hip arthroplasty", "Hip replacement", "Hysterectomy", "Inguinal hernia repair",]
+    ],
+    [
+        "" => ["Knee arthroplasty", "LASIK", "Laminectomy", "Nasal surgery", "PTCA/PCI", "Pacemaker/defibrillator", "Prostate surgery", "Prostatectomy", "Rotator cuff surgery",]
+    ],
+    [
+        "" => ["Sinus surgery", "Skin cancer excision", "Spinal fusion", "TAH-BSO", "TURP", "Tonsillectomy/Adenoidectomy", "Vasectomy",]
+    ]
+];
+
+$customFields = $pro->canvasCustomItems('pshx');
+$customFields = array_map(function($_item) {
+    return $_item['label'];
+}, $customFields->toArray());
+
+if(!$customFields) $customFields = [];
+
+// try loading afresh - since base section might have gotten dynamically updated
+$point = Point::getGlobalSingletonOfCategory($patient, 'SURGICAL_HISTORY', true);
+
+$contentData = $parsed = @$point && @$point->data ? $point->data : false;
+
+if(!$contentData) {
+    $contentData = [
+        "common" => [],
+        "custom" => [],
+        "comments" => "",
+    ];
+}
+
+for ($i = 0; $i < count($fields); $i++) {
+    foreach($fields[$i] as $head => $values) {
+        for($k = 0; $k < count($values); $k++) {
+            $fName = $head . '_' . sanitize_field_name($values[$k]);
+            if(!isset($contentData["common"][$fName])) $contentData["common"][$fName] = null;
+        }
+    }
+}
+
+?>
+
+<div class="p-3 border-top mt-3 mcp-theme-1">
+    <div visit-moe close-on-save close-on-cancel class="d-block">
+        <form show url="/api/visitPoint/upsertGlobalSingleton" class="mcp-theme-1">
+            <input type="hidden" name="segmentUid" value="<?= $segment->uid ?>">
+            <input type="hidden" name="category" value="SURGICAL_HISTORY">
+            <input type="hidden" name="data">
+
+            <div id="edit-univ_history_surgical-container">
+                <div class="d-flex align-items-center mb-2">
+                    <span class="font-weight-bold">Common Surgeries</span>
+                </div>
+                <div class="d-flex align-items-start flex-wrap custom-items-container">
+                    @for ($i = 0; $i < count($fields); $i++)
+                        <div class="w-25">
+                            @foreach($fields[$i] as $head => $values)
+                                <div class="font-weight-bold mb-2">{{ $head }}</div>
+                                <div class="mb-3">
+                                    @for($k = 0; $k < count($values); $k++)
+                                        <?php $fName = $head . '_' . sanitize_field_name($values[$k]); ?>
+                                        <label class="d-flex align-items-start mb-1">
+                                            <input type="checkbox" name="{{ $fName }}" class="m-0"
+                                                   v-model="common['{{$fName}}']">
+                                            <div class="ml-2">
+                                                <div>
+                                                    <span class="mr-2">{{ $values[$k] }}</span>
+                                                    <div moe no-mask>
+                                                        <a href="#" start show>
+                                                            <i v-show="common['{{$fName}}']" class="fa-comment" :class="common['{{$fName}}__comments'] ? 'fas' : 'far'"></i>
+                                                        </a>
+                                                        <div url="/nop">
+                                                            <div class="mb-2">
+                                                    <textarea class="form-control form-control-sm ns-custom-comment min-width-200px"
+                                                              v-model="common['{{$fName}}__comments']"></textarea>
+                                                            </div>
+                                                            <div class="">
+                                                                <button type="button" class="btn btn-sm btn-primary" cancel>Close
+                                                                </button>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <span v-show="common['{{$fName}}'] && common['{{$fName}}__comments']"
+                                                      v-html="common['{{$fName}}__comments']"
+                                                      class="text-sm text-secondary">
+                                    </span>
+                                            </div>
+                                        </label>
+                                    @endfor
+                                </div>
+                            @endforeach
+                        </div>
+                    @endfor
+                </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 custom-item-form url="/api/sectionTemplateCustomItem/create">
+                                    <div class="mb-2">
+                                        <input type="text" placeholder="Label"
+                                               v-model="newCustomItemLabel"
+                                               class="form-control form-control-sm label_new_custom_item">
+                                    </div>
+                                    <div>
+                                        <button type="button" class="btn btn-sm btn-primary mr-1"
+                                                v-on:click.prevent="saveCustomItem(newCustomItemLabel)">Submit</button>
+                                        <button type="button" class="btn btn-sm btn-default border"
+                                                v-on:click.prevent="cancelCustomItem()">Cancel</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        {{-- custom items --}}
+                        <div class="d-flex align-items-start flex-wrap custom-items-container">
+                            <div class="w-25" v-for="item in customFields">
+                                <label class="d-flex align-items-start mb-1">
+                                    <input type="checkbox" class="m-0"
+                                           v-model="item.value">
+                                    <div class="ml-2">
+                                        <div>
+                                            <span class="mr-2">@{{ item.label }}</span>
+                                            <div moe no-mask>
+                                                <a href="#" start show>
+                                                    <i v-show="item.value" class="fa-comment" :class="item.comments ? 'fas' : 'far'"></i>
+                                                </a>
+                                                <div url="/nop">
+                                                    <div class="mb-2">
+                                                        <textarea class="form-control form-control-sm ns-custom-comment min-width-200px" v-model="item.comments"></textarea>
+                                                    </div>
+                                                    <div class="">
+                                                        <button type="button" class="btn btn-sm btn-primary" cancel>Close</button>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <span v-show="item.value && item.comments"
+                                              v-html="item.comments"
+                                              class="text-sm text-secondary">
+                            </span>
+                                    </div>
+                                </label>
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+                <hr class="m-neg-4">
+                <div class="mb-2">
+                    <textarea class="form-control form-control-sm" name="comments">{!! $parsed && @$parsed->content ? @$parsed->content : '' !!}</textarea>
+                </div>
+            </div>
+
+            <div>
+                <button submit class="btn btn-sm btn-primary mr-2">Submit</button>
+                <button cancel class="btn btn-sm btn-default border">Cancel</button>
+            </div>
+
+        </form>
+    </div>
+</div>
+<script>
+    (function() {
+
+        window.segmentInitializers.<?= $segment->segmentTemplate->internal_name ?> = function() {
+
+            let model = <?= json_encode($contentData) ?>;
+            model.newCustomItemLabel = '';
+            let customFields = <?= json_encode($customFields) ?>;
+            if(!model.customFields) {
+                model.customFields = [];
+            }
+            for (let i = 0; i < customFields.length; i++) {
+                let found = model.customFields.filter(function(_item) {
+                    return _item.label === customFields[i];
+                }).length;
+                if(!found) {
+                    model.customFields.push({
+                        label: customFields[i],
+                        value: '',
+                        comments: '',
+                    })
+                }
+            }
+
+            new Vue({
+                el: '#edit-univ_history_surgical-container',
+                data: model,
+                mounted: function() {
+                    $('#edit-univ_history_surgical-container [moe][initialized]').removeAttr('initialized');
+                    initMoes();
+                },
+                watch: {
+                    $data: {
+                        handler: function(val, oldVal) {
+                            let parent = $('#edit-univ_history_surgical-container').closest('form');
+                            parent.find('[name="data"]').val(JSON.stringify(this.$data));
+                        },
+                        deep: true
+                    }
+                },
+                methods: {
+                    saveCustomItem: function(_label) {
+                        if(!_label) return false;
+                        showMask();
+                        let self = this;
+                        $.post('/api/clientCanvasCustomItem/create', {
+                            proUid: '{{ $pro->uid }}',
+                            key: 'pshx',
+                            label: _label
+                        }, function(_data) {
+                            hideMask();
+                            if(_data && _data.success) {
+                                self.appendCustomItem(_label);
+                                hideMoeFormMask();
+                                $('[custom-item-form]').hide();
+                            }
+                            else {
+                                toastr.error(_data.message);
+                            }
+                        }, 'json')
+                        return false;
+                    },
+                    cancelCustomItem: function() {
+                        hideMoeFormMask();
+                        $('div[moe]').hide();
+                        return false;
+                    },
+                    appendCustomItem: function(_name) {
+                        this.customFields.push({
+                            label: _name,
+                            value: '',
+                            comments: '',
+                        });
+                        Vue.nextTick(function() {
+                            $('.custom-items-container [moe][initialized]').removeAttr('initialized');
+                            initMoes();
+                        });
+                    }
+                }
+            });
+
+        };
+
+    }).call(window);
+</script>

+ 86 - 1
resources/views/app/patient/segment-templates/history_surgical/summary.blade.php

@@ -1 +1,86 @@
-<h1>Summary for history_surgical</h1>
+<?php
+
+use App\Models\Client;
+use App\Models\Point;
+use App\Models\Note;
+/** @var Client $patient */
+/** @var Note $note */
+
+$fields = [
+    [
+        "" => ["Aneurysm repair", "Appendectomy", "Back surgery", "Bariatric surgery/gastric bypass", "Bilateral tubal ligation", "Breast resection/mastectomy", "CABG", "Carotid endarterectomy/stent", "Carpal tunnel release surgery",]
+    ],
+    [
+        "" => ["Cataract/lens surgery", "Cesarean section", "Cholecystectomy/bile duct surgery", "Dilation and curettage", "Hemorrhoid surgery", "Hip arthroplasty", "Hip replacement", "Hysterectomy", "Inguinal hernia repair",]
+    ],
+    [
+        "" => ["Knee arthroplasty", "LASIK", "Laminectomy", "Nasal surgery", "PTCA/PCI", "Pacemaker/defibrillator", "Prostate surgery", "Prostatectomy", "Rotator cuff surgery",]
+    ],
+    [
+        "" => ["Sinus surgery", "Skin cancer excision", "Spinal fusion", "TAH-BSO", "TURP", "Tonsillectomy/Adenoidectomy", "Vasectomy",]
+    ]
+];
+
+$contentData = [
+    "common" => [],
+    "customFields" => [],
+    "comments" => "",
+];
+
+$point = Point::getGlobalSingletonOfCategory($patient, 'SURGICAL_HISTORY', true);
+
+if ($point && @$point->data) {
+
+    $contentData = $point->data;
+
+    for ($i = 0; $i < count($fields); $i++):
+        foreach($fields[$i] as $head => $values):
+            for($k = 0; $k < count($values); $k++):
+                $fName = $head . '_' . sanitize_field_name($values[$k]);
+                if(@$contentData['common'][$fName]): ?>
+                    <div>
+                        <?= ucwords($head) ?>
+                        <i class="fa fa-arrow-right text-sm text-secondary"></i>
+                        <span class="font-weight-bold"><?= $values[$k] ?></span>
+                        <?php if(@$contentData['common'][$fName . '__comments']): ?>
+                            <span class="text-sm ml-1 text-secondary">(<?= $contentData['common'][$fName . '__comments'] ?>)</span>
+                        <?php endif; ?>
+                    </div>
+                <?php
+                endif;
+            endfor;
+        endforeach;
+    endfor;
+
+    // custom fields
+
+    if(isset($contentData['customFields']) && count($contentData['customFields'])):
+        ?> <div class="mt-2"> <?php
+        for ($i = 0; $i < count($contentData['customFields']); $i++):
+            $item = $contentData['customFields'][$i];
+            if($item['value']): ?>
+                <div>
+                    Custom
+                    <i class="fa fa-arrow-right text-sm text-secondary"></i>
+                    <span class="font-weight-bold"><?= $item['label'] ?></span>
+                    <?php if($item['comments']): ?>
+                        <span class="text-sm ml-1 text-secondary">(<?= $item['comments'] ?>)</span>
+                    <?php endif; ?>
+                </div>
+            <?php
+            endif;
+        endfor;
+        ?> </div> <?php
+    endif;
+
+    if(isset($contentData['comments'])) { ?>
+        <div class="mt-2 mb-1">
+            <div class="font-weight-bold">Comments:</div>
+            <div><?= $contentData['comments'] ?></div>
+        </div>
+    <?php }
+}
+else {
+    echo '<span class="text-secondary">No surgical history in the system</span>';
+}
+?>