feat: Update user roles and enhance transaksi_bukets table with new fields

This commit is contained in:
LailaWulandarii 2025-12-30 02:58:11 +07:00
parent 1f94e59459
commit 297ee8817d
4 changed files with 66 additions and 13 deletions

View File

@ -5,7 +5,7 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; // <--- WAJIB NAMBAH INI use Illuminate\Support\Facades\Hash;
use App\Models\User; use App\Models\User;
class AuthController extends Controller class AuthController extends Controller
@ -43,16 +43,8 @@ public function authenticate(Request $request)
])->onlyInput('username'); ])->onlyInput('username');
} }
// 3. KALAU LOLOS DUA-DUANYA -> LOGIN
Auth::login($user); Auth::login($user);
$request->session()->regenerate(); $request->session()->regenerate();
// Redirect sesuai role
$role = $user->role ?? 'admin';
if ($role === 'pemilik') {
return redirect()->intended(route('admin.beranda.pemilik'));
}
return redirect()->intended(route('admin.beranda')); return redirect()->intended(route('admin.beranda'));
} }

View File

@ -3,13 +3,73 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use App\Models\TransaksiBuket;
use App\Models\BookingFoto;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class BerandaController extends Controller class BerandaController extends Controller
{ {
public function index() public function index()
{ {
$now = Carbon::now();
$lastMonth = Carbon::now()->subMonth();
$today = Carbon::today();
return view('admin.beranda-admin'); // Fungsi pembantu untuk hitung pertumbuhan (%)
$getGrowth = function ($current, $previous) {
if ($previous <= 0) return $current > 0 ? 100 : 0;
return round((($current - $previous) / $previous) * 100, 1);
};
// --- 1. HITUNG DATA BULAN INI ---
$currPendapatan = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->sum('total_bayar') +
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->sum('total_bayar');
$currMasuk = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count() +
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count();
$currSelesai = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->count() +
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->count();
$currBatal = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'ditolak')->count() +
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'ditolak')->count();
// --- 2. HITUNG DATA BULAN LALU (Untuk Perbandingan %) ---
$prevPendapatan = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->sum('total_bayar') +
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->sum('total_bayar');
$prevMasuk = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count() +
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count();
$prevSelesai = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->count() +
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->count();
$prevBatal = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'ditolak')->count() +
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'ditolak')->count();
// --- 3. SUSUN ARRAY STATISTIK ---
$stat = [
'pendapatan' => $currPendapatan,
'pendapatan_grow' => $getGrowth($currPendapatan, $prevPendapatan),
'masuk_count' => $currMasuk,
'masuk_grow' => $getGrowth($currMasuk, $prevMasuk),
'selesai_count' => $currSelesai,
'selesai_grow' => $getGrowth($currSelesai, $prevSelesai),
'batal_count' => $currBatal,
'batal_grow' => $getGrowth($currBatal, $prevBatal),
];
// --- 4. JADWAL & PENDING (Sudah Benar) ---
$buketToday = TransaksiBuket::with(['pelanggan', 'buket'])->whereDate('tgl_ambil', $today)->where('status_transaksi', 'diterima')->get();
$fotoToday = BookingFoto::with(['pelanggan', 'paketFoto'])->whereDate('tgl_booking', $today)->where('status_booking', 'diterima')->orderBy('jam_mulai', 'asc')->get();
$riwayatBuket = TransaksiBuket::with(['pelanggan', 'buket'])->where('status_transaksi', 'menunggu_verifikasi')->latest()->get();
$riwayatFoto = BookingFoto::with(['pelanggan', 'paketFoto'])->where('status_booking', 'menunggu_verifikasi')->latest()->get();
return view('admin.beranda.index', compact('stat', 'buketToday', 'fotoToday', 'riwayatBuket', 'riwayatFoto'));
} }
} }

View File

@ -19,7 +19,7 @@ public function up(): void
$table->string('password'); $table->string('password');
$table->string('no_wa', 20)->nullable(); $table->string('no_wa', 20)->nullable();
$table->text('alamat')->nullable(); $table->text('alamat')->nullable();
$table->enum('role', ['admin', 'pemilik']); // Enum Role $table->enum('role', ['admin_buket', 'admin_foto', 'pemilik']); // Enum Role
$table->timestamps(); $table->timestamps();
}); });
Schema::create('sessions', function (Blueprint $table) { Schema::create('sessions', function (Blueprint $table) {

View File

@ -20,12 +20,13 @@ public function up(): void
$table->foreignId('id_buket')->constrained('bukets', 'id_buket')->onDelete('cascade'); $table->foreignId('id_buket')->constrained('bukets', 'id_buket')->onDelete('cascade');
$table->text('request')->nullable(); // Catatan khusus $table->text('request')->nullable(); // Catatan khusus
$table->text('ucapan')->nullable(); // Catatan khusus
$table->dateTime('tgl_ambil'); $table->dateTime('tgl_ambil');
$table->decimal('total_bayar', 12, 2); $table->decimal('total_bayar', 12, 2);
$table->string('bukti_bayar')->nullable(); $table->string('bukti_bayar')->nullable();
// Enum Status Final // Enum Status Final
$table->enum('status_transaksi', ['menunggu_verifikasi', 'diproses', 'selesai', 'dibatalkan'])->default('menunggu_verifikasi'); $table->enum('status_transaksi', ['menunggu_verifikasi', 'diterima', 'ditolak', 'selesai', 'dibatalkan'])->default('menunggu_verifikasi');
$table->timestamps(); $table->timestamps();
}); });