前回までの状況はこちら。
最新ソースはこちら。
https://github.com/takishita2nd/hotel-mng
今回も内容薄いかもしれん。
今までは予約登録時、日にちが重複していればエラーを表示させていました。
これが通用するのは部屋が一つしか無い場合のみでして、
今回は部屋が複数あるので、日にちだけのチェックだけではなくて、部屋もチェックに含めなければいけません。
というわけで、引数に部屋IDを追加。
/**
* 登録処理
*/
public function store(ManagementRequest $request)
{
if($this->registerManagement->checkSchedule($request->start_day,
$request->days,
$request->room) == false)
{
return redirect('management/create')
->with(['error' => 'スケジュールが重複します'])
->withInput();
}
/**
* 更新処理
*/
public function update(ManagementRequest $request)
{
if($this->registerManagement->checkScheduleForUpdate($request->start_day,
$request->days,
$request->id,
$request->room) == false)
{
return redirect('management/create')
->with(['error' => 'スケジュールが重複します'])
->withInput();
}
そしてチェック処理本体。
/**
* スケジュールの重複を確認する
*
* @return boolean
*/
public function checkSchedule($date, $num, $room)
{
for($i = 0; $i < $num; $i++)
{
$record = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
if(is_null($record) == false)
{
if($record->reserveManagements()->first()->rooms()->first()->id == $room)
{
return false;
}
}
}
return true;
}
/**
* 更新時のスケジュールの重複を確認する
*
* @return boolean
*/
public function checkScheduleForUpdate($date, $num, $userId, $room)
{
for($i = 0; $i < $num; $i++)
{
$model2 = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
if(is_null($model2) == false)
{
if($model2->reserveManagements()->first()->rooms()->first()->id == $room)
{
if($model2->reserveManagements()->first()->id != $userId)
{
return false;
}
}
}
}
return true;
}
strtotime($date.’+0 day’)ってできたんだ。
やってることは部屋チェックを追加しただけです。
簡単ですね。
これで、日付は同じだけど部屋が違う場合は予約可、日付と部屋が同じ場合は予約不可、というロジックが完成しました。
バナークリックで応援よろしくおねがいします。