Browse Source

Stat tree edit (wip)

Vijayakrishnan 3 years ago
parent
commit
6294100186

+ 44 - 0
app/Http/Controllers/ClauseArgController.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\ClauseArg;
+use Illuminate\Http\Request;
+use App\Models\Clause;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\DB;
+use Ramsey\Uuid\Uuid;
+use App\Models\StatTree;
+use App\Models\StatTreeLine;
+use App\Models\StatTreeLineClause;
+
+class ClauseArgController extends Controller
+{
+
+    // eps
+    public function create(Request $request) {
+        $clauseArg = new ClauseArg();
+        $nextId = DB::select("select nextval('clause_arg_id_seq')");
+        $clauseArg->id = $nextId[0]->nextval;
+        $clauseArg->clause_id = $request->input('clauseId');
+        $clauseArg->arg_text = $request->input('argText');
+        $clauseArg->field_type = $request->input('fieldType');
+        $clauseArg->save();
+        return $this->pass();
+    }
+    public function update(Request $request) {
+        $clauseArg = ClauseArg::where('uid', $request->input('uid'))->first();
+        if(!$clauseArg) return $this->fail('Clause arg not found!');
+        $clauseArg->arg_text = $request->input('arg_text');
+        $clauseArg->field_type = $request->input('field_type');
+        $clauseArg->save();
+        return $this->pass();
+    }
+    public function remove(Request $request) {
+        $clauseArg = ClauseArg::where('uid', $request->input('uid'))->first();
+        if(!$clauseArg) return $this->fail('Clause arg not found!');
+        DB::select("delete from clause_arg where id = {$clauseArg->id}");
+        return $this->pass();
+    }
+
+}

+ 4 - 0
app/Models/Clause.php

@@ -9,4 +9,8 @@ class Clause extends Model
 {    
     protected $table = 'clause';
     public $timestamps = false;
+
+    public function clauseArgs() {
+        return $this->hasMany(ClauseArg::class, 'clause_id', 'id')->orderBy('id');
+    }
 }

+ 13 - 0
app/Models/ClauseArg.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class ClauseArg extends Model
+{    
+    protected $table = 'clause_arg';
+    public $timestamps = false;
+
+}

+ 8 - 3
public/css/style.css

@@ -2780,9 +2780,14 @@ body .vakata-context li>a>i {
 body .vakata-context li>a .vakata-contextmenu-sep {
     display: none;
 }
-body .clauses-view li>i.jstree-icon {
+/*body .clauses-view li>i.jstree-icon {
     display: none;
-}
+}*/
 body .jstree {
     margin-left: -.5rem;
-}
+}
+body #vakata-dnd {
+    font-family: Verdana, sans-serif;
+    font-size: 12px;
+    background: rgba(240, 248, 255, 0.76);
+}

+ 34 - 1
resources/views/app/stat-tree/clauses-edit.blade.php

@@ -36,8 +36,16 @@
     @foreach($clauses as $clause)
         <li class="jstree-open">
             <div class="d-inline-flex align-items-baseline st-node clause" data-clause-id="{{$clause->id}}">
-                <span class="flex-grow-1">{{$clause->label}}</span>
+                <span class="flex-grow-1">{{$clause->label}}{{-- @if(count($clause->clauseArgs))<span class="text-sm text-secondary">({{count($clause->clauseArgs)}} arg{{count($clause->clauseArgs) !== 1 ? 's' : ''}})</span>@endif --}}</span>
             </div>
+            @if($clause->clauseArgs && count($clause->clauseArgs))
+                <ul>
+                    <li data-jstree='{"icon":"fa fa-laptop-code text-primary text-sm"}'>{{$clause->clause_text}}</li>
+                @foreach($clause->clauseArgs as $clauseArg)
+                    <li data-jstree='{"icon":"fa fa-cubes text-info"}'>{{$clauseArg->arg_text}} <span class="text-secondary text-sm">({{$clauseArg->field_type}})</span></li>
+                @endforeach
+                </ul>
+            @endif
         </li>
     @endforeach
     </ul>
@@ -92,6 +100,31 @@
                         </div>
                     </form>
                 </div>
+                <div moe relative center class="add-clause-arg-moe-{{$clause->id}}">
+                    <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.clauseArg.create") }}" center>
+                        @csrf
+                        <input type="hidden" name="clauseId" value="{{$clause->id}}">
+                        <div class="mb-2">
+                            <label class="text-secondary text-sm mb-1">Arg Text</label>
+                            <input type="text" class="form-control form-control-sm" name="argText" required>
+                        </div>
+                        <div class="mb-2">
+                            <label class="text-secondary text-sm mb-1">Field Type</label>
+                            <select class="form-control form-control-sm" name="fieldType" required>
+                                <option value="">-- select --</option>
+                                <option value="number">Number</option>
+                                <option value="date">Date</option>
+                                <option value="string">String</option>
+                                <option value="bool">Boolean</option>
+                            </select>
+                        </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>
         @endforeach
     </ul>

+ 30 - 21
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -198,21 +198,18 @@
                             "multiple": false,
                             "animation": 0
                         },
-                        "dnd": {
-                            "use_html5": true
-                        },
                         "contextmenu": {
                             show_at_node: false,
                             items: function ($node) {
                                 return {
-                                    /*"cols": {
-                                        "label": "<span class='text-sm'>Report Columns</span>",
+                                    "data": {
+                                        "label": "<span class='text-sm'>View Data</span>",
                                         "action": function (obj) {
 
                                         },
-                                    },*/
+                                    },
                                     "remove": {
-                                        "label": "<span class='text-sm'>Remove</span>",
+                                        "label": "<span class='text-sm'>Remove Node</span>",
                                         "action": function (obj) {
                                             let id = $(obj.reference).find('>div.stat-tree-line').attr('data-line-id');
                                             $('.remove-line-moe-' + id).find('a[start]').trigger('click');
@@ -238,24 +235,36 @@
                             "animation": 0
                         },
                         "dnd": {
-                            "use_html5": true
+                            "is_draggable": function(_node, _e) {
+                                return $('#' + _node[0].id).find('>a.jstree-anchor>.clause').length === 1;
+                            }
                         },
                         "contextmenu": {
                             show_at_node: false,
                             items: function ($node) {
-                                return {
-                                    "edit": {
-                                        "label": "<span class='text-sm'>Edit</span>",
-                                        "action": function (obj) {
-                                            let id = $(obj.reference).find('>div.clause').attr('data-clause-id');
-                                            $('.edit-clause-moe-' + id).find('a[start]').trigger('click');
-                                        }
-                                    },
-                                    "remove": {
-                                        "label": "<span class='text-sm'>Remove</span>",
-                                        "action": function (obj) {
-                                            let id = $(obj.reference).find('>div.clause').attr('data-clause-id');
-                                            $('.remove-clause-moe-' + id).find('a[start]').trigger('click');
+                                console.log($node);
+                                if($('#' + $node.id).find('>a.jstree-anchor>.clause').length === 1) { // clause
+                                    return {
+                                        "edit": {
+                                            "label": "<span class='text-sm'>Edit Clause</span>",
+                                            "action": function (obj) {
+                                                let id = $(obj.reference).find('>div.clause').attr('data-clause-id');
+                                                $('.edit-clause-moe-' + id).find('a[start]').trigger('click');
+                                            }
+                                        },
+                                        "remove": {
+                                            "label": "<span class='text-sm'>Remove Clause</span>",
+                                            "action": function (obj) {
+                                                let id = $(obj.reference).find('>div.clause').attr('data-clause-id');
+                                                $('.remove-clause-moe-' + id).find('a[start]').trigger('click');
+                                            }
+                                        },
+                                        "add_arg": {
+                                            "label": "<span class='text-sm'>Add Clause Arg</span>",
+                                            "action": function (obj) {
+                                                let id = $(obj.reference).find('>div.clause').attr('data-clause-id');
+                                                $('.add-clause-arg-moe-' + id).find('a[start]').trigger('click');
+                                            }
                                         }
                                     }
                                 }

+ 7 - 0
routes/web.php

@@ -342,6 +342,13 @@ Route::middleware('pro.auth')->group(function () {
                 Route::post('remove', 'ClauseController@remove')->name('remove');
             });
 
+            //Clause Arg
+            Route::name('clauseArg.')->prefix('clause-arg/')->group(function () {
+                Route::post('create', 'ClauseArgController@create')->name('create');
+                Route::post('update', 'ClauseArgController@update')->name('update');
+                Route::post('remove', 'ClauseArgController@remove')->name('remove');
+            });
+
             //Stat Tree
             Route::name('statTree.')->prefix('stat-tree/')->group(function () {
                 Route::post('create', 'StatTreeController@create')->name('create');