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();
}
}