Approval.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. ];
  26. protected static function booted(): void
  27. {
  28. static::addGlobalScope(new CompanyScope);
  29. }
  30. public function approvalFlow()
  31. {
  32. return $this->belongsTo(ApprovalFlow::class)->withTrashed();
  33. }
  34. public function createdBy()
  35. {
  36. return $this->belongsTo(User::class, 'created_by');
  37. }
  38. public function scopeAllowed(Builder $query, bool $isAction = false): void
  39. {
  40. $query->where(function(Builder $query) {
  41. $query->where("users", 'like', '%,'.Auth::id().',%')
  42. ->whereIn("approval_mode", [
  43. ApprovalMode::COUNTERSIGNATURE->value,
  44. ApprovalMode::ALTERNATIVE_APPROVAL->value,
  45. ]);
  46. })->orWhere(function (Builder $query) {
  47. $query->where("users", 'like', ','.Auth::id().',%')
  48. ->whereIn("approval_mode", [
  49. ApprovalMode::SEQUENTIAL_APPROVAL->value,
  50. ]);
  51. })->when(! $isAction, fn(Builder $query) => $query->orWhere("created_by", Auth::id()));
  52. }
  53. }