.
This commit is contained in:
parent
102ac2c50a
commit
4d6e825f16
@ -45,7 +45,7 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 1: Ambil Role User dari Token
|
||||
// 🌟 Ambil Role User dari Token
|
||||
userRoleInterface, _ := c.Get("role")
|
||||
userRole, _ := userRoleInterface.(string)
|
||||
|
||||
@ -55,6 +55,21 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// 🌟 PERBAIKAN: PROTEKSI STATUS MAINTENANCE RUANGAN
|
||||
// =========================================================
|
||||
var targetRoom models.Room
|
||||
if err := config.DB.First(&targetRoom, input.RoomID).Error; err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "Ruangan tidak ditemukan di database"})
|
||||
return
|
||||
}
|
||||
|
||||
if targetRoom.Status == "Maintenance" {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Akses Ditolak: Ruangan ini sedang dalam perawatan teknis dan tidak dapat dipesan saat ini."})
|
||||
return
|
||||
}
|
||||
// =========================================================
|
||||
|
||||
// Overlap Check (Mencegah bentrok jadwal)
|
||||
var count int64
|
||||
config.DB.Model(&models.Booking{}).Where(
|
||||
@ -67,7 +82,7 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 1 Lanjutan: Penentuan Status Otomatis
|
||||
// Penentuan Status Otomatis
|
||||
statusPeminjaman := "Pending" // Default untuk student
|
||||
if userRole == "lecturer" {
|
||||
statusPeminjaman = "Approved" // Dosen otomatis disetujui!
|
||||
@ -80,7 +95,7 @@ func CreateBooking(c *gin.Context) {
|
||||
StartTime: input.StartTime,
|
||||
EndTime: input.EndTime,
|
||||
Purpose: input.Purpose,
|
||||
Status: statusPeminjaman, // <-- Gunakan variabel statusPeminjaman
|
||||
Status: statusPeminjaman,
|
||||
}
|
||||
|
||||
if err := config.DB.Create(&booking).Error; err != nil {
|
||||
@ -95,7 +110,7 @@ func CreateBooking(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 3: Fungsi khusus untuk mengambil riwayat pribadi
|
||||
// Fungsi khusus untuk mengambil riwayat pribadi
|
||||
func GetMyBookings(c *gin.Context) {
|
||||
var bookings []models.Booking
|
||||
|
||||
@ -150,7 +165,6 @@ func UpdateBookingStatus(c *gin.Context) {
|
||||
|
||||
booking.Status = input.Status
|
||||
|
||||
// 🌟 PERBAIKAN 2: Menghapus blok Save dan JSON ganda yang bikin error
|
||||
if err := config.DB.Save(&booking).Error; err != nil {
|
||||
fmt.Println("🔥 ERROR DARI DATABASE:", err.Error())
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
@ -255,4 +269,4 @@ func GetAllBookings(c *gin.Context) {
|
||||
"status": "success",
|
||||
"data": bookings,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ export default function ManageRoomsPage() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
{/* TAMBAHKAN [...rooms].sort(...) SEBELUM .map */}
|
||||
{/* [...rooms].sort memastikan urutan kelas selalu rapi dari D101, D102, dst */}
|
||||
{[...rooms]
|
||||
.sort((a, b) => a.name.localeCompare(b.name))
|
||||
.map((room) => (
|
||||
|
||||
@ -92,11 +92,23 @@ export default function AddBookingPage() {
|
||||
onChange={(e) => setSelectedRoomId(e.target.value)}
|
||||
>
|
||||
<option value="" disabled>-- Pilih Ruangan yang Tersedia --</option>
|
||||
{rooms.map(room => (
|
||||
<option key={room.room_id} value={room.room_id}>
|
||||
{room.name} (Kapasitas: {room.capacity} | {room.floor})
|
||||
|
||||
{/* PERBAIKAN: Sortir Ruangan & Disable yang berstatus Maintenance */}
|
||||
{[...rooms]
|
||||
.sort((a, b) => a.name.localeCompare(b.name))
|
||||
.map((room) => (
|
||||
<option
|
||||
key={room.room_id}
|
||||
value={room.room_id}
|
||||
disabled={room.status === 'Maintenance'}
|
||||
className={room.status === 'Maintenance' ? 'text-gray-400 bg-gray-100' : 'text-gray-900'}
|
||||
>
|
||||
{room.name} {room.status === 'Maintenance'
|
||||
? '[TIDAK TERSEDIA - SEDANG PERAWATAN]'
|
||||
: `(Kapasitas: ${room.capacity} | ${room.floor})`}
|
||||
</option>
|
||||
))}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user