Completed
Push — master ( 310957...532256 )
by
unknown
16s queued 10s
created

HospitalController   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 92
dl 0
loc 216
rs 10
c 0
b 0
f 0
wmc 19

12 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 4 1
A index() 0 8 1
A store() 0 25 2
A update() 0 25 2
A getRooms() 0 9 1
A deleteRoomsAndRoomDetail() 0 15 3
A edit() 0 10 1
A destroy() 0 7 3
A show() 0 12 2
A indexUser() 0 7 1
A searchHospital() 0 9 1
A viewHospital() 0 8 1
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Room;
6
use Illuminate\Support\Facades\DB;
7
use Illuminate\Http\Request;
8
use App\Hospital;
9
use App\City;
10
11
class HospitalController extends Controller
12
{
13
    /**
14
     * Display a listing of the resource.
15
     *
16
     * @return \Illuminate\Http\Response
17
     */
18
    public function index()
19
    {
20
        $hospital = Hospital::orderBy('city_id','asc')->paginate(10);
21
        $data = [
22
            'role' => session('role'),
23
            'hospital' => $hospital
24
        ];
25
        return view('pages.hospital')->with('data',$data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('pages.hospi...')->with('data', $data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
26
    }
27
28
    /**
29
     * Show the form for creating a new resource.
30
     *
31
     * @return \Illuminate\Http\Response
32
     */
33
    public function create()
34
    {
35
        $city_id = City::pluck('name', 'id');
36
        return view('pages.ext.add-hospital')->with('city_id', $city_id);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('pages.ext.a...th('city_id', $city_id) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
37
    }
38
39
    /**
40
     * Store a newly created resource in storage.
41
     *
42
     * @param Request $request
43
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
44
     * @throws \Illuminate\Validation\ValidationException
45
     */
46
    public function store(Request $request)
47
    {
48
        $this->validate($request, [
49
            'name'=>'required|min:3',
50
            'city_id'=>'required',
51
            'biography'=>'required',
52
            'address'=>'required|min:3',
53
            'medical_services'=>'required',
54
            'public_services'=>'required',
55
        ]);
56
57
        $hospital = new Hospital;
58
        $hospital->name = $request->input('name');
59
        $hospital->city_id = $request->input('city_id');
60
        $hospital->biography = $request->input('biography');
61
        $hospital->address = $request->input('address');
62
        $hospital->medical_services = $request->input('medical_services');
63
        $hospital->public_services = $request->input('public_services');
64
        $hospital->cover_images_id = 1;
65
66
        if($hospital->save()) {
67
            return redirect (route('hospital.index'))->with('success', 'Rumah sakit berhasil di tambahkan !');
68
        }
69
70
        return redirect (route('hospital.index'))->with('failed', 'Gagal menambahkan rumah sakit !');
71
    }
72
73
    /**
74
     * Display the specified resource.
75
     *
76
     * @param  int  $id
77
     * @return \Illuminate\Http\Response
78
     */
79
    public function show($id)
80
    {
81
        $hospital = Hospital::find($id);
82
        if(!$hospital) {
83
            abort(401);
84
        }
85
        $data = [
86
            'hospital' => $hospital,
87
            'rooms' => $this->getRooms($id),
88
        ];
89
90
        return view('pages.ext.view-hospital')->with('data', $data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('pages.ext.v...')->with('data', $data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
91
    }
92
93
    /**
94
     * Show the form for editing the specified resource.
95
     *
96
     * @param  int  $id
97
     * @return \Illuminate\Http\Response
98
     */
99
    public function edit($id)
100
    {
101
        $hospital = Hospital::find($id);
102
        $city_id = City::pluck('name', 'id');
103
        $data = [
104
            'role' => session('role'),
105
            'hospital' => $hospital,
106
            'city_id' => $city_id
107
        ];
108
        return view('pages.ext.edit-hospital')->with('data', $data);
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('pages.ext.e...')->with('data', $data) returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
109
    }
110
111
    /**
112
     * Update the specified resource in storage.
113
     *
114
     * @param Request $request
115
     * @param $id
116
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
117
     * @throws \Illuminate\Validation\ValidationException
118
     */
119
    public function update(Request $request, $id)
120
    {
121
        $this->validate($request, [
122
            'name'=>'required|min:3',
123
            'city_id'=>'required',
124
            'biography'=>'required',
125
            'address'=>'required|min:3',
126
            'medical_services'=>'required',
127
            'public_services'=>'required',
128
        ]);
129
130
        $hospital = Hospital::find($id);
131
        $hospital->name = $request->input('name');
132
        $hospital->city_id = $request->input('city_id');
133
        $hospital->biography = $request->input('biography');
134
        $hospital->address = $request->input('address');
135
        $hospital->medical_services = $request->input('medical_services');
136
        $hospital->public_services = $request->input('public_services');
137
        $hospital->cover_images_id = 1;
138
139
        if($hospital->save()) {
140
            return redirect (route('hospital.index'))->with('success', 'Rumah sakit berhasil di perbaharui');
141
        }
142
143
        return redirect (route('hospital.edit', $id))->with('failed', 'Gagal memperbaharui rumah sakit !');
144
    }
145
146
    /**
147
     * Remove the specified resource from storage.
148
     *
149
     * @param  int  $id
150
     * @return \Illuminate\Http\Response
151
     */
152
    public function destroy($id)
153
    {
154
        $hospital = Hospital::find($id);
155
        $rooms = $this->deleteRoomsAndRoomDetail($id);
156
157
        if($hospital->delete() && $rooms) {
158
            return redirect(route('hospital.index'));
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect(route('hospital.index')) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
159
        }
160
161
    }
162
163
    /**
164
     * @param $hospital_id
165
     * @return bool
166
     */
167
    private function deleteRoomsAndRoomDetail($hospital_id)
168
    {
169
        $rooms = $this->getRooms($hospital_id);
170
        $ids = $rooms->pluck('id')->toArray();
171
172
        $delroom = Room::whereIn('id', $ids)->delete();
173
        $deldetail = DB::table('room_details')
174
            ->where('hospital_id', '=', $hospital_id)
175
            ->delete();
176
177
        if($delroom && $deldetail) {
178
            return true;
179
        }
180
181
        return false;
182
    }
183
184
    /**
185
     * @param $hospital_id
186
     * @return \Illuminate\Support\Collection
187
     */
188
    private function getRooms($hospital_id)
189
    {
190
        $rooms = DB::table('rooms')
191
            ->selectRaw(DB::raw('rooms.*'))
192
            ->leftJoin('room_details', 'rooms.id', '=', 'room_details.room_id')
193
            ->where('room_details.hospital_id','=',$hospital_id)
194
            ->get();
195
196
        return $rooms;
197
    }
198
199
    public function indexUser()
200
    {
201
        $location = City::orderBy('name','asc')->pluck('name', 'id');
202
        $data = [
203
            'location' => $location,
204
        ];
205
        return view ('SearchRS')->with('data',$data);
206
    }
207
208
    public function searchHospital(Request $request)
209
    {
210
        $hospital = Hospital::where('city_id',$request->location)->orderBy('name')->paginate(5);
211
        $location = City::orderBy('name','asc')->pluck('name','id');
212
        $data = [
213
            'hospital' => $hospital,
214
            'location' => $location
215
        ];
216
        return view ('listHospital')->with('data',$data);
217
    }
218
219
    public function viewHospital($id)
220
    {
221
        $hospital = Hospital::find($id);
222
        $data = [
223
            'hospital' => $hospital,
224
            'room' => $this->getRooms($id),
225
        ];
226
        return view ('viewhospital')->with('data',$data);
227
    }
228
}
229