StatTreeLine.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. }
  16. public function statTree(){
  17. return $this->hasOne(StatTree::class, 'id', 'stat_tree_id');
  18. }
  19. public function parent(){
  20. return $this->hasOne(StatTreeLine::class, 'id', 'parent_stat_tree_line_id');
  21. }
  22. public function children(){
  23. return $this->hasMany(StatTreeLine::class, 'parent_stat_tree_line_id', 'id')
  24. ->orderBy('tree_order_position_index');
  25. }
  26. public function reportColumns(){
  27. return $this->hasMany(StatTreeLineReportColumn::class, 'stat_tree_line_id', 'id')
  28. ->orderBy('position_index');
  29. }
  30. public function displayLabel() {
  31. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  32. ->orderBy('position_index', 'DESC')
  33. ->first();
  34. if($lastStatTreeLineClause) {
  35. return $lastStatTreeLineClause->clause_label;
  36. }
  37. return '-';
  38. }
  39. public function displayLineClause() {
  40. $lastStatTreeLineClause = StatTreeLineClause::where('stat_tree_line_id', $this->id)
  41. ->orderBy('position_index', 'DESC')
  42. ->first();
  43. if($lastStatTreeLineClause) {
  44. return $lastStatTreeLineClause;
  45. }
  46. return null;
  47. }
  48. public function columnsJSON() {
  49. $columns = [];
  50. foreach ($this->reportColumns as $column) {
  51. $columns[] = [
  52. "label" => $column->label,
  53. "display_key" => $column->display_key,
  54. ];
  55. }
  56. return json_encode($columns);
  57. }
  58. public function argsJSON() {
  59. $args = [];
  60. $displayLineClause = $this->displayLineClause();
  61. if(!!$displayLineClause) {
  62. foreach($displayLineClause->statTreeLineClauseArgs as $stlcArg) {
  63. $args[] = [
  64. "uid" => $stlcArg->uid,
  65. "arg_text" => $stlcArg->clauseArg->arg_text,
  66. "field_type" => $stlcArg->clauseArg->field_type,
  67. "default_value" => $stlcArg->default_value,
  68. "access_level" => $stlcArg->access_level,
  69. ];
  70. }
  71. }
  72. return json_encode($args);
  73. }
  74. }