|
@@ -3,12 +3,15 @@
|
|
|
namespace App\Services\Notification\ActionEmail;
|
|
|
|
|
|
use App\Mail\ContainerAction;
|
|
|
+use App\Mail\ProjectAction;
|
|
|
use App\Mail\RequirementAction;
|
|
|
use App\Mail\TaskAction;
|
|
|
use App\Models\Action;
|
|
|
+use App\Models\Approval;
|
|
|
use App\Models\Container;
|
|
|
use App\Models\Enums\ActionObjectType;
|
|
|
use App\Models\Enums\ObjectAction;
|
|
|
+use App\Models\Project;
|
|
|
use App\Models\Requirement;
|
|
|
use App\Models\Task;
|
|
|
use App\Models\User;
|
|
@@ -48,10 +51,17 @@ class ActionEmailService
|
|
|
ActionObjectType::REQUIREMENT => $this->requirement($actionObjectModel),
|
|
|
ActionObjectType::TASK => $this->task($actionObjectModel),
|
|
|
ActionObjectType::CONTAINER => $this->container($actionObjectModel),
|
|
|
+ ActionObjectType::PROJECT => $this->project($actionObjectModel),
|
|
|
default => null,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+ protected function project(Project $project)
|
|
|
+ {
|
|
|
+ $this->dispatch([], new ProjectAction($project, $this->objectAction, $this->actions));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
protected function container(Container $container)
|
|
|
{
|
|
|
$this->dispatch($container->mailto, new ContainerAction($container, $this->objectAction, $this->actions));
|
|
@@ -71,6 +81,30 @@ class ActionEmailService
|
|
|
|
|
|
protected function dispatch(array $userIds, Mailable $mailable)
|
|
|
{
|
|
|
+ if ($this->objectAction->isApproval()) {
|
|
|
+ $approval = Approval::query()->find($this->action->additional_id);
|
|
|
+ if (! $approval) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $approvalFlow = $approval->approvalFlow()->first();
|
|
|
+
|
|
|
+ $nextApprovalUsers = $approvalFlow?->nodes[$this->action->extra_fields['next']]['approval_users'] ?? [];
|
|
|
+
|
|
|
+ $userIds = match ($this->objectAction) {
|
|
|
+ ObjectAction::APPROVAL_REQUEST => $nextApprovalUsers,
|
|
|
+ ObjectAction::APPROVED_TO_NEXT_NODE => [$approval->created_by, ...$nextApprovalUsers],
|
|
|
+ ObjectAction::APPROVAL_APPROVED, ObjectAction::APPROVAL_REJECTED => [$approval->created_by],
|
|
|
+ default => [],
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ $userIds = array_filter(array_unique($userIds));
|
|
|
+
|
|
|
+ if (! $userIds) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
$users = User::query()->whereIn("id", $userIds)->get();
|
|
|
if ($users->isEmpty()) {
|
|
|
return;
|