123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- <?php
- namespace App\Services\Notification\Traits;
- use App\Models\Action;
- use App\Models\Approval;
- use App\Models\Enums\ApprovalMode;
- use App\Models\Enums\ObjectAction;
- trait ObjectActionApprovalNotificationUserHelper
- {
- protected function objectActionApprovalNotificationUserIDs(Approval $approval, Action $action): array
- {
- $objectAction = ObjectAction::tryFrom($action->action);
- $approvalUserIDs = [];
- $notifiedUserIDs = [];
- if (in_array($objectAction, [ObjectAction::APPROVAL_REQUEST, ObjectAction::APPROVED_TO_NEXT_NODE])) {
- $approvalUserIDs = $this->getApprovedToNextNodeUsers($approval, $action);
- }
- if (! in_array($objectAction, [ObjectAction::APPROVAL_REQUEST])) {
- $notifiedUserIDs = [$approval->created_by];
- }
- return [$approvalUserIDs, $notifiedUserIDs];
- }
- protected function getApprovedToNextNodeUsers(Approval $approval, Action $action)
- {
- $approvalFlow = $approval->approvalFlow()->first();
- if (! $approvalFlow) {
- return [];
- }
- $nextNode = isset($action->extra_fields['next'])
- ? $approvalFlow->nodes[$action->extra_fields['next']]
- : [];
- return match (ApprovalMode::tryFrom($action->extra_fields['approval_mode'])) {
- ApprovalMode::ALTERNATIVE_APPROVAL, ApprovalMode::COUNTERSIGNATURE => $nextNode['approval_users'] ?? [],
- ApprovalMode::SEQUENTIAL_APPROVAL => isset($action->extra_fields['next_sequential_user']) ? [$action->extra_fields['next_sequential_user']] : [],
- default => [],
- };
- }
- }
|