Anons79 Mini Shell

Directory : /home/aplikasiposinfo/.trash/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/.trash/app/Http/Controllers/KaryawanController.php

<?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]