Passed
Push — master ( 7cf260...fcb529 )
by Adam
05:25
created

RoomController::delete()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2.1481

Importance

Changes 0
Metric Value
cc 2
eloc 9
nc 2
nop 1
dl 0
loc 16
ccs 6
cts 9
cp 0.6667
crap 2.1481
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Http\Interfaces\ManageTableInterface;
6
use App\Http\Requests\RoomRequest;
7
use App\Models\Room;
8
use App\Services\RoomTableService;
9
use Illuminate\Database\Eloquent\ModelNotFoundException;
10
11
class RoomController extends Controller implements ManageTableInterface
12
{
13
    protected $roomTableService;
14
15 10
    public function __construct(RoomTableService $roomTableService)
16
    {
17 10
        $this->roomTableService = $roomTableService;
18 10
    }
19
20 5
    public function index()
21
    {
22 5
        $title = trans('general.rooms');
23
24 5
        $dataset = Room::select('id', 'number', 'floor', 'capacity', 'price', 'comment')
25 5
            ->paginate($this->getItemsPerPage());
26
27 5
        if ($dataset->isEmpty()) {
28 2
            $this->addFlashMessage(trans('general.no_rooms_in_database'), 'alert-danger');
29
        }
30
31
        $viewData = [
32 5
            'columns'       => $this->roomTableService->getColumns(),
33 5
            'dataset'       => $dataset,
34 5
            'routeName'     => $this->roomTableService->getRouteName(),
35 5
            'title'         => $title,
36 5
            'deleteMessage' => mb_strtolower(trans('general.room')).' '.mb_strtolower(trans('general.number')),
0 ignored issues
show
Bug introduced by
It seems like trans('general.room') can also be of type array; however, parameter $str of mb_strtolower() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

36
            'deleteMessage' => mb_strtolower(/** @scrutinizer ignore-type */ trans('general.room')).' '.mb_strtolower(trans('general.number')),
Loading history...
37
        ];
38
39 5
        return view('list', $viewData);
40
    }
41
42 2
    public function store(RoomRequest $request, $objectId = null)
43
    {
44 2
        if ($objectId === null) {
45 1
            $object = new Room();
46
        } else {
47
            try {
48 1
                $object = Room::findOrFail($objectId);
49
            } catch (ModelNotFoundException $e) {
50
                return $this->returnBack([
51
                    'message'     => trans('general.object_not_found'),
52
                    'alert-class' => 'alert-danger',
53
                ]);
54
            }
55
        }
56
57 2
        $object->fill($request->all());
58 2
        $object->save();
59
60 2
        return redirect()->route($this->roomTableService->getRouteName().'.index')
61 2
            ->with([
62 2
                'message'     => trans('general.saved'),
63 2
                'alert-class' => 'alert-success',
64
            ]);
65
    }
66
67 2
    public function delete($objectId)
68
    {
69
        try {
70 2
            $object = Room::findOrFail($objectId);
71
        } catch (ModelNotFoundException $e) {
72
            $data = ['class' => 'alert-danger', 'message' => trans('general.object_not_found')];
73
74
            return response()->json($data);
75
        }
76
77 2
        $object->reservations()->delete();
78 2
        $object->delete();
79
80 2
        $data = ['class' => 'alert-success', 'message' => trans('general.deleted')];
81
82 2
        return response()->json($data);
83
    }
84
85 4
    public function showAddEditForm($objectId = null)
86
    {
87 4
        if ($objectId === null) {
88 2
            $dataset = new Room();
89 2
            $title = trans('general.add');
90 2
            $submitRoute = route($this->roomTableService->getRouteName().'.postadd');
91
        } else {
92
            try {
93 2
                $dataset = Room::select('id', 'number', 'floor', 'capacity', 'price', 'comment')->findOrFail($objectId);
94 1
            } catch (ModelNotFoundException $e) {
95 1
                return $this->returnBack([
96 1
                    'message'     => trans('general.object_not_found'),
97 1
                    'alert-class' => 'alert-danger',
98
                ]);
99
            }
100
101 1
            $title = trans('general.edit');
102 1
            $submitRoute = route($this->roomTableService->getRouteName().'.postedit', $objectId);
103
        }
104
105 3
        $title .= ' '.mb_strtolower(trans('general.room'));
0 ignored issues
show
Bug introduced by
It seems like trans('general.room') can also be of type array; however, parameter $str of mb_strtolower() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

105
        $title .= ' '.mb_strtolower(/** @scrutinizer ignore-type */ trans('general.room'));
Loading history...
106
107
        $viewData = [
108 3
            'dataset'     => $dataset,
109 3
            'fields'      => $this->getFields(),
110 3
            'title'       => $title,
111 3
            'submitRoute' => $submitRoute,
112 3
            'routeName'   => $this->roomTableService->getRouteName(),
113
        ];
114
115 3
        return view('addedit', $viewData);
116
    }
117
118 3
    public function getFields()
119
    {
120
        return [
121
            [
122 3
                'id'    => 'number',
123 3
                'title' => trans('general.number'),
124 3
                'value' => function (Room $data) {
125 3
                    return $data->number;
126 3
                },
127
                'optional' => [
128
                    'required' => 'required',
129
                ],
130
            ],
131
            [
132 3
                'id'    => 'floor',
133 3
                'title' => trans('general.floor'),
134 3
                'value' => function (Room $data) {
135 3
                    return $data->floor;
136 3
                },
137 3
                'type'     => 'number',
138
                'optional' => [
139
                    'required' => 'required',
140
                ],
141
            ],
142
            [
143 3
                'id'    => 'capacity',
144 3
                'title' => trans('general.capacity'),
145 3
                'value' => function (Room $data) {
146 3
                    return $data->capacity;
147 3
                },
148 3
                'type'     => 'number',
149
                'optional' => [
150
                    'required' => 'required',
151
                    'min'      => '1',
152
                ],
153
            ],
154
            [
155 3
                'id'    => 'price',
156 3
                'title' => trans('general.price'),
157 3
                'value' => function (Room $data) {
158 3
                    return $data->price;
159 3
                },
160 3
                'type'     => 'number',
161
                'optional' => [
162
                    'required'    => 'required',
163
                    'min'         => '0',
164
                    'step'        => '0.01',
165
                    'placeholder' => '0.00',
166
                ],
167
            ],
168
            [
169 3
                'id'    => 'comment',
170 3
                'title' => trans('general.comment'),
171 3
                'value' => function (Room $data) {
172 3
                    return $data->comment;
173 3
                },
174 3
                'type' => 'textarea',
175
            ],
176
        ];
177
    }
178
}
179