Vijayakrishnan 3 лет назад
Родитель
Сommit
b71746ab6c

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

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Models\StatTreeLineClauseArg;
 use App\Models\StatTreeLineReportColumn;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
@@ -143,6 +144,25 @@ class StatTreeController extends Controller
                 $statTreeLineClause->detail_json = json_encode(['model' => $model]);
                 $statTreeLineClause->stat_tree_id = $statTree->id;
                 $statTreeLineClause->save();
+
+                // check if the clause has any clauseArgs, if yes, create stat-tree-line-clause-arg and value records for them
+                if(count($clause->clauseArgs)) {
+                    foreach ($clause->clauseArgs as $clauseArg) {
+                        $statTreeLineClauseArg = new StatTreeLineClauseArg();
+                        $nextId = DB::select("select nextval('stat_tree_line_clause_arg_id_seq')");
+                        $statTreeLineClauseArg->id = $nextId[0]->nextval;
+                        $statTreeLineClauseArg->stat_tree_line_clause_id = $statTreeLineClause->id;
+                        $statTreeLineClauseArg->clause_arg_id = $clauseArg->id;
+                        $statTreeLineClauseArg->access_level = 'ADMIN';
+                        $statTreeLineClauseArg->stat_tree_id = $statTree->id;
+                        $statTreeLineClauseArg->default_value = null;
+
+                        // TODO: need to copy clause arg values from parent node for all except last clause
+
+                        $statTreeLineClauseArg->save();
+                    }
+                }
+
                 $allClauses[] = $cell;
 
                 // fill report columns (if last clause)

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

@@ -36,11 +36,6 @@ class StatTreeLineController extends Controller
         return view('app.stat-tree.stat-tree-lines.single', compact('statTreeLine', 'response'));
     }
 
-    public function reportColumns(Request $request, StatTreeLine $line)
-    {
-        return view('app.stat-tree.stat-tree-lines.report-columns', compact('line'));
-    }
-
     public function columnSuggest(Request $request) {
         $term = $request->input('term') ? trim($request->input('term')) : '';
         if (empty($term)) return '';

+ 25 - 0
app/Models/StatTreeLine.php

@@ -41,6 +41,15 @@ class StatTreeLine extends Model
         }
         return '-';
     }
+    public function displayLineClause() {
+        $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
+            ->orderBy('position_index', 'DESC')
+            ->first();
+        if($lastStatTreeLineClause) {
+            return $lastStatTreeLineClause;
+        }
+        return null;
+    }
     public function columnsJSON() {
         $columns = [];
         foreach ($this->reportColumns as $column) {
@@ -51,4 +60,20 @@ class StatTreeLine extends Model
         }
         return json_encode($columns);
     }
+    public function argsJSON() {
+        $args = [];
+        $displayLineClause = $this->displayLineClause();
+        if(!!$displayLineClause) {
+            foreach($displayLineClause->statTreeLineClauseArgs as $stlcArg) {
+                $args[] = [
+                    "uid" => $stlcArg->uid,
+                    "arg_text" => $stlcArg->clauseArg->arg_text,
+                    "field_type" => $stlcArg->clauseArg->field_type,
+                    "default_value" => $stlcArg->default_value,
+                    "access_level" => $stlcArg->access_level,
+                ];
+            }
+        }
+        return json_encode($args);
+    }
 }

+ 5 - 2
app/Models/StatTreeLineClause.php

@@ -11,8 +11,11 @@ class StatTreeLineClause extends Model
     public $timestamps = false;
 
     public function clause(){
-        $detailJson = json_decode($this->detail_json);
-        return $this->hasOne(Clause::class, 'label', 'clause_label')->where('model', 'ilike', $detailJson->model);
+        return $this->hasOne(Clause::class, 'id', 'clause_id');
+    }
+
+    public function statTreeLineClauseArgs() {
+        return $this->hasMany(StatTreeLineClauseArg::class, 'stat_tree_line_clause_id', 'id')->orderBy('id');
     }
 
 }

+ 17 - 0
app/Models/StatTreeLineClauseArg.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class StatTreeLineClauseArg extends Model
+{
+    public $table = 'stat_tree_line_clause_arg';
+    public $timestamps = false;
+
+    public function clauseArg(){
+        return $this->hasOne(ClauseArg::class, 'id', 'clause_arg_id');
+    }
+
+}

+ 55 - 0
resources/views/app/stat-tree/stat-tree-lines/line-properties.blade.php

@@ -0,0 +1,55 @@
+<div id="line-properties-column" class="d-none">
+
+    <div class="d-flex align-items-baseline mb-2">
+        <h6 class="font-weight-bold m-0">Argument Values</h6>
+    </div>
+    <div>
+        <table class="table table-sm table-bordered table-striped">
+            <thead>
+            <tr>
+                <th class="border-bottom-0 w-35">Arg</th>
+                <th class="border-bottom-0 w-35">Value</th>
+                <th class="border-bottom-0">Access</th>
+            </tr>
+            </thead>
+            <tbody line-args>
+            </tbody>
+        </table>
+    </div>
+
+    <div class="d-flex align-items-baseline mb-2">
+        <h6 class="font-weight-bold m-0">Report Columns</h6>
+    </div>
+    <div>
+        <div class="mb-2 d-flex align-items-baseline">
+            <span class="text-secondary mr-1">Node:</span>
+            <span line-label></span>
+        </div>
+        <div class="mb-2 d-flex align-items-baseline">
+            <span class="text-secondary mr-1 text-nowrap">Quick Add:</span>
+            <div class="flex-grow-1 position-relative">
+                <input type="text"
+                       name="displayKey"
+                       class="form-control form-control-sm"
+                       placeholder="Column name"
+                       stag-suggest stag-suggest-left
+                       stag-suggest-ep="/column-suggest"
+                       stag-suggest-extra="table={{$statTree->model}}"
+                       autocomplete="donotdoit">
+            </div>
+        </div>
+        <table class="table table-sm table-bordered table-striped">
+            <thead>
+            <tr>
+                <th class="border-bottom-0 width-30px">#</th>
+                <th class="border-bottom-0 w-35">Label</th>
+                <th class="border-bottom-0">Column</th>
+                <th class="border-bottom-0 width-60px"></th>
+            </tr>
+            </thead>
+            <tbody line-columns>
+            </tbody>
+        </table>
+    </div>
+
+</div>

+ 0 - 75
resources/views/app/stat-tree/stat-tree-lines/report-columns.blade.php

@@ -1,75 +0,0 @@
-<div class="mb-2 d-flex align-items-baseline">
-    <span class="text-secondary mr-1">Node:</span>
-    <span line-label></span>
-</div>
-<div class="mb-2 d-flex align-items-baseline">
-    <span class="text-secondary mr-1 text-nowrap">Quick Add:</span>
-    <div class="flex-grow-1 position-relative">
-        <input type="text"
-               name="displayKey"
-               class="form-control form-control-sm"
-               placeholder="Column name"
-               stag-suggest stag-suggest-left
-               stag-suggest-ep="/column-suggest"
-               stag-suggest-extra="table={{$statTree->model}}"
-               autocomplete="donotdoit">
-    </div>
-</div>
-<table class="table table-sm table-bordered table-striped">
-    <thead>
-    <tr>
-        <th class="border-bottom-0 width-30px">#</th>
-        <th class="border-bottom-0 w-35">Label</th>
-        <th class="border-bottom-0">Column</th>
-        <th class="border-bottom-0 width-60px"></th>
-    </tr>
-    </thead>
-    <tbody line-columns>
-        {{--
-        @if(!count($line->reportColumns))
-            <tr>
-                <td colspan="3">Nothing yet!</td>
-            </tr>
-        @else
-            @foreach($line->reportColumns as $column)
-                <tr>
-                    <td>{{$column->position_index}}</td>
-                    <td>{{$column->label}}</td>
-                    <td>{{$column->display_key}}</td>
-                    <td class="text-nowrap">
-                        <div moe relative wide class="mr-2">
-                            <a href="#" start show><i class="text-sm fa fa-edit on-hover-opaque"></i></a>
-                            <form url="{{ route("practice-management.api.statTreeLineReportColumn.update") }}" right>
-                                @csrf
-                                <input type="hidden" name="uid" value="{{$column->uid}}">
-                                <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" value="{{@$column->label}}">
-                                </div>
-                                <div class="mb-2">
-                                    <label class="text-secondary text-sm mb-1">Column</label>
-                                    <input type="text"
-                                           name="displayKey"
-                                           data-line-id="{{$line->id}}"
-                                           class="form-control form-control-sm"
-                                           placeholder="Column name"
-                                           stag-suggest stag-suggest-left
-                                           stag-suggest-ep="/column-suggest"
-                                           stag-suggest-extra="table={{$line->statTree->model}}"
-                                           value="{{@$column->display_key}}"
-                                           autocomplete="donotdoit">
-                                </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>
-                        <a href="#" class="remove-column" data-uid="{{$column->uid}}"><i class="fa fa-trash-alt text-danger on-hover-opaque"></i></a>
-                    </td>
-                </tr>
-            @endforeach
-        @endif
-        --}}
-    </tbody>
-</table>

+ 27 - 10
resources/views/app/stat-tree/stat-trees/sub/edit.blade.php

@@ -11,12 +11,7 @@
                 @include('app.stat-tree.tree-edit-v2', ['slug' => $statTree->slug])
             </div>
             <div class="col-4 pl-3 border-left setup-column">
-                <div class="d-flex align-items-baseline mb-2">
-                    <h6 class="font-weight-bold m-0">Report Columns</h6>
-                </div>
-                <div id="report-column" class="d-none">
-                    @include('app.stat-tree.stat-tree-lines.report-columns')
-                </div>
+                @include('app.stat-tree.stat-tree-lines.line-properties')
             </div>
         </div>
 
@@ -45,6 +40,14 @@
                     return selected.find('>a.jstree-anchor>.st-node').first();
                 }
 
+                function getSelectedNodeArgs() {
+                    let selected = selectedNode();
+                    let argsField = selected.find('>[data-name="args"]').first();
+                    let args = argsField.val();
+                    if(!!args) return JSON.parse(args);
+                    return [];
+                }
+
                 function getSelectedNodeColumns() {
                     let selected = selectedNode();
                     let columnsField = selected.find('>[data-name="columns"]').first();
@@ -134,16 +137,30 @@
                 }
 
                 function onDeselected(_e, _data) {
-                    let rptColumn = $('#report-column').addClass('d-none');
+                    let rptColumn = $('#line-properties-column').addClass('d-none');
                 }
 
                 function onSelected(_e, _data) {
                     let selected = selectedNode();
 
-                    let rptColumn = $('#report-column').removeClass('d-none');
+                    let rptColumn = $('#line-properties-column').removeClass('d-none');
                     rptColumn.find('[line-label]').text(selected.find('>span').first().text());
 
-                    let tbody = rptColumn.find('[line-columns]');
+                    // fill args
+                    let tbody = rptColumn.find('[line-args]');
+                    let args = getSelectedNodeArgs();
+                    tbody.empty();
+                    if(args && args.length) {
+                        for (let i = 0; i < args.length; i++) {
+                            $('<tr/>')
+                                .append($('<td/>').html(args[i].arg_text + ' <span class="text-secondary text-sm">(' + args[i].field_type + ')</span>'))
+                                .append($('<td/>').text(args[i].default_value).append('<a href="#" class="edit-arg-value ml-2" data-uid="' + args[i].uid + '"><i class="fa fa-edit text-primary text-sm on-hover-opaque"></i></a>'))
+                                .append($('<td/>').text(args[i].access_level).append('<a href="#" class="edit-arg-access-level ml-2" data-uid="' + args[i].uid + '"><i class="fa fa-edit text-primary text-sm on-hover-opaque"></i></a>'))
+                                .appendTo(tbody);
+                        }
+                    }
+
+                    tbody = rptColumn.find('[line-columns]');
 
                     let columns = getSelectedNodeColumns();
 
@@ -265,7 +282,7 @@
                         ]
                     });
 
-                $('#report-column').find('input[stag-suggest][name="displayKey"]')
+                $('#line-properties-column').find('input[stag-suggest][name="displayKey"]')
                     .off('stag-suggest-selected')
                     .on('stag-suggest-selected', (_e, _input, _data) => {
                         let columns = getSelectedNodeColumns();

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

@@ -6,6 +6,7 @@ if (!function_exists('renderStatTreeLineNodeEdit')) {
         <li class="jstree-open">
         <div class="d-inline-flex align-items-baseline st-node stat-tree-line" data-line-id="{{$line->id}}" data-line-uid="{{$line->uid}}">
             <textarea class="d-none" data-name="columns">{!! $line->columnsJSON() !!}</textarea>
+            <textarea class="d-none" data-name="args">{!! $line->argsJSON() !!}</textarea>
             <span>{{$line->displayLabel()}}</span>
             <span class="ml-2 text-secondary">({{(is_null($line->last_refresh_count) ? '-' : $line->last_refresh_count)}})</span>
         </div>

+ 0 - 2
routes/web.php

@@ -328,7 +328,6 @@ Route::middleware('pro.auth')->group(function () {
             Route::name('view.')->prefix('view/{statTreeLine}')->group(function () {
                 Route::get('', 'StatTreeLineController@dashboard')->name('dashboard');
             });
-            Route::post('report-columns/{line}', 'StatTreeLineController@reportColumns')->name('report-columns');
             Route::get('view-data/{line}', 'StatTreeLineController@viewData')->name('view-data');
         });
 
@@ -362,7 +361,6 @@ Route::middleware('pro.auth')->group(function () {
 
             //Stat Tree Line
             Route::name('statTreeLine.')->prefix('stat-tree-line/')->group(function () {
-                Route::post('replace-all-report-columns', 'StatTreeLineController@replaceAllReportColumns')->name('replaceAllReportColumns');
                 Route::post('refresh-count-query', 'StatTreeLineController@refreshCountQuery')->name('refreshCountQuery');
                 Route::post('create', 'StatTreeLineController@create')->name('create');
                 Route::post('remove', 'StatTreeLineController@remove')->name('remove');