label('Ajukan Proposal') ->icon(Heroicon::DocumentText) ->color('info') ->schema([ TextInput::make('e_catalog') ->label('E-Catalog') ->placeholder('https://katalog.inaproc.id/purwakarta-kita-media-karya') ->autocomplete(false) ->autofocus() ->nullable() ->url(), Textarea::make('description') ->label('Deskripsi') ->autocomplete(false) ->required() ->rows(4) ->placeholder('...'), AdvancedFileUpload::make('proposal_attachment') ->label('Lampiran') ->disk(config('filesystems.default')) ->acceptedFileTypes(['application/pdf']) ->maxSize(1024 * 10) ->directory(fn (): string => 'cooperations/proposal-attachment/'.now()->toDateString()) ->required(), ]) ->action(function (\App\Models\Cooperation $record, array $data): void { $cooperationMedia = $record->cooperationMedia() ->whereHas('partnerMedia', function (\Illuminate\Database\Eloquent\Builder $query): void { $query->whereHas('company', function (\Illuminate\Database\Eloquent\Builder $subQuery): void { $subQuery->where('user_id', auth()->id()); }); }) ->first(); if ($cooperationMedia) { $proposal = $record->proposals()->create([ 'partner_media_id' => $cooperationMedia->partner_media_id, 'description' => $data['description'], 'e_catalog' => $data['e_catalog'], 'status' => ApprovalStatus::PENDING->value, ]); if (! empty($data['proposal_attachment'])) { $filePath = collect($data['proposal_attachment'])->first(); $fullPath = Storage::disk(config('filesystems.default'))->path($filePath); if (file_exists($fullPath)) { $proposal->addMediaFromDisk($filePath, config('filesystems.default')) ->preservingOriginal() ->withCustomProperties([ 'feature' => 'cooperations', 'date' => now()->toDateString(), 'doc_type' => 'proposal-attachment', ]) ->toMediaCollection('cooperations'); } } Notification::make() ->title('Proposal kerja sama berhasil dikirim') ->success() ->send(); } }) ->modalHeading('Proposal Kerja Sama') ->modalSubmitActionLabel('Kirim Proposal') ->visible(function (\App\Models\Cooperation $record): bool { if (! auth()->user()->hasRole('Perusahaan')) { return false; } $cooperationMedia = $record->cooperationMedia() ->whereHas('partnerMedia', function (\Illuminate\Database\Eloquent\Builder $query): void { $query->whereHas('company', function (\Illuminate\Database\Eloquent\Builder $subQuery): void { $subQuery->where('user_id', auth()->id()); }); }) ->first(); return $cooperationMedia && $cooperationMedia->status === ApprovalStatus::ACCEPTED && $record->initial_submission_date->toDateString() === now()->toDateString() && ! $record->proposals() ->where('partner_media_id', $cooperationMedia->partner_media_id) ->where(fn (\Illuminate\Database\Eloquent\Builder $q): \Illuminate\Database\Eloquent\Builder => $q->accepted()->orWhere(fn (\Illuminate\Database\Eloquent\Builder $q): \Illuminate\Database\Eloquent\Builder => $q->pending())) ->exists(); }) ->modalWidth(Width::Large); } }