<?php
namespace App\Http\Controllers;
use App\Exports\KaryawansExport;
use App\Helpers\Helper;
use App\Models\Departemen;
use App\Models\Gaji;
use App\Models\Jabatan;
use App\Models\JadwalKerja;
use App\Models\Karyawan;
use App\Models\LokasiAbsen;
use App\Models\LokasiKerja;
use App\Models\Perusahaan;
use App\Models\Unit;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
class KaryawanController extends BaseController
{
public $namaMenu = 'karyawan';
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$this->cekAkses();
if (request()->export == "true") {
return Excel::download(new KaryawansExport, 'karyawan-' . date("Y-m-d-H-i-s") . '.xlsx');
}
$datas = Karyawan::
select('karyawans.*')
->with('perusahaans', 'jadwal_kerja', 'departemen','absensi.riwayat_absensi')
// ->leftJoin(DB::raw('(SELECT
// absensis.karyawan_id,
// sum( TIMESTAMPDIFF(MINUTE,CONCAT(ci.tanggal_absen," ",ci.waktu_absen), CONCAT(co.tanggal_absen," ",co.waktu_absen)) / 60) as total_jam_kerja
// FROM `absensis`
// JOIN riwayat_absensis as ci ON (ci.absensi_id = absensis.id AND ci.jenis_absen = "check-in" AND (ci.status = "accept" OR ci.status = "due"))
// JOIN riwayat_absensis as co ON (co.absensi_id = absensis.id AND co.jenis_absen = "check-out" AND (co.status = "accept" OR co.status = "due"))
// GROUP BY absensis.karyawan_id) as absensis'), function ($j) {
// $j->on('absensis.karyawan_id', '=', 'karyawans.id');
// })
->filtersInput([
'id_karyawan',
'nama',
'nik',
'jabatan',
'jenis_kelamin',
'tanggal_mulai_kerja',
[
'departemen' => [
'nama_departemen'
],
'perusahaan' => [
'nama_perusahaan'
],
'jadwal_kerja' => [
'nama_jadwal'
]
]
], 'search');
if (request()->has('perusahaan_id') && request()->perusahaan_id != "0") {
// $datas = $datas->where('karyawans.perusahaan_id', request()->perusahaan_id);
$datas = $datas->whereHas('perusahaans',function($w){
$w->where('perusahaan_id',request()->perusahaan_id);
});
}
if (request()->has('departemen_id') && request()->departemen_id != "0") {
$datas = $datas->where('karyawans.departemen_id', request()->departemen_id);
}
$datas = $datas->orderBy('karyawans.created_at', 'DESC')->simplePaginate(request()->jumlah_baris ?? 10)->appends(request()->query());
$perusahaans = Perusahaan::all();
$departemens = Departemen::all();
return view('karyawan.index', compact('datas', 'perusahaans','departemens'), ['akses' => $this->akses]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$perusahaans = Perusahaan::all();
$jadwals = JadwalKerja::all();
$lokasiAbsens = LokasiAbsen::all();
$lokasiKerjas = LokasiKerja::all();
$departemens = Departemen::all();
$units = Unit::all();
$gajis = Gaji::all();
return view('karyawan.create', compact('perusahaans', 'jadwals', 'lokasiAbsens', 'departemens', 'units', 'gajis', 'lokasiKerjas'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'id_karyawan' => 'required|unique:karyawans',
'nama' => 'required',
'email' => 'required|unique:karyawans,email',
'password' => 'required',
'perusahaan_id' => 'required|array',
'jadwal_kerja_id' => 'required',
'lokasi_absen_id' => 'required',
'jenis_kelamin' => 'required',
]);
$cek_user = User::where('email', $request->email)->first();
$cek_karyawan = Karyawan::where('email', $request->email)->first();
if ($cek_user) {
return redirect()->back()->withErrors([
'error' => 'Email ini sudah pernah di gunakan di data user'
])->withInput($request->all());
}
if ($cek_karyawan) {
return redirect()->back()->withErrors([
'error' => 'Email ini sudah pernah di gunakan'
])->withInput($request->all());
}
DB::beginTransaction();
try {
$data = Karyawan::create([
'id_karyawan' => $request->id_karyawan,
'nama' => $request->nama,
'email' => $request->email,
'no_hp' => $request->no_hp,
'nik' => $request->nik,
'jabatan' => $request->jabatan,
'departemen_id' => $request->departemen_id,
// 'gaji_id'=>$request->gaji_id,
'password' => bcrypt($request->password),
// 'perusahaan_id' => $request->perusahaan_id,
'jenis_kelamin' => $request->jenis_kelamin,
'user_id' => auth()->user()->id,
'tanggal_mulai_kerja' => $request->tanggal_mulai_kerja
]);
$data->perusahaans()->attach($request->perusahaan_id);
if ($request->has('foto')) {
$request->validate([
'foto' => 'required|image|max:1024'
]);
$data->update([
'foto' => $request->foto->store('karyawan')
]);
}
if ($request->has('unit_id')) {
$data->unit()->sync($request->unit_id);
}
if ($request->has('lokasi_absen_id')) {
$data->lokasi_absen()->attach($request->lokasi_absen_id);
}
if ($request->has('lokasi_kerja_id')) {
$data->lokasi_kerja()->attach($request->lokasi_kerja_id);
}
if ($request->has('jadwal_kerja_id')) {
$data->jadwal_kerja()->attach($request->jadwal_kerja_id);
}
Helper::addUserLog(auth()->user()->nama . " menambah data karyawan : " . $data->nama);
DB::commit();
} catch (\Throwable $th) {
DB::rollBack();
return redirect()->back()->withErrors([
'error' => 'Data gagal ditambahkan' . ((env('APP_DEBUG') == true) ? ' : ' . $th->getMessage() : '')
])->withInput($request->all());
}
return redirect()->route('karyawan.index')->with('success', 'Data berhasil ditambahkan');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$perusahaans = Perusahaan::all();
$jadwals = JadwalKerja::all();
$data = Karyawan::with('perusahaans', 'jadwal_kerja', 'departemen','absensi.riwayat_absensi')->findOrFail($id);
$lokasiAbsens = LokasiAbsen::all();
$lokasiKerjas = LokasiKerja::all();
$departemens = Departemen::all();
$units = Unit::all();
$gajis = Gaji::all();
return view('karyawan.edit', compact('data', 'perusahaans', 'jadwals', 'lokasiAbsens', 'departemens', 'units', 'gajis', 'lokasiKerjas'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'id_karyawan' => 'required|unique:karyawans,id_karyawan,' . $id,
'nama' => 'required',
'email' => 'required|unique:karyawans,email,' . $id,
'perusahaan_id' => 'required|array',
'jadwal_kerja_id' => 'required',
'jenis_kelamin' => 'required',
'jabatan' => 'required',
'departemen_id' => 'required'
]);
$cek_user = User::where('email', $request->email)->first();
$cek_karyawan = Karyawan::where('email', $request->email)->first();
if ($cek_user) {
return redirect()->back()->withErrors([
'error' => 'Email ini sudah pernah di gunakan di data karyawaan'
])->withInput($request->all());
}
if ($cek_karyawan) {
if ($id != $cek_karyawan->id) {
return redirect()->back()->withErrors([
'error' => 'Email ini sudah pernah di gunakan'
])->withInput($request->all());
}
}
DB::beginTransaction();
try {
$data = Karyawan::findOrFail($id);
$data->update([
'id_karyawan' => $request->id_karyawan,
'nama' => $request->nama,
'email' => $request->email,
'no_hp' => $request->no_hp,
'nik' => $request->nik,
'jabatan' => $request->jabatan,
'departemen_id' => $request->departemen_id,
// 'gaji_id'=>$request->gaji_id,
// 'perusahaan_id' => $request->perusahaan_id,
'jenis_kelamin' => $request->jenis_kelamin,
'tanggal_mulai_kerja' => $request->tanggal_mulai_kerja
]);
$data->perusahaans()->sync($request->perusahaan_id);
if ($request->has('password_baru') && $request->password_baru != '') {
$this->validate($request, [
'password_baru' => 'required|string',
]);
$data->update([
'password' => bcrypt($request->password_baru)
]);
}
if ($request->has('foto')) {
$request->validate([
'foto' => 'required|image|max:1024'
]);
$data->update([
'foto' => $request->foto->store('karyawan')
]);
}
if ($request->has('unit_id')) {
$data->unit()->sync($request->unit_id);
} else {
$data->unit()->delete();
}
if ($request->has('lokasi_absen_id')) {
$data->lokasi_absen()->sync($request->lokasi_absen_id);
}
if ($request->has('lokasi_kerja_id')) {
$data->lokasi_kerja()->sync($request->lokasi_kerja_id);
}
if ($request->has('jadwal_kerja_id')) {
$data->jadwal_kerja()->sync($request->jadwal_kerja_id);
}
Helper::addUserLog(auth()->user()->nama . " mengubah data karyawan : " . $data->nama);
DB::commit();
} catch (\Throwable $th) {
DB::rollBack();
return redirect()->back()->withErrors([
'error' => 'Data gagal diubah' . ((env('APP_DEBUG') == true) ? ' : ' . $th->getMessage() : '')
])->withInput($request->all());
}
return redirect()->route('karyawan.index')->with('success', 'Data berhasil diubah');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
DB::beginTransaction();
try {
$data = Karyawan::findOrFail($id);
$data->delete();
Helper::addUserLog(auth()->user()->nama . " menghapus data karyawan : " . $data->nama);
DB::commit();
} catch (\Throwable $th) {
DB::rollBack();
return redirect()->back()->withErrors([
'error' => 'Data gagal dihapus' . ((env('APP_DEBUG') == true) ? ' : ' . $th->getMessage() : '')
]);
}
return redirect()->route('karyawan.index')->with('success', 'Data berhasil dihapus');
}
public function foto($id)
{
$data = Karyawan::find($id);
return response()->file(storage_path('app/' . $data->foto));
}
public function pilihJabatan($departemen_id)
{
return response()->json(Jabatan::where('departemen_id', $departemen_id)->get());
}
function resetDevice($id)
{
$data = Karyawan::findOrFail($id);
$data->update([
'device_id' => null
]);
Helper::addUserLog(auth()->user()->nama . " mereset device karyawan : " . $data->nama);
return redirect()->back()->with('success', 'Device berhasil direset');
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]