HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/rms.naniguide.com/app/Http/Controllers/HotelConfigController.php
<?php

namespace App\Http\Controllers;

use App\Models\Hotel;
use App\Models\RoomType;
use Illuminate\Http\Request;

class HotelConfigController extends Controller
{
    public function index(Request $request)
    {
        $hotel = $this->hotel($request);
        $roomTypes = RoomType::where('hotel_id', $hotel->id)->latest()->get();

        return view('rms.hotel-config', compact('hotel', 'roomTypes'));
    }

    public function updateHotel(Request $request)
    {
        $hotel = $this->hotel($request);
        $hotel->update($request->validate([
            'name' => ['required'],
            'code' => ['required'],
            'city' => ['nullable'],
            'currency' => ['required', 'size:3'],
            'total_rooms' => ['required', 'integer', 'min:1'],
            'gross_profit_margin' => ['required', 'numeric', 'min:0', 'max:100'],
        ]));

        return back()->with('status', 'Đã cập nhật khách sạn.');
    }

    public function storeRoomType(Request $request)
    {
        $hotel = $this->hotel($request);
        RoomType::create($request->validate([
            'name' => ['required'],
            'code' => ['required'],
            'room_count' => ['required', 'integer', 'min:1'],
            'base_rate' => ['required', 'numeric', 'min:0'],
            'min_rate' => ['required', 'numeric', 'min:0'],
            'max_rate' => ['required', 'numeric', 'min:0'],
        ]) + ['hotel_id' => $hotel->id]);

        $hotel->update(['total_rooms' => RoomType::where('hotel_id', $hotel->id)->sum('room_count')]);

        return back()->with('status', 'Đã thêm loại phòng.');
    }

    public function deleteRoomType(Request $request, RoomType $roomType)
    {
        abort_unless($roomType->hotel_id === $this->hotel($request)->id, 403);
        $roomType->delete();

        return back()->with('status', 'Đã xóa loại phòng.');
    }

    private function hotel(Request $request): Hotel
    {
        return $request->user()->hotel_id ? Hotel::findOrFail($request->user()->hotel_id) : Hotel::firstOrFail();
    }
}