Skip to content

Commit b76539b

Browse files
Merge pull request #22 from WailanTirajoh/feat-add-filter-type-to-rooms
feat: add status & type filter to room
2 parents 366d22f + 73b773c commit b76539b

File tree

8 files changed

+230
-145
lines changed

8 files changed

+230
-145
lines changed

app/Http/Controllers/RoomController.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@
99
use App\Models\Type;
1010
use App\Repositories\Interface\ImageRepositoryInterface;
1111
use App\Repositories\Interface\RoomRepositoryInterface;
12+
use App\Repositories\Interface\RoomStatusRepositoryInterface;
13+
use App\Repositories\Interface\TypeRepositoryInterface;
1214
use Carbon\Carbon;
1315
use Illuminate\Http\Request;
1416

1517
class RoomController extends Controller
1618
{
17-
private $roomRepository;
18-
19-
public function __construct(RoomRepositoryInterface $roomRepository)
20-
{
19+
public function __construct(
20+
private RoomRepositoryInterface $roomRepository,
21+
private TypeRepositoryInterface $typeRepository,
22+
private RoomStatusRepositoryInterface $roomStatusRepositoryInterface
23+
) {
2124
$this->roomRepository = $roomRepository;
2225
}
2326

@@ -26,7 +29,10 @@ public function index(Request $request)
2629
if ($request->ajax()) {
2730
return $this->roomRepository->getRoomsDatatable($request);
2831
}
29-
return view('room.index');
32+
33+
$types = $this->typeRepository->getTypeList($request);
34+
$roomStatuses = $this->roomStatusRepositoryInterface->getRoomStatusList($request);
35+
return view('room.index', compact('types', 'roomStatuses'));
3036
}
3137

3238
public function create()

app/Repositories/Implementation/RoomRepository.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ class RoomRepository implements RoomRepositoryInterface
99
{
1010
public function getRooms($request)
1111
{
12-
$rooms = Room::with('type', 'roomStatus')->orderBy('number');
12+
$rooms = Room::with('type', 'roomStatus')
13+
->orderBy('number')
14+
->when($request->status, function ($query) use ($request) {
15+
$query->where('room_status_id', $request->status);
16+
})
17+
->when($request->type, function ($query) use ($request) {
18+
$query->where('type_id', $request->type);
19+
});
1320
if (!empty($request->search)) {
1421
$rooms = $rooms->where('number', 'LIKE', '%' . $request->search . '%');
1522
}
@@ -43,6 +50,12 @@ public function getRoomsDatatable($request)
4350
'rooms.price',
4451
'room_statuses.name as status',
4552
)
53+
->when($request->status !== 'All', function ($query) use ($request) {
54+
$query->where('room_status_id', $request->status);
55+
})
56+
->when($request->type !== 'All', function ($query) use ($request) {
57+
$query->where('type_id', $request->type);
58+
})
4659
->leftJoin("types", "rooms.type_id", "=", "types.id")
4760
->leftJoin("room_statuses", "rooms.room_status_id", "=", "room_statuses.id");
4861

app/Repositories/Implementation/RoomStatusRepository.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,9 @@ public function getDatatable($request)
9595

9696
return json_encode($response);
9797
}
98+
99+
public function getRoomStatusList($request)
100+
{
101+
return RoomStatus::get();
102+
}
98103
}

app/Repositories/Implementation/TypeRepository.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,9 @@ public function store($typeData)
9898

9999
return $type;
100100
}
101+
102+
public function getTypeList($request)
103+
{
104+
return Type::get();
105+
}
101106
}

app/Repositories/Interface/RoomStatusRepositoryInterface.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ interface RoomStatusRepositoryInterface
1010
public function getRoomStatuses($request);
1111

1212
public function getDatatable($request);
13+
public function getRoomStatusList($request);
1314
}

app/Repositories/Interface/TypeRepositoryInterface.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ interface TypeRepositoryInterface
77
public function showAll($request);
88
public function getTypesDatatable($request);
99
public function store($typeData);
10+
public function getTypeList($request);
1011
}

0 commit comments

Comments
 (0)