refactor: update migration paths and add image support to proposal attachment viewer
This commit is contained in:
parent
d681080dc3
commit
2447d0b037
@ -278,7 +278,7 @@ private function importOfferFile(int $proposalId, object $legacy): void
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Adjust path based on where these files are stored in S3
|
// Adjust path based on where these files are stored in S3
|
||||||
$sourcePath = 'old-data/proposals/'.$legacyPath;
|
$sourcePath = 'old-data/mediacooperations/'.$legacyPath;
|
||||||
$fileName = basename($sourcePath);
|
$fileName = basename($sourcePath);
|
||||||
$legacyDir = dirname($sourcePath);
|
$legacyDir = dirname($sourcePath);
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ private function importOfferFile(int $proposalId, object $legacy): void
|
|||||||
'model_type' => CooperationProposal::class,
|
'model_type' => CooperationProposal::class,
|
||||||
'model_id' => $proposalId,
|
'model_id' => $proposalId,
|
||||||
'uuid' => (string) Str::uuid(),
|
'uuid' => (string) Str::uuid(),
|
||||||
'collection_name' => 'proposals',
|
'collection_name' => 'cooperations',
|
||||||
'name' => pathinfo($fileName, PATHINFO_FILENAME),
|
'name' => pathinfo($fileName, PATHINFO_FILENAME),
|
||||||
'file_name' => $fileName,
|
'file_name' => $fileName,
|
||||||
'mime_type' => $this->guessMime($fileName),
|
'mime_type' => $this->guessMime($fileName),
|
||||||
@ -295,8 +295,9 @@ private function importOfferFile(int $proposalId, object $legacy): void
|
|||||||
'size' => 0,
|
'size' => 0,
|
||||||
'manipulations' => '[]',
|
'manipulations' => '[]',
|
||||||
'custom_properties' => json_encode([
|
'custom_properties' => json_encode([
|
||||||
'feature' => 'proposals',
|
'feature' => 'cooperations',
|
||||||
'date' => Carbon::parse($legacy->created_at ?? now())->toDateString(),
|
'date' => Carbon::parse($legacy->created_at ?? now())->toDateString(),
|
||||||
|
'doc_type' => 'proposal-attachment',
|
||||||
'legacy_dir' => $legacyDir,
|
'legacy_dir' => $legacyDir,
|
||||||
]),
|
]),
|
||||||
'generated_conversions' => '[]',
|
'generated_conversions' => '[]',
|
||||||
|
|||||||
@ -155,11 +155,53 @@ public function infolist(Schema $infolist): Schema
|
|||||||
->label('Deskripsi')
|
->label('Deskripsi')
|
||||||
->columnSpanFull(),
|
->columnSpanFull(),
|
||||||
|
|
||||||
PdfViewerEntry::make('proposal_attachment')
|
PdfViewerEntry::make('proposal_attachment_pdf')
|
||||||
->label('Lampiran Proposal')
|
->label('Lampiran Proposal')
|
||||||
->getStateUsing(fn (CooperationProposal $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-attachment')->sortByDesc('created_at')->first())->getPathRelativeToRoot())
|
->visible(function (CooperationProposal $record): bool {
|
||||||
|
$media = $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-attachment')->sortByDesc('created_at')->first();
|
||||||
|
|
||||||
|
return $media && str_contains($media->mime_type ?? '', 'pdf');
|
||||||
|
})
|
||||||
|
->getStateUsing(fn (CooperationProposal $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-attachment')->sortByDesc('created_at')->first())->getUrl())
|
||||||
->disk(config('filesystems.default')),
|
->disk(config('filesystems.default')),
|
||||||
|
|
||||||
|
TextEntry::make('proposal_attachment_image')
|
||||||
|
->label('Lampiran Proposal')
|
||||||
|
->html()
|
||||||
|
->visible(function (CooperationProposal $record): bool {
|
||||||
|
$media = $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-attachment')->sortByDesc('created_at')->first();
|
||||||
|
|
||||||
|
return $media && str_contains($media->mime_type ?? '', 'image');
|
||||||
|
})
|
||||||
|
->getStateUsing(function (CooperationProposal $record): string {
|
||||||
|
$media = $record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-attachment')->sortByDesc('created_at')->first();
|
||||||
|
|
||||||
|
if (! $media) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = $media->getUrl();
|
||||||
|
$downloadUrl = $url;
|
||||||
|
|
||||||
|
if (in_array($media->disk, ['s3', 'minio'])) {
|
||||||
|
$downloadUrl = $media->getTemporaryUrl(now()->addMinutes(30), '', [
|
||||||
|
'ResponseContentDisposition' => 'attachment; filename="'.$media->file_name.'"',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$downloadLink = '<a href="'.$downloadUrl.'" download="dokumen" class="mt-2 flex items-center gap-1 text-sm font-medium text-primary-600 transition hover:text-primary-500">
|
||||||
|
<svg class="h-4 w-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3" />
|
||||||
|
</svg>
|
||||||
|
Unduh Dokumen
|
||||||
|
</a>';
|
||||||
|
|
||||||
|
return '<div class="flex flex-col">'.
|
||||||
|
'<img src="'.$url.'" alt="Dokumen" style="max-width: 100%; height: auto; border-radius: 0.5rem;" />'.
|
||||||
|
$downloadLink.
|
||||||
|
'</div>';
|
||||||
|
}),
|
||||||
|
|
||||||
TextEntry::make('rejectionReasons.reason')
|
TextEntry::make('rejectionReasons.reason')
|
||||||
->label('Alasan Penolakan')
|
->label('Alasan Penolakan')
|
||||||
->listWithLineBreaks()
|
->listWithLineBreaks()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user