few updates

master
Константин 2023-09-11 10:40:09 +03:00
parent b502781f9b
commit b929412fcd
4 changed files with 20 additions and 7 deletions

View File

@ -5,6 +5,7 @@ namespace App\Listeners\Applications;
use App\Events\Applications\ApplicationExpertChanged; use App\Events\Applications\ApplicationExpertChanged;
use App\Mail\Applications\NotifyApplicationExpertChanged; use App\Mail\Applications\NotifyApplicationExpertChanged;
use App\Models\Applications\Application; use App\Models\Applications\Application;
use App\Models\Companies\CompanyMember;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Mail; 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->submitter) $this->notify($v, $event->application);
if ($v = $event->application->expert()->first()) $this->notify($v->user, $event->application); if ($v = $event->application->expert()->first()) $this->notify($v->user, $event->application);
if ($v = $event->previousExpert) $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) { public function notify(User $recipient, Application $application) {

View File

@ -13,7 +13,7 @@ use Illuminate\Support\Facades\Mail;
class SendApplicationStatusChangedNotifications { class SendApplicationStatusChangedNotifications {
public array $notifiableStatuses = [ public array $notifiableStatuses = [
'applicant' => [ApplicationStatus::COMPLETED], 'applicant' => [ApplicationStatus::COMPLETED],
'addresses' => [ApplicationStatus::PROCESSING] 'addresses' => [ApplicationStatus::PROCESSING, ApplicationStatus::COMPLETED]
]; ];
public function __construct() { public function __construct() {

View File

@ -3,6 +3,7 @@
namespace App\Models\Companies; namespace App\Models\Companies;
use App\Models\Advisories\AdvisoryMember; use App\Models\Advisories\AdvisoryMember;
use App\Models\Applications\Application;
use App\Models\User; use App\Models\User;
use App\Support\HasObjectsTrait; use App\Support\HasObjectsTrait;
use App\Support\RelationValuesTrait; use App\Support\RelationValuesTrait;
@ -55,6 +56,10 @@ class CompanyMember extends Model {
return $this->hasMany(AdvisoryMember::class); return $this->hasMany(AdvisoryMember::class);
} }
public function expertiseApplications(): HasMany {
return $this->hasMany(Application::class, 'expert_id');
}
public function scopeMainCompany($query) { public function scopeMainCompany($query) {
return $query->whereHas('company', function($query) { return $query->whereHas('company', function($query) {

View File

@ -4,10 +4,10 @@ namespace App\Services\Filters\Applications;
use App\Models\Applications\Application; use App\Models\Applications\Application;
use App\Models\Applications\ApplicationStatus; use App\Models\Applications\ApplicationStatus;
use App\Models\Companies\CompanyMember;
use App\Models\Objects\FieldType; use App\Models\Objects\FieldType;
use App\Models\User;
use App\Services\Filters\FiltersService; use App\Services\Filters\FiltersService;
use App\Transformers\Users\UserTransformer; use App\Transformers\Companies\CompanyMemberTransformer;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -49,7 +49,7 @@ class ApplicationFilters extends FiltersService {
'title' => 'Эксперт', 'title' => 'Эксперт',
'type' => FieldType::RELATION, 'type' => FieldType::RELATION,
'represented' => $this->getExperts($filters), '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 { 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')); $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']]]); 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 === 'created_at') $this->applyDateFilter($query, 'created_at', $value);
elseif ($prop === 'status') $query->whereIn('status', is_array($value) ? $value : [$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);
} }
} }