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

Vitals - BMI fix + copy-from-prev overhaul

Vijayakrishnan 3 жил өмнө
parent
commit
4fe67fbcd4

+ 85 - 23
resources/views/app/patient/segment-templates/vitals/edit.blade.php

@@ -118,20 +118,20 @@ $copyTriggerAdded = [];
                                     <input type="text" readonly bmi
                                            class="form-control form-control-sm vitals-title border-bottom-0 border-top-0 border-left-0 border-right width-70px"
                                            data-name="bmi" value="{{$contentData['bmi']}}">
-                                    <div class="flex-grow-1 py-1 m-0 px-2 font-weight-bold bg-light">
+                                    <div class="flex-grow-1 py-1 m-0 px-2 font-weight-bold bg-light" bmi-category>
                                         @if(isset($contentData['bmi']) && $contentData['bmi'] != "" )
                                             <?php $bmi = $contentData['bmi']; ?>
                                             @if($bmi < 18.5)
-                                                <span class="text-sm text-warning-mellow" v-if="+bmi < 18.5">Underweight</span>
+                                                <span class="text-sm text-warning-mellow">Underweight</span>
                                             @endif
                                             @if($bmi >= 18.5 && $bmi < 25)
-                                                <span class="text-sm text-success" v-if="+bmi >= 18.5 && +bmi < 25">Healthy Weight</span>
+                                                <span class="text-sm text-success">Healthy Weight</span>
                                             @endif
                                             @if($bmi >= 25 && $bmi > 30)
-                                                <span class="text-sm text-warning-mellow" v-if="+bmi >= 25 && +bmi < 30">Overweight</span>
+                                                <span class="text-sm text-warning-mellow">Overweight</span>
                                             @endif
                                             @if($bmi >= 30)
-                                                <span class="text-sm text-warning-mellow" v-if="+bmi >= 30">Obese</span>
+                                                <span class="text-sm text-warning-mellow">Obese</span>
                                             @endif
                                         @endif
                                     </div>
@@ -187,11 +187,32 @@ $copyTriggerAdded = [];
                         @else
                             @foreach($previousData as $pDay)
                                 <td class="bg-light {{!isset($copyTriggerAdded[$k]) ? 'px-2' : 'px-2'}} py-1 text-secondary position-relative">
+                                    <span data-type="{{$k}}">
                                     @if($k === 'systolicBP')
                                         {{ @$previousDataAssoc[$pDay['date']]['systolicBP'] ?: '-' }}/{{ @$previousDataAssoc[$pDay['date']]['diastolicBP'] ?: '-' }}
+                                    @elseif($k === 'heightInInches')
+                                        {{$previousDataAssoc[$pDay['date']][$k] ? toFeetAndInches($previousDataAssoc[$pDay['date']][$k]) : '-' }}
+                                    @elseif($k === 'bmi')
+                                        {{$previousDataAssoc[$pDay['date']][$k] ?: '-' }}
+                                        <?php
+                                        $prevBMI = $previousDataAssoc[$pDay['date']][$k] ? +($previousDataAssoc[$pDay['date']][$k]) : false;
+                                        ?>
+                                        @if($prevBMI < 18.5)
+                                            <span class="text-sm text-warning-mellow ml-1">Underweight</span>
+                                        @endif
+                                        @if($prevBMI >= 18.5 && $prevBMI < 25)
+                                            <span class="text-sm text-success ml-1">Healthy Weight</span>
+                                        @endif
+                                        @if($prevBMI >= 25 && $prevBMI > 30)
+                                            <span class="text-sm text-warning-mellow ml-1">Overweight</span>
+                                        @endif
+                                        @if($prevBMI >= 30)
+                                            <span class="text-sm text-warning-mellow ml-1">Obese</span>
+                                        @endif
                                     @else
                                         {{$previousDataAssoc[$pDay['date']][$k] ?: '-' }}
                                     @endif
+                                    </span>
                                     @if(!isset($copyTriggerAdded[$k]) && $k !== "bmi")
                                         <a href="#" title="Copy to this note" class="vitals-copy-trigger"><i class="fa fa-chevron-circle-left font-size-14"></i></a>
                                     @endif
@@ -220,14 +241,31 @@ $copyTriggerAdded = [];
     window.segmentInitializers.<?= $segment->segmentTemplate->internal_name ?> = function () {
         let parentSegment = $('[data-segment-template-name="<?= $segment->segmentTemplate->internal_name ?>"] ');
 
-        parentSegment.find('[refresh-bmi]').off('change input');
-        parentSegment.find('[refresh-bmi]').on('change input', function () {
-            var height = parseInt(parentSegment.find('[heightInInches]').val());
-            var weight = parseInt(parentSegment.find('[weightPounds]').val());
-            var bmi = Math.round((weight / (height * height)) * 703.06957964)
+        function __refreshBMI() {
+            var height = parseInt(parentSegment.find('[data-name="heightInInches"]').val());
+            var weight = parseInt(parentSegment.find('[data-name="weightPounds"]').val());
+            var bmi = '', bmiCategory = '';
+            if(!isNaN(height) && !isNaN(weight)) {
+                bmi = Math.round((weight / (height * height)) * 703.06957964);
+                if(bmi < 18.5) {
+                    bmiCategory = '<span class="text-sm text-warning-mellow">Underweight</span>';
+                }
+                else if(bmi >= 18.5 && bmi < 25) {
+                    bmiCategory = '<span class="text-sm text-success">Healthy Weight</span>';
+                }
+                else if(bmi >= 25 && bmi > 30) {
+                    bmiCategory = '<span class="text-sm text-warning-mellow">Overweight</span>';
+                }
+                else if(bmi >= 30) {
+                    bmiCategory = '<span class="text-sm text-warning-mellow">Obese</span>';
+                }
+            }
             parentSegment.find('[bmi]').val(bmi);
-            parentSegment.find('[bmi-date]').val(parentSegment.find('[weight-date]').val());
-        });
+            parentSegment.find('[bmi-category]').empty().append(bmiCategory);
+        }
+
+        parentSegment.find('[refresh-bmi]').off('change input');
+        parentSegment.find('[refresh-bmi]').on('change input', __refreshBMI);
 
         parentSegment.find('[heightFeetInput], [heightInchesInput]').off('change input paste');
         parentSegment.find('[heightFeetInput], [heightInchesInput]').on('change input paste', function () {
@@ -236,23 +274,47 @@ $copyTriggerAdded = [];
                 inc = +(parentSegment.find('[heightInchesInput]').val());
             inches = Math.round(ft * 12 + inc);
             parentSegment.find('[data-name="heightInInches"]').val(inches);
+            __refreshBMI();
         });
 
         parentSegment.find('.vitals-copy-trigger').off('click.copy-vital');
         parentSegment.find('.vitals-copy-trigger').on('click.copy-vital', function () {
             let td = $(this).closest('td'), value = $.trim(td.text());
-            if(value.indexOf('/') === -1) {
-                td.prev().find('input').val(value).trigger('change');
-            }
-            else {
-                let parts = value.split('/');
-                if(parts.length >= 1 && parts[0] !== '-') {
-                    td.prev().find('input:eq(0)').val(parts[0]).trigger('change');
-                }
-                if(parts.length >= 2 && parts[1] !== '-') {
-                    td.prev().find('input:eq(1)').val(parts[1]).trigger('change');
-                }
+            let type = td.find('>span').first().attr('data-type');
+            if(!type) return false;
+            switch (type) {
+                case 'heightInInches':
+                    if(value.indexOf('ft.') !== -1 && value.indexOf('in.') !== -1) {
+                        value = value.replace('in.', '');
+                        value = value.replace('ft.', '|');
+                        value = value.replace('/\s/gi', '');
+                        let parts = value.split('|');
+                        if (parts.length >= 1 && parts[0] !== '-') {
+                            td.prev().find('input:eq(0)').val(parts[0]).trigger('change');
+                        }
+                        if (parts.length >= 2 && parts[1] !== '-') {
+                            td.prev().find('input:eq(1)').val(parts[1]).trigger('change');
+                        }
+                    }
+                    break;
+                case 'systolicBP':
+                    if(value.indexOf('/') !== -1) {
+                        let parts = value.split('/');
+                        if (parts.length >= 1 && parts[0] !== '-') {
+                            td.prev().find('input:eq(0)').val(parts[0]).trigger('change');
+                        }
+                        if (parts.length >= 2 && parts[1] !== '-') {
+                            td.prev().find('input:eq(1)').val(parts[1]).trigger('change');
+                        }
+                    }
+                    break;
+                default:
+                    if(value && value !== '-') {
+                        td.prev().find('input').val(value).trigger('change');
+                    }
+                    break;
             }
+
             return false;
         });