6 Commits

+42 -35
View File
@@ -6,27 +6,22 @@
<div class="bg-slate-100 py-12 no-print"> <div class="bg-slate-100 py-12 no-print">
<div class="container max-w-6xl mx-auto px-4"> <div class="container max-w-6xl mx-auto px-4">
<!-- Verification Banner (e-Devlet Style) --> <!-- Verification Banner (e-Devlet Style) -->
<div class="bg-emerald-50 border-l-4 border-emerald-500 p-6 rounded-2xl shadow-md mb-8 flex flex-col md:flex-row items-center justify-between gap-6"> <div class="bg-emerald-50 border-l-4 border-emerald-500 p-4 rounded-xl shadow-sm mb-6 flex flex-col lg:flex-row lg:items-center justify-between gap-4">
<div class="flex items-center gap-4"> <div class="flex items-center gap-3 flex-1 min-w-0">
<div class="w-12 h-12 rounded-full bg-emerald-500 text-white flex items-center justify-center flex-shrink-0 shadow-lg shadow-emerald-500/20"> <div class="w-10 h-10 rounded-full bg-emerald-500 text-white flex items-center justify-center flex-shrink-0 shadow-md shadow-emerald-500/10">
<i class="uil uil-shield-check text-2xl"></i> <i class="uil uil-shield-check text-xl"></i>
</div> </div>
<div> <div class="text-sm leading-normal">
<h3 class="text-lg font-bold text-slate-800">Güvenli Belge Doğrulama</h3> <span class="font-bold text-slate-800">Güvenli Belge Doğrulama:</span>
<p class="text-sm text-slate-500 mt-1">Bu staj sertifikası ve transkripti, Trunçgil Teknopark sistemi üzerinden dijital olarak imzalanıp onaylanmıştır.</p> <span class="text-slate-600 ml-1">Bu staj sertifikası ve transkripti, Trunçgil Teknopark sistemi üzerinden dijital olarak imzalanıp onaylanmıştır.</span>
</div> </div>
</div> </div>
<div class="flex items-center gap-3 flex-wrap"> <div class="flex-shrink-0">
<!-- PDF Download Button --> <!-- PDF Download Button -->
<button onclick="downloadPDF()" id="pdf-btn" class="px-6 py-3 bg-orange-600 hover:bg-orange-700 text-white font-bold rounded-xl transition-all shadow-lg shadow-orange-500/25 flex items-center gap-2"> <button onclick="downloadPDF()" id="pdf-btn" class="px-4 py-2 bg-orange-600 hover:bg-orange-700 text-white text-sm font-bold rounded-lg transition-all shadow-sm flex items-center gap-1.5 whitespace-nowrap">
<i class="uil uil-file-download text-lg" id="pdf-icon"></i> <i class="uil uil-file-download text-base" id="pdf-icon"></i>
<span class="spinner-border spinner-border-sm hidden animate-spin w-4 h-4 border-2 border-white border-t-transparent rounded-full" id="pdf-spinner" role="status"></span> <span class="spinner-border spinner-border-sm hidden animate-spin w-3.5 h-3.5 border-2 border-white border-t-transparent rounded-full" id="pdf-spinner" role="status"></span>
<span id="pdf-btn-text">PDF Olarak İndir</span> <span id="pdf-btn-text">PDF İndir</span>
</button>
<!-- Print Button -->
<button onclick="window.print()" class="px-6 py-3 bg-slate-900 hover:bg-slate-800 text-white font-bold rounded-xl transition-all shadow-md flex items-center gap-2">
<i class="uil uil-print text-lg"></i>
<span>Yazdır</span>
</button> </button>
</div> </div>
</div> </div>
@@ -47,8 +42,6 @@
</div> </div>
<!-- Thin Minimal Orange/Slate Inner Border --> <!-- Thin Minimal Orange/Slate Inner Border -->
<div class="absolute inset-6 border border-slate-200/50 rounded-[1.5rem] pointer-events-none z-10"></div>
<div class="absolute inset-[28px] border-2 border-orange-500/15 rounded-[1.3rem] pointer-events-none z-10"></div>
<div class="relative z-10 flex flex-col justify-between h-full min-h-[580px] md:min-h-[540px]"> <div class="relative z-10 flex flex-col justify-between h-full min-h-[580px] md:min-h-[540px]">
@@ -59,18 +52,17 @@
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Teknoloji" class="h-16 md:h-20 object-contain"> <img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Teknoloji" class="h-16 md:h-20 object-contain">
</div> </div>
<div class="w-1/3 text-right"> <div class="w-1/3 text-right">
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-widest block">Verifikasyon No</span> <span class="text-[10px] font-bold text-slate-400 tracking-widest block">VERİFİKASYON NO</span>
<span class="text-xs font-mono font-bold text-slate-800">{{ $application->certificate_code }}</span> <span class="text-xs font-mono font-bold text-slate-800">{{ $application->certificate_code }}</span>
</div> </div>
</div> </div>
<!-- Main Content --> <!-- Main Content -->
<div class="text-center my-auto px-4"> <div class="text-center my-auto px-4">
<h1 class="font-serif text-3xl md:text-5xl text-slate-900 uppercase mt-8 mb-2" style="font-weight: 900; letter-spacing: 0.04em;">Staj Bitirme Sertifikası</h1> <h1 class="font-cinzel text-3xl md:text-5xl text-slate-900 mt-8 mb-2" style="font-weight: 900; letter-spacing: 0.04em;">STAJ BİTİRME<br>SERTİFİKASI</h1>
<div class="w-24 h-[3px] bg-orange-500 mx-auto mb-8"></div>
<p class="text-slate-400 text-xs md:text-sm uppercase tracking-wider mb-2">Sayın</p> <p class="text-slate-400 text-xs md:text-sm tracking-wider mb-0">SAYIN</p>
<h2 class="font-serif text-2xl md:text-4xl font-extrabold text-slate-900 tracking-wide mb-6">{{ $application->name }}</h2> <h2 class="font-cinzel text-2xl md:text-4xl font-extrabold text-slate-900 tracking-wide mb-6 mt-0">{{ $application->name }}</h2>
<div class="max-w-3xl mx-auto text-slate-700 leading-relaxed text-sm md:text-base space-y-4"> <div class="max-w-3xl mx-auto text-slate-700 leading-relaxed text-sm md:text-base space-y-4">
<p> <p>
@@ -90,15 +82,15 @@
<div class="flex items-center gap-4"> <div class="flex items-center gap-4">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-28 h-28 border border-slate-200 p-1 rounded-xl bg-white shadow-sm"> <img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-28 h-28 border border-slate-200 p-1 rounded-xl bg-white shadow-sm">
<div class="text-left hidden sm:block"> <div class="text-left hidden sm:block">
<span class="text-[8px] font-bold text-slate-400 uppercase tracking-wider block">Dijital Doğrulama</span> <span class="text-[8px] font-bold text-slate-400 tracking-wider block">DİJİTAL DOĞRULAMA</span>
<span class="text-[9px] text-slate-500 block">Karekod okutularak belgenin güncelliği e-Devlet stilinde doğrulanabilir.</span> <span class="text-[9px] text-slate-500 block">Karekod okutularak belgenin güncelliği doğrulanabilir.</span>
</div> </div>
</div> </div>
<!-- Middle: Date --> <!-- Middle: Date -->
<div class="text-center"> <div class="text-center">
<span class="text-[9px] text-slate-400 block uppercase tracking-wider">Düzenlenme Tarihi</span> <span class="text-[9px] text-slate-600 block tracking-wider text-glow-white font-semibold">DÜZENLENME TARİHİ</span>
<span class="text-xs font-bold text-slate-700">{{ \Carbon\Carbon::parse($application->internship_end_date)->format('d.m.Y') }}</span> <span class="text-xs font-bold text-slate-800 text-glow-white">{{ \Carbon\Carbon::parse($application->internship_end_date)->format('d.m.Y') }}</span>
</div> </div>
<!-- Right: Authorized Signature --> <!-- Right: Authorized Signature -->
@@ -106,10 +98,10 @@
<div class="inline-block text-center pr-2"> <div class="inline-block text-center pr-2">
<!-- Digital Signature Stamp Concept --> <!-- Digital Signature Stamp Concept -->
<div class="h-10 flex items-center justify-center mb-1"> <div class="h-10 flex items-center justify-center mb-1">
<span class="font-sans text-slate-800 font-bold text-sm tracking-wider">Trunçgil Teknoloji</span> <span class="font-sans text-slate-900 font-extrabold text-sm tracking-wider text-glow-white">Trunçgil Teknoloji</span>
</div> </div>
<span class="font-bold text-slate-800 block text-xs">Onay Makamı</span> <span class="font-bold text-slate-900 block text-xs text-glow-white">Onay Makamı</span>
<span class="text-[9px] text-slate-400 block">Staj Koordinatörlüğü</span> <span class="text-[9px] text-slate-700 font-semibold block text-glow-white">Staj Koordinatörlüğü</span>
</div> </div>
</div> </div>
</div> </div>
@@ -129,15 +121,15 @@
<!-- Header --> <!-- Header -->
<div class="flex justify-between items-center pb-2 border-b border-slate-100 mb-3"> <div class="flex justify-between items-center pb-2 border-b border-slate-100 mb-3">
<div> <div>
<h2 class="font-serif font-bold text-slate-900 uppercase transcript-header-title">Staj Akademik Transkripti</h2> <h2 class="font-serif font-bold text-slate-900 transcript-header-title">STAJ AKADEMİK TRANSKRİPTİ</h2>
<p class="text-slate-400 tracking-wider uppercase mt-0.5 transcript-header-subtitle">Ve Performans Değerlendirme Raporu</p> <p class="text-slate-400 tracking-wider mt-0.5 transcript-header-subtitle">VE PERFORMANS DEĞERLENDİRME RAPORU</p>
</div> </div>
<img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Logo" class="h-6 object-contain"> <img src="{{ asset('logos/truncgil-yatay.svg') }}" alt="Trunçgil Logo" class="h-6 object-contain">
</div> </div>
<!-- Student Info block --> <!-- Student Info block -->
<div class="bg-slate-50 rounded-xl p-2.5 border border-slate-100 mb-3"> <div class="bg-slate-50 rounded-xl p-2.5 border border-slate-100 mb-3">
<h3 class="font-bold text-slate-400 uppercase tracking-widest mb-1.5 student-info-title">Öğrenci / Stajyer Bilgileri</h3> <h3 class="font-bold text-slate-400 tracking-widest mb-1.5 student-info-title">ÖĞRENCİ / STAJYER BİLGİLERİ</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-y-1 gap-x-8 student-info-grid"> <div class="grid grid-cols-1 md:grid-cols-2 gap-y-1 gap-x-8 student-info-grid">
<div class="flex justify-between border-b border-slate-200/50 pb-1"> <div class="flex justify-between border-b border-slate-200/50 pb-1">
<span class="text-slate-500">Adı Soyadı:</span> <span class="text-slate-500">Adı Soyadı:</span>
@@ -169,7 +161,7 @@
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-14 h-14 border border-slate-200 p-0.5 rounded-lg bg-white"> <img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data={{ urlencode(route('internship.verify', $application->certificate_code)) }}" alt="QR Code" class="w-14 h-14 border border-slate-200 p-0.5 rounded-lg bg-white">
<div> <div>
<span class="font-bold text-slate-400 uppercase tracking-wider block verify-code-label">Güvenli Doğrulama Kodu</span> <span class="font-bold text-slate-400 tracking-wider block verify-code-label">GÜVENLİ DOĞRULAMA KODU</span>
<span class="font-mono font-bold text-slate-800 block verify-code">{{ $application->certificate_code }}</span> <span class="font-mono font-bold text-slate-800 block verify-code">{{ $application->certificate_code }}</span>
</div> </div>
</div> </div>
@@ -201,6 +193,13 @@
.font-serif { .font-serif {
font-family: 'Cinzel', 'Playfair Display', Georgia, serif; font-family: 'Cinzel', 'Playfair Display', Georgia, serif;
} }
.font-cinzel {
font-family: 'Cinzel', serif !important;
}
.text-glow-white {
text-shadow: 0 0 10px #ffffff, 0 0 6px #ffffff, 0 0 3px #ffffff;
}
/* Transcript typography helpers scaled globally */ /* Transcript typography helpers scaled globally */
.transcript-header-title { .transcript-header-title {
@@ -375,6 +374,7 @@
padding: 15mm !important; padding: 15mm !important;
box-shadow: none !important; box-shadow: none !important;
border: none !important; border: none !important;
border-radius: 0 !important;
box-sizing: border-box !important; box-sizing: border-box !important;
page-break-after: always !important; page-break-after: always !important;
break-after: page !important; break-after: page !important;
@@ -397,6 +397,7 @@
padding: 10mm !important; padding: 10mm !important;
box-shadow: none !important; box-shadow: none !important;
border: none !important; border: none !important;
border-radius: 0 !important;
box-sizing: border-box !important; box-sizing: border-box !important;
overflow: hidden !important; overflow: hidden !important;
} }
@@ -469,16 +470,20 @@
const origCertTransform = certEl.style.transform; const origCertTransform = certEl.style.transform;
const origCertWidth = certEl.style.width; const origCertWidth = certEl.style.width;
const origCertHeight = certEl.style.height; const origCertHeight = certEl.style.height;
const origCertRadius = certEl.style.borderRadius;
const origTransTransform = transEl.style.transform; const origTransTransform = transEl.style.transform;
const origTransWidth = transEl.style.width; const origTransWidth = transEl.style.width;
const origTransHeight = transEl.style.height; const origTransHeight = transEl.style.height;
const origTransRadius = transEl.style.borderRadius;
certEl.style.transform = 'none'; certEl.style.transform = 'none';
certEl.style.width = '1122px'; certEl.style.width = '1122px';
certEl.style.height = '794px'; certEl.style.height = '794px';
certEl.style.borderRadius = '0';
transEl.style.transform = 'none'; transEl.style.transform = 'none';
transEl.style.width = '794px'; transEl.style.width = '794px';
transEl.style.height = '1122px'; transEl.style.height = '1122px';
transEl.style.borderRadius = '0';
// Render Page 1 (Landscape) // Render Page 1 (Landscape)
const certCanvas = await html2canvas(certEl, { const certCanvas = await html2canvas(certEl, {
@@ -518,9 +523,11 @@
certEl.style.transform = origCertTransform; certEl.style.transform = origCertTransform;
certEl.style.width = origCertWidth; certEl.style.width = origCertWidth;
certEl.style.height = origCertHeight; certEl.style.height = origCertHeight;
certEl.style.borderRadius = origCertRadius;
transEl.style.transform = origTransTransform; transEl.style.transform = origTransTransform;
transEl.style.width = origTransWidth; transEl.style.width = origTransWidth;
transEl.style.height = origTransHeight; transEl.style.height = origTransHeight;
transEl.style.borderRadius = origTransRadius;
// Trigger Save File // Trigger Save File
pdf.save('{{ str()->slug($application->name) }}-staj-belgesi.pdf'); pdf.save('{{ str()->slug($application->name) }}-staj-belgesi.pdf');