StatTreeLine.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Facades\DB;
  6. use Ramsey\Uuid\Uuid;
  7. class StatTreeLine extends Model
  8. {
  9. protected $table = 'stat_tree_line';
  10. public $timestamps = false;
  11. public function getRouteKeyName()
  12. {
  13. return 'uid';
  14. }
  15. public function lineClauses(){
  16. return $this->hasMany(StatTreeLineClause::class, 'stat_tree_line_id', 'id')
  17. ->orderBy('position_index');
  18. }
  19. public function statTree(){
  20. return $this->hasOne(StatTree::class, 'id', 'stat_tree_id');
  21. }
  22. public function parent(){
  23. return $this->hasOne(StatTreeLine::class, 'id', 'parent_stat_tree_line_id');
  24. }
  25. public function children(){
  26. return $this->hasMany(StatTreeLine::class, 'parent_stat_tree_line_id', 'id')
  27. ->orderBy('tree_order_position_index');
  28. }
  29. public function reportColumns(){
  30. return $this->hasMany(StatTreeLineReportColumn::class, 'stat_tree_line_id', 'id')
  31. ->orderBy('position_index');
  32. }
  33. public function displayLabel() {
  34. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  35. ->orderBy('position_index', 'DESC')
  36. ->first();
  37. if($lastStatTreeLineClause) {
  38. return $lastStatTreeLineClause->clause_label;
  39. }
  40. return '-';
  41. }
  42. public function displayLineClause() {
  43. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  44. ->orderBy('position_index', 'DESC')
  45. ->first();
  46. if($lastStatTreeLineClause) {
  47. return $lastStatTreeLineClause;
  48. }
  49. return null;
  50. }
  51. public function columnsJSON() {
  52. $columns = [];
  53. foreach ($this->reportColumns as $column) {
  54. $columns[] = [
  55. "label" => $column->label,
  56. "display_key" => $column->display_key,
  57. ];
  58. }
  59. return json_encode($columns);
  60. }
  61. public function argsJSON() {
  62. $args = [];
  63. $displayLineClause = $this->displayLineClause();
  64. if(!!$displayLineClause) {
  65. foreach($displayLineClause->statTreeLineClauseArgs as $stlcArg) {
  66. $args[] = [
  67. "uid" => $stlcArg->uid,
  68. "arg_text" => $stlcArg->clauseArg->arg_text,
  69. "field_type" => $stlcArg->clauseArg->field_type,
  70. "default_value" => $stlcArg->default_value,
  71. "access_level" => $stlcArg->access_level,
  72. ];
  73. }
  74. }
  75. return json_encode($args);
  76. }
  77. public function copy($newParentStatTreeLine, StatTree $newStatTree) {
  78. // create line
  79. $newStatTreeLine = new StatTreeLine;
  80. $nextId = DB::select("select nextval('stat_tree_line_id_seq')");
  81. $newStatTreeLine->id = $nextId[0]->nextval;
  82. $newStatTreeLine->uid = Uuid::uuid4();
  83. $newStatTreeLine->stat_tree_id = $newStatTree->id;
  84. $newStatTreeLine->tree_order_position_index = $this->tree_order_position_index;
  85. $newStatTreeLine->parent_stat_tree_line_id = $newParentStatTreeLine ? $newParentStatTreeLine->id : null;
  86. $newStatTreeLine->save();
  87. // line clauses
  88. foreach ($this->lineClauses as $srcLineClause) {
  89. $nextId = DB::select("select nextval('stat_tree_line_clause_id_seq')");
  90. $newStatTreeLineClause = new StatTreeLineClause;
  91. $newStatTreeLineClause->id = $nextId[0]->nextval;
  92. $newStatTreeLineClause->uid = Uuid::uuid4();
  93. $newStatTreeLineClause->stat_tree_line_id = $newStatTreeLine->id;
  94. $newStatTreeLineClause->clause_id = $srcLineClause->clause_id;
  95. $newStatTreeLineClause->clause_label = $srcLineClause->clause_label;
  96. $newStatTreeLineClause->position_index = $srcLineClause->position_index;
  97. $newStatTreeLineClause->stat_tree_id = $newStatTree->id;
  98. $newStatTreeLineClause->save();
  99. // line clause args
  100. foreach ($srcLineClause->statTreeLineClauseArgs as $srcLineClauseArg) {
  101. $newStatTreeLineClauseArg = new StatTreeLineClauseArg();
  102. $nextId = DB::select("select nextval('stat_tree_line_clause_arg_id_seq')");
  103. $newStatTreeLineClauseArg->id = $nextId[0]->nextval;
  104. $newStatTreeLineClauseArg->stat_tree_line_clause_id = $newStatTreeLineClause->id;
  105. $newStatTreeLineClauseArg->clause_arg_id = $srcLineClauseArg->clause_arg_id;
  106. $newStatTreeLineClauseArg->access_level = $srcLineClauseArg->access_level;
  107. $newStatTreeLineClauseArg->stat_tree_id = $newStatTree->id;
  108. $newStatTreeLineClauseArg->default_value = $srcLineClauseArg->default_value;
  109. $newStatTreeLineClauseArg->save();
  110. }
  111. }
  112. foreach ($this->children as $child) {
  113. $child->copy($newStatTreeLine, $newStatTree);
  114. }
  115. }
  116. }