Browse Source

Add multiple pre-existing - all wizards

Vijayakrishnan 3 years ago
parent
commit
06307a9705

+ 1 - 1
config/app.php

@@ -65,7 +65,7 @@ return [
 
     'hrm2_url' => env('HRM2_URL'),
 
-    'asset_version' => 65,
+    'asset_version' => 66,
 
     'temp_dir' => env('TEMP_DIR'),
 

+ 31 - 19
js-dev/stag-suggest.js

@@ -72,6 +72,9 @@
                                 if(_data.data[i].tooltip) {
                                     item.attr('title', _data.data[i].tooltip);
                                 }
+                                if(i === 0) {
+                                    item.addClass('active');
+                                }
                                 suggestionsOuter.append(item);
                             }
                         }
@@ -122,32 +125,41 @@
                     markEventAsConsumed(e);
                     return false;
                 case 38:
-                    if (activeItem.prev().length) {
-                        activeItem.prev()
-                            .addClass('active')
-                            .siblings().removeClass('active');
-                        activeItem = suggestionsOuter.find('.suggest-item.active');
-                        if (activeItem.length) {
-                            activeItem[0].scrollIntoView();
+                    if(suggestionsOuter.is(':visible')) {
+                        if (activeItem.prev().length) {
+                            activeItem.prev()
+                                .addClass('active')
+                                .siblings().removeClass('active');
+                            activeItem = suggestionsOuter.find('.suggest-item.active');
+                            if (activeItem.length) {
+                                activeItem[0].scrollIntoView();
+                            }
                         }
+                        return false;
                     }
-                    return false;
+                    break;
                 case 40:
-                    if (activeItem.next().length) {
-                        activeItem.next()
-                            .addClass('active')
-                            .siblings().removeClass('active');
-                        activeItem = suggestionsOuter.find('.suggest-item.active');
-                        if (activeItem.length) {
-                            activeItem[0].scrollIntoView();
+                    if(suggestionsOuter.is(':visible')) {
+                        if (activeItem.next().length) {
+                            activeItem.next()
+                                .addClass('active')
+                                .siblings().removeClass('active');
+                            activeItem = suggestionsOuter.find('.suggest-item.active');
+                            if (activeItem.length) {
+                                activeItem[0].scrollIntoView();
+                            }
                         }
+                        return false;
                     }
-                    return false;
+                    break;
                 case 13:
-                    if (activeItem.length) {
-                        activeItem.first().trigger('mousedown');
+                    if(suggestionsOuter.is(':visible')) {
+                        if (activeItem.length) {
+                            activeItem.first().trigger('mousedown');
+                        }
+                        return false;
                     }
-                    return false;
+                    break;
                 default:
                     if (!!term) {
                         suggestionsOuter

+ 58 - 50
resources/views/app/patient/allergies-center.blade.php

@@ -273,63 +273,71 @@ if(!@$summaryView) {
         @if(!@$summaryView)
         <div class="d-flex align-items-center">
             <div class="mt-1 w-100 border p-3 bg-aliceblue border-info rounded">
-                <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-allergy" novalidate>
-                    <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
-                    <input type="hidden" name="category" value="ALLERGY">
-                    <input type="hidden" name="data">
-
-                    <input type="hidden" data-name="damConceptId">
-                    <input type="hidden" data-name="damConceptIdType">
-
-                    <input type="hidden" name="isRemovedDueToEntryError" value="0">
-
-                    <div class="row">
-                        <div class="col-8">
-                            <div class="d-flex align-items-baseline mb-2">
-                                <b>Add Allergy</b>
-                                @if(count($favorites))
-                                    <div class="d-inline position-relative on-click-menu ml-4">
-                                        <span class="text-primary c-pointer">
-                                            <i class="fa fa-bookmark text-info mr-1"></i> Common Allergies <i class="ml-1 fa fa-caret-down"></i>
-                                        </span>
-                                        <div menu right class="bg-white border">
-                                            @foreach($favorites as $favorite)
-                                                <a native target="_blank" href="#"
-                                                   data-name="{{@($favorite->data->name)}}"
-                                                   data-damConceptId="{{@($favorite->data->damConceptId)}}"
-                                                   data-damConceptIdType="{{@($favorite->data->damConceptIdType)}}"
-                                                   class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
-                                                    {{$favorite->data->name}}
-                                                </a>
-                                            @endforeach
+                <div class="row">
+                    <div class="col-8">
+                        <div class="d-flex align-items-baseline mb-3" tab-links="">
+                            <a class="tab-link-active" href="#" tab-link="add-multiple-pre-existing">Add Multiple Pre-existing</a>
+                            <a class="" href="#" tab-link="add-single">Add Single</a>
+                        </div>
+                        <div class="cm-tab" tab-key="add-multiple-pre-existing">
+                            @include('app.patient.wizard-partials.add-multiple-pre-existing', ['label' => 'allergy', 'adder' => 'Diagnosed By'])
+                        </div>
+                        <div class="cm-tab d-none" tab-key="add-single">
+                            <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-allergy" novalidate>
+                                <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
+                                <input type="hidden" name="category" value="ALLERGY">
+                                <input type="hidden" name="data">
+
+                                <input type="hidden" data-name="damConceptId">
+                                <input type="hidden" data-name="damConceptIdType">
+
+                                <input type="hidden" name="isRemovedDueToEntryError" value="0">
+
+                                <div class="d-flex align-items-baseline mb-2">
+                                    <b>Add Allergy</b>
+                                    @if(count($favorites))
+                                        <div class="d-inline position-relative on-click-menu ml-4">
+                                            <span class="text-primary c-pointer">
+                                                <i class="fa fa-bookmark text-info mr-1"></i> Common Allergies <i class="ml-1 fa fa-caret-down"></i>
+                                            </span>
+                                            <div menu right class="bg-white border">
+                                                @foreach($favorites as $favorite)
+                                                    <a native target="_blank" href="#"
+                                                       data-name="{{@($favorite->data->name)}}"
+                                                       data-damConceptId="{{@($favorite->data->damConceptId)}}"
+                                                       data-damConceptIdType="{{@($favorite->data->damConceptIdType)}}"
+                                                       class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
+                                                        {{$favorite->data->name}}
+                                                    </a>
+                                                @endforeach
+                                            </div>
                                         </div>
-                                    </div>
-                                @endif
-                            </div>
-                            <div class="mb-2">
-                                <label class="text-sm mb-0 font-weight-bold">Name</label>
-                                <input type="text" data-name="name" class="form-control form-control-sm"
-                                       stag-suggest
-                                       stag-suggest-ep="/fdb-allergy-suggest/json"
-                                       required>
-                            </div>
-
-                            <?php $point = null; ?>
-                            @include('app.patient.wizard-partials.common-fields', ['label' => 'allergy', 'addVerbPT' => 'Diagnosed', 'apTerm' => 'assessment/plan'])
+                                    @endif
+                                </div>
+                                <div class="mb-2">
+                                    <label class="text-sm mb-0 font-weight-bold">Name</label>
+                                    <input type="text" data-name="name" class="form-control form-control-sm"
+                                           stag-suggest
+                                           stag-suggest-ep="/fdb-allergy-suggest/json"
+                                           required>
+                                </div>
 
-                        </div>
-                        <div class="col-4 border-left">
-                            <div class="fdb-allergy-vigilance max-height-400px overflow-auto">
+                                <?php $point = null; ?>
+                                @include('app.patient.wizard-partials.common-fields', ['label' => 'allergy', 'addVerbPT' => 'Diagnosed', 'apTerm' => 'assessment/plan'])
 
-                            </div>
+                                <div class="d-flex align-items-center">
+                                    <button type="submit" class="btn btn-sm btn-primary mr-2 my-1">Save Allergy</button>
+                                    <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
+                                </div>
+                            </form>
                         </div>
                     </div>
+                    <div class="col-4 border-left">
+                        <div class="fdb-allergy-vigilance max-height-400px overflow-auto">
 
-                    <div class="d-flex align-items-center">
-                        <button type="submit" class="btn btn-sm btn-primary mr-2 my-1">Save Allergy</button>
-                        <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
+                        </div>
                     </div>
-                </form>
+                </div>
             </div>
         </div>
         @endif

+ 10 - 0
resources/views/app/patient/careteam-center.blade.php

@@ -269,6 +269,15 @@ list($careTeamMembers, $counts) = Point::getPointsOfCategoryExtended($patient, '
         @if(!@$summaryView)
         <div class="d-flex align-items-center">
             <div class="mt-1 w-100 border p-3 bg-aliceblue border-info rounded">
+
+                <div class="d-flex align-items-baseline mb-3" tab-links="">
+                    <a class="tab-link-active" href="#" tab-link="add-multiple-pre-existing">Add Multiple Pre-existing</a>
+                    <a class="" href="#" tab-link="add-single">Add Single</a>
+                </div>
+                <div class="cm-tab" tab-key="add-multiple-pre-existing">
+                    @include('app.patient.wizard-partials.add-multiple-pre-existing', ['label' => 'care team member', 'category' => 'CARE_TEAM_MEMBER', 'adder' => 'Added By'])
+                </div>
+                <div class="cm-tab d-none" tab-key="add-single">
                 <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-care-team-member" novalidate>
                     <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
                     <input type="hidden" name="category" value="CARE_TEAM_MEMBER">
@@ -349,6 +358,7 @@ list($careTeamMembers, $counts) = Point::getPointsOfCategoryExtended($patient, '
                         <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
                     </div>
                 </form>
+                </div>
             </div>
         </div>
         @endif

+ 12 - 0
resources/views/app/patient/goals-center.blade.php

@@ -205,6 +205,16 @@ list($goals, $counts) = Point::getPointsOfCategoryExtended($patient, 'GOAL', $no
         @if(!@$summaryView)
         <div class="d-flex align-items-center">
             <div class="mt-1 w-100 border p-3 bg-aliceblue border-info rounded">
+
+                <div class="d-flex align-items-baseline mb-3" tab-links="">
+                    <a class="tab-link-active" href="#" tab-link="add-multiple-pre-existing">Add Multiple Pre-existing</a>
+                    <a class="" href="#" tab-link="add-single">Add Single</a>
+                </div>
+                <div class="cm-tab" tab-key="add-multiple-pre-existing">
+                    @include('app.patient.wizard-partials.add-multiple-pre-existing', ['label' => 'goal', 'adder' => 'Added By'])
+                </div>
+                <div class="cm-tab d-none" tab-key="add-single">
+
                 <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-goal" novalidate>
                     <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
                     <input type="hidden" name="category" value="GOAL">
@@ -241,6 +251,8 @@ list($goals, $counts) = Point::getPointsOfCategoryExtended($patient, 'GOAL', $no
                         <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
                     </div>
                 </form>
+
+                </div>
             </div>
         </div>
         @endif

+ 1 - 1
resources/views/app/patient/medications-add-multi-preexisting.blade.php

@@ -147,7 +147,7 @@
                         case 13: // ENTER: If shift NOT pressed, move to next row same column
                             if (!_e.shiftKey) {
                                 if($(this).closest('.stag-sheet').is('.allow-row-addition')) {
-                                    createAndMoveToNextRowInput($(this).closest('td'), );
+                                    createAndMoveToNextRowInput($(this).closest('td'));
                                 }
                                 else {
                                     moveToNextRowInput($(this).closest('td'), false);

+ 76 - 79
resources/views/app/patient/medications-center.blade.php

@@ -265,97 +265,94 @@ if(!@$summaryView) {
         @if(!@$summaryView)
         <div class="d-flex align-items-center">
             <div class="mt-1 w-100 border p-3 bg-aliceblue border-info rounded">
-                <!--<a href="#" start show class="btn btn-sm btn btn-outline-primary">+ Add new medication, prescribed during this visit</a>-->
-                <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-medication" novalidate>
-                    <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
-                    <input type="hidden" name="category" value="MEDICATION">
-                    <input type="hidden" name="data">
-
-                    <input type="hidden" data-name="medId">
-                    <input type="hidden" data-name="routedMedId">
-                    <input type="hidden" data-name="routedDosageFormMedId">
-                    <input type="hidden" data-name="gcnSeqno">
-
-                    <input type="hidden" name="isRemovedDueToEntryError" value="0">
-
-                    <div class="row">
-                        <div class="col-8">
-                            <div class="d-flex align-items-baseline mb-2">
-                                <b>Add Medication</b>
-                                @if(count($favorites))
-                                    <div class="d-inline position-relative on-click-menu ml-4">
+                <div class="row">
+                    <div class="col-8">
+                        <div class="d-flex align-items-baseline mb-3" tab-links="">
+                            <a class="tab-link-active" href="#" tab-link="add-multiple-pre-existing">Add Multiple Pre-existing</a>
+                            <a class="" href="#" tab-link="add-single">Add Single</a>
+                        </div>
+                        <div class="cm-tab" tab-key="add-multiple-pre-existing">
+                            @include('app.patient.wizard-partials.add-multiple-pre-existing', ['label' => 'medication', 'adder' => 'Prescriber'])
+                        </div>
+                        <div class="cm-tab d-none" tab-key="add-single">
+                            <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-medication" novalidate>
+                                <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
+                                <input type="hidden" name="category" value="MEDICATION">
+                                <input type="hidden" name="data">
+
+                                <input type="hidden" data-name="medId">
+                                <input type="hidden" data-name="routedMedId">
+                                <input type="hidden" data-name="routedDosageFormMedId">
+                                <input type="hidden" data-name="gcnSeqno">
+
+                                <input type="hidden" name="isRemovedDueToEntryError" value="0">
+
+                                <div class="d-flex align-items-baseline mb-2">
+                                    <b>Add Medication</b>
+                                    @if(count($favorites))
+                                        <div class="d-inline position-relative on-click-menu ml-4">
                                         <span class="text-primary c-pointer">
                                             <i class="fa fa-bookmark text-info mr-1"></i> Common Medications <i class="ml-1 fa fa-caret-down"></i>
                                         </span>
-                                        <div menu right class="bg-white border">
-                                            @foreach($favorites as $favorite)
-                                                <a native target="_blank" href="#"
-                                                   data-name="{{@($favorite->data->name)}}"
-                                                   data-medId="{{@($favorite->data->medId)}}"
-                                                   data-routedMedId="{{@($favorite->data->routedMedId)}}"
-                                                   data-routedDosageFormMedId="{{@($favorite->data->routedDosageFormMedId)}}"
-                                                   data-gcnSeqno="{{@($favorite->data->gcnSeqno)}}"
-                                                   class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
-                                                    {{$favorite->data->name}}
-                                                </a>
-                                            @endforeach
+                                            <div menu right class="bg-white border">
+                                                @foreach($favorites as $favorite)
+                                                    <a native target="_blank" href="#"
+                                                       data-name="{{@($favorite->data->name)}}"
+                                                       data-medId="{{@($favorite->data->medId)}}"
+                                                       data-routedMedId="{{@($favorite->data->routedMedId)}}"
+                                                       data-routedDosageFormMedId="{{@($favorite->data->routedDosageFormMedId)}}"
+                                                       data-gcnSeqno="{{@($favorite->data->gcnSeqno)}}"
+                                                       class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
+                                                        {{$favorite->data->name}}
+                                                    </a>
+                                                @endforeach
+                                            </div>
                                         </div>
-                                    </div>
-                                @endif
-                                <a class="ml-4"
-                                   native target="_blank"
-                                   open-in-stag-popup
-                                   popup-style="stag-popup-900 overflow-visible"
-                                   update-parent
-                                   title="Add Multiple Pre-existing"
-                                   mc-initer="medications-add-multi-preexisting-{{$note->id}}"
-                                   href="/medications-add-multi-preexisting/{{$note->uid}}">
-                                    Add Multiple Pre-existing
-                                </a>
-                            </div>
-                            <div class="mb-2">
-                                <label class="mb-0 font-weight-bold">Name</label>
-                                <input type="text"
-                                       data-name="name"
-                                       class="form-control form-control-sm"
-                                       stag-suggest
-                                       stag-suggest-bottom-left
-                                       stag-suggest-ep="/fdb-med-suggest-v2/json"
-                                       required>
-                            </div>
+                                    @endif
+                                </div>
+                                <div class="mb-2">
+                                    <label class="mb-0 font-weight-bold">Name</label>
+                                    <input type="text"
+                                           data-name="name"
+                                           class="form-control form-control-sm"
+                                           stag-suggest
+                                           stag-suggest-bottom-left
+                                           stag-suggest-ep="/fdb-med-suggest-v2/json"
+                                           required>
+                                </div>
 
-                            <?php $point = null; ?>
-                            @include('app.patient.wizard-partials.common-fields', ['label' => 'medication', 'addVerbPT' => 'Prescribed'])
+                                <?php $point = null; ?>
+                                @include('app.patient.wizard-partials.common-fields', ['label' => 'medication', 'addVerbPT' => 'Prescribed'])
 
+                                <div class="d-flex align-items-center">
+                                    <button type="submit" class="btn btn-sm btn-primary mr-2">Save Medication</button>
+                                    <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
+                                </div>
+                            </form>
                         </div>
-                        <div class="col-4 border-left">
+                    </div>
+                    <div class="col-4 border-left">
 
-                            <?php
-                            $problems = \App\Models\Point::getPointsOfCategory($patient, "PROBLEM");
-                            ?>
-                            @if(count($problems))
-                                <h6 class="my-0 font-weight-bold text-secondary mb-2">Active Problems</h6>
-                                <div class="bg-light border px-2 pt-2 pb-1 mb-0">
-                                    @foreach($problems as $problem)
-                                        <div class="mb-1">
-                                            <b><?= !!@($problem->data->name) ? @($problem->data->name) : '-' ?></b>
-                                        </div>
-                                    @endforeach
-                                </div>
-                                <hr class="my-3 m-neg-3">
-                            @endif
+                        <?php
+                        $problems = \App\Models\Point::getPointsOfCategory($patient, "PROBLEM");
+                        ?>
+                        @if(count($problems))
+                            <h6 class="my-0 font-weight-bold text-secondary mb-2">Active Problems</h6>
+                            <div class="bg-light border px-2 pt-2 pb-1 mb-0">
+                                @foreach($problems as $problem)
+                                    <div class="mb-1">
+                                        <b><?= !!@($problem->data->name) ? @($problem->data->name) : '-' ?></b>
+                                    </div>
+                                @endforeach
+                            </div>
+                            <hr class="my-3 m-neg-3">
+                        @endif
 
-                            <div class="fdb-rx-vigilance max-height-400px overflow-auto">
+                        <div class="fdb-rx-vigilance max-height-400px overflow-auto">
 
-                            </div>
                         </div>
                     </div>
-
-                    <div class="d-flex align-items-center">
-                        <button type="submit" class="btn btn-sm btn-primary mr-2">Save Medication</button>
-                        <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
-                    </div>
-                </form>
+                </div>
             </div>
         </div>
         @endif

+ 85 - 77
resources/views/app/patient/problems-center.blade.php

@@ -302,93 +302,101 @@ if(!@$summaryView) {
         @if(!@$summaryView)
         <div class="d-flex align-items-center">
             <div class="mt-1 w-100 border p-3 bg-aliceblue border-info rounded">
-                <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-problem" novalidate>
-                    <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
-                    <input type="hidden" name="category" value="PROBLEM">
-                    <input type="hidden" name="data">
-
-                    <input type="hidden" data-name="dxid">
-                    <input type="hidden" data-name="icd-type">
-
-                    <input type="hidden" name="isRemovedDueToEntryError" value="0">
-
-                    <div class="row">
-                        <div class="col-8">
-                            <div class="d-flex align-items-baseline mb-2">
-                                <b>Add Problem</b>
-                                @if(count($favorites))
-                                    <div class="d-inline position-relative on-click-menu ml-4">
-                                        <span class="text-primary c-pointer">
-                                            <i class="fa fa-bookmark text-info mr-1"></i> Common Problems <i class="ml-1 fa fa-caret-down"></i>
-                                        </span>
-                                        <div menu right class="bg-white border">
-                                            @foreach($favorites as $favorite)
-                                                <a native target="_blank" href="#"
-                                                   data-name="{{@($favorite->data->name)}}"
-                                                   data-dxid="{{@($favorite->data->dxid)}}"
-                                                   data-icd="{{@($favorite->data->icd)}}"
-                                                   data-icd-type="{{@($favorite->data->{'icd-type'})}}"
-                                                   class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
-                                                    {{$favorite->data->name}}
-                                                </a>
-                                            @endforeach
+                <div class="row">
+                    <div class="col-8">
+                        <div class="d-flex align-items-baseline mb-3" tab-links="">
+                            <a class="tab-link-active" href="#" tab-link="add-multiple-pre-existing">Add Multiple Pre-existing</a>
+                            <a class="" href="#" tab-link="add-single">Add Single</a>
+                        </div>
+                        <div class="cm-tab" tab-key="add-multiple-pre-existing">
+                            @include('app.patient.wizard-partials.add-multiple-pre-existing', ['label' => 'problem', 'adder' => 'Diagnosed By'])
+                        </div>
+                        <div class="cm-tab d-none" tab-key="add-single">
+                            <form action="/api/visitPoint/addTopLevel" class="mcp-theme-1 w-100" id="frm-add-problem" novalidate>
+                                <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
+                                <input type="hidden" name="category" value="PROBLEM">
+                                <input type="hidden" name="data">
+
+                                <input type="hidden" data-name="dxid">
+                                <input type="hidden" data-name="icd-type">
+
+                                <input type="hidden" name="isRemovedDueToEntryError" value="0">
+
+                                <div class="d-flex align-items-baseline mb-2">
+                                    <b>Add Problem</b>
+                                    @if(count($favorites))
+                                        <div class="d-inline position-relative on-click-menu ml-4">
+                                            <span class="text-primary c-pointer">
+                                                <i class="fa fa-bookmark text-info mr-1"></i> Common Problems <i class="ml-1 fa fa-caret-down"></i>
+                                            </span>
+                                            <div menu right class="bg-white border">
+                                                @foreach($favorites as $favorite)
+                                                    <a native target="_blank" href="#"
+                                                       data-name="{{@($favorite->data->name)}}"
+                                                       data-dxid="{{@($favorite->data->dxid)}}"
+                                                       data-icd="{{@($favorite->data->icd)}}"
+                                                       data-icd-type="{{@($favorite->data->{'icd-type'})}}"
+                                                       class="px-2 py-1 d-block text-nowrap text-sm favorite-item">
+                                                        {{$favorite->data->name}}
+                                                    </a>
+                                                @endforeach
+                                            </div>
                                         </div>
-                                    </div>
-                                @endif
-                            </div>
-                            <div class="row mb-2">
-                                <div class="col-8 pr-0">
-                                    <label class="text-sm mb-0 font-weight-bold">Name</label>
-                                    <input type="text"
-                                           data-name="name"
-                                           class="form-control form-control-sm"
-                                           stag-suggest
-                                           stag-suggest-bottom-left
-                                           stag-suggest-ep="/fdb-dx-suggest-v2/json"
-                                           stag-suggest-text-only
-                                           value="{{trim(request()->input('dx')) ? trim(request()->input('dx')) : ''}}"
-                                           required>
+                                    @endif
                                 </div>
-                                <div class="col-4">
-                                    <label class="text-sm mb-0 font-weight-bold">ICD</label>
-                                    <input type="text"
-                                           data-name="icd"
-                                           class="form-control form-control-sm min-width-unset">
+                                <div class="row mb-2">
+                                    <div class="col-8 pr-0">
+                                        <label class="text-sm mb-0 font-weight-bold">Name</label>
+                                        <input type="text"
+                                               data-name="name"
+                                               class="form-control form-control-sm"
+                                               stag-suggest
+                                               stag-suggest-bottom-left
+                                               stag-suggest-ep="/fdb-dx-suggest-v2/json"
+                                               stag-suggest-text-only
+                                               value="{{trim(request()->input('dx')) ? trim(request()->input('dx')) : ''}}"
+                                               required>
+                                    </div>
+                                    <div class="col-4">
+                                        <label class="text-sm mb-0 font-weight-bold">ICD</label>
+                                        <input type="text"
+                                               data-name="icd"
+                                               class="form-control form-control-sm min-width-unset">
+                                    </div>
                                 </div>
-                            </div>
 
-                            <?php $point = null; ?>
-                            @include('app.patient.wizard-partials.common-fields', ['label' => 'problem', 'addVerbPT' => 'Diagnosed', 'reviewLabel' => 'Subjective/HPI', 'apTerm' => 'assessment/plan'])
+                                <?php $point = null; ?>
+                                @include('app.patient.wizard-partials.common-fields', ['label' => 'problem', 'addVerbPT' => 'Diagnosed', 'reviewLabel' => 'Subjective/HPI', 'apTerm' => 'assessment/plan'])
 
-                        </div>
-                        <div class="col-4 border-left">
-
-                            <?php
-                            $medications = \App\Models\Point::getPointsOfCategory($patient, "MEDICATION");
-                            ?>
-                            @if(count($medications))
-                                <h6 class="my-0 font-weight-bold text-secondary mb-2">Active Medications</h6>
-                                <div class="bg-light border px-2 pt-2 pb-1 mb-0">
-                                    @foreach($medications as $medication)
-                                        <div class="mb-1">
-                                            <b><?= !!@($medication->data->name) ? @($medication->data->name) : '-' ?></b>
-                                        </div>
-                                    @endforeach
+                                <div class="d-flex align-items-center">
+                                    <button type="submit" class="btn btn-sm btn-primary mr-2">Save Problem</button>
+                                    <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
                                 </div>
-                                <hr class="my-3 m-neg-3">
-                            @endif
-
-                            <div class="fdb-dx-vigilance max-height-400px overflow-auto">
-
-                            </div>
+                            </form>
                         </div>
                     </div>
+                    <div class="col-4 border-left">
 
-                    <div class="d-flex align-items-center">
-                        <button type="submit" class="btn btn-sm btn-primary mr-2">Save Problem</button>
-                        <button type="button" class="btn btn-sm btn-default border-secondary bg-white border mr-2" onclick="return closeStagPopup()">Close</button>
+                        <?php
+                        $medications = \App\Models\Point::getPointsOfCategory($patient, "MEDICATION");
+                        ?>
+                        @if(count($medications))
+                            <h6 class="my-0 font-weight-bold text-secondary mb-2">Active Medications</h6>
+                            <div class="bg-light border px-2 pt-2 pb-1 mb-0">
+                                @foreach($medications as $medication)
+                                    <div class="mb-1">
+                                        <b><?= !!@($medication->data->name) ? @($medication->data->name) : '-' ?></b>
+                                    </div>
+                                @endforeach
+                            </div>
+                            <hr class="my-3 m-neg-3">
+                        @endif
+
+                        <div class="fdb-dx-vigilance max-height-400px overflow-auto">
+
+                        </div>
                     </div>
-                </form>
+                </div>
             </div>
         </div>
         @endif

+ 91 - 0
resources/views/app/patient/wizard-partials/add-multiple-pre-existing.blade.php

@@ -0,0 +1,91 @@
+<div visit-moe no-auto-save id="{{$label}}-add-multi-preexisting-{{$note->id}}" class="w-100">
+    <form show url="/api/visitPoint/addTopLevelBulkPreExisting" class="mcp-theme-1 w-100 pb-3" novalidate>
+        <input type="hidden" name="noteUid" value="<?= $note->uid ?>">
+        <input type="hidden" name="category" value="{{@$category ?: strtoupper($label)}}">
+        <input type="hidden" name="dataJson">
+
+        <table class="table table-sm table-bordered stag-sheet allow-row-addition bg-white mb-2 point-table read">
+            <thead>
+            <tr class="bg-light">
+                <th class="border-bottom-0 text-secondary text-nowrap">{{ucwords($label)}}</th>
+                @if($label === 'problem')
+                    <th class="border-bottom-0 text-secondary width-70px">ICD</th>
+                @elseif($label === 'care team member')
+                    <th class="border-bottom-0 text-secondary">Specialty</th>
+                    <th class="border-bottom-0 text-secondary">Organization</th>
+                @endif
+                <th class="border-bottom-0 text-secondary width-100px">Start Date</th>
+                <th class="border-bottom-0 text-secondary width-100px text-nowrap">{{$adder}}</th>
+                <th class="border-bottom-0 text-secondary width-150px">Subjective</th>
+                <th class="border-bottom-0 text-secondary width-150px">Plan</th>
+                <th class="border-bottom-0 text-secondary width-40px"></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr>
+                <td class="p-0">
+                    <input type="text" key="{{$label === 'goal' ? 'goal' : 'name'}}" bucket="data" required
+                           @if($label === 'medication')
+                           stag-suggest
+                           stag-suggest-bottom-left
+                           stag-suggest-ep="/fdb-med-suggest-v2/json"
+                           @elseif($label === 'problem')
+                           stag-suggest
+                           stag-suggest-bottom-left
+                           stag-suggest-ep="/fdb-dx-suggest-v2/json"
+                           @elseif($label === 'allergy')
+                           stag-suggest
+                           stag-suggest-bottom-left
+                           stag-suggest-ep="/fdb-allergy-suggest/json"
+                           @endif
+                    >
+                    @if($label === 'medication')
+                        <input type="hidden" key="routedMedId" bucket="data">
+                        <input type="hidden" key="routedDosageFormMedId" bucket="data">
+                        <input type="hidden" key="gcnSeqno" bucket="data">
+                        <input type="hidden" key="medId" bucket="data">
+                    @elseif($label === 'problem')
+                        <input type="hidden" key="dxid" bucket="data">
+                        <input type="hidden" key="icd-type" bucket="data">
+                    @elseif($label === 'allergy')
+                        <input type="hidden" key="damConceptId" bucket="data">
+                        <input type="hidden" key="damConceptIdType" bucket="data">
+                    @endif
+                </td>
+                @if($label === 'problem')
+                    <td class="p-0">
+                        <input type="text" key="icd" bucket="data">
+                    </td>
+                @elseif($label === 'care team member')
+                    <td class="p-0">
+                        <input type="text" key="specialty" bucket="data">
+                    </td>
+                    <td class="p-0">
+                        <input type="text" key="organization" bucket="data">
+                    </td>
+                @endif
+                <td class="p-0">
+                    <input type="date" key="start_date" bucket="data">
+                </td>
+                <td class="p-0">
+                    <input type="text" key="prescriber" bucket="data">
+                </td>
+                <td class="p-0">
+                    <textarea rows="1" key="value" bucket="childReviewData"></textarea>
+                </td>
+                <td class="p-0">
+                    <textarea rows="1" key="value" bucket="childPlanData"></textarea>
+                </td>
+                <td class="px-2 align-middle text-center text-nowrap">
+                    <a href="#" class="delete-line mr-2"><i class="fa fa-trash-alt text-danger on-hover-opaque"></i></a>
+                    <a href="#" class="add-line mr-2"><i class="fa fa-plus text-primary on-hover-opaque"></i></a>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+        <div class="d-flex align-items-center">
+            <button class="btn-save-lines btn btn-sm btn-primary mr-2">Save</button>
+            <button class="btn btn-sm btn-default border bg-white" onclick="closeStagPopup(); return false;">Close</button>
+        </div>
+    </form>
+</div>

+ 166 - 1
resources/views/app/patient/wizard-partials/common-script.blade.php

@@ -807,4 +807,169 @@ $(document).on('rich-text-input.auto-save-rich-text-input', '#frm-cc-regenerate
     debouncedWizardEditModeSaver(this);
 });
 
-initStagSuggest();
+initStagSuggest();
+
+parentSegment.find('.stag-sheet input[stag-suggest][key="name"]')
+    .off('stag-suggest-selected')
+    .on('stag-suggest-selected', (_e, _input, _data) => {
+        _input = $(_input);
+        @if($label === 'medication')
+            _input.closest('tr').find('input[key="routedMedId"]').val(_data.routed_med_id);
+            _input.closest('tr').find('input[key="routedDosageFormMedId"]').val(_data.routed_dosage_form_med_id);
+            _input.closest('tr').find('input[key="gcnSeqno"]').val(_data.gcn_seqno);
+            _input.closest('tr').find('input[key="medId"]').val(_data.medid);
+        @elseif($label === 'problem')
+            _input.closest('tr').find('input[key="dxid"]').val(_data.dxid);
+            _input.closest('tr').find('input[key="icd"]').val(_data.sub_text);
+        @elseif($label === 'allergy')
+            _input.closest('tr').find('input[key="damConceptId"]').val(_data.dam_concept_id);
+            _input.closest('tr').find('input[key="damConceptIdType"]').val(_data.dam_concept_id_typ);
+        @endif
+        return false;
+    });
+
+function getRowBefore(_tr) {
+    return _tr.prev();
+}
+
+function moveToPrevRowInput(_td) {
+    let tr = getRowBefore(_td.closest('tr'));
+    tr.find('td:eq(' + _td.index() + ')').find('input, textarea').first().focus();
+}
+
+function getRowAfter(_tr) {
+    return _tr.next();
+}
+
+function getOrCreateRowAfter(_tr) {
+    let tr = getRowAfter(_tr);
+    if(!tr.length) {
+        tr = newRow(_tr).insertAfter(_tr);
+    }
+    return tr;
+}
+
+function createRowAfter(_tr) {
+    return newRow(_tr).insertAfter(_tr);
+}
+
+function newRow(_tr) {
+    let newTr = _tr.clone(true);
+    newTr.find('input, textarea').val('');
+    newTr.find('textarea').attr('rows', 1).css({minHeight: '', height: ''});
+    newTr.find('[stag-suggest-initialized]').removeAttr('stag-suggest-initialized');
+    return newTr;
+}
+
+function createAndMoveToNextRowInput(_td) {
+    let tr = createRowAfter(_td.closest('tr'));
+    tr.find('td:eq(0)').find('input, textarea').first().focus();
+}
+
+function moveToNextRowInput(_td, _forceCreate = false) {
+    let tr = _forceCreate ? getOrCreateRowAfter(_td.closest('tr')) : getRowAfter(_td.closest('tr'));
+    if(tr.length) {
+        tr.find('td:eq(' + _td.index() + ')').find('input, textarea').first().focus();
+    }
+}
+
+function moveToPrevInput(_td) {
+    _td.prev().find('input, textarea').first().focus();
+}
+
+function moveToNextInput(_td) {
+    _td.next().find('input, textarea').first().focus();
+}
+
+function generateData(_parentSegment) {
+    let lines = [];
+    _parentSegment.find('.stag-sheet tbody tr').each(function() {
+        let line = {
+            data: {},
+            childReviewData: {},
+            childPlanData: {}
+        };
+        $(this).find('input, textarea').each(function() {
+            line[$(this).attr('bucket')][$(this).attr('key')] = this.value;
+        });
+        line.data = JSON.stringify(line.data);
+        line.childReviewData = JSON.stringify(line.childReviewData);
+        line.childPlanData = JSON.stringify(line.childPlanData);
+        lines.push(line);
+    });
+    return JSON.stringify(lines);
+}
+
+parentSegment
+    .off('keydown', '.stag-sheet input, .stag-sheet textarea')
+    .on('keydown', '.stag-sheet input, .stag-sheet textarea', function(_e) {
+        switch (_e.which) {
+            case 13: // ENTER: If shift NOT pressed, move to next row same column
+                if (!_e.shiftKey || !$(this).is('textarea')) {
+                    if($(this).closest('.stag-sheet').is('.allow-row-addition')) {
+                        createAndMoveToNextRowInput($(this).closest('td'));
+                    }
+                    else {
+                        moveToNextRowInput($(this).closest('td'), false);
+                    }
+                    return false;
+                }
+                break;
+            case 38: // UP: If caret already at 0, move up to prev row same column
+                if (this.selectionStart === this.selectionEnd && this.selectionStart === 0) {
+                    moveToPrevRowInput($(this).closest('td'));
+                    return false;
+                }
+                break;
+            case 40: // DOWN: If caret already at end, move down to next row same column
+                if (this.selectionStart === this.selectionEnd && this.selectionStart === this.value.length) {
+                    moveToNextRowInput($(this).closest('td'));
+                    return false;
+                }
+                break;
+            case 37: // LEFT: If caret already at 0, move left to prev column
+                if (this.selectionStart === this.selectionEnd && this.selectionStart === 0) {
+                    moveToPrevInput($(this).closest('td'));
+                    return false;
+                }
+                break;
+            case 39: // RIGHT: If caret already at end, move right to next column
+                if (this.selectionStart === this.selectionEnd && this.selectionStart === this.value.length) {
+                    moveToNextInput($(this).closest('td'));
+                    return false;
+                }
+                break;
+            case 8: // BACKSPACE: If caret already at 0, move left to prev column
+                break;
+        }
+
+    });
+
+parentSegment
+    .off('click.delete-line', '.stag-sheet .delete-line')
+    .on('click.delete-line', '.stag-sheet .delete-line', function() {
+        let tr = $(this).closest('tr');
+        let isFirst = (tr.index() === 0);
+        if(isFirst) {
+            newRow(tr).insertAfter(tr);
+        }
+        tr.remove();
+        return false;
+    });
+
+parentSegment
+    .off('click.add-line', '.stag-sheet .add-line')
+    .on('click.add-line', '.stag-sheet .add-line', function() {
+        let tr = $(this).closest('tr');
+        newRow(tr).insertAfter(tr);
+        initStagSuggest();
+        return false;
+    });
+
+parentSegment
+    .off('click.btn-save-lines', '.btn-save-lines')
+    .on('click.btn-save-lines', '.btn-save-lines', function() {
+        parentSegment.find('[name="dataJson"]').val(generateData(parentSegment));
+        saveVisitForm(this);
+        return false;
+    });