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/CompetitorController.php
<?php

namespace App\Http\Controllers;

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

class CompetitorController extends Controller
{
    public function index(Request $request)
    {
        $hotel = $this->hotel($request);
        $competitors = Competitor::where('hotel_id', $hotel->id)->latest('rate_date')->get();
        $baseRate = (float) RoomType::where('hotel_id', $hotel->id)->avg('base_rate');
        $positioning = $competitors->map(fn ($item) => [
            'name' => $item->name,
            'rate' => $item->competitor_rate,
            'position' => $baseRate > $item->competitor_rate ? 'Higher' : ($baseRate < $item->competitor_rate ? 'Lower' : 'Parity'),
        ]);

        return view('rms.competitors', compact('hotel', 'competitors', 'baseRate', 'positioning'));
    }

    public function store(Request $request)
    {
        Competitor::create($request->validate([
            'name' => ['required'],
            'rate_date' => ['required', 'date'],
            'competitor_rate' => ['required', 'numeric', 'min:0'],
            'room_type' => ['nullable'],
        ]) + ['hotel_id' => $this->hotel($request)->id]);

        return back()->with('status', 'Đã thêm competitor rate.');
    }

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