87 lines
2.9 KiB
PHP
87 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Lembur;
|
|
use App\Models\User;
|
|
use App\Models\JenisKompensasi;
|
|
use App\Services\LemburService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class LemburController extends Controller
|
|
{
|
|
protected $lemburService;
|
|
|
|
public function __construct(LemburService $lemburService)
|
|
{
|
|
$this->lemburService = $lemburService;
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$lembur = Lembur::with(['user', 'status', 'kompensasi'])
|
|
->orderByRaw("CASE WHEN id_status = 1 THEN 0 ELSE 1 END")
|
|
->orderBy('created_at', 'desc')
|
|
->paginate(10);
|
|
|
|
return view('lembur.index', compact('lembur'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$pegawai = User::where('status_aktif', 1)->orderBy('nama_lengkap', 'asc')->get();
|
|
$kompensasi = JenisKompensasi::all();
|
|
return view('lembur.create', compact('pegawai', 'kompensasi'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'id_user' => 'required|exists:users,id',
|
|
'tanggal_lembur' => 'required|date',
|
|
'jam_mulai' => 'required',
|
|
'jam_selesai' => 'required',
|
|
'id_kompensasi' => 'required|exists:jenis_kompensasi,id_kompensasi',
|
|
'keterangan' => 'nullable|string'
|
|
]);
|
|
|
|
try {
|
|
DB::transaction(function () use ($request) {
|
|
$user = User::findOrFail($request->id_user);
|
|
$lembur = $this->lemburService->createLembur($user, $request->all());
|
|
$this->lemburService->approve($lembur);
|
|
});
|
|
|
|
return redirect()->route('lembur.index')->with('success', 'Data lembur manual berhasil ditambahkan dan disetujui otomatis.');
|
|
} catch (\Exception $e) {
|
|
return redirect()->back()->with('error', 'Gagal menambahkan lembur: ' . $e->getMessage())->withInput();
|
|
}
|
|
}
|
|
|
|
public function update(Request $request, Lembur $lembur)
|
|
{
|
|
$request->validate([
|
|
'action' => 'required|in:approve,reject',
|
|
'alasan_penolakan' => 'required_if:action,reject|nullable|string'
|
|
]);
|
|
|
|
try {
|
|
if ($request->action == 'approve') {
|
|
$this->lemburService->approve($lembur);
|
|
$message = 'Pengajuan lembur berhasil disetujui.';
|
|
|
|
if ($lembur->id_kompensasi == 2) {
|
|
$message .= ' Poin telah ditambahkan ke karyawan.';
|
|
}
|
|
} else {
|
|
$this->lemburService->reject($lembur, $request->alasan_penolakan);
|
|
$message = 'Pengajuan lembur berhasil ditolak.';
|
|
}
|
|
|
|
return redirect()->back()->with('success', $message);
|
|
} catch (\Exception $e) {
|
|
return redirect()->back()->with('error', 'Gagal memproses pengajuan: ' . $e->getMessage());
|
|
}
|
|
}
|
|
} |