Passed
Push — master ( ea0194...0a4772 )
by Adam
05:23
created

RoomController::delete()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
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 14
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 9
    public function __construct(RoomTableService $roomTableService)
16
    {
17 9
        $this->roomTableService = $roomTableService;
18 9
    }
19
20 4
    public function index()
21
    {
22 4
        $title = trans('general.rooms');
23
24 4
        $dataset = Room::select('id', 'number', 'floor', 'capacity', 'price', 'comment')
25 4
            ->paginate($this->getItemsPerPage());
26
27 4
        if ($dataset->isEmpty()) {
28 2
            $this->addFlashMessage(trans('general.no_rooms_in_database'), 'alert-danger');
29
        }
30
31
        $viewData = [
32 4
            'columns'       => $this->roomTableService->getColumns(),
33 4
            'dataset'       => $dataset,
34 4
            'routeName'     => $this->roomTableService->getRouteName(),
35 4
            'title'         => $title,
36 4
            '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 4
        return view('list', $viewData);
40
    }
41
42 1
    public function store(RoomRequest $request, $objectId = null)
43
    {
44 1
        if ($objectId === null) {
45
            $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 1
        $object->fill($request->all());
58 1
        $object->save();
59
60 1
        return redirect()->route($this->roomTableService->getRouteName().'.index')
61 1
            ->with([
62 1
                'message'     => trans('general.saved'),
63 1
                '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
            return response()->json($data);
74
        }
75
76 2
        $object->reservations()->delete();
77 2
        $object->delete();
78
79 2
        $data = ['class' => 'alert-success', 'message' => trans('general.deleted')];
80 2
        return response()->json($data);
81
    }
82
83 3
    public function showAddEditForm($objectId = null)
84
    {
85 3
        if ($objectId === null) {
86 1
            $dataset = new Room();
87 1
            $title = trans('general.add');
88 1
            $submitRoute = route($this->roomTableService->getRouteName().'.postadd');
89
        } else {
90
            try {
91 2
                $dataset = Room::select('id', 'number', 'floor', 'capacity', 'price', 'comment')->findOrFail($objectId);
92 1
            } catch (ModelNotFoundException $e) {
93 1
                return $this->returnBack([
94 1
                    'message'     => trans('general.object_not_found'),
95 1
                    'alert-class' => 'alert-danger',
96
                ]);
97
            }
98
99 1
            $title = trans('general.edit');
100 1
            $submitRoute = route($this->roomTableService->getRouteName().'.postedit', $objectId);
101
        }
102
103 2
        $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

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