ObjectActionApprovalNotificationUserHelper.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Services\Notification\Traits;
  3. use App\Models\Action;
  4. use App\Models\Approval;
  5. use App\Models\Enums\ApprovalMode;
  6. use App\Models\Enums\ObjectAction;
  7. trait ObjectActionApprovalNotificationUserHelper
  8. {
  9. protected function objectActionApprovalNotificationUserIDs(Approval $approval, Action $action): array
  10. {
  11. $objectAction = ObjectAction::tryFrom($action->action);
  12. $approvalUserIDs = [];
  13. $notifiedUserIDs = [];
  14. if (in_array($objectAction, [ObjectAction::APPROVAL_REQUEST, ObjectAction::APPROVED_TO_NEXT_NODE])) {
  15. $approvalUserIDs = $this->getApprovedToNextNodeUsers($approval, $action);
  16. }
  17. if (! in_array($objectAction, [ObjectAction::APPROVAL_REQUEST])) {
  18. $notifiedUserIDs = [$approval->created_by];
  19. }
  20. return [$approvalUserIDs, $notifiedUserIDs];
  21. }
  22. protected function getApprovedToNextNodeUsers(Approval $approval, Action $action)
  23. {
  24. $approvalFlow = $approval->approvalFlow()->first();
  25. if (! $approvalFlow) {
  26. return [];
  27. }
  28. $nextNode = isset($action->extra_fields['next'])
  29. ? $approvalFlow->nodes[$action->extra_fields['next']]
  30. : [];
  31. return match (ApprovalMode::tryFrom($action->extra_fields['approval_mode'])) {
  32. ApprovalMode::ALTERNATIVE_APPROVAL, ApprovalMode::COUNTERSIGNATURE => $nextNode['approval_users'] ?? [],
  33. ApprovalMode::SEQUENTIAL_APPROVAL => isset($action->extra_fields['next_sequential_user']) ? [$action->extra_fields['next_sequential_user']] : [],
  34. default => [],
  35. };
  36. }
  37. }