Plan.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Scopes\CompanyScope;
  4. use EloquentFilter\Filterable;
  5. use Illuminate\Database\Eloquent\Factories\HasFactory;
  6. use Illuminate\Database\Eloquent\Model;
  7. use Illuminate\Database\Eloquent\SoftDeletes;
  8. use App\Models\Enums\AssetACL;
  9. use Illuminate\Database\Eloquent\Builder;
  10. use Illuminate\Support\Facades\Auth;
  11. class Plan extends Model
  12. {
  13. use HasFactory, Filterable,SoftDeletes;
  14. protected $fillable = [
  15. 'title',
  16. 'asset_id',
  17. 'parent_id',
  18. 'begin',
  19. 'end',
  20. 'description',
  21. ];
  22. // protected static function booted()
  23. // {
  24. // parent::booted(); // TODO: Change the autogenerated stub
  25. // static::addGlobalScope(new CompanyScope);
  26. // }
  27. public function scopeAllowed(Builder $query) : void
  28. {
  29. $planIds = Plan::query()->leftJoin("assets", "plans.asset_id", "=", "assets.id")
  30. ->where('assets.company_id',Auth::user()->company_id)
  31. ->where(function ($query){
  32. $query->where('assets.acl', AssetACL::PRIVATE->value)
  33. ->where('assets.owner', Auth::id());
  34. })
  35. ->orwhere(function ($query){
  36. $query->where('assets.acl', AssetACL::CUSTOM->value)
  37. ->where('assets.whitelist', 'like', '%,' .Auth::id() . ',%');
  38. })
  39. ->orwhere(function ($query){
  40. $query->where('assets.acl', AssetACL::PRIVATE->value)
  41. ->where('assets.created_by', Auth::id());
  42. })
  43. ->pluck("plans.id")->unique();
  44. $query->whereIn("id", $planIds->toArray());
  45. }
  46. public function requirements()
  47. {
  48. return $this->hasMany(Requirement::class);
  49. }
  50. public function projects()
  51. {
  52. return $this->belongsToMany(Project::class, 'project_plan', 'plan_id', 'project_id');
  53. }
  54. public function children()
  55. {
  56. return $this->hasMany(Plan::class, 'parent_id');
  57. }
  58. public function asset(){
  59. return $this->belongsTo(Asset::class);
  60. }
  61. }