diff --git a/app/Models/Applications/Application.php b/app/Models/Applications/Application.php index b6c7038..5b5fdba 100644 --- a/app/Models/Applications/Application.php +++ b/app/Models/Applications/Application.php @@ -24,6 +24,7 @@ class Application extends Model { protected $fillable = [ 'submitter_id', 'product_id', + 'expert_id', 'status', 'number', 'applicant', @@ -45,6 +46,10 @@ class Application extends Model { return $this->belongsTo(Product::class); } + public function expert(): BelongsTo { + return $this->belongsTo(CompanyMember::class); + } + public function conclusions(): HasMany { return $this->hasMany(Conclusion::class); } @@ -65,7 +70,7 @@ class Application extends Model { public function getAddresseesAttribute() { return CompanyMember::query()->mainCompany()->whereHas('objects', function($query) { - Field::applyFilters($query, collect(['types' => 'company-member-properties', 'moderate-permissions' => 'applications'])); + Field::applyFilters($query, collect(['types' => 'company-member-properties', 'moderate-permissions' => 'manage-applications'])); })->get(); } diff --git a/app/Models/Asset.php b/app/Models/Asset.php index e3f26fd..d47d763 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -28,12 +28,12 @@ class Asset extends Model { public function links() { $result = [ - 'open' => url("/api/assets/{$this->uuid}"), - 'download' => url("/api/assets/{$this->uuid}/download") + 'open' => asset("/api/assets/{$this->uuid}"), + 'download' => asset("/api/assets/{$this->uuid}/download") ]; if ($this->type == 'image') { - $result['full'] = url("/api/assets/{$this->uuid}/render"); - $result['thumb'] = url("/api/assets/{$this->uuid}/render?width=300"); + $result['full'] = asset("/api/assets/{$this->uuid}/render"); + $result['thumb'] = asset("/api/assets/{$this->uuid}/render?width=300"); } return $result; } diff --git a/app/Models/User.php b/app/Models/User.php index 2c10290..5451a20 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,9 +4,7 @@ namespace App\Models; use App\Events\UserRegistered; use App\Mail\PasswordResetRequested; -use App\Models\Advisories\Advisory; use App\Models\Advisories\AdvisoryMember; -use App\Models\Advisories\AdvisoryMemberRank; use App\Models\Applications\Conclusion; use App\Models\Companies\Company; use App\Models\Companies\CompanyMember; @@ -112,6 +110,11 @@ class User extends Authenticatable { Field::applyFilters($query, collect(['types' => 'company-member-properties', 'moderate-permissions' => 'applications'])); })->exists(); } + public function getIsApplicationsManagerAttribute(): bool { + return $this->membership()->mainCompany()->whereHas('objects', function($query) { + Field::applyFilters($query, collect(['types' => 'company-member-properties', 'moderate-permissions' => 'manage-applications'])); + })->exists(); + } public function getPrivilegesAttribute(): array { return [ diff --git a/app/Services/Forms/Applications/ApplicationForms.php b/app/Services/Forms/Applications/ApplicationForms.php index dbee93b..79faa2b 100644 --- a/app/Services/Forms/Applications/ApplicationForms.php +++ b/app/Services/Forms/Applications/ApplicationForms.php @@ -41,6 +41,7 @@ class ApplicationForms extends FormsService { } public function commonGroupFields(?Application $model): array { + $user = Auth::user(); $fields = [ [ 'name' => 'applicant', @@ -54,14 +55,14 @@ class ApplicationForms extends FormsService { 'title' => 'Email', 'type' => FieldType::STRING, 'required' => true, - 'value' => $model->phone ?? null + 'value' => $model ? ($model->email ?? null) : ($user->email ?? null) ], [ 'name' => 'phone', 'title' => 'Телефон', 'type' => FieldType::STRING, 'required' => true, - 'value' => $model->phone ?? null + 'value' => $model ? ($model->phone ?? null) : ($user->phone ?? null) ], [ 'name' => 'product_name', diff --git a/app/Services/PermissionsService.php b/app/Services/PermissionsService.php index d25fe43..d8eaf39 100644 --- a/app/Services/PermissionsService.php +++ b/app/Services/PermissionsService.php @@ -41,7 +41,7 @@ class PermissionsService { } public function applicationPermissions(): array { - return ['edit' => $this->model->submitter_id === $this->user->id, 'reply' => $this->user->isExpert]; + return ['edit' => $this->model->submitter_id === $this->user->id, 'reply' => $this->user->isExpert, 'manage' => $this->user->isApplicationsManager]; } public function pagePermissions(): array { diff --git a/app/Transformers/Applications/ApplicationTransformer.php b/app/Transformers/Applications/ApplicationTransformer.php index 43c4693..bfe59b5 100644 --- a/app/Transformers/Applications/ApplicationTransformer.php +++ b/app/Transformers/Applications/ApplicationTransformer.php @@ -4,6 +4,7 @@ namespace App\Transformers\Applications; use App\Models\Applications\Application; use App\Services\PermissionsService; +use App\Transformers\Companies\CompanyMemberTransformer; use App\Transformers\Objects\ObjectTransformer; use App\Transformers\Products\ProductTransformer; use App\Transformers\Users\UserTransformer; @@ -16,7 +17,7 @@ class ApplicationTransformer extends TransformerAbstract { protected array $defaultIncludes = []; protected array $availableIncludes = [ - 'submitter', 'product', 'properties', 'conclusions', 'permissions' + 'submitter', 'expert', 'product', 'properties', 'conclusions', 'permissions' ]; public function transform(Application $model): array { @@ -37,6 +38,10 @@ class ApplicationTransformer extends TransformerAbstract { return $model->submitter ? $this->item($model->submitter, new UserTransformer()) : null; } + public function includeExpert(Application $model): ?Item { + return $model->expert ? $this->item($model->expert, new CompanyMemberTransformer()) : null; + } + public function includeProduct(Application $model): ?Item { return $model->product ? $this->item($model->product, new ProductTransformer()) : null; } diff --git a/database/migrations/2023_07_31_152001_create_applications_table.php b/database/migrations/2023_07_31_152001_create_applications_table.php index 2830775..cfb4ab2 100644 --- a/database/migrations/2023_07_31_152001_create_applications_table.php +++ b/database/migrations/2023_07_31_152001_create_applications_table.php @@ -18,9 +18,12 @@ class CreateApplicationsTable extends Migration $table->char('uuid', 36)->index()->unique(); $table->integer('submitter_id')->index()->nullable(); $table->integer('product_id')->index()->nullable(); + $table->integer('expert_id')->index()->nullable(); $table->string('status')->index()->nullable(); $table->string('number')->index()->nullable(); $table->string('applicant', 750)->index()->nullable(); + $table->string('email')->index()->nullable(); + $table->string('phone')->index()->nullable(); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/migrations/2023_09_07_135844_add_in_applications_table.php b/database/migrations/2023_09_07_135844_add_in_applications_table.php deleted file mode 100644 index 5f1d250..0000000 --- a/database/migrations/2023_09_07_135844_add_in_applications_table.php +++ /dev/null @@ -1,33 +0,0 @@ -string('email')->index()->nullable()->after('applicant'); - $table->string('phone')->index()->nullable()->after('email'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('applications', function (Blueprint $table) { - $table->dropColumn(['email', 'phone']); - }); - } -} diff --git a/database/seeders/Dictionaries/DictionariesTableSeeder.php b/database/seeders/Dictionaries/DictionariesTableSeeder.php index 5587bed..bbdbc34 100644 --- a/database/seeders/Dictionaries/DictionariesTableSeeder.php +++ b/database/seeders/Dictionaries/DictionariesTableSeeder.php @@ -66,7 +66,7 @@ class DictionariesTableSeeder extends Seeder { ], 'moderate-permissions' => [ 'title' => 'Права', - 'items' => ['applications' => 'Рассмотрение предварительных заявок'] + 'items' => ['applications' => 'Рассмотрение предварительных заявок', 'manage-applications' => 'Распределение предварительных заявок'] ] ];