project-ta/.history/app/Http/Controllers/penghuniController_20260413...

277 lines
8.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Validation\Rule;
use App\Models\Penghuni;
use App\Models\Rumah;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class PenghuniController extends Controller
{
// =========================
// TAMPILKAN DATA
// =========================
public function index(Request $request)
{
// tambah rumah dari modal
if ($request->has('blok')) {
$namaFile = null;
if ($request->hasFile('foto')) {
$file = $request->file('foto');
$namaFile = time() . '.' . $file->getClientOriginalExtension();
$file->move(public_path('foto_rumah'), $namaFile);
}
Rumah::create([
'blok' => $request->blok,
'no_rumah' => $request->no_rumah,
'status' => $request->status,
'luas_tanah' => $request->luas_tanah,
'harga' => $request->harga,
'keterangan' => $request->keterangan,
'foto' => $namaFile,
]);
return redirect()->back()->with('success', 'Rumah berhasil ditambahkan');
}
// 🔥 FIX UTAMA DI SINI
$penghuni = Penghuni::with('rumah')->get();
$rumahList = Rumah::with('penghuni')->get();
return view('admin.penghuni.index', compact('penghuni', 'rumahList'));
}
// =========================
// FORM TAMBAH
// =========================
public function create()
{
$rumah = Rumah::where('status', 'Kosong')->get();
return view('admin.penghuni.create', compact('rumah'));
}
// =========================
// SIMPAN DATA
// =========================
public function storeUser(Request $request)
{
// 🔥 VALIDASI SIMPLE (UNTUK USER)
$request->validate([
'nama' => 'required|string|max:100',
'email' => 'required|email|max:100',
'status_huni' => 'required|in:Tetap,Kontrak',
'tanggal_keluar' => 'nullable|date'
]);
// 🔥 CEK BIAR TIDAK DOUBLE
if (Penghuni::where('user_id', Auth::id())->exists()) {
return back()->with('error', 'Data penghuni sudah ada');
}
// 🔥 SIMPAN DATA
Penghuni::create([
'user_id' => Auth::id(),
'nama' => $request->nama,
'email' => $request->email,
'status_huni' => $request->status_huni,
'tanggal_keluar' => $request->tanggal_keluar,
'status' => 'Aktif'
]);
return redirect()->route('user.home')
->with('success', 'Data berhasil disimpan, silakan pilih rumah');
}
// =========================
// FORM EDIT
// =========================
public function edit($id)
{
$penghuni = Penghuni::findOrFail($id);
$rumahList = Rumah::where('status', 'Kosong')
->orWhere('id', $penghuni->rumah_id)
->get();
return view('admin.penghuni.edit', compact('penghuni', 'rumahList'));
}
// =========================
// UPDATE DATA
// =========================
public function update(Request $request, $id)
{
$penghuni = Penghuni::findOrFail($id);
$validated = $request->validate([
'nama' => 'required|string|max:100',
'no_ktp' => ['required', Rule::unique('penghuni')->ignore($id)],
'email' => ['required', 'email', Rule::unique('penghuni')->ignore($id)],
'telepon' => 'nullable|string|max:20',
'alamat' => 'required|string|max:150',
'rumah_id' => 'nullable|exists:rumah,id',
'status' => 'required|in:Aktif,Tidak Aktif',
'status_huni' => 'required|in:Tetap,Kontrak',
'tanggal_masuk' => 'nullable|date',
'tanggal_keluar' => 'nullable|date|after_or_equal:tanggal_masuk',
]);
$oldRumahId = $penghuni->rumah_id;
$penghuni->update($validated);
// kosongkan rumah lama
if ($oldRumahId && $oldRumahId != $request->rumah_id) {
Rumah::where('id', $oldRumahId)
->update(['status' => 'Kosong']);
}
// set rumah baru jadi terisi
if ($request->rumah_id) {
Rumah::where('id', $request->rumah_id)
->update(['status' => 'Terisi']);
}
return redirect()->route('penghuni.index')
->with('success', 'Data penghuni berhasil diperbarui.');
}
// =========================
// HAPUS DATA
// =========================
public function destroy($id)
{
$penghuni = Penghuni::findOrFail($id);
// kosongkan rumah
if ($penghuni->rumah_id) {
Rumah::where('id', $penghuni->rumah_id)
->update(['status' => 'Kosong']);
}
$penghuni->delete();
return redirect()->route('penghuni.index')
->with('success', 'Data penghuni berhasil dihapus!');
}
// =========================
// SIMPAN RUMAH (MODAL)
// =========================
public function storeRumah(Request $request)
{
$request->validate([
'blok' => 'required',
'no_rumah' => 'required',
'status' => 'required',
]);
// 🔥 HANDLE FOTO
$namaFile = null;
if ($request->hasFile('foto')) {
$file = $request->file('foto');
$namaFile = time() . '.' . $file->getClientOriginalExtension();
$file->move(public_path('foto_rumah'), $namaFile);
}
Rumah::create([
'blok' => $request->blok,
'no_rumah' => $request->no_rumah,
'status' => $request->status,
'luas_tanah' => $request->luas_tanah,
'harga' => $request->harga,
'keterangan' => $request->keterangan,
'foto' => $namaFile, // 🔥 TAMBAHAN
]);
return redirect()->back()->with('success', 'Rumah berhasil ditambahkan');
}
// =========================
// EDIT RUMAH
// =========================
public function editRumah($id)
{
$rumah = Rumah::findOrFail($id);
return view('admin.penghuni.edit', [
'penghuni' => null,
'rumah' => $rumah,
'rumahList' => Rumah::with('penghuni')->get()
]);
}
// =========================
// UPDATE RUMAH
// =========================
public function updateRumah(Request $request, $id)
{
$rumah = Rumah::findOrFail($id);
$request->validate([
'blok' => 'required',
'no_rumah' => 'required',
'status' => 'required',
'foto' => 'nullable|image|mimes:jpg,png,jpeg|max:2048'
]);
$data = [
'blok' => $request->blok,
'no_rumah' => $request->no_rumah,
'status' => $request->status,
'luas_tanah' => $request->luas_tanah,
'harga' => $request->harga,
'keterangan' => $request->keterangan,
];
// ===============================
// 🔥 TAMBAHAN LOGIC (PENTING)
// ===============================
$penghuni = \App\Models\Penghuni::where('rumah_id', $rumah->id)->first();
if ($penghuni) {
// kalau ada penghuni → paksa jadi terisi
$data['status'] = 'Terisi';
} else {
// kalau tidak ada penghuni → kosong
$data['status'] = 'Kosong';
}
// ===============================
if ($request->hasFile('foto')) {
// hapus lama
if ($rumah->foto && file_exists(public_path('foto_rumah/'.$rumah->foto))) {
unlink(public_path('foto_rumah/'.$rumah->foto));
}
$file = $request->file('foto');
$namaFile = time().'_'.$file->getClientOriginalName();
$file->move(public_path('foto_rumah'), $namaFile);
$data['foto'] = $namaFile;
}
$rumah->update($data);
return redirect()->route('penghuni.index')
->with('success', 'Data rumah berhasil diupdate');
}
// =========================
// HAPUS RUMAH
// =========================
public function destroyRumah($id)
{
$rumah = Rumah::findOrFail($id);
$rumah->delete();
return redirect()->back()
->with('success', 'Data rumah berhasil dihapus');
}
}