MIF_E31230910_MP-HRIS-WEB/app/Http/Controllers/TukarShiftController.php

92 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\JadwalKerja;
use App\Models\RiwayatTukarShift;
use App\Http\Requests\StoreTukarShiftRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
class TukarShiftController extends Controller
{
public function index()
{
$riwayat = RiwayatTukarShift::with(['user1', 'user2', 'jadwal1.shift', 'jadwal2.shift', 'execAdmin'])
->latest()
->get();
return view('tukar-shift.index', compact('riwayat'));
}
public function create()
{
$pegawai = User::with('kantor')->whereDoesntHave('roles', function ($q) {
$q->where('nama_role', 'admin')->orWhere('nama_role', 'Admin');
})->get();
$kantor = \App\Models\Kantor::orderBy('nama_kantor', 'asc')->get();
return view('tukar-shift.create', compact('pegawai', 'kantor'));
}
public function store(StoreTukarShiftRequest $request)
{
DB::beginTransaction();
try {
$jadwal1 = JadwalKerja::findOrFail($request->id_jadwal_1);
$jadwal2 = JadwalKerja::findOrFail($request->id_jadwal_2);
$tempUser1 = $jadwal1->id_user;
$jadwal1->id_user = $jadwal2->id_user;
$jadwal2->id_user = $tempUser1;
$jadwal1->save();
$jadwal2->save();
RiwayatTukarShift::create([
'id_user_1' => $request->id_user_1,
'id_jadwal_1' => $jadwal1->id_jadwal,
'id_user_2' => $request->id_user_2,
'id_jadwal_2' => $jadwal2->id_jadwal,
'keterangan' => $request->keterangan,
'created_by' => Auth::id() ?? 1,
]);
DB::commit();
return redirect()->route('tukar-shift.index')
->with('success', 'Berhasil menukar shift kerja untuk kedua pegawai tersebut.');
} catch (\Exception $e) {
DB::rollBack();
return redirect()->back()
->withInput()
->with('error', 'Gagal menukar shift: ' . $e->getMessage());
}
}
public function getJadwalUser(Request $request)
{
$request->validate([
'id_user' => 'required|exists:users,id'
]);
$startOfMonth = Carbon::now()->startOfMonth()->toDateString();
$endOfMonth = Carbon::now()->addMonth()->endOfMonth()->toDateString();
$jadwal = JadwalKerja::with('shift')
->where('id_user', $request->id_user)
->whereBetween('tanggal', [$startOfMonth, $endOfMonth])
->orderBy('tanggal', 'asc')
->get();
return response()->json($jadwal);
}
}