Parcourir la source

Stat tree edit (wip)

Vijayakrishnan il y a 3 ans
Parent
commit
d942953e00

+ 35 - 0
app/Http/Controllers/ClauseController.php

@@ -61,4 +61,39 @@ class ClauseController extends Controller
         return $this->pass();
     }
 
+    // eps
+    public function create(Request $request) {
+        $clause = new Clause();
+        $nextId = DB::select("select nextval('clause_id_seq')");
+        $clause->id = $nextId[0]->nextval;
+        $clause->uid = Uuid::uuid4();
+        $clause->model = $request->input('model');
+        $clause->question = $request->input('question');
+        $clause->answer = $request->input('answer');
+        $clause->label = $request->input('label');
+        $clause->clause_text = $request->input('clauseText');
+        $positionIndex = DB::select('select max(position_index) from clause');
+        $clause->position_index = $positionIndex[0]->max + 1;
+        $clause->save();
+        return $this->pass();
+    }
+    public function update(Request $request) {
+        $clause = Clause::where('uid', $request->input('uid'))->first();
+        if(!$clause) return $this->fail('Clause not found!');
+        $clause->model = $request->input('model');
+        $clause->question = $request->input('question');
+        $clause->answer = $request->input('answer');
+        $clause->label = $request->input('label');
+        $clause->clause_text = $request->input('clauseText');
+        $clause->save();
+        return $this->pass();
+    }
+    public function remove(Request $request) {
+        $clause = Clause::where('uid', $request->input('uid'))->first();
+        if(!$clause) return $this->fail('Clause not found!');
+        // TODO: allow only if this clause isn't used anywhere
+        DB::select("delete from clause where id = {$clause->id}");
+        return $this->pass();
+    }
+
 }

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

@@ -60,6 +60,10 @@ class StatTreeController extends Controller
         return $this->pass($statTree->uid);
     }
 
+    public function edit(Request $request, StatTree $statTree) {
+        return view('app.stat-tree.stat-trees.sub.edit', compact('statTree'));
+    }
+
     public function delete(Request $request){
         $request->validate([
             'id' => 'required'

+ 24 - 0
public/css/style.css

@@ -2736,4 +2736,28 @@ table.stag-compact-grid>tbody>tr>td [if-grid-view] {
 }
 .stat-tree-view .stat-tree-node {
     padding: 0.1rem 0.3rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 1.5rem
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 2.6rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 3.7rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 4.8rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+     padding-left: 5.9rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 7rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 8.1rem;
+}
+.stat-tree-view>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node+.stat-tree-children>.stat-tree-node {
+    padding-left: 9.2rem;
 }

+ 87 - 0
resources/views/app/stat-tree/clauses-edit.blade.php

@@ -0,0 +1,87 @@
+<?php
+$clauses = \App\Models\Clause::orderBy('position_index')->get();
+?>
+<div class="d-flex align-items-baseline mb-2">
+    <h6 class="font-weight-bold m-0">Available Clauses</h6>
+    <div moe relative wide class="ml-3">
+        <a href="#" start show>+ Add</a>
+        <form url="{{ route("practice-management.api.clause.create") }}" class="frm-clause-add-edit">
+            @csrf
+            <div class="mb-2">
+                <label class="text-secondary text-sm mb-1">Model</label>
+                <input type="text" class="form-control form-control-sm" name="model">
+            </div>
+            <div class="mb-2">
+                <label class="text-secondary text-sm mb-1">Question</label>
+                <input type="text" class="form-control form-control-sm" name="question">
+            </div>
+            <div class="mb-2">
+                <label class="text-secondary text-sm mb-1">Answer</label>
+                <input type="text" class="form-control form-control-sm" name="answer">
+            </div>
+            <div class="mb-2">
+                <label class="text-secondary text-sm mb-1">Label</label>
+                <input type="text" class="form-control form-control-sm" name="label" readonly>
+            </div>
+            <div class="mb-2">
+                <label class="text-secondary text-sm mb-1">Clause Text</label>
+                <input type="text" class="form-control form-control-sm" name="clauseText">
+            </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>
+</div>
+<div class="border mb-3 p-2">
+    @foreach($clauses as $clause)
+        <div class="px-1 py-1 d-flex align-items-baseline on-hover-aliceblue border-bottom">
+            <span class="flex-grow-1">{{$clause->label}}</span>
+            <div moe relative wide class="ml-auto mr-2">
+                <a href="#" start show><i class="text-sm fa fa-edit on-hover-opaque"></i></a>
+                <form url="{{ route("practice-management.api.clause.update") }}" class="frm-clause-add-edit">
+                    @csrf
+                    <input type="hidden" name="uid" value="{{$clause->uid}}">
+                    <div class="mb-2">
+                        <label class="text-secondary text-sm mb-1">Model</label>
+                        <input type="text" class="form-control form-control-sm" name="model" value="{{@$clause->model}}">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-secondary text-sm mb-1">Question</label>
+                        <input type="text" class="form-control form-control-sm" name="question" value="{{@$clause->question}}">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-secondary text-sm mb-1">Answer</label>
+                        <input type="text" class="form-control form-control-sm" name="answer" value="{{@$clause->answer}}">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-secondary text-sm mb-1">Label</label>
+                        <input type="text" class="form-control form-control-sm" name="label" readonly value="{{@$clause->label}}">
+                    </div>
+                    <div class="mb-2">
+                        <label class="text-secondary text-sm mb-1">Clause Text</label>
+                        <input type="text" class="form-control form-control-sm" name="clauseText" value="{{@$clause->clause_text}}">
+                    </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>
+            <div moe relative">
+            <a href="#" start show><i class="text-sm fa fa-trash-alt on-hover-opaque text-danger"></i></a>
+            <form url="{{ route("practice-management.api.clause.remove") }}">
+                @csrf
+                <input type="hidden" name="uid" value="{{$clause->uid}}">
+                <p>Are you sure?</p>
+                <div class="d-flex align-items-center">
+                    <button class="btn btn-sm btn-danger mr-2" type="button" submit>Remove</button>
+                    <button class="btn btn-sm btn-default mr-2 border" type="button" cancel>Cancel</button>
+                </div>
+            </form>
+        </div>
+        </div>
+    @endforeach
+</div>
+

+ 7 - 1
resources/views/app/stat-tree/stat-trees/list.blade.php

@@ -26,15 +26,21 @@
                                                 <th class="border-0">Name</th>
                                                 <th class="border-0">Model</th>
                                                 <th class="border-0">Slug</th>
+                                                <th class="border-0"></th>
                                             </tr>
                                         </thead>
                                         <tbody>
                                             @foreach($statTrees as $statTree)
                                             <tr>
-                                                <td><a href="{{ route('practice-management.statTrees.view.dashboard', $statTree) }}">{{ $statTree->id }}</a></td>
+                                                <td>
+                                                    <a href="{{ route('practice-management.statTrees.view.dashboard', $statTree) }}">{{ $statTree->id }}</a>
+                                                </td>
                                                 <td>{{ $statTree->name }}</td>
                                                 <td>{{ $statTree->model }}</td>
                                                 <td>{{ $statTree->slug }}</td>
+                                                <td>
+                                                    <a href="{{ route('practice-management.statTrees.view.edit', $statTree) }}">Edit</a>
+                                                </td>
                                             </tr>
                                             @endforeach
                                         </tbody>

+ 1 - 1
resources/views/app/stat-tree/stat-trees/sub/dashboard2.blade.php

@@ -5,7 +5,7 @@
     <div id="statTreeView" class="row">
         @if(count($statTree->lines))
             <div class="col-12">
-                <div class="d-flex align-items-center justify-content-between mb-2">
+                <div class="d-flex align-items-end justify-content-between mb-2">
                     <h6 class="font-weight-bold m-0">{{$statTree->name}}</h6>
                     <div class="ml-auto">
                         <button @click="refreshTreeCountQueries" class="btn btn-sm btn-danger text-white">

+ 33 - 0
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -0,0 +1,33 @@
+@extends('app.stat-tree.stat-trees.single')
+@section('page')
+
+    <div id="statTreeEdit">
+        <div id="statTreeView" class="row">
+            @if(count($statTree->lines))
+                <div class="col-4 pr-0">
+                    @include('app.stat-tree.clauses-edit')
+                </div>
+                <div class="col-8">
+                    @include('app.stat-tree.tree-edit', ['slug' => 'rm-tree'])
+                </div>
+            @endif
+
+        </div>
+    </div>
+    <script>
+        (function() {
+            function init() {
+                $(document)
+                    .off('input change paste', '.frm-clause-add-edit input[name="question"], .frm-clause-add-edit input[name="answer"]')
+                    .on('input change paste', '.frm-clause-add-edit input[name="question"], .frm-clause-add-edit input[name="answer"]', function() {
+                        let form = $(this).closest('.frm-clause-add-edit');
+                        let label = $.trim(form.find('input[name="question"]').val()) + ' ' +
+                            $.trim(form.find('input[name="answer"]').val());
+                        form.find('input[name="label"]').val(label);
+                    });
+            }
+            addMCInitializer('stat-tree-edit-page', init, '#statTreeEdit')
+        }).call(window);
+    </script>
+
+@endsection

+ 54 - 0
resources/views/app/stat-tree/tree-edit.blade.php

@@ -0,0 +1,54 @@
+<?php
+if (!function_exists('renderStatTreeLineNodeEdit')) {
+    function renderStatTreeLineNodeEdit($line)
+    {
+        ?>
+        <div class="stat-tree-node d-flex align-items-baseline py-1 border-bottom on-hover-aliceblue">
+            <span>{{$line->displayLabel()}}</span>
+            <span class="ml-2 text-secondary">({{(is_null($line->last_refresh_count) ? '-' : $line->last_refresh_count)}})</span>
+            <div moe relative wide class="ml-auto mr-2">
+                <a href="#" start show><i class="text-sm fa fa-edit on-hover-opaque"></i></a>
+                <form url="#">Foobar</form>
+            </div>
+            <div moe relative wide class="mr-2">
+                <a href="#" start show><i class="text-sm fa fa-trash-alt on-hover-opaque text-danger"></i></a>
+                <form url="#">Foobar</form>
+            </div>
+            <div moe relative wide class="mr-2">
+                <a href="#" start show><i class="text-sm fa fa-arrows-alt text-info"></i></a>
+                <form url="#">+ Child</form>
+            </div>
+            <div moe relative wide>
+                <a href="#" start show class="text-sm">+ Child</a>
+                <form url="#">Move</form>
+            </div>
+        </div>
+        <?php
+        if (count($line->children)) {
+            echo '<div class="stat-tree-children">';
+            foreach ($line->children as $child) {
+                renderStatTreeLineNodeEdit($child);
+            }
+            echo '</div>';
+        }
+    }
+}
+$statTree = \App\Models\StatTree::where('slug', $slug)->first();
+?>
+@if(@$statTree)
+    <div class="d-flex align-items-baseline mb-2">
+        <h6 class="font-weight-bold m-0">{{$statTree->name}}</h6>
+        <div moe relative wide class="ml-3">
+            <a href="#" start show>+ Top Level</a>
+            <form url="#">Foobar</form>
+        </div>
+        <a href="#" class="ml-3">Refresh Counts</a>
+    </div>
+    <div class="stat-tree-view border mb-3">
+        @foreach($statTree->lines as $line)
+            @if(!$line->parent_stat_tree_line_id)
+                <?php renderStatTreeLineNodeEdit($line); ?>
+            @endif
+        @endforeach
+    </div>
+@endif

+ 4 - 0
routes/web.php

@@ -318,6 +318,7 @@ Route::middleware('pro.auth')->group(function () {
             Route::get('create', 'StatTreeController@createPage')->name('createPage');
             Route::name('view.')->prefix('view/{statTree}')->group(function () {
                 Route::get('', 'StatTreeController@dashboard2')->name('dashboard');
+                Route::get('edit', 'StatTreeController@edit')->name('edit');
                 Route::get('old', 'StatTreeController@dashboard')->name('dashboard2');
             });
         });
@@ -334,6 +335,9 @@ Route::middleware('pro.auth')->group(function () {
             //Clause
             Route::name('clause.')->prefix('clause/')->group(function () {
                 Route::post('replace-all', 'ClauseController@replaceAll')->name('replaceAll');
+                Route::post('create', 'ClauseController@create')->name('create');
+                Route::post('update', 'ClauseController@update')->name('update');
+                Route::post('remove', 'ClauseController@remove')->name('remove');
             });
 
             //Stat Tree