Passed
Push — develop ( 9324e6...f3eb57 )
by Septianata
04:31
created

OrderController   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 169
Duplicated Lines 0 %

Test Coverage

Coverage 60.32%

Importance

Changes 0
Metric Value
wmc 10
eloc 57
c 0
b 0
f 0
dl 0
loc 169
ccs 38
cts 63
cp 0.6032
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A datatableRowChild() 0 3 1
A edit() 0 3 1
A update() 0 8 1
A store() 0 34 2
A index() 0 3 1
A destroyMultiple() 0 8 1
A datatable() 0 25 1
A destroy() 0 8 1
A create() 0 3 1
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\Http\Controllers\Controller;
6
use App\Http\Requests\Order\StoreRequest;
7
use App\Http\Requests\Order\UpdateRequest;
8
use App\Http\Resources\DataTables\OrderResource;
9
use App\Models\Branch;
10
use App\Models\Order;
11
use App\Models\User;
12
use Illuminate\Http\Request;
13
use Illuminate\Support\Facades\DB;
14
use Yajra\DataTables\Facades\DataTables;
15
16
class OrderController extends Controller
17
{
18
    /**
19
     * Display a listing of the resource.
20
     *
21
     * @return \Illuminate\Contracts\Support\Renderable
22
     */
23 1
    public function index()
24
    {
25 1
        return view('admin.order.index');
26
    }
27
28
    /**
29
     * Return datatable server side response.
30
     *
31
     * @return \Illuminate\Http\JsonResponse
32
     */
33 1
    public function datatable()
34
    {
35 1
        return DataTables::eloquent(Order::query()->with('user:id,fullname'))
36 1
            ->setTransformer(fn ($model) => OrderResource::make($model)->resolve())
37 1
            ->orderColumn('customer_fullname', function ($query, $direction) {
38
                $query->join('customers', 'orders.customer_id', '=', 'customers.id')
39
                    ->select('orders.*', 'customers.id as customer_id', 'customers.fullname as customer_fullname')
40
                    ->orderBy('customers.fullname', $direction);
41 1
            })
42 1
            ->filterColumn('customer_fullname', function ($query, $keyword) {
43
                $query->whereHas('customer', function ($query) use ($keyword) {
44
                    $query->where('fullname', 'like', '%' . $keyword . '%');
45
                });
46 1
            })
47 1
            ->orderColumn('status', function ($query, $direction) {
48
                $query->join('order_statuses', 'order_statuses.order_id', '=', 'orders.id')
49
                    ->select('orders.*', 'order_statuses.id as order_status_id', 'order_statuses.status as order_status')
50
                    ->orderBy('order_statuses.status', $direction);
51 1
            })
52 1
            ->filterColumn('status', function ($query, $keyword) {
53
                $query->whereHas('latestStatus', function ($query) use ($keyword) {
54
                    $query->where('status', 'like', '%' . $keyword . '%');
55
                });
56 1
            })
57 1
            ->toJson();
58
    }
59
60
    /**
61
     * Return datatable row child data.
62
     *
63
     * @param  \App\Models\Order  $order
64
     * @return \Illuminate\Contracts\Support\Renderable
65
     */
66
    public function datatableRowChild(Order $order)
67
    {
68
        return view('admin.order.datatable-row-child', compact('order'));
69
    }
70
71
    /**
72
     * Show the form for creating a new resource.
73
     *
74
     * @return \Illuminate\Contracts\Support\Renderable
75
     */
76
    public function create()
77
    {
78
        return view('admin.order.create');
79
    }
80
81
    /**
82
     * Store a newly created resource in storage.
83
     *
84
     * @param  \App\Http\Requests\Order\StoreRequest  $request
85
     * @return \Illuminate\Http\RedirectResponse
86
     */
87 1
    public function store(StoreRequest $request)
88
    {
89 1
        $alert = [
90
            'alert' => [
91 1
                'type' => 'alert-success',
92 1
                'message' => trans('The :resource was created!', ['resource' => trans('admin-lang.user')]),
93
            ],
94
        ];
95
96
        try {
97 1
            DB::transaction(function () use ($request) {
98 1
                $order = $request->getOrder();
99
100 1
                $order->setCustomerRelationValue($request->getCustomer());
101 1
                transform($request->getUser(), fn (User $user) => $order->setUserRelationValue($user));
102 1
                transform($request->getBranch(), fn (Branch $branch) => $order->setBranchRelationValue($branch));
103
104 1
                $order->save();
105
106 1
                $order->statuses()->save($request->getOrderStatus());
107 1
                $order->items()->saveMany($request->getItems());
108 1
            });
109
        } catch (\Throwable $th) {
110
            throw $th;
111
112
            $alert = [
0 ignored issues
show
Unused Code introduced by
$alert = array('alert' =... => $th->getMessage())) is not reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
113
                'alert' => [
114
                    'type' => 'alert-danger',
115
                    'message' => $th->getMessage(),
116
                ],
117
            ];
118
        }
119
120 1
        return redirect()->route('admin.order.index')->with($alert);
121
    }
122
123
    /**
124
     * Show the form for editing the specified resource.
125
     *
126
     * @param  \App\Models\Order  $order
127
     * @return \Illuminate\Contracts\Support\Renderable
128
     */
129
    public function edit(Order $order)
130
    {
131
        return view('admin.order.edit', compact('order'));
132
    }
133
134
    /**
135
     * Update the specified resource in storage.
136
     *
137
     * @param  \App\Http\Requests\Order\UpdateRequest  $request
138
     * @param  \App\Models\Order  $order
139
     * @return \Illuminate\Http\RedirectResponse
140
     */
141
    public function update(UpdateRequest $request, Order $order)
142
    {
143
        $order->update($request->validated());
144
145
        return redirect()->route('admin.order.index')->with([
146
            'alert' => [
147
                'type' => 'alert-success',
148
                'message' => trans('The :resource was updated!', ['resource' => trans('admin-lang.order')]),
149
            ],
150
        ]);
151
    }
152
153
    /**
154
     * Remove the specified resource from storage.
155
     *
156
     * @param  \App\Models\Order  $order
157
     * @return \Illuminate\Http\RedirectResponse
158
     */
159 1
    public function destroy(Order $order)
160
    {
161 1
        $order->delete();
162
163 1
        return redirect()->route('admin.order.index')->with([
164
            'alert' => [
165 1
                'type' => 'alert-success',
166 1
                'message' => trans('The :resource was deleted!', ['resource' => trans('admin-lang.order')]),
167
            ],
168
        ]);
169
    }
170
171
    /**
172
     * Remove the specified list of resource from storage.
173
     *
174
     * @param  \Illuminate\Http\Request  $request
175
     * @return \Illuminate\Http\RedirectResponse
176
     */
177 1
    public function destroyMultiple(Request $request)
178
    {
179 1
        Order::destroy($request->input('checkbox', []));
180
181 1
        return redirect()->route('admin.order.index')->with([
182
            'alert' => [
183 1
                'type' => 'alert-success',
184 1
                'message' => trans('The :resource was deleted!', ['resource' => trans('admin-lang.order')]),
185
            ],
186
        ]);
187
    }
188
}
189