Approval.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Enums\ApprovalMode;
  4. use App\Models\Scopes\CompanyScope;
  5. use EloquentFilter\Filterable;
  6. use Illuminate\Database\Eloquent\Builder;
  7. use Illuminate\Database\Eloquent\Factories\HasFactory;
  8. use Illuminate\Database\Eloquent\Model;
  9. use Illuminate\Database\Eloquent\SoftDeletes;
  10. use Illuminate\Support\Facades\Auth;
  11. class Approval extends Model
  12. {
  13. use HasFactory, SoftDeletes, Filterable;
  14. protected $fillable = [
  15. 'approval_flow_id',
  16. 'object_type',
  17. 'object_id',
  18. 'node_level',
  19. 'approval_mode',
  20. 'users',
  21. 'remark',
  22. 'created_by',
  23. 'status',
  24. 'company_id',
  25. 'sub_object_ids',
  26. ];
  27. protected $casts = [
  28. 'sub_object_ids' => 'array',
  29. ];
  30. protected static function booted(): void
  31. {
  32. static::addGlobalScope(new CompanyScope);
  33. }
  34. public function approvalFlow()
  35. {
  36. return $this->belongsTo(ApprovalFlow::class)->withTrashed();
  37. }
  38. public function createdBy()
  39. {
  40. return $this->belongsTo(User::class, 'created_by');
  41. }
  42. public function scopeAllowed(Builder $query, bool $isView = false): void
  43. {
  44. $query->where(function(Builder $query) {
  45. $query->where("users", 'like', '%,'.Auth::id().',%')
  46. ->whereIn("approval_mode", [
  47. ApprovalMode::COUNTERSIGNATURE->value,
  48. ApprovalMode::ALTERNATIVE_APPROVAL->value,
  49. ]);
  50. })->orWhere(function (Builder $query) {
  51. $query->where("users", 'like', ','.Auth::id().',%')
  52. ->whereIn("approval_mode", [
  53. ApprovalMode::SEQUENTIAL_APPROVAL->value,
  54. ]);
  55. })
  56. ->when($isView, fn(Builder $query) => $query->orWhere("created_by", Auth::id()))
  57. ->when($isView, fn(Builder $query) => $query->orWhere("action_users", 'like', '%,'.Auth::id().',%'));
  58. }
  59. }