소스 검색

Parent/child measurements UI v1

Vijayakrishnan 4 년 전
부모
커밋
b84c5b94a8

+ 1 - 0
app/Models/Client.php

@@ -94,6 +94,7 @@ class Client extends Model
     public function allMeasurements() {
         return $this->hasMany(Measurement::class, 'client_id', 'id')
             ->where('is_removed', false)
+            ->whereNull('parent_measurement_id')
             ->orderBy('label', 'asc')
             ->orderBy('effective_date', 'desc');
     }

+ 6 - 0
app/Models/Measurement.php

@@ -35,4 +35,10 @@ class Measurement extends Model
             ->where('is_cancelled', false)
             ->get();
     }
+
+    public function childMeasurements() {
+        return Measurement::where('parent_measurement_id', $this->id)
+            ->where('is_removed', false)
+            ->get();
+    }
 }

+ 3 - 0
public/css/style.css

@@ -1123,3 +1123,6 @@ input[data-option-list]:focus+.data-option-list {
 .data-option-list>div:hover {
     background: aliceblue;
 }
+.measurement-item:not(:last-child) {
+    border-bottom: 1px solid #e7e7e7;
+}

+ 111 - 0
resources/views/app/patient/partials/measurement.blade.php

@@ -0,0 +1,111 @@
+<div class="d-flex align-items-start py-1 pr-2 measurement-item {{ $child ? 'pl-4' : 'pl-2' }}">
+    {{--<div moe relative class="mr-2">
+        <a class="on-hover-opaque" start show title="Delete">
+            <i class="font-size-11 fa fa-trash-alt text-danger"></i>
+        </a>
+        <form url="/api/measurement/remove">
+            <input type="hidden" name="uid" value="{{ $measurement->uid }}">
+            <p class="small min-width-200px">Are you sure you want to delete this entry?</p>
+            <div class="d-flex align-items-center">
+                <button class="btn btn-sm btn-danger mr-2" submit>Delete</button>
+                <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+            </div>
+        </form>
+    </div>
+    <div moe class="mr-2">
+        <a class="on-hover-opaque" start show title="Update">
+            <i class="font-size-11 fa fa-edit text-primary"></i>
+        </a>
+        <form url="/api/measurement/updateBasic">
+            <input type="hidden" name="uid" value="{{ $measurement->uid }}">
+            <div class="mb-2">
+                <input required type="text" class="form-control form-control-sm" name="label" value="{{ $measurement->label }}" placeholder="Type">
+            </div>
+            <div class="mb-2">
+                <input required autofocus type="text" class="form-control form-control-sm" name="value" value="{{ $measurement->value }}" placeholder="Value">
+            </div>
+            <div class="mb-2">
+                <input required type="date" class="form-control form-control-sm" name="effectiveDate" max="{{ date('Y-m-d') }}" value="{{ date('Y-m-d') }}">
+            </div>
+            <div class="d-flex align-items-center">
+                <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
+                <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+            </div>
+        </form>
+    </div>--}}
+    <div>
+        <div class="d-flex">
+            <span>{{ $measurement->label }}</span>
+            <span class="font-weight-bold ml-2">{{ $measurement->value }}</span>
+            <div moe>
+                <a href="#" class="ml-2 font-weight-normal text-nowrap" start show>+ Entry</a>
+                <form url="/api/clientProgramMonthEntry/create">
+                    <input type="hidden" name="measurementUid" value="{{ $measurement->uid }}">
+                    <input type="hidden" name="proUid" value="{{ $pro->uid }}">
+                    <div class="mb-2">
+                        <label class="text-sm mb-1 text-secondary">Effective Date</label>
+                        <input required type="date" class="form-control form-control-sm"
+                               name="effectiveDate" value="{{ date('Y-m-d') }}">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-sm mb-1 text-secondary">Time (minutes)</label>
+                        <input autofocus required type="number" class="form-control form-control-sm" name="timeInMinutes"
+                               value="">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-sm mb-1 text-secondary">Quick Text</label>
+                        <input type="text" class="form-control form-control-sm" name="quickText" value="">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-sm mb-1 text-secondary">Measurement Determination</label>
+                        <input type="text" class="form-control form-control-sm" data-option-list autocomplete="off"
+                               name="measurementDetermination" value="">
+                        <div class="data-option-list">
+                            <div>Normal</div>
+                            <div>High</div>
+                            <div>Low</div>
+                            <div>Abnormal</div>
+                        </div>
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-sm mb-1 text-secondary">Measurement Memo</label>
+                        <input type="text" class="form-control form-control-sm" name="measurementMemo" value="">
+                    </div>
+                    <div class="d-flex align-items-center">
+                        <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
+                        <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
+                    </div>
+                </form>
+            </div>
+        </div>
+        <div>
+            <span class="font-weight-normal text-secondary text-sm">
+                {{ friendly_date_time($measurement->effective_date, false) }}
+            </span>
+        </div>
+    </div>
+    @if(!!$programMonth)
+        @if($minutes)
+            <?php $entries = $measurement->entriesByPro($pro); ?>
+            <div class="ml-auto">
+                @foreach($entries as $entry)
+                    <div class="d-flex align-items-start mb-1 pr-2">
+                        <span class="width-200px text-sm text-right pr-2 text-secondary">{{ $entry->quick_text }}</span>
+                        <span class="pr-2 text-sm">
+                            <i class="fa fa-clock text-secondary on-hover-opaque"></i>
+                            {{ minutes_to_hhmm($entry->time_in_minutes) }}
+                        </span>
+                        <span class="text-sm font-weight-bold">
+                            ${{ round($pro->hourly_rate * ($entry->time_in_minutes / 60), 1) }}
+                        </span>
+                    </div>
+                @endforeach
+            </div>
+        @else
+            <span class="ml-auto pr-2 text-secondary"><i
+                    class="fa fa-exclamation-triangle"></i>&nbsp;Entry pending</span>
+        @endif
+    @elseif($filter === '')
+        <span class="ml-auto pr-2 text-secondary">Entry pending</span>
+    @endif
+</div>

+ 4 - 112
resources/views/app/patient/programs.blade.php

@@ -407,118 +407,10 @@
                         ?>
                         @foreach($programMeasurements as $measurement)
                             <?php $minutes = $measurement->minutesEntered($pro); ?>
-                            <div class="d-flex align-items-start py-1 px-2 border-bottom">
-                                {{--<div moe relative class="mr-2">
-                                    <a class="on-hover-opaque" start show title="Delete">
-                                        <i class="font-size-11 fa fa-trash-alt text-danger"></i>
-                                    </a>
-                                    <form url="/api/measurement/remove">
-                                        <input type="hidden" name="uid" value="{{ $measurement->uid }}">
-                                        <p class="small min-width-200px">Are you sure you want to delete this entry?</p>
-                                        <div class="d-flex align-items-center">
-                                            <button class="btn btn-sm btn-danger mr-2" submit>Delete</button>
-                                            <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
-                                        </div>
-                                    </form>
-                                </div>
-                                <div moe class="mr-2">
-                                    <a class="on-hover-opaque" start show title="Update">
-                                        <i class="font-size-11 fa fa-edit text-primary"></i>
-                                    </a>
-                                    <form url="/api/measurement/updateBasic">
-                                        <input type="hidden" name="uid" value="{{ $measurement->uid }}">
-                                        <div class="mb-2">
-                                            <input required type="text" class="form-control form-control-sm" name="label" value="{{ $measurement->label }}" placeholder="Type">
-                                        </div>
-                                        <div class="mb-2">
-                                            <input required autofocus type="text" class="form-control form-control-sm" name="value" value="{{ $measurement->value }}" placeholder="Value">
-                                        </div>
-                                        <div class="mb-2">
-                                            <input required type="date" class="form-control form-control-sm" name="effectiveDate" max="{{ date('Y-m-d') }}" value="{{ date('Y-m-d') }}">
-                                        </div>
-                                        <div class="d-flex align-items-center">
-                                            <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
-                                            <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
-                                        </div>
-                                    </form>
-                                </div>--}}
-                                <div>
-                                    <div class="d-flex">
-                                        <span>{{ $measurement->label }}:</span>
-                                        <span class="font-weight-bold ml-1">{{ $measurement->value }}</span>
-                                    </div>
-                                    <div>
-                                        <span class="font-weight-normal text-secondary text-sm">
-                                            {{ friendly_date_time($measurement->effective_date, false) }}
-                                        </span>
-                                    </div>
-                                </div>
-                                @php $matchingClientPrograms = $pro->canAddCPMEntryForMeasurement($measurement, $pro); @endphp
-                                @if(1) {{-- TODO:--}}
-                                    <div moe>
-                                        <a href="#" class="ml-2 font-weight-normal text-nowrap" start show><b>+ Entry</b></a>
-                                        <form url="/api/clientProgramMonthEntry/create">
-                                            <input type="hidden" name="measurementUid" value="{{ $measurement->uid }}">
-                                            <input type="hidden" name="proUid" value="{{ $pro->uid }}">
-                                            <div class="mb-2">
-                                                <label class="text-sm mb-1 text-secondary">Effective Date</label>
-                                                <input required type="date" class="form-control form-control-sm"
-                                                       name="effectiveDate" value="{{ date('Y-m-d') }}">
-                                            </div>
-                                            <div class="mb-2">
-                                                <label class="text-sm mb-1 text-secondary">Time (minutes)</label>
-                                                <input autofocus required type="number" class="form-control form-control-sm" name="timeInMinutes" value="">
-                                            </div>
-                                            <div class="mb-2">
-                                                <label class="text-sm mb-1 text-secondary">Quick Text</label>
-                                                <input type="text" class="form-control form-control-sm" name="quickText" value="">
-                                            </div>
-                                            <div class="mb-2">
-                                                <label class="text-sm mb-1 text-secondary">Measurement Determination</label>
-                                                <input type="text" class="form-control form-control-sm" data-option-list autocomplete="off"
-                                                       name="measurementDetermination" value="">
-                                                <div class="data-option-list">
-                                                    <div>Normal</div>
-                                                    <div>High</div>
-                                                    <div>Low</div>
-                                                    <div>Abnormal</div>
-                                                </div>
-                                            </div>
-                                            <div class="mb-2">
-                                                <label class="text-sm mb-1 text-secondary">Measurement Memo</label>
-                                                <input type="text" class="form-control form-control-sm" name="measurementMemo" value="">
-                                            </div>
-                                            <div class="d-flex align-items-center">
-                                                <button class="btn btn-sm btn-primary mr-2" submit>Save</button>
-                                                <button class="btn btn-sm btn-default mr-2 border" cancel>Cancel</button>
-                                            </div>
-                                        </form>
-                                    </div>
-                                @endif
-                                @if(!!$programMonth)
-                                    @if($minutes)
-                                        <?php $entries = $measurement->entriesByPro($pro); ?>
-                                        <div class="ml-auto">
-                                        @foreach($entries as $entry)
-                                            <div class="d-flex align-items-start mb-1 pr-2">
-                                                <span class="width-200px text-sm text-right pr-2 text-secondary">{{ $entry->quick_text }}</span>
-                                                <span class="pr-2 text-sm">
-                                                    <i class="fa fa-clock text-secondary on-hover-opaque"></i>
-                                                    {{ minutes_to_hhmm($entry->time_in_minutes) }}
-                                                </span>
-                                                <span class="text-sm font-weight-bold">
-                                                    ${{ round($pro->hourly_rate * ($entry->time_in_minutes / 60), 1) }}
-                                                </span>
-                                            </div>
-                                        @endforeach
-                                        </div>
-                                    @else
-                                        <span class="ml-auto pr-2 text-secondary"><i class="fa fa-exclamation-triangle"></i>&nbsp;Entry pending</span>
-                                    @endif
-                                @elseif($filter === '')
-                                    <span class="ml-auto pr-2 text-secondary">Entry pending</span>
-                                @endif
-                            </div>
+                            @include('app/patient/partials/measurement', ['measurement' => $measurement, 'child' => false])
+                            @foreach($measurement->childMeasurements() as $childMeasurement)
+                                @include('app/patient/partials/measurement', ['measurement' => $childMeasurement, 'child' => true])
+                            @endforeach
                         @endforeach
                         @if(!count($programMeasurements))
                             <div class="text-secondary py-1 px-2 border-0">