feat(career): stajyer transkripti ve resmi belgelerin admin ile stajyer panellerine entegrasyonu
- Stajı tamamlanan stajyerlerin repo ve defter tutarlılığı doğrulanarak akademik transkriptleri oluşturuldu - Stajyer paneline resmi staj belgeleri showcase kartı, transkript sekmesi ve hızlı indirme aksiyonları eklendi - Admin paneli listesine ve defter inceleme modalına A4/A5 defter, transkript ve repo butonları entegre edildi - Filament InternApplicationResource tablosuna belge doğrulama ve yazdırma aksiyonları tanımlandı - Doğrulama sayfası PDF çıktısı ve buton hover renkleri optimize edildi
This commit is contained in:
@@ -119,6 +119,69 @@
|
||||
}
|
||||
@endphp
|
||||
|
||||
<!-- Staj Bitirme Belgeleri & Transkript Showcase Card -->
|
||||
@if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
|
||||
<div class="bg-gradient-to-br from-slate-900 via-slate-800 to-indigo-950 rounded-3xl p-6 md:p-8 shadow-2xl text-white mb-8 relative overflow-hidden border border-slate-700/50">
|
||||
<!-- Glow accents -->
|
||||
<div class="absolute -right-20 -top-20 w-80 h-80 bg-blue-500/20 rounded-full blur-3xl pointer-events-none"></div>
|
||||
<div class="absolute -left-20 -bottom-20 w-80 h-80 bg-emerald-500/20 rounded-full blur-3xl pointer-events-none"></div>
|
||||
|
||||
<div class="relative z-10 flex flex-col lg:flex-row justify-between items-start lg:items-center gap-6">
|
||||
<div class="space-y-3 max-w-2xl">
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<span class="px-3 py-1 rounded-full bg-emerald-500/20 border border-emerald-400/40 text-emerald-300 text-xs font-extrabold uppercase tracking-wider flex items-center gap-1.5">
|
||||
<i class="uil uil-shield-check text-sm"></i> Resmi Onaylı Staj Belgesi
|
||||
</span>
|
||||
@if($intern->notebook_supervisor_signed)
|
||||
<span class="px-3 py-1 rounded-full bg-blue-500/20 border border-blue-400/40 text-blue-300 text-xs font-extrabold uppercase tracking-wider">
|
||||
Sorumlu Onayladı: {{ $intern->notebook_supervisor_name ?: 'Alperen Trunç' }}
|
||||
</span>
|
||||
@endif
|
||||
@if($intern->notebook_approved)
|
||||
<span class="px-3 py-1 rounded-full bg-purple-500/20 border border-purple-400/40 text-purple-300 text-xs font-extrabold uppercase tracking-wider">
|
||||
Defter Genel Onaylı
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<h2 class="text-2xl md:text-3xl font-extrabold text-white tracking-tight">
|
||||
Staj Bitirme Sertifikası & Akademik Transkriptiniz Hazır!
|
||||
</h2>
|
||||
<p class="text-sm text-slate-300 leading-relaxed">
|
||||
Trunçgil Teknoloji bünyesinde başarıyla tamamladığınız staj dönemi için resmi staj bitirme sertifikanız, detaylı akademik performans transkriptiniz ve onaylı staj defteriniz sistemde aktif edilmiştir.
|
||||
</p>
|
||||
<div class="text-xs text-slate-400 font-mono flex items-center gap-2">
|
||||
<span>Doğrulama No:</span>
|
||||
<strong class="text-emerald-400 bg-slate-800/90 px-3 py-1 rounded-lg border border-slate-700 font-bold tracking-wider">{{ $intern->certificate_code }}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Action Buttons -->
|
||||
<div class="flex flex-col sm:flex-row lg:flex-col gap-2.5 w-full lg:w-auto flex-shrink-0">
|
||||
<a href="{{ route('internship.verify', $intern->certificate_code) }}" target="_blank" class="px-6 py-3.5 bg-gradient-to-r from-emerald-500 to-teal-500 hover:from-emerald-600 hover:to-teal-600 text-white font-extrabold text-sm rounded-2xl transition-all shadow-lg shadow-emerald-500/20 flex items-center justify-center gap-2 text-center">
|
||||
<i class="uil uil-award text-lg"></i>
|
||||
<span>Sertifika & Transkripti Aç</span>
|
||||
</a>
|
||||
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<a href="{{ route('intern.print-journal') }}?size=a4" target="_blank" class="px-3.5 py-2.5 bg-white/10 hover:bg-white/20 text-white font-bold text-xs rounded-xl transition-all flex items-center justify-center gap-1.5 border border-white/10 text-center">
|
||||
<i class="uil uil-print"></i> A4 Defter
|
||||
</a>
|
||||
<a href="{{ route('intern.print-journal') }}?size=a5" target="_blank" class="px-3.5 py-2.5 bg-white/10 hover:bg-white/20 text-white font-bold text-xs rounded-xl transition-all flex items-center justify-center gap-1.5 border border-white/10 text-center">
|
||||
<i class="uil uil-print"></i> A5 Defter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@if($intern->github_repo)
|
||||
<a href="{{ route('intern.download-journal') }}" class="px-4 py-2.5 bg-blue-600/80 hover:bg-blue-600 text-white font-bold text-xs rounded-xl transition-all flex items-center justify-center gap-1.5 border border-blue-500/30 text-center">
|
||||
<i class="uil uil-arrow-down-tray"></i> Günlüğü İndir (.md)
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Stage Timeline Card -->
|
||||
<div class="bg-white rounded-3xl p-6 md:p-8 shadow-xl border border-slate-100/50 mb-8">
|
||||
<h3 class="font-bold text-slate-800 text-lg mb-6 pb-2 border-b border-slate-100 flex items-center gap-2">
|
||||
@@ -394,6 +457,22 @@
|
||||
<span class="block text-xs text-slate-400 font-semibold mt-0.5">Sitede yayınlanacak bloglar</span>
|
||||
</div>
|
||||
</button>
|
||||
|
||||
<!-- Menu Item 5: Sertifika & Transkript -->
|
||||
<button type="button" role="tab" aria-selected="false" data-tab-target="transcript" class="tab-btn w-full flex items-center gap-4 p-3 rounded-2xl text-left transition-all border border-transparent">
|
||||
<div class="w-10 h-10 rounded-xl bg-slate-50 text-slate-500 flex items-center justify-center text-xl flex-shrink-0 tab-icon">
|
||||
<i class="uil uil-award"></i>
|
||||
</div>
|
||||
<div class="flex-grow">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="block text-sm font-extrabold text-slate-800">Sertifika & Transkript</span>
|
||||
@if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
|
||||
<span class="text-[10px] font-extrabold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700">Hazır</span>
|
||||
@endif
|
||||
</div>
|
||||
<span class="block text-xs text-slate-400 font-semibold mt-0.5">Akademik rapor & onay</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -644,9 +723,73 @@
|
||||
<i class="uil uil-hourglass"></i>
|
||||
<span>Bekleniyor</span>
|
||||
</button>
|
||||
@endif
|
||||
@if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
|
||||
<!-- Certificate & Transcript Document Card -->
|
||||
<div class="p-5 rounded-2xl border border-emerald-200 bg-gradient-to-r from-emerald-50/70 to-teal-50/50 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 hover:border-emerald-300 transition-all">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 rounded-xl bg-emerald-600 text-white flex items-center justify-center text-2xl flex-shrink-0 shadow-md shadow-emerald-600/20">
|
||||
<i class="uil uil-award"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="flex items-center gap-2">
|
||||
<h4 class="font-bold text-slate-800 text-base">Staj Bitirme Sertifikası & Akademik Transkript</h4>
|
||||
<span class="px-2 py-0.5 rounded-md bg-emerald-100 text-emerald-800 text-[10px] font-extrabold uppercase">Onaylı</span>
|
||||
</div>
|
||||
<p class="text-xs text-slate-500 mt-0.5">Dijital imzalı staj sertifikanız, akademik transkriptiniz ve performans değerlendirme raporunuz.</p>
|
||||
<span class="text-[11px] font-mono text-emerald-700 font-bold mt-1 block">Kod: {{ $intern->certificate_code }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-2 w-full sm:w-auto">
|
||||
<a href="{{ route('internship.verify', $intern->certificate_code) }}" target="_blank" class="w-full sm:w-auto px-5 py-2.5 bg-emerald-600 hover:bg-emerald-700 text-white font-bold rounded-xl text-sm transition-all flex items-center justify-center gap-2 shadow-md shadow-emerald-600/10">
|
||||
<i class="uil uil-external-link-alt"></i>
|
||||
<span>Görüntüle / Doğrula</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Approved Notebook Card -->
|
||||
<div class="p-5 rounded-2xl border border-slate-100 bg-slate-50/50 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 hover:border-slate-200 transition-all">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center text-2xl flex-shrink-0">
|
||||
<i class="uil uil-book-alt"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-bold text-slate-800 text-base">Onaylı Staj Defteri Raporu</h4>
|
||||
<p class="text-xs text-slate-400 mt-0.5">Sorumlu ve birim imzalarıyla onaylanmış günlük staj defteri çıktısı.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-2 w-full sm:w-auto">
|
||||
<a href="{{ route('intern.print-journal') }}?size=a4" target="_blank" class="px-4 py-2.5 bg-blue-600 hover:bg-blue-700 text-white font-bold rounded-xl text-xs transition-all flex items-center justify-center gap-1.5 shadow-sm">
|
||||
<i class="uil uil-print"></i>
|
||||
<span>A4 Yazdır</span>
|
||||
</a>
|
||||
<a href="{{ route('intern.print-journal') }}?size=a5" target="_blank" class="px-4 py-2.5 bg-slate-800 hover:bg-slate-900 text-white font-bold rounded-xl text-xs transition-all flex items-center justify-center gap-1.5 shadow-sm">
|
||||
<i class="uil uil-print"></i>
|
||||
<span>A5 Yazdır</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($intern->github_repo)
|
||||
<!-- Markdown Journal Download Card -->
|
||||
<div class="p-5 rounded-2xl border border-slate-100 bg-slate-50/50 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 hover:border-slate-200 transition-all">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 rounded-xl bg-purple-50 text-purple-600 flex items-center justify-center text-2xl flex-shrink-0">
|
||||
<i class="uil uil-file-download-alt"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-bold text-slate-800 text-base">Staj Günlüğü Markdown Dosyası (.md)</h4>
|
||||
<p class="text-xs text-slate-400 mt-0.5">GitHub deponuzdaki commitler ve günlük defter kayıtlarınızla derlenmiş markdown çıktısı.</p>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{ route('intern.download-journal') }}" class="w-full sm:w-auto px-5 py-2.5 bg-purple-600 hover:bg-purple-700 text-white font-bold rounded-xl text-sm transition-all flex items-center justify-center gap-2 shadow-sm">
|
||||
<i class="uil uil-arrow-down-tray"></i>
|
||||
<span>İndir (.md)</span>
|
||||
</a>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1018,6 +1161,82 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Panel 5: Sertifika & Akademik Transkript -->
|
||||
<div id="transcript-panel" class="tab-panel hidden space-y-6">
|
||||
<div class="bg-white rounded-3xl p-6 md:p-8 shadow-xl border border-slate-100/50">
|
||||
|
||||
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6 pb-4 border-b border-slate-100">
|
||||
<div>
|
||||
<h3 class="font-bold text-slate-800 text-lg flex items-center gap-2">
|
||||
<i class="uil uil-award text-emerald-600 text-xl"></i>
|
||||
<span>Staj Bitirme Sertifikası & Akademik Transkript</span>
|
||||
</h3>
|
||||
<p class="text-xs text-slate-400 mt-0.5">Trunçgil Teknoloji staj programı kapsamında elde ettiğiniz kazanımlar, teknik değerlendirme ve resmi transkriptiniz.</p>
|
||||
</div>
|
||||
@if($intern->certificate_code)
|
||||
<a href="{{ route('internship.verify', $intern->certificate_code) }}" target="_blank" class="px-5 py-2.5 bg-emerald-600 hover:bg-emerald-700 text-white font-extrabold text-xs rounded-xl transition-all shadow-md shadow-emerald-600/20 flex items-center justify-center gap-1.5 whitespace-nowrap">
|
||||
<i class="uil uil-external-link-alt"></i>
|
||||
<span>Doğrulama Sayfasını Aç</span>
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<!-- Official Verification Status Header -->
|
||||
<div class="bg-gradient-to-r from-slate-900 to-indigo-950 text-white rounded-2xl p-6 mb-6 shadow-md relative overflow-hidden">
|
||||
<div class="relative z-10 flex flex-col md:flex-row justify-between items-start md:items-center gap-6">
|
||||
<div>
|
||||
<div class="flex flex-wrap items-center gap-2 mb-2">
|
||||
<span class="px-3 py-1 bg-emerald-500/20 border border-emerald-400/30 text-emerald-300 text-[10px] font-extrabold uppercase rounded-full tracking-wider flex items-center gap-1">
|
||||
<i class="uil uil-check-circle"></i> Onaylı Belge
|
||||
</span>
|
||||
@if($intern->notebook_supervisor_signed)
|
||||
<span class="px-3 py-1 bg-blue-500/20 border border-blue-400/30 text-blue-300 text-[10px] font-extrabold uppercase rounded-full tracking-wider">
|
||||
Sorumlu: {{ $intern->notebook_supervisor_name ?: 'Alperen Trunç' }}
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
<h4 class="text-lg font-extrabold text-white">{{ $intern->name }}</h4>
|
||||
<p class="text-xs text-slate-300 mt-0.5">{{ \Carbon\Carbon::parse($intern->internship_start_date)->format('d.m.Y') }} - {{ \Carbon\Carbon::parse($intern->internship_end_date)->format('d.m.Y') }} ({{ $intern->internship_total_days }} İş Günü)</p>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col items-start md:items-end">
|
||||
<span class="text-[10px] text-slate-400 font-extrabold uppercase tracking-wider block">Güvenli Doğrulama Kodu</span>
|
||||
<span class="text-sm font-mono font-extrabold text-emerald-400 bg-slate-800/90 px-3 py-1 rounded-lg border border-slate-700 mt-1">{{ $intern->certificate_code }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Quick Export Buttons Bar -->
|
||||
<div class="p-4 rounded-2xl bg-slate-50 border border-slate-100 flex flex-wrap gap-2.5 items-center justify-between mb-6">
|
||||
<div class="text-xs font-bold text-slate-600 flex items-center gap-1.5">
|
||||
<i class="uil uil-print text-base text-blue-600"></i>
|
||||
<span>Hızlı Belge ve Rapor Çıktıları:</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<a href="{{ route('intern.print-journal') }}?size=a4" target="_blank" class="px-3 py-1.5 bg-white hover:bg-slate-100 border border-slate-200 text-slate-700 font-bold text-xs rounded-xl transition-all flex items-center gap-1">
|
||||
<i class="uil uil-print"></i> A4 Defter
|
||||
</a>
|
||||
<a href="{{ route('intern.print-journal') }}?size=a5" target="_blank" class="px-3 py-1.5 bg-white hover:bg-slate-100 border border-slate-200 text-slate-700 font-bold text-xs rounded-xl transition-all flex items-center gap-1">
|
||||
<i class="uil uil-print"></i> A5 Defter
|
||||
</a>
|
||||
@if($intern->github_repo)
|
||||
<a href="{{ route('intern.download-journal') }}" class="px-3 py-1.5 bg-purple-50 hover:bg-purple-100 text-purple-700 border border-purple-200 font-bold text-xs rounded-xl transition-all flex items-center gap-1">
|
||||
<i class="uil uil-arrow-down-tray"></i> Markdown (.md)
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Rendered Transcript Markdown Content -->
|
||||
<div class="transcript-markdown-wrapper p-6 md:p-8 rounded-2xl bg-white border border-slate-200/80 shadow-inner">
|
||||
<div class="prose max-w-none text-slate-700 leading-relaxed">
|
||||
{!! new \Illuminate\Support\HtmlString(\Illuminate\Support\Str::markdown($intern->transcript_markdown ?? '')) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1924,9 +2143,86 @@
|
||||
.no-scrollbar::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.no-scrollbar {
|
||||
-ms-overflow-style: none;
|
||||
scrollbar-width: none;
|
||||
.transcript-markdown-wrapper table {
|
||||
width: 100%;
|
||||
margin-top: 0.75rem;
|
||||
margin-bottom: 1.25rem;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.transcript-markdown-wrapper th {
|
||||
background-color: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
padding: 8px 12px;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
color: #1e293b;
|
||||
text-align: left;
|
||||
}
|
||||
.transcript-markdown-wrapper td {
|
||||
border: 1px solid #e2e8f0;
|
||||
padding: 8px 12px;
|
||||
font-size: 13px;
|
||||
color: #334155;
|
||||
}
|
||||
.transcript-markdown-wrapper h3 {
|
||||
font-size: 16px;
|
||||
font-weight: 800;
|
||||
color: #0f172a;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0.75rem;
|
||||
padding-bottom: 0.5rem;
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
}
|
||||
.transcript-markdown-wrapper h4 {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #1e293b;
|
||||
margin-top: 1.25rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.transcript-markdown-wrapper blockquote {
|
||||
border-left: 4px solid #f97316;
|
||||
padding-left: 1rem;
|
||||
font-style: italic;
|
||||
color: #475569;
|
||||
background: #fff7ed;
|
||||
padding: 12px;
|
||||
border-radius: 0 12px 12px 0;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
/* Prevent theme red text color on link buttons hover */
|
||||
a.btn-doc-emerald, .btn-doc-emerald {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
a.btn-doc-emerald:hover, a.btn-doc-emerald:focus, .btn-doc-emerald:hover {
|
||||
color: #ffffff !important;
|
||||
background-color: #047857 !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
a.btn-doc-blue, .btn-doc-blue {
|
||||
color: #1d4ed8 !important;
|
||||
}
|
||||
a.btn-doc-blue:hover, a.btn-doc-blue:focus, .btn-doc-blue:hover {
|
||||
color: #1e40af !important;
|
||||
background-color: #dbeafe !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
a.btn-doc-slate, .btn-doc-slate {
|
||||
color: #475569 !important;
|
||||
}
|
||||
a.btn-doc-slate:hover, a.btn-doc-slate:focus, .btn-doc-slate:hover {
|
||||
color: #0f172a !important;
|
||||
background-color: #e2e8f0 !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
a.btn-doc-purple, .btn-doc-purple {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
a.btn-doc-purple:hover, a.btn-doc-purple:focus, .btn-doc-purple:hover {
|
||||
color: #ffffff !important;
|
||||
background-color: #7e22ce !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
Reference in New Issue
Block a user