feat: Enhance cooperation management with proposal template handling and media uploads
This commit is contained in:
parent
1a3f0610a3
commit
7e1c688c78
@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@ -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(),
|
||||
]),
|
||||
])
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user