<?php
namespace App\Http\Controllers;
use App\Exports\pelatihExport;
use App\Exports\wasitExport;
use App\Models\cabor;
use App\Models\pelatih;
use App\Models\sertifikatPelatih;
use App\Models\users;
use App\Providers\PdfToImageProvider;
use Carbon\Carbon;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Facades\Excel;
class PelatihController extends Controller
{
public function index()
{
$data['cabor'] = cabor::get();
$data['pelatih'] = pelatih::with('sertifikatPelatih', 'user')->where('status_akademi', 0)->latest()->paginate('15');
return view('admin.pelatih.index')->with($data);
}
public function create()
{
$data['cabor'] = cabor::get();
return view('admin.pelatih.add')->with($data);
}
public function show(String $id)
{
$decryptedId = Crypt::decryptString($id);
$data['cabor'] = cabor::get();
$data['pelatih'] = pelatih::with('user')->where('user_id', $decryptedId)->first();
if (Auth()->user()->role == 2) {
return view('users.pelatih.edit')->with($data);
} else {
return view('admin.pelatih.edit')->with($data);
}
}
// Store
public function store(Request $request)
{
DB::beginTransaction();
try {
$request->validate([
'username' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
'photo' => 'required|mimes:jpg,jpeg,png|max:2000',
'cabor' => 'required',
'nama_lengkap' => 'required',
'NIK' => 'required',
'jenis_kelamin' => 'required',
'tempat_lahir' => 'required',
'tanggal_lahir' => 'required|date|date_format:Y-m-d',
'golongan_darah' => 'required',
'pendidikan_terakhir' => 'required',
'pekerjaan' => 'required',
'no_telp' => 'required',
'status_kawin' => 'required',
'no_paspor' => 'nullable',
'masa_berlaku' => 'nullable|date|date_format:Y-m-d',
'tempat_terbit' => 'nullable',
'alamat_domisili' => 'required',
'asal_kota' => 'required',
// data diri
// data fisik
'berat_badan' => 'required',
'tinggi_badan' => 'required',
'size_sepatu' => 'required',
'size_baju' => 'required',
'size_celana' => 'required',
'size_topi' => 'required',
'size_training' => 'required',
// data fisik
// data kualifikasi
'level' => 'required',
'no_sertifikat' => 'required',
'jenis_sertifikat' => 'required',
'keterangan' => 'required',
'lembaga' => 'required',
'nama_club' => 'required',
'alamat_club' => 'required',
'sertifikat' => 'required|file|mimetypes:application/pdf|max:2000'
], ['email.unique' => 'Email telah diGunakan', 'sertifikat.mimetypes' => 'Sertifikat haruslah berformat PDF.', 'sertifikat.max' => 'File Sertifikat tidak boleh lebih dari 2mb!', 'photo.max' => 'Foto yang tidak boleh diatas 2mb!']);
// tambahkan user
$dataakun = [
'username' => $request->username,
'email' => $request->email,
'password' => Hash::make($request->password),
'role' => 2,
'email_verified_at' => now(),
];
if ($request->hasFile('photo')) {
$foto_file = $request->file('photo');
$foto_ekstensi = $foto_file->extension();
$foto_baru = "pelatih-" . date('ymdhis') . ".$foto_ekstensi";
$foto_file->move(public_path('images/pelatih'), $foto_baru);
$dataakun['photo'] = $foto_baru;
}
users::create($dataakun);
$user_id = users::latest()->first()->id;
//Umur otomatis
$tanggal_lahir = Carbon::parse($request->tanggal_lahir);
$tanggal_sekarang = Carbon::now();
$umur = $tanggal_lahir->diffInYears($tanggal_sekarang);
//Umur otomatis
$data = [
'user_id' => $user_id,
// data diri
'cabor' => $request->cabor,
'status_pelatih' => $request->status_pelatih,
'nama_lengkap' => $request->nama_lengkap,
'NIK' => $request->NIK,
'jenis_kelamin' => $request->jenis_kelamin,
'umur' => $umur,
'tempat_lahir' => $request->tempat_lahir,
'tanggal_lahir' => $request->tanggal_lahir,
'golongan_darah' => $request->golongan_darah,
'pendidikan_terakhir' => $request->pendidikan_terakhir,
'pekerjaan' => $request->pekerjaan,
'pekerjaan_lainnya' => $request->pekerjaan_lainnya,
'no_telp' => $request->no_telp,
'status_kawin' => $request->status_kawin,
'no_paspor' => $request->no_paspor,
'masa_berlaku' => $request->masa_berlaku,
'tempat_terbit' => $request->tempat_terbit,
'alamat_domisili' => $request->alamat_domisili,
'asal_kota' => $request->asal_kota,
// data diri
// data fisik
'berat_badan' => $request->berat_badan,
'tinggi_badan' => $request->tinggi_badan,
'size_sepatu' => $request->size_sepatu,
'size_baju' => $request->size_baju,
'size_celana' => $request->size_celana,
'size_topi' => $request->size_topi,
'size_training' => $request->size_training,
// data fisik
// data kualifikasi
'disiplin_cabor' => $request->cabor,
'level' => $request->level,
'no_sertifikat' => $request->no_sertifikat,
'jenis_sertifikat' => $request->jenis_sertifikat,
'keterangan' => $request->keterangan,
'lembaga' => $request->lembaga,
'nama_club' => $request->nama_club,
'alamat_club' => $request->alamat_club,
// data kualifikasi
];
if ($request->hasFile('sertifikat')) {
$sertifikat_file = $request->file('sertifikat');
$sertifikat_baru = "Sertifikat-" . $sertifikat_file->getClientOriginalName();
$sertifikat_file->move(public_path('documents/pelatih'), $sertifikat_baru);
$data['sertifikat'] = $sertifikat_baru;
}
$create = pelatih::create($data);
DB::commit();
if ($create) {
if (auth()->check()) {
if (auth()->user()->role == 0 || auth()->user()->role == 1) {
return redirect()->route('pelatihs.index')->with('success', 'Data baru telah ditambahkan');
} else {
return redirect()->route('login')->with('success', 'Akun Anda Berhasil ditambahkan.');
}
} else {
return redirect()->route('login')->with('success', 'Akun Anda Berhasil ditambahkan.');
}
} else {
return redirect()->back('pelatihs.index')->with('error', 'Data gagal ditambahkan');
}
} catch (DecryptException $e) {
DB::rollback();
return redirect()->back()->with('error', 'Akun Gagal dibuat!');
}
}
// Store
// Update
public function update(Request $request, String $id)
{
$decryptedId = Crypt::decryptString($id);
$request->validate([
'username' => 'required',
'email' => 'email',
'password' => 'nullable',
'password_confirm' => 'nullable|same:password',
'photo' => 'nullable|mimes:jpg,jpeg,png|max:2000',
'cabor' => 'required',
'nama_lengkap' => 'required',
'NIK' => 'required',
'jenis_kelamin' => 'required',
'tempat_lahir' => 'required',
'tanggal_lahir' => 'required|date|date_format:Y-m-d',
'golongan_darah' => 'required',
'pendidikan_terakhir' => 'required',
'pekerjaan' => 'required',
'no_telp' => 'required',
'status_kawin' => 'required',
'no_paspor' => 'nullable',
'masa_berlaku' => 'nullable|date|date_format:Y-m-d',
'tempat_terbit' => 'nullable',
'alamat_domisili' => 'required',
'asal_kota' => 'required',
// data diri
// data fisik
'berat_badan' => 'required',
'tinggi_badan' => 'required',
'size_sepatu' => 'required',
'size_baju' => 'required',
'size_celana' => 'required',
'size_topi' => 'required',
'size_training' => 'required',
// data fisik
// data kualifikasi
'level' => 'required',
'no_sertifikat' => 'required',
'jenis_sertifikat' => 'required',
'keterangan' => 'required',
'lembaga' => 'required',
'nama_club' => 'required',
'alamat_club' => 'required',
'sertifikat' => 'nullable|file|mimetypes:application/pdf|max:2000'
], ['sertifikat.mimetypes' => 'Sertifikat haruslah berformat PDF.', 'sertifikat.max' => 'File Sertifikat tidak boleh lebih dari 2mb!', 'photo.max' => 'Foto yang tidak boleh diatas 2mb!']);
try {
$dataakun = [
'username' => $request->username,
'email' => $request->email,
];
if ($request->password != '') {
$dataakun['password'] = Hash::make($request->password);
}
if ($request->hasFile('photo')) {
$foto_file = $request->file('photo');
$foto_ekstensi = $foto_file->extension();
$foto_baru = "pelatih-" . date('ymdhis') . ".$foto_ekstensi";
$foto_file->move(public_path('images/pelatih'), $foto_baru);
$dataakun['photo'] = $foto_baru;
$getfoto = pelatih::where('user_id', $decryptedId)->first();
$foto_lama = $getfoto->photo;
File::delete(public_path('images/pelatih') . "/" . $foto_lama);
}
users::where('id', $decryptedId)->update($dataakun);
//Umur otomatis
$tanggal_lahir = Carbon::parse($request->tanggal_lahir);
$tanggal_sekarang = Carbon::now();
$umur = $tanggal_lahir->diffInYears($tanggal_sekarang);
//Umur otomatis
$data = [
// data diri
'nama_lengkap' => $request->nama_lengkap,
'NIK' => $request->NIK,
'cabor' => $request->cabor,
'status_pelatih' => $request->status_pelatih,
'jenis_kelamin' => $request->jenis_kelamin,
'umur' => $umur,
'tempat_lahir' => $request->tempat_lahir,
'tanggal_lahir' => $request->tanggal_lahir,
'golongan_darah' => $request->golongan_darah,
'pendidikan_terakhir' => $request->pendidikan_terakhir,
'pekerjaan_lainnya' => $request->pekerjaan_lainnya,
'pekerjaan' => $request->pekerjaan,
'no_telp' => $request->no_telp,
'status_kawin' => $request->status_kawin,
'no_paspor' => $request->no_paspor,
'masa_berlaku' => $request->masa_berlaku,
'tempat_terbit' => $request->tempat_terbit,
'alamat_domisili' => $request->alamat_domisili,
'asal_kota' => $request->asal_kota,
'berat_badan' => $request->berat_badan,
'tinggi_badan' => $request->tinggi_badan,
'size_sepatu' => $request->size_sepatu,
'size_baju' => $request->size_baju,
'size_celana' => $request->size_celana,
'size_topi' => $request->size_topi,
'size_training' => $request->size_training,
// data diri
// data kualifikasi
'disiplin_cabor' => $request->cabor,
'level' => $request->level,
'no_sertifikat' => $request->no_sertifikat,
'jenis_sertifikat' => $request->jenis_sertifikat,
'keterangan' => $request->keterangan,
'lembaga' => $request->lembaga,
'nama_club' => $request->nama_club,
'alamat_club' => $request->alamat_club,
// data kualifikasi
];
if ($request->hasFile('sertifikat')) {
$sertifikat_file = $request->file('sertifikat');
$sertifikat_baru = "Sertifikat-" . $sertifikat_file->getClientOriginalName();
$sertifikat_file->move(public_path('documents/pelatih'), $sertifikat_baru);
$data['sertifikat'] = $sertifikat_baru;
$get_serti = pelatih::where('user_id', $decryptedId)->first();
$sertifikat_lama = $get_serti->sertifikat;
File::delete(public_path('documents/pelatih') . "/" . $sertifikat_lama);
}
$update = pelatih::where('user_id', $decryptedId)->update($data);
if ($update) {
return redirect()->back()->with('success', 'Data dari telah diedit');
} else {
return redirect()->back()->with('error', 'Data gagal diedit');
}
} catch (DecryptException $e) {
return redirect()->route('pelatihs.index')->with('error', 'Data gagal diedit');
}
}
// Update
// Delete
public function destroy(String $id)
{
try {
$decryptedId = Crypt::decryptString($id);
$user = users::with('pelatih')->where('id', $decryptedId);
$pelatih = $user->first();
File::delete(public_path('images/pelatih') . "/" . $pelatih->photo);
File::delete(public_path('documents/pelatih') . "/" . $pelatih->pelatih->sertifikat);
$sertifikatPelatih = sertifikatPelatih::where('pelatih_id', $pelatih->pelatih->id)->get();
// File::delete(public_path('documents/pelatih') . "/" . $foto->sertifikat);
foreach ($sertifikatPelatih as $item) {
$sertifikatPath = public_path('documents/pelatih') . "/" . $item->sertifikat;
if (file_exists($sertifikatPath)) {
File::delete($sertifikatPath);
}
}
$user->delete();
return redirect()->route('pelatihs.index')->with('delete', 'Data berhasil dihapus!');
} catch (DecryptException $e) {
return redirect()->back()->with('error', 'Invalid ID');
}
}
// Delete
public function export(Request $request)
{
$status_akademi = '';
if ($request->status == 'umum') {
$status_akademi = 0;
}
if ($request->status == 'akademi') {
$status_akademi = 1;
}
$data = Pelatih::where('status_akademi', $status_akademi)->select(
'nama_lengkap',
'cabor',
'users.email',
DB::raw('CONCAT(";", NIK) as NIK'),
'jenis_kelamin',
'umur',
'tempat_lahir',
'tanggal_lahir',
'golongan_darah',
'pendidikan_terakhir',
'pekerjaan',
'pekerjaan_lainnya',
'no_telp',
'status_kawin',
'no_paspor',
'masa_berlaku',
'tempat_terbit',
'alamat_domisili',
'asal_kota',
'berat_badan',
'size_sepatu',
'size_baju',
'size_celana',
'size_topi',
'size_training',
'disiplin_cabor',
'level',
'no_sertifikat',
'keterangan',
'lembaga',
'nama_club',
'alamat_club',
'status_pelatih',
)->leftJoin('users', 'user_id', '=', 'users.id') // Menggabungkan dengan tabel 'users'
->get();
// Proses data, ubah "jenis_kelamin" menjadi "laki-laki" jika kondisi terpenuhi.
$data->each(function ($item) {
if ($item->jenis_kelamin == 0) {
$item->jenis_kelamin = 'laki-laki';
} else {
$item->jenis_kelamin = 'perempuan';
}
if ($item->status_kawin == 0) {
$item->status_kawin = 'Kawin';
} else {
$item->status_kawin = 'Belum Kawin';
}
if ($item->cabor == 'Umum') {
$item->cabor = 'Umum' . '(' . $item->status_pelatih . ')';
} else {
$item->cabor = $item->cabor;
}
});
// Export data ke file Excel
return Excel::download(new pelatihExport($data), 'DataPelatih.xlsx');
}
public function filterPelatih(Request $request)
{
$cabor = $request->cabor;
$nama = $request->nama;
$data['cabor2'] = $cabor;
$data['request'] = $request;
$data['cabor'] = cabor::get();
$pelatih = pelatih::where('status_akademi', 0);
if ($cabor != '') {
$pelatih->where('cabor', 'like', "%" . $cabor . "%");
}
if ($nama != '') {
$pelatih->where('nama_lengkap', 'like', "%" . $nama . "%");
}
$data['pelatih'] = $pelatih->paginate(15);
return view('admin.pelatih.filter')->with($data);
}
public function exportPelatih(Request $request)
{
$cabor = $request->cabor;
$nama = $request->nama;
$data = pelatih::where('status_akademi', 0)->where('cabor', 'like', "%" . $cabor . "%")->where('nama_lengkap', 'like', "%" . $nama . "%")->select(
'nama_lengkap',
'cabor',
'users.email',
DB::raw('CONCAT(";", NIK) as NIK'),
'jenis_kelamin',
'umur',
'tempat_lahir',
'tanggal_lahir',
'golongan_darah',
'pendidikan_terakhir',
'pekerjaan',
'pekerjaan_lainnya',
'no_telp',
'status_kawin',
'no_paspor',
'masa_berlaku',
'tempat_terbit',
'alamat_domisili',
'asal_kota',
'berat_badan',
'size_sepatu',
'size_baju',
'size_celana',
'size_topi',
'size_training',
'disiplin_cabor',
'level',
'no_sertifikat',
'keterangan',
'lembaga',
'nama_club',
'alamat_club',
'status_pelatih',
)->leftJoin('users', 'user_id', '=', 'users.id') // Menggabungkan dengan tabel 'users'
->get();
// Proses data, ubah "jenis_kelamin" menjadi "laki-laki" jika kondisi terpenuhi.
$data->each(function ($item) {
if ($item->jenis_kelamin == 0) {
$item->jenis_kelamin = 'laki-laki';
} else {
$item->jenis_kelamin = 'perempuan';
}
if ($item->status_kawin == 0) {
$item->status_kawin = 'Kawin';
} else {
$item->status_kawin = 'Belum Kawin';
}
if ($item->cabor == 'Umum') {
$item->cabor = 'Umum' . '(' . $item->status_pelatih . ')';
} else {
$item->cabor = $item->cabor;
}
});
// Export data ke file Excel
return Excel::download(new pelatihExport($data), 'DataPelatih.xlsx');
}
public function getPelatih($cabor)
{
$pelatih = pelatih::where('cabor', $cabor)->get();
return response()->json($pelatih);
}
public function akademi(String $id)
{
try {
$decryptedId = Crypt::decryptString($id);
$atlit = Pelatih::find($decryptedId);
$update['status_akademi'] = '';
if ($atlit->status_akademi == 1) {
$update['status_akademi'] = 0;
$atlit->update($update);
return redirect()->back()->with('success', 'Status Pelatih diubah Umum!');
} else {
$update['status_akademi'] = 1;
$atlit->update($update);
return redirect()->back()->with('success', 'Status Pelatih diubah Akademi!');
}
} catch (DecryptException $e) {
return redirect()->back()->with('error', 'Data gagal diubah!');
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]