<?php
namespace App\Http\Controllers\Admin;
use App\Facades\DataTable;
use App\Helpers\NotifWa;
use App\Http\Controllers\Controller;
use App\Models\PelatihanPeserta;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use setasign\Fpdi\Fpdi;
class PendaftaranController extends Controller
{
public function index()
{
$sort = str_replace(
['created_at'],
['created_at'],
request()->query('col')
);
$query = PelatihanPeserta::has('user')->has('pelatihan');
if (auth()->user()->role == "instruktur") {
$query = $query->whereHas('pelatihan', function ($w) {
$w->where('user_id', auth()->user()->id);
});
}
$result = DataTable::query($query)
->with(['user.peserta', 'pelatihan'])
->searchable(['user.nama', 'user.email', 'user.peserta.nik'])
->applySort($sort)
->allowedSorts(['created_at'])
->make()->toArray();
return Inertia::render('Admin/Pendaftaran/Index', [
'datatable' => $result,
]);
}
public function reject($id)
{
$pelatihan_peserta = PelatihanPeserta::with('user.peserta', 'pelatihan')->findOrFail($id);
$pelatihan_peserta->status = 'reject';
$pelatihan_peserta->save();
if ($pelatihan_peserta->user->peserta->no_hp) {
NotifWa::send($pelatihan_peserta->user->peserta->no_hp, 'Pendaftaran untuk pelatihan : *' . $pelatihan_peserta->pelatihan->title . "* DITOLAK");
}
return redirect(route('admin.pendaftaran.index'))->with('success', 'Berhasil menolak peserta ' . $pelatihan_peserta->user->nama);
}
public function approve($id)
{
$pelatihan_peserta = PelatihanPeserta::with('user.peserta', 'pelatihan')->findOrFail($id);
$pelatihan_peserta->status = 'approve';
$pelatihan_peserta->save();
if ($pelatihan_peserta->user->peserta->no_hp) {
NotifWa::send($pelatihan_peserta->user->peserta->no_hp, 'Pendaftaran untuk pelatihan : *' . $pelatihan_peserta->pelatihan->title . "* DITERIMA");
}
return redirect(route('admin.pendaftaran.index'))->with('success', 'Berhasil menyetujui peserta ' . $pelatihan_peserta->user->nama);
}
public function show($id)
{
$pelatihan_peserta = PelatihanPeserta::with('user.peserta.kabupaten', 'user.peserta.provinsi', 'peserta.kabupaten', 'peserta.provinsi', 'pelatihan', 'jawaban_syarat_pelatihans.syarat_pelatihan', 'user.peserta.provinsi', 'user.peserta.kabupaten')->findOrFail($id);
return Inertia::render('Admin/Pendaftaran/Show', [
'pelatihan_peserta' => $pelatihan_peserta,
'pelatihan' => $pelatihan_peserta->pelatihan
]);
}
public function printSertifikat($id)
{
$pelatihanPeserta = PelatihanPeserta::has('user.peserta')->with('user.peserta', 'pelatihan.pelatihan_materis', 'jawaban_syarat_pelatihans.syarat_pelatihan', 'user.peserta.provinsi', 'user.peserta.kabupaten')->findOrFail($id);
$noSertifikat = ($pelatihanPeserta->id + 170) . 'GN-' . date("m/Y", strtotime($pelatihanPeserta->pelatihan->end_date));
// return view('sertifikat',compact('pelatihanPeserta','noSertifikat'));
$pdf = Pdf::loadView('sertifikat', compact('pelatihanPeserta', 'noSertifikat'));
$pdf->setPaper('A4', 'landscape');
// $pdf->setOption(['isRemoteEnabled' => true]);
return $pdf->stream('sertifikat.pdf');
}
public function printDetail($id)
{
$pelatihan_peserta = PelatihanPeserta::with([
'user.peserta.kabupaten',
'user.peserta.provinsi',
'peserta.kabupaten',
'peserta.provinsi',
'pelatihan',
'jawaban_syarat_pelatihans.syarat_pelatihan'
])->findOrFail($id);
$peserta = $pelatihan_peserta->peserta;
$data = [
'pelatihan_peserta' => $pelatihan_peserta,
'pelatihan' => $pelatihan_peserta->pelatihan,
'peserta' => $peserta
];
// Handle KTP photo
if ($peserta->foto_ktp) {
$data['foto_ktp'] = 'data:image/png;base64,' . base64_encode(
Storage::get($peserta->foto_ktp)
);
}
// Handle KK photo
if ($peserta->foto_kk) {
$data['foto_kk'] = 'data:image/png;base64,' . base64_encode(
Storage::get($peserta->foto_kk)
);
}
// Handle Bukti Usaha
if ($peserta->file_bukti_usaha) {
$mime = Storage::mimeType($peserta->file_bukti_usaha);
if (strpos($mime, 'image') !== false) {
$data['file_bukti_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
Storage::get($peserta->file_bukti_usaha)
);
$data['is_bukti_usaha_image'] = true;
}
}
// Handle Profil Usaha
if ($peserta->file_profil_usaha) {
$mime = Storage::mimeType($peserta->file_profil_usaha);
if (strpos($mime, 'image') !== false) {
$data['file_profil_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
Storage::get($peserta->file_profil_usaha)
);
$data['is_profil_usaha_image'] = true;
}
}
// Handle Ijin Usaha
if ($peserta->file_ijin_usaha) {
$mime = Storage::mimeType($peserta->file_ijin_usaha);
if (strpos($mime, 'image') !== false) {
$data['file_ijin_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
Storage::get($peserta->file_ijin_usaha)
);
$data['is_ijin_usaha_image'] = true;
}
}
// Process file attachments for the requirements
foreach ($pelatihan_peserta->jawaban_syarat_pelatihans as $syarat) {
if ($syarat->syarat_pelatihan->type == 'file' && !empty($syarat->jawaban) && $syarat->jawaban != '-') {
try {
$mime = Storage::mimeType($syarat->jawaban);
if (strpos($mime, 'image') !== false) {
$syarat->file_type = 'image';
$syarat->file_content = 'data:' . $mime . ';base64,' . base64_encode(
Storage::get($syarat->jawaban)
);
} else {
$syarat->file_type = 'pdf';
}
} catch (\Exception $e) {
$syarat->file_type = null;
$syarat->file_content = null;
}
}
}
// Generate the main PDF
$pdf = Pdf::loadView('pdf.pendaftaran-detail', $data);
// Collect PDF attachments
// Get file attachments
$attachments = [];
foreach (['file_bukti_usaha', 'file_profil_usaha', 'file_ijin_usaha'] as $field) {
if ($peserta->$field) {
$mime = Storage::mimeType($peserta->$field);
if (strpos($mime, 'pdf') !== false) {
$attachments[] = [
'content' => Storage::get($peserta->$field),
'filename' => basename($peserta->$field),
'description' => str_replace("_"," ",$field)
];
}
}
}
foreach ($pelatihan_peserta->jawaban_syarat_pelatihans as $syarat) {
if (
$syarat->syarat_pelatihan->type == 'file' &&
!empty($syarat->jawaban) &&
$syarat->jawaban != '-' &&
$syarat->file_type == 'pdf'
) {
try {
$attachments[] = [
'content' => Storage::get($syarat->jawaban),
'filename' => basename($syarat->jawaban),
'description' => $syarat->syarat_pelatihan->description
];
} catch (\Exception $e) {
continue;
}
}
}
// If there are PDF attachments, merge them with the main PDF
if (!empty($attachments)) {
$mainPdf = $pdf->output();
$merger = new \setasign\Fpdi\Tcpdf\Fpdi();
// Create temporary files
$mainTempFile = tempnam(sys_get_temp_dir(), 'main_');
file_put_contents($mainTempFile, $mainPdf);
// Add main PDF
$pageCount = $merger->setSourceFile($mainTempFile);
for ($i = 1; $i <= $pageCount; $i++) {
$merger->addPage();
$merger->useTemplate($merger->importPage($i));
}
unlink($mainTempFile);
// Add attachments
foreach ($attachments as $attachment) {
try {
$tempFile = tempnam(sys_get_temp_dir(), 'attachment_');
file_put_contents($tempFile, $attachment['content']);
// Get PDF info from the attachment
$pageCount = $merger->setSourceFile($tempFile);
// Add title page for the attachment
$merger->AddPage();
$merger->SetFont('Helvetica', 'B', 14);
$merger->MultiCell(0, 10, 'Lampiran: ' . $attachment['description'], 0, 'C');
try {
// Add the attachment pages with original size and orientation
for ($i = 1; $i <= $pageCount; $i++) {
$tpl = $merger->importPage($i);
$specs = $merger->getTemplateSize($tpl);
// Add page with original orientation
$merger->AddPage($specs['orientation'], [$specs['width'], $specs['height']]);
$merger->useTemplate($tpl);
}
} catch (\Throwable $th) {
//throw $th;
}
unlink($tempFile);
} catch (\Throwable $th) {
//throw $th;
}
}
return response($merger->Output('S'))
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'inline; filename="pendaftaran-' . $pelatihan_peserta->id . '.pdf"');
}
return $pdf->stream('pendaftaran-' . $pelatihan_peserta->id . '.pdf');
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]