StatTreeLine.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. class StatTreeLine extends Model
  6. {
  7. protected $table = 'stat_tree_line';
  8. public $timestamps = false;
  9. public function getRouteKeyName()
  10. {
  11. return 'uid';
  12. }
  13. public function lineClauses(){
  14. return $this->hasMany(StatTreeLineClause::class, 'stat_tree_line_id', 'id')
  15. ->orderBy('position_index');
  16. }
  17. public function statTree(){
  18. return $this->hasOne(StatTree::class, 'id', 'stat_tree_id');
  19. }
  20. public function parent(){
  21. return $this->hasOne(StatTreeLine::class, 'id', 'parent_stat_tree_line_id');
  22. }
  23. public function children(){
  24. return $this->hasMany(StatTreeLine::class, 'parent_stat_tree_line_id', 'id')
  25. ->orderBy('tree_order_position_index');
  26. }
  27. public function reportColumns(){
  28. return $this->hasMany(StatTreeLineReportColumn::class, 'stat_tree_line_id', 'id')
  29. ->orderBy('position_index');
  30. }
  31. public function displayLabel() {
  32. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  33. ->orderBy('position_index', 'DESC')
  34. ->first();
  35. if($lastStatTreeLineClause) {
  36. return $lastStatTreeLineClause->clause_label;
  37. }
  38. return '-';
  39. }
  40. public function displayLineClause() {
  41. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  42. ->orderBy('position_index', 'DESC')
  43. ->first();
  44. if($lastStatTreeLineClause) {
  45. return $lastStatTreeLineClause;
  46. }
  47. return null;
  48. }
  49. public function columnsJSON() {
  50. $columns = [];
  51. foreach ($this->reportColumns as $column) {
  52. $columns[] = [
  53. "label" => $column->label,
  54. "display_key" => $column->display_key,
  55. ];
  56. }
  57. return json_encode($columns);
  58. }
  59. public function argsJSON() {
  60. $args = [];
  61. $displayLineClause = $this->displayLineClause();
  62. if(!!$displayLineClause) {
  63. foreach($displayLineClause->statTreeLineClauseArgs as $stlcArg) {
  64. $args[] = [
  65. "uid" => $stlcArg->uid,
  66. "arg_text" => $stlcArg->clauseArg->arg_text,
  67. "field_type" => $stlcArg->clauseArg->field_type,
  68. "default_value" => $stlcArg->default_value,
  69. "access_level" => $stlcArg->access_level,
  70. ];
  71. }
  72. }
  73. return json_encode($args);
  74. }
  75. }