diff --git a/app/Filament/Resources/Manage/Cooperations/Pages/CreateCooperation.php b/app/Filament/Resources/Manage/Cooperations/Pages/CreateCooperation.php index 0e60c83..46f4513 100644 --- a/app/Filament/Resources/Manage/Cooperations/Pages/CreateCooperation.php +++ b/app/Filament/Resources/Manage/Cooperations/Pages/CreateCooperation.php @@ -5,6 +5,7 @@ use App\Filament\Resources\Manage\Cooperations\CooperationResource; use Filament\Actions\Action; use Filament\Resources\Pages\CreateRecord; +use Illuminate\Support\Facades\Storage; class CreateCooperation extends CreateRecord { @@ -27,4 +28,32 @@ protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); } + + protected function afterCreate(): void + { + $record = $this->getRecord(); + $data = $this->data; + + if (empty($data['proposal_template'])) { + return; + } + + $filePath = collect($data['proposal_template'])->first(); + + $fullPath = Storage::disk(config('filesystems.default'))->path($filePath); + + if (! file_exists($fullPath)) { + return; + } + + $record + ->addMediaFromDisk($filePath, config('filesystems.default')) + ->preservingOriginal() + ->withCustomProperties([ + 'feature' => 'cooperations', + 'date' => now()->toDateString(), + 'doc_type' => 'proposal-template', + ]) + ->toMediaCollection('cooperations'); + } } diff --git a/app/Filament/Resources/Manage/Cooperations/Pages/EditCooperation.php b/app/Filament/Resources/Manage/Cooperations/Pages/EditCooperation.php index 3fab71a..fd2d43d 100644 --- a/app/Filament/Resources/Manage/Cooperations/Pages/EditCooperation.php +++ b/app/Filament/Resources/Manage/Cooperations/Pages/EditCooperation.php @@ -3,13 +3,34 @@ namespace App\Filament\Resources\Manage\Cooperations\Pages; use App\Filament\Resources\Manage\Cooperations\CooperationResource; +use App\Models\Cooperation; use Filament\Actions\Action; use Filament\Resources\Pages\EditRecord; +use Illuminate\Support\Facades\Storage; class EditCooperation extends EditRecord { protected static string $resource = CooperationResource::class; + public function mount(int|string $record): void + { + parent::mount($record); + + $media = Cooperation::find($record) + ->getMedia('cooperations') + ->where('custom_properties.doc_type', 'proposal-template') + ->sortByDesc('created_at') + ->first(); + + if (! $media) { + return; + } + + $this->data['proposal_template'] = [ + $media->uuid => $media->getPathRelativeToRoot(), + ]; + } + protected function getHeaderActions(): array { return [ @@ -25,4 +46,32 @@ protected function getRedirectUrl(): string { return $this->getResource()::getUrl('index'); } + + protected function afterSave(): void + { + $record = $this->getRecord(); + $data = $this->data; + + if (empty($data['proposal_template'])) { + return; + } + + $filePath = collect($data['proposal_template'])->first(); + + $fullPath = Storage::disk(config('filesystems.default'))->path($filePath); + + if (! file_exists($fullPath)) { + return; + } + + $record + ->addMediaFromDisk($filePath, config('filesystems.default')) + ->preservingOriginal() + ->withCustomProperties([ + 'feature' => 'cooperations', + 'date' => now()->toDateString(), + 'doc_type' => 'proposal-template', + ]) + ->toMediaCollection('cooperations'); + } } diff --git a/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php b/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php index df08b63..309a316 100644 --- a/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php +++ b/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Manage\Cooperations\Schemas; use App\Models\PartnerMedia; +use Asmit\FilamentUpload\Forms\Components\AdvancedFileUpload; use Filament\Actions\Action; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Select; @@ -83,15 +84,15 @@ public static function configure(Schema $schema): Schema ->disk(config('filesystems.default')) ->acceptedFileTypes(['image/*']) ->maxSize(1024 * 3) - ->collection('cooperation') + ->collection('banners') ->image(), - SpatieMediaLibraryFileUpload::make('proposal_template') + AdvancedFileUpload::make('proposal_template') ->label('Template Pengajuan') ->disk(config('filesystems.default')) ->acceptedFileTypes(['application/pdf']) ->maxSize(1024 * 10) - ->collection('cooperation') + ->directory('cooperations/templates/'.now()->toDateString()) ->required(), ]), ]) diff --git a/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php b/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php index 24379ac..73f792e 100644 --- a/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php +++ b/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php @@ -90,9 +90,9 @@ public static function configure(Table $table): Table ->html() ->getStateUsing(function (Cooperation $record) { $record->loadCount([ - 'partnerMedia as approved_count' => fn ($query) => $query->where('status', ApprovalStatus::ACCEPTED), - 'partnerMedia as rejected_count' => fn ($query) => $query->where('status', ApprovalStatus::REJECTED), - 'partnerMedia as pending_count' => fn ($query) => $query->where('status', ApprovalStatus::PENDING), + 'partnerMedia as approved_count' => fn ($query) => $query->where('cooperations.status', ApprovalStatus::ACCEPTED), + 'partnerMedia as rejected_count' => fn ($query) => $query->where('cooperations.status', ApprovalStatus::REJECTED), + 'partnerMedia as pending_count' => fn ($query) => $query->where('cooperations.status', ApprovalStatus::PENDING), ]); $totalCount = $record->partnerMedia()->count();