From b929412fcdff50d82bed11bd6ad4886a86c3b36b Mon Sep 17 00:00:00 2001 From: panabonic Date: Mon, 11 Sep 2023 10:40:09 +0300 Subject: [PATCH] few updates --- .../SendApplicationExpertChangedNotifications.php | 8 ++++++++ .../SendApplicationStatusChangedNotifications.php | 2 +- app/Models/Companies/CompanyMember.php | 5 +++++ .../Filters/Applications/ApplicationFilters.php | 12 ++++++------ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/Listeners/Applications/SendApplicationExpertChangedNotifications.php b/app/Listeners/Applications/SendApplicationExpertChangedNotifications.php index e7aa293..624b922 100644 --- a/app/Listeners/Applications/SendApplicationExpertChangedNotifications.php +++ b/app/Listeners/Applications/SendApplicationExpertChangedNotifications.php @@ -5,6 +5,7 @@ namespace App\Listeners\Applications; use App\Events\Applications\ApplicationExpertChanged; use App\Mail\Applications\NotifyApplicationExpertChanged; use App\Models\Applications\Application; +use App\Models\Companies\CompanyMember; use App\Models\User; use Illuminate\Support\Facades\Mail; @@ -17,6 +18,13 @@ class SendApplicationExpertChangedNotifications { if ($v = $event->application->submitter) $this->notify($v, $event->application); if ($v = $event->application->expert()->first()) $this->notify($v->user, $event->application); if ($v = $event->previousExpert) $this->notify($v->user, $event->application); + $this->notifyApplicationManagers($event->application); + } + + public function notifyApplicationManagers(Application $application) { + $application->addressees->each(function(CompanyMember $member) use($application) { + $this->notify($member->user, $application); + }); } public function notify(User $recipient, Application $application) { diff --git a/app/Listeners/Applications/SendApplicationStatusChangedNotifications.php b/app/Listeners/Applications/SendApplicationStatusChangedNotifications.php index 17af9b4..66a072a 100644 --- a/app/Listeners/Applications/SendApplicationStatusChangedNotifications.php +++ b/app/Listeners/Applications/SendApplicationStatusChangedNotifications.php @@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Mail; class SendApplicationStatusChangedNotifications { public array $notifiableStatuses = [ 'applicant' => [ApplicationStatus::COMPLETED], - 'addresses' => [ApplicationStatus::PROCESSING] + 'addresses' => [ApplicationStatus::PROCESSING, ApplicationStatus::COMPLETED] ]; public function __construct() { diff --git a/app/Models/Companies/CompanyMember.php b/app/Models/Companies/CompanyMember.php index b78d956..acf9a4c 100644 --- a/app/Models/Companies/CompanyMember.php +++ b/app/Models/Companies/CompanyMember.php @@ -3,6 +3,7 @@ namespace App\Models\Companies; use App\Models\Advisories\AdvisoryMember; +use App\Models\Applications\Application; use App\Models\User; use App\Support\HasObjectsTrait; use App\Support\RelationValuesTrait; @@ -55,6 +56,10 @@ class CompanyMember extends Model { return $this->hasMany(AdvisoryMember::class); } + public function expertiseApplications(): HasMany { + return $this->hasMany(Application::class, 'expert_id'); + } + public function scopeMainCompany($query) { return $query->whereHas('company', function($query) { diff --git a/app/Services/Filters/Applications/ApplicationFilters.php b/app/Services/Filters/Applications/ApplicationFilters.php index 4a40bab..b388892 100644 --- a/app/Services/Filters/Applications/ApplicationFilters.php +++ b/app/Services/Filters/Applications/ApplicationFilters.php @@ -4,10 +4,10 @@ namespace App\Services\Filters\Applications; use App\Models\Applications\Application; use App\Models\Applications\ApplicationStatus; +use App\Models\Companies\CompanyMember; use App\Models\Objects\FieldType; -use App\Models\User; use App\Services\Filters\FiltersService; -use App\Transformers\Users\UserTransformer; +use App\Transformers\Companies\CompanyMemberTransformer; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; @@ -49,7 +49,7 @@ class ApplicationFilters extends FiltersService { 'title' => 'Эксперт', 'type' => FieldType::RELATION, 'represented' => $this->getExperts($filters), - 'value' => ($val = $filters->get('expert')) ? fractal(User::byUuids($val)->get(), new UserTransformer()) : null + 'value' => ($val = $filters->get('expert')) ? fractal(CompanyMember::byUuids($val)->get(), new CompanyMemberTransformer()) : null ] ]; } @@ -70,9 +70,9 @@ class ApplicationFilters extends FiltersService { public function getExperts(Collection $filters): Fractal { - return fractal(User::query()->whereHas('applicationConclusions.application', function($query) use($filters) { + return fractal(CompanyMember::query()->whereHas('expertiseApplications', function($query) use($filters) { $this->applyFilters($query, $filters->except('expert')); - })->orderBy('name')->get(), new UserTransformer()); + })->get(), new CompanyMemberTransformer()); } @@ -92,7 +92,7 @@ class ApplicationFilters extends FiltersService { if ($prop === 'search') $this->applySearchFilter($query, $value, ['number', 'applicant', ['submitter' => ['name']], ['product' => ['name', 'purpose', 'normative', 'producer']]]); elseif ($prop === 'created_at') $this->applyDateFilter($query, 'created_at', $value); elseif ($prop === 'status') $query->whereIn('status', is_array($value) ? $value : [$value]); - elseif ($prop === 'expert') $this->applyRelationFilter($query, 'conclusions.author', $value); + elseif ($prop === 'expert') $this->applyRelationFilter($query, 'expert', $value); } }