Browse Source

Stat tree edit - simple pro scoping

Vijayakrishnan 3 years ago
parent
commit
ccfcca639c

+ 14 - 0
app/Http/Controllers/StatTreeController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Models\Pro;
 use App\Models\StatTreeLineClauseArg;
 use App\Models\StatTreeLineReportColumn;
 use Illuminate\Http\Request;
@@ -68,6 +69,13 @@ class StatTreeController extends Controller
         $statTree->name = $request->input('name');
         $statTree->model = $request->input('model');
         $statTree->slug = $request->input('slug');
+        if($request->input('proUid')) {
+            $pro = Pro::where('uid', $request->input('proUid'))->first();
+            if($pro) {
+                $statTree->pro_id = $pro->id;
+            }
+        }
+        $statTree->pro_scope_clause = $request->input('proScopeClause');
         $statTree->save();
         return $this->pass();
     }
@@ -315,6 +323,12 @@ class StatTreeController extends Controller
                 array_push($clauses, $clauseText);
             }
         }
+
+        // if stat tree bound to a pro, apply pro_scope_clause
+        if($statTreeLine->statTree->pro && $statTreeLine->statTree->pro_scope_clause) {
+            $clauses[] = str_replace('@PRO_ID', $statTreeLine->statTree->pro->id, $statTreeLine->statTree->pro_scope_clause);
+        }
+
         $query = 'SELECT COUNT(*) FROM '.$model.' WHERE '. implode(" AND ", $clauses);
         return DB::select($query);
     }

+ 5 - 13
app/Http/Controllers/StatTreeLineController.php

@@ -153,20 +153,7 @@ class StatTreeLineController extends Controller
     protected function queryStatTreeLineData(StatTreeLine $statTreeLine, $selectColumns)
     {
 
-
-
         $model = $statTreeLine->statTree->model;
-        // $query = null;
-        // if (strcasecmp($model, 'client') == 0) {
-        //     $query = Client::query();
-        // }
-        // if (strcasecmp($model, 'pro') == 0) {
-        //     $query = Pro::query();
-        // }
-        // if (!$query) return null;
-
-
-
 
         $clauses = [];
         foreach ($statTreeLine->lineClauses as $lineClause) {
@@ -177,6 +164,11 @@ class StatTreeLineController extends Controller
             }
         }
 
+        // if stat tree bound to a pro, apply pro_scope_clause
+        if($statTreeLine->statTree->pro && $statTreeLine->statTree->pro_scope_clause) {
+            $clauses[] = str_replace('@PRO_ID', $statTreeLine->statTree->pro->id, $statTreeLine->statTree->pro_scope_clause);
+        }
+
         $query = 'SELECT ' . implode(", ", $selectColumns) . ' FROM '.$model.' WHERE '. implode(" AND ", $clauses);
 
         return DB::select($query);

+ 4 - 0
app/Models/StatTree.php

@@ -16,6 +16,10 @@ class StatTree extends Model
         return 'uid';
     }
 
+    public function pro(){
+        return $this->hasOne(Pro::class, 'id', 'pro_id');
+    }
+
     public function lines(){
         return $this->hasMany(StatTreeLine::class, 'stat_tree_id', 'id')->orderBy('id', 'ASC');
     }

+ 62 - 46
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -4,54 +4,70 @@
     <script src="/jstree/jstree.min.js"></script>
     <div class="mcp-theme-1">
         <div class="card border-0 rounded-0 d-flex flex-column body-height">
-            <div class="card-header">
-                <div class="d-flex align-items-center justify-content-between">
-                    <div class="d-flex align-items-center">
-                        <div class="mr-3">
-                            <span>Name:</span>
-                            <span class="font-weight-bold">{{ $statTree->name }}</span>
-                        </div>
-                        <div class="mr-3">
-                            <span>Model:</span>
-                            <span class="font-weight-bold">{{ $statTree->model }}</span>
-                        </div>
+            <div class="card-header px-2 py-3 bg-aliceblue">
+                <div class="d-flex align-items-center">
+                    <a href="{{route('practice-management.statTrees.list')}}" class="small text-decoration-none mr-3">
+                        <i class="fa fa-chevron-left"></i>
+                    </a>
+                    <div class="mr-3">
+                        <span>Name:</span>
+                        <span class="font-weight-bold" title="Slug: {{ $statTree->slug }}">{{ $statTree->name }}</span>
+                    </div>
+                    <div class="mr-3 d-inline-flex">
+                        <span class="mr-1">Model:</span>
+                        <span class="font-weight-bold max-width-200px overflow-hidden text-ellipsis" title="{{ $statTree->model }}">{{ $statTree->model }}</span>
+                    </div>
+                    @if($statTree->pro_id)
                         <div class="mr-3">
-                            <span>Slug:</span>
-                            <span class="font-weight-bold">{{ $statTree->slug }}</span>
+                            <span>Pro:</span>
+                            <span class="font-weight-bold" title="Clause: {{ $statTree->pro_scope_clause }}">{{ $statTree->pro->displayName() }}</span>
                         </div>
-                        <div moe relative wide class="ml-auto">
-                            <a href="#" start show class="btn btn-sm btn-primary text-white">Edit</a>
-                            <form url="{{ route("practice-management.api.statTree.updateBasic") }}">
-                                @csrf
-                                <input type="hidden" name="uid" value="{{$statTree->uid}}">
-                                <div class="mb-2">
-                                    <label class="text-secondary text-sm mb-1">Name *</label>
-                                    <input type="text" class="form-control form-control-sm" name="name" value="{{$statTree->name}}" autofocus required>
-                                </div>
-                                <div class="mb-2">
-                                    <label class="text-secondary text-sm mb-1">Model *</label>
-                                    <input type="text" class="form-control form-control-sm" data-option-list="model-options" autocomplete="off" name="model" value="{{$statTree->model}}" required>
-                                    <div id="model-options" class="data-option-list">
-                                        <?php $models = \Illuminate\Support\Facades\DB::select('SELECT distinct(model) as m FROM clause order by model'); ?>
-                                        @foreach($models as $m)
-                                            <div>{!! $m->m !!}</div>
-                                        @endforeach
-                                    </div>
-                                </div>
-                                <div class="mb-2">
-                                    <label class="text-secondary text-sm mb-1">Slug *</label>
-                                    <input type="text" class="form-control form-control-sm" name="slug" value="{{$statTree->slug}}" required>
-                                </div>
-                                <div class="d-flex align-items-center">
-                                    <button class="btn btn-sm btn-primary mr-2" type="button" submit>Save</button>
-                                    <button class="btn btn-sm btn-default mr-2 border" type="button" cancel>Cancel</button>
+                    @endif
+                    <div moe relative wide class="">
+                        <a href="#" start show class=""><i class="fa fa-edit on-hover-opaque"></i></a>
+                        <form url="{{ route("practice-management.api.statTree.updateBasic") }}">
+                            @csrf
+                            <input type="hidden" name="uid" value="{{$statTree->uid}}">
+                            <div class="mb-2">
+                                <label class="text-secondary text-sm mb-1">Name *</label>
+                                <input type="text" class="form-control form-control-sm" name="name" value="{{$statTree->name}}" autofocus required>
+                            </div>
+                            <div class="mb-2">
+                                <label class="text-secondary text-sm mb-1">Model *</label>
+                                <input type="text" class="form-control form-control-sm" data-option-list="model-options" autocomplete="off" name="model" value="{{$statTree->model}}" required>
+                                <div id="model-options" class="data-option-list">
+                                    <?php $models = \Illuminate\Support\Facades\DB::select('SELECT distinct(model) as m FROM clause order by model'); ?>
+                                    @foreach($models as $m)
+                                        <div>{!! $m->m !!}</div>
+                                    @endforeach
                                 </div>
-                            </form>
-                        </div>
-                    </div>
-                    <div>
-                        <a href="{{route('practice-management.statTrees.list')}}" class="btn btn-sm btn-primary text-white"><i class="fas fa-network-wired"></i> View All Stat Trees</a>
+                            </div>
+                            <div class="mb-2">
+                                <label class="text-secondary text-sm mb-1">Slug *</label>
+                                <input type="text" class="form-control form-control-sm" name="slug" value="{{$statTree->slug}}" required>
+                            </div>
+                            <div class="mb-2">
+                                <label class="text-secondary text-sm mb-1">Pro</label>
+                                <select name="proUid" class="form-control input-sm" provider-search provider-type="hcp" data-pro-uid="{{ @$statTree->pro->uid }}">
+                                    <option value="">--select--</option>
+                                </select>
+                            </div>
+                            <div class="mb-2">
+                                <label class="text-secondary text-sm mb-1">Pro Scope Clause</label>
+                                <input type="text" class="form-control form-control-sm" name="proScopeClause" value="{{@$statTree->pro_scope_clause}}">
+                            </div>
+                            <div class="d-flex align-items-center">
+                                <button class="btn btn-sm btn-primary mr-2" type="button" submit>Save</button>
+                                <button class="btn btn-sm btn-default mr-2 border" type="button" cancel>Cancel</button>
+                            </div>
+                        </form>
                     </div>
+                    @if($statTree->pro_id)
+                        <a href="{{route('practice-management.statTrees.list')}}" class="text-decoration-none font-weight-bold text-primary ml-auto">
+                            <i class="fa fa-users mr-1"></i>
+                            Multi-Pro View
+                        </a>
+                    @endif
                 </div>
             </div>
             <div class="card-body p-0 flex-grow-1">
@@ -228,7 +244,7 @@
 
 
                     <!-- tree -->
-                    <div class="col-5 p-0 h-100 border-left tree-column">
+                    <div class="col-5 p-0 h-100 border-left border-right tree-column">
                         <div class="d-flex flex-column h-100">
                             <div class="d-flex align-items-center pl-2 height-35px border-bottom bg-light">
                                 <h6 class="font-weight-bold m-0 text-secondary">{{$statTree->name}}</h6>
@@ -249,7 +265,7 @@
 
 
                     <!-- selected line properties -->
-                    <div class="col-4 p-0 h-100 border-left setup-column d-none" id="line-properties-column">
+                    <div class="col-4 p-0 h-100 setup-column d-none" id="line-properties-column">
                         <div class="d-flex flex-column h-100">
                             <div class="d-flex align-items-center pl-2 height-35px border-bottom bg-light">
                                 <h6 class="font-weight-bold m-0 text-secondary">Selected Line Properties</h6>