Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/talent.gosepakat.id/app/Http/Controllers/Admin/
Upload File :
Current File : /home/aplikasiposinfo/www/talent.gosepakat.id/app/Http/Controllers/Admin/PesertaController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Exports\FormatImportPesertaExport;
use App\Facades\DataTable;
use App\Http\Controllers\Controller;
use App\Imports\PesertasImport;
use App\Models\Peserta;
use App\Models\User;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use Maatwebsite\Excel\Facades\Excel;
use Barryvdh\DomPDF\Facade\Pdf;
use setasign\Fpdi\Fpdi;

class PesertaController extends Controller
{
    public function print($id)
    {
        $peserta = Peserta::with(['kabupaten'])->findOrFail($id);
        
        $data = [
            'peserta' => $peserta,
            'foto_ktp' => null,
            'foto_kk' => null,
            'file_bukti_usaha' => null,
            'file_profil_usaha' => null,
            'file_ijin_usaha' => null,
            'is_bukti_usaha_image' => false,
            'is_profil_usaha_image' => false,
            'is_ijin_usaha_image' => false,
        ];

        // 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;
            }
        }

        $pdf = PDF::loadView('pdf.peserta-detail', $data);
        
        // 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)
                    ];
                }
            }
        }

        // 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) {
                $tempFile = tempnam(sys_get_temp_dir(), 'attachment_');
                file_put_contents($tempFile, $attachment['content']);
                
                $pageCount = $merger->setSourceFile($tempFile);
                for ($i = 1; $i <= $pageCount; $i++) {
                    $merger->addPage();
                    $merger->useTemplate($merger->importPage($i));
                }
                unlink($tempFile);
            }
            
            return response($merger->Output('S'))
                ->header('Content-Type', 'application/pdf')
                ->header('Content-Disposition', 'inline; filename="peserta-' . $peserta->id . '.pdf"');
        }

        return $pdf->stream('peserta-' . $peserta->id . '.pdf');
    }
    public function index()
    {
        $sort = str_replace(
            ['created_at'],
            ['created_at'],
            request()->query('col')
        );
        $result = DataTable::query(Peserta::query())
            ->with(['user','kabupaten'])
            ->searchable(['nama_lengkap', 'email', 'nik','kabupaten.name','tahun'])
            ->applySort($sort)
            ->allowedSorts(['created_at'])
            ->make()->toArray();


        return Inertia::render('Admin/Peserta/Index', [
            'datatable' => $result,
        ]);
    }

    public function create()
    {

        return Inertia::render('Admin/Peserta/Create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'nik' => 'required|string|max:20|unique:' . Peserta::class . ',nik',
            'nama_lengkap' => 'required|string|max:255',
            

        ]);


        DB::beginTransaction();
        try {

            $usia = $request->usia;
            if($usia == null && $request->tanggal_lahir != null){
                $tglLahir = new DateTime($request->tanggal_lahir);
                // Buat objek DateTime untuk tanggal sekarang
                $hariIni = new DateTime('today');

                // Hitung selisih antara tanggal sekarang dan tanggal lahir
                $selisih = $hariIni->diff($tglLahir);
                $usia = $selisih->y;

            }
            $peserta = Peserta::create([
                'nama_lengkap' => $request->nama_lengkap,
                'alamat' => $request->alamat,
                'email' => $request->email,
                'no_hp' => $request->no_hp,
                'tanggal_lahir' => $request->tanggal_lahir != null ? date("Y-m-d",strtotime($request->tanggal_lahir)) : null,
                'tempat_lahir' => $request->tempat_lahir,
                'usia' => $usia,
                'agama' => $request->agama,
                'jenis_kelamin' => $request->jenis_kelamin,
                'nik' => $request->nik,
                'npwp' => $request->npwp,
                'foto_ktp' => $request->hasFile('foto_ktp') ? $request->foto_ktp->store('private/foto_ktp') : null,
                'foto_profil' => $request->hasFile('foto_profil') ? $request->foto_profil->store('public/foto_profil') : null,
                'file_profil_usaha' => $request->hasFile('file_profil_usaha') ? $request->file_profil_usaha->store('private/profil_usaha') : null,
                'file_ijin_usaha' => $request->hasFile('file_ijin_usaha') ? $request->file_ijin_usaha->store('private/ijin_usaha') : null,
                'kriteria_usaha' => $request->kriteria_usaha,
                'status_pekerjaan' => $request->status_pekerjaan,
                'bidang_pekerjaan' => $request->bidang_pekerjaan,
                'tempat_bekerja' => $request->tempat_bekerja,
                'alamat_bekerja' => $request->alamat_bekerja,
                'provinsi_id' => $request->provinsi_id,
                'kabupaten_id' => $request->kabupaten_id,
                'kecamatan_id' => $request->kecamatan_id,
                'kelurahan_id' => $request->kelurahan_id,
                'disabilitas' => $request->disabilitas != null,
                'status_kawin' => $request->status_kawin,
                'utusan_dari' => $request->utusan_dari,
                'tahun' => $request->tahun,
            ]);

            if ($peserta->user) {
                $request->validate([
                    'email' => 'required|string|lowercase|email|max:255|unique:' . User::class . ',email',
                ]);
                $peserta->user->update([
                    'email' => $request->email,
                    'nama' => $request->nama_lengkap
                ]);

                if ($request->password != null && trim($request->password) != "" && $request->password == $request->password_confirmation) {
                    $peserta->user->update([
                        'password' => Hash::make($request->password),
                    ]);
                }
            } else if ($request->email != null && $request->password != null && trim($request->password) != "" && $request->password == $request->password_confirmation) {
                $request->validate([
                    'email' => 'required|string|lowercase|email|max:255|unique:' . User::class . ',email',
                ]);
                $user = $peserta->user()->create([
                    'email' => $request->email,
                    'nama' => $request->nama_lengkap,
                    'password' => Hash::make($request->password),
                    'role' => 'peserta'
                ]);
                $peserta->update([
                    'user_id' => $user->id
                ]);

            }
            DB::commit();
            return redirect()->route('admin.peserta.index')->with('success', 'Berhasil menambah peserta ' . $peserta->nama_lengkap);
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->route('admin.peserta.create')->withInput($request->all())->with('error', 'Gagal menambah peserta '.$request->nama_lengkap);
        }
    }

    public function show($id)
    {
        $peserta = Peserta::with('user', 'provinsi', 'kabupaten')->findOrFail($id);

        return Inertia::render('Admin/Peserta/Show', [
            'peserta' => $peserta,
        ]);
    }

    public function edit($id)
    {
        $peserta = Peserta::with('user', 'provinsi', 'kabupaten')->findOrFail($id);

        return Inertia::render('Admin/Peserta/Edit', [
            'peserta' => $peserta,
        ]);
    }

    public function update($id, Request $request)
    {
        $peserta = Peserta::with('user', 'provinsi', 'kabupaten')->findOrFail($id);
        $request->validate([
            'nik' => 'required|string|max:20|unique:' . Peserta::class . ',nik,' . $id,
            'nama_lengkap' => 'required|string|max:255',
           

        ]);


        DB::beginTransaction();
        try {

            $usia = $request->usia;
            if($usia == null && $request->tanggal_lahir != null){
                $tglLahir = new DateTime($request->tanggal_lahir);
                // Buat objek DateTime untuk tanggal sekarang
                $hariIni = new DateTime('today');

                // Hitung selisih antara tanggal sekarang dan tanggal lahir
                $selisih = $hariIni->diff($tglLahir);
                $usia = $selisih->y;

            }

            $peserta->update([
                'nama_lengkap' => $request->nama_lengkap,
                'alamat' => $request->alamat,
                'email' => $request->email,
                'no_hp' => $request->no_hp,
                'tanggal_lahir' => $request->tanggal_lahir != null ? date("Y-m-d",strtotime($request->tanggal_lahir)) : null,
                'tempat_lahir' => $request->tempat_lahir,
                'usia' => $usia,
                'agama' => $request->agama,
                'jenis_kelamin' => $request->jenis_kelamin,
                'nik' => $request->nik,
                'npwp' => $request->npwp,
                'foto_ktp' => $request->hasFile('foto_ktp') ? $request->foto_ktp->store('private/foto_ktp') : $peserta->foto_ktp,
                'foto_profil' => $request->hasFile('foto_profil') ? $request->foto_profil->store('public/foto_profil') : $peserta->foto_profil,
                'file_profil_usaha' => $request->hasFile('file_profil_usaha') ? $request->file_profil_usaha->store('private/profil_usaha') : $peserta->file_profil_usaha,
                'file_ijin_usaha' => $request->hasFile('file_ijin_usaha') ? $request->file_ijin_usaha->store('private/ijin_usaha') : $peserta->file_ijin_usaha,
                'kriteria_usaha' => $request->kriteria_usaha,
                'status_pekerjaan' => $request->status_pekerjaan,
                'bidang_pekerjaan' => $request->bidang_pekerjaan,
                'tempat_bekerja' => $request->tempat_bekerja,
                'alamat_bekerja' => $request->alamat_bekerja,
                'provinsi_id' => $request->provinsi_id,
                'kabupaten_id' => $request->kabupaten_id,
                'kecamatan_id' => $request->kecamatan_id,
                'kelurahan_id' => $request->kelurahan_id,
                'disabilitas' => $request->disabilitas != null,
                'status_kawin' => $request->status_kawin,
                'utusan_dari' => $request->utusan_dari,
                'tahun' => $request->tahun,
            ]);

            if ($peserta->user) {
                $request->validate([
                    'email' => 'required|string|lowercase|email|max:255|unique:' . User::class . ',email,' . $peserta->user_id,
                ]);
                $peserta->user->update([
                    'email' => $request->email,
                    'nama' => $request->nama_lengkap
                ]);

                if ($request->password != null && trim($request->password) != "" && $request->password == $request->password_confirmation) {
                    $peserta->user->update([
                        'password' => Hash::make($request->password),
                    ]);
                }
            } else if ($request->email != null && $request->password != null && trim($request->password) != "" && $request->password == $request->password_confirmation) {
                $request->validate([
                    'email' => 'required|string|lowercase|email|max:255|unique:' . User::class . ',email,' . $peserta->user_id,
                ]);
                $user = $peserta->user()->create([
                    'email' => $request->email,
                    'nama' => $request->nama_lengkap,
                    'password' => Hash::make($request->password),
                    'role' => 'peserta'
                ]);
                $peserta->update([
                    'user_id' => $user->id
                ]);

            }
            DB::commit();
            return redirect()->route('admin.peserta.index')->with('success', 'Berhasil mengubah peserta ' . $peserta->nama_lengkap);
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->route('admin.peserta.edit', $id)->withInput($request->all())->with('error', 'Gagal mengubah peserta ' . $peserta->nama_lengkap);
        }
    }

    public function destroy($id)
    {
        $peserta = Peserta::with('user')->findOrFail($id);
        DB::beginTransaction();
        try {

            if ($peserta->user) {
                $peserta->user()->delete();
            }

            $peserta->delete();



            DB::commit();
            return redirect()->route('admin.peserta.index')->with('success', 'Berhasil menghapus peserta ' . $peserta->nama_lengkap);
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->route('admin.peserta.index')->with('error', 'Gagal menghapus peserta ' . $peserta->nama_lengkap);
        }
    }

    public function importView()
    {

        return Inertia::render('Admin/Peserta/Import');
    }

    public function import(Request $request)
    {
        $request->validate([
            'file'=> 'required|file|mimetypes:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        ]);
        
        $model = new PesertasImport();
        $model->createLogin = (int)$request->buat_akun == 1 ? true : false;
        $model->tahun = $request->tahun;
        $model->fileName = $request->file('file');
        $model->passwordKostum = $request->password_kustom;
        try {
            Excel::import($model, $request->file('file'));
            if(count($model->errors) > 0){
                return redirect()->route('admin.peserta.import-view')->with('success', 'Berhasil mengimport '.$model->totalImport.' peserta')->with('error', implode(", ", $model->errors));
            }
            return redirect()->route('admin.peserta.index')->with('success', 'Berhasil mengimport '.$model->totalImport.' peserta');
        } catch (\Throwable $th) { 
            Log::error($th);
            return redirect()->route('admin.peserta.import-view')->with('error', 'Gagal mengimport peserta');
        }
    }

    public function downloadTemplateImport(){
        return Excel::download(new FormatImportPesertaExport(), 'format-import-peserta.xlsx');
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]