diff --git a/app/Filament/Admin/Resources/InternApplications/InternApplicationResource.php b/app/Filament/Admin/Resources/InternApplications/InternApplicationResource.php
index 489b040..fc1b7ef 100644
--- a/app/Filament/Admin/Resources/InternApplications/InternApplicationResource.php
+++ b/app/Filament/Admin/Resources/InternApplications/InternApplicationResource.php
@@ -485,24 +485,45 @@ class InternApplicationResource extends Resource
]),
])
->actions([
- Action::make('download_cv')
- ->label(__('career.download_cv'))
- ->icon('heroicon-o-arrow-down-tray')
- ->url(fn ($record) => Storage::disk('public')->url($record->cv_path))
- ->openUrlInNewTab(),
- Action::make('download_signed_form')
- ->label('İmzalı Form İndir')
- ->icon('heroicon-o-document-check')
- ->url(fn ($record) => $record->signed_internship_form_path ? Storage::disk('public')->url($record->signed_internship_form_path) : null)
- ->visible(fn ($record) => !empty($record->signed_internship_form_path))
- ->openUrlInNewTab(),
Action::make('view_certificate')
- ->label('Sertifika Doğrulama')
+ ->label('Sertifika & Transkript')
->icon('heroicon-o-academic-cap')
->color('success')
->url(fn ($record) => $record->certificate_code ? route('internship.verify', $record->certificate_code) : null)
->visible(fn ($record) => !empty($record->certificate_code))
->openUrlInNewTab(),
+ Action::make('print_journal_a4')
+ ->label('A4 Defter')
+ ->icon('heroicon-o-printer')
+ ->color('info')
+ ->url(fn ($record) => route('intern.print-journal') . '?size=a4&intern_id=' . $record->id)
+ ->visible(fn ($record) => !empty($record->internship_total_days))
+ ->openUrlInNewTab(),
+ Action::make('print_journal_a5')
+ ->label('A5 Defter')
+ ->icon('heroicon-o-printer')
+ ->color('gray')
+ ->url(fn ($record) => route('intern.print-journal') . '?size=a5&intern_id=' . $record->id)
+ ->visible(fn ($record) => !empty($record->internship_total_days))
+ ->openUrlInNewTab(),
+ Action::make('download_markdown')
+ ->label('Günlük (.md)')
+ ->icon('heroicon-o-arrow-down-tray')
+ ->color('warning')
+ ->url(fn ($record) => route('intern.download-journal') . '?intern_id=' . $record->id)
+ ->visible(fn ($record) => !empty($record->github_repo))
+ ->openUrlInNewTab(),
+ Action::make('download_signed_form')
+ ->label('İmzalı Form')
+ ->icon('heroicon-o-document-check')
+ ->url(fn ($record) => $record->signed_internship_form_path ? Storage::disk('public')->url($record->signed_internship_form_path) : null)
+ ->visible(fn ($record) => !empty($record->signed_internship_form_path))
+ ->openUrlInNewTab(),
+ Action::make('download_cv')
+ ->label(__('career.download_cv'))
+ ->icon('heroicon-o-arrow-down-tray')
+ ->url(fn ($record) => Storage::disk('public')->url($record->cv_path))
+ ->openUrlInNewTab(),
DeleteAction::make(),
])
->bulkActions([
diff --git a/app/Http/Controllers/CareerController.php b/app/Http/Controllers/CareerController.php
index 2bc5639..5743dac 100644
--- a/app/Http/Controllers/CareerController.php
+++ b/app/Http/Controllers/CareerController.php
@@ -811,6 +811,8 @@ class CareerController extends Controller
'end_date' => $intern->internship_end_date,
'total_days' => $intern->internship_total_days,
'filled_days' => $filledDaysCount,
+ 'certificate_code' => $intern->certificate_code,
+ 'github_repo' => $intern->github_repo,
'notebook_supervisor_signed' => (bool)$intern->notebook_supervisor_signed,
'notebook_supervisor_name' => $intern->notebook_supervisor_name,
'notebook_unit_signed' => (bool)$intern->notebook_unit_signed,
diff --git a/resources/views/front/career/admin_dashboard.blade.php b/resources/views/front/career/admin_dashboard.blade.php
index 3b6e168..2cf1acf 100644
--- a/resources/views/front/career/admin_dashboard.blade.php
+++ b/resources/views/front/career/admin_dashboard.blade.php
@@ -137,6 +137,38 @@
+
+
+
+
+ Resmi Belgeler & Çıktılar
+
+
+
+
+
@@ -198,7 +230,13 @@
-
@@ -217,6 +255,63 @@
border-color: #dbeafe;
color: #1e40af !important;
}
+
+ /* 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-amber, .btn-doc-amber {
+ color: #b45309 !important;
+ }
+ a.btn-doc-amber:hover, a.btn-doc-amber:focus, .btn-doc-amber:hover {
+ color: #92400e !important;
+ background-color: #fef3c7 !important;
+ text-decoration: none !important;
+ }
+ a.btn-doc-green, .btn-doc-green {
+ color: #15803d !important;
+ }
+ a.btn-doc-green:hover, a.btn-doc-green:focus, .btn-doc-green:hover {
+ color: #166534 !important;
+ background-color: #dcfce7 !important;
+ text-decoration: none !important;
+ }
+ a.btn-doc-repo, .btn-doc-repo {
+ color: #2563eb !important;
+ }
+ a.btn-doc-repo:hover, a.btn-doc-repo:focus, .btn-doc-repo:hover {
+ color: #1d4ed8 !important;
+ text-decoration: underline !important;
+ }
+ a.btn-doc-md, .btn-doc-md {
+ color: #059669 !important;
+ }
+ a.btn-doc-md:hover, a.btn-doc-md:focus, .btn-doc-md:hover {
+ color: #047857 !important;
+ background-color: #d1fae5 !important;
+ text-decoration: none !important;
+ }
@endpush
@@ -318,6 +413,46 @@
updateSignatureUI('unit', data.intern.notebook_unit_signed, data.intern.notebook_unit_name);
updateSignatureUI('approved', data.intern.notebook_approved, null);
+ // Setup Official Document URLs
+ const certCode = data.intern.certificate_code;
+ const certBtn = document.getElementById('ijm-btn-verify-cert');
+ const footerCertBtn = document.getElementById('ijm-footer-verify');
+ if (certCode) {
+ const verifyUrl = `/staj-dogrulama/${certCode}`;
+ if (certBtn) {
+ certBtn.href = verifyUrl;
+ certBtn.classList.remove('hidden');
+ }
+ if (footerCertBtn) {
+ footerCertBtn.href = verifyUrl;
+ footerCertBtn.classList.remove('hidden');
+ }
+ } else {
+ if (certBtn) certBtn.classList.add('hidden');
+ if (footerCertBtn) footerCertBtn.classList.add('hidden');
+ }
+
+ const printA4Btn = document.getElementById('ijm-btn-print-a4');
+ if (printA4Btn) printA4Btn.href = `/stajyer/defteri-yazdir?size=a4&intern_id=${internId}`;
+
+ const printA5Btn = document.getElementById('ijm-btn-print-a5');
+ if (printA5Btn) printA5Btn.href = `/stajyer/defteri-yazdir?size=a5&intern_id=${internId}`;
+
+ const mdBtn = document.getElementById('ijm-btn-download-md');
+ if (mdBtn) mdBtn.href = `/stajyer/gunluk-indir?intern_id=${internId}`;
+
+ const repoBtn = document.getElementById('ijm-btn-repo');
+ if (repoBtn) {
+ if (data.intern.github_repo) {
+ repoBtn.href = data.intern.github_repo;
+ repoBtn.classList.remove('hidden');
+ repoBtn.classList.add('flex');
+ } else {
+ repoBtn.classList.add('hidden');
+ repoBtn.classList.remove('flex');
+ }
+ }
+
// Setup carousel slide data
journalEntries = data.entries;
diff --git a/resources/views/front/career/intern_dashboard.blade.php b/resources/views/front/career/intern_dashboard.blade.php
index df3bdf0..ca868a8 100644
--- a/resources/views/front/career/intern_dashboard.blade.php
+++ b/resources/views/front/career/intern_dashboard.blade.php
@@ -119,6 +119,69 @@
}
@endphp
+
+ @if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
+
+
+
+
+
+
+
+
+
+ @if($intern->notebook_supervisor_signed)
+
+ @endif
+ @if($intern->notebook_approved)
+
+ @endif
+
+
+
+
+ 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.
+
+
+ Doğrulama No:
+ {{ $intern->certificate_code }}
+
+
+
+
+
+
+
+ @endif
+
@@ -394,6 +457,22 @@
Sitede yayınlanacak bloglar
+
+
+
+
+
+
+
+
+
+ @if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
+
+ @endif
+
+
Akademik rapor & onay
+
+
@@ -644,9 +723,73 @@
Bekleniyor
- @endif
+ @if($intern->certificate_code && ($intern->notebook_approved || $intern->status === 'accepted'))
+
+
+
+
+
+
+
+
+
Staj Bitirme Sertifikası & Akademik Transkript
+
+
+
Dijital imzalı staj sertifikanız, akademik transkriptiniz ve performans değerlendirme raporunuz.
+
Kod: {{ $intern->certificate_code }}
+
+
+
+
+
+
+
+
+
+
+
Onaylı Staj Defteri Raporu
+
Sorumlu ve birim imzalarıyla onaylanmış günlük staj defteri çıktısı.
+
+
+
+
+ @endif
+
+ @if($intern->github_repo)
+
+
+
+
+
+
+
+
Staj Günlüğü Markdown Dosyası (.md)
+
GitHub deponuzdaki commitler ve günlük defter kayıtlarınızla derlenmiş markdown çıktısı.
+
+
+
+
+ İndir (.md)
+
+
+ @endif
+
@@ -1018,6 +1161,82 @@
+
+
+
+
+
+
+
+
+ Staj Bitirme Sertifikası & Akademik Transkript
+
+
Trunçgil Teknoloji staj programı kapsamında elde ettiğiniz kazanımlar, teknik değerlendirme ve resmi transkriptiniz.
+
+ @if($intern->certificate_code)
+
+
+ Doğrulama Sayfasını Aç
+
+ @endif
+
+
+
+
+
+
+
+
+ @if($intern->notebook_supervisor_signed)
+
+ @endif
+
+
+
{{ \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ü)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hızlı Belge ve Rapor Çıktıları:
+
+
+
+
+
+
+
+ {!! new \Illuminate\Support\HtmlString(\Illuminate\Support\Str::markdown($intern->transcript_markdown ?? '')) !!}
+
+
+
+
+
+
@@ -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;
}
@endpush
diff --git a/resources/views/front/career/partials/list.blade.php b/resources/views/front/career/partials/list.blade.php
index a207a36..ae6f357 100644
--- a/resources/views/front/career/partials/list.blade.php
+++ b/resources/views/front/career/partials/list.blade.php
@@ -89,22 +89,37 @@
-
+
@@ -114,11 +129,11 @@
@if($intern->github_repo)
diff --git a/resources/views/front/career/verify.blade.php b/resources/views/front/career/verify.blade.php
index 5dbd486..9fbdf58 100644
--- a/resources/views/front/career/verify.blade.php
+++ b/resources/views/front/career/verify.blade.php
@@ -3,7 +3,7 @@
@section('content')
-@if($application->status === 'accepted' && $application->notebook_approved)
+@if($application->status === 'accepted' && ($application->notebook_approved || $application->notebook_supervisor_signed || !empty($application->transcript_markdown)))
@@ -17,11 +17,18 @@
Bu staj sertifikası ve transkripti, Trunçgil Teknopark sistemi üzerinden dijital olarak imzalanıp onaylanmıştır.
-
@@ -261,6 +268,11 @@