Passed
Push — develop ( 6302a9...3db2fb )
by Septianata
04:45
created

OrderController   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 7
eloc 25
dl 0
loc 101
ccs 0
cts 37
cp 0
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A edit() 0 3 1
A update() 0 5 1
A store() 0 5 1
A index() 0 3 1
A datatable() 0 23 1
A destroy() 0 5 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\Resources\DataTables\OrderResource;
7
use App\Models\Order;
8
use Illuminate\Http\Request;
9
use Yajra\DataTables\Facades\DataTables;
10
11
class OrderController extends Controller
12
{
13
    /**
14
     * Display a listing of the resource.
15
     *
16
     * @return \Illuminate\Contracts\Support\Renderable
17
     */
18
    public function index()
19
    {
20
        return view('admin.order.index');
21
    }
22
23
    /**
24
     * Return datatable server side response.
25
     *
26
     * @return \Illuminate\Http\JsonResponse
27
     */
28
    public function datatable()
29
    {
30
        return DataTables::eloquent(Order::query()->with('user:id,fullname'))
31
            ->setTransformer(fn ($model) => OrderResource::make($model)->resolve())
32
            ->orderColumn('customer_fullname', function ($query, $direction) {
33
                $query->join('customers', 'orders.customer_id', '=', 'customers.id')
34
                    ->orderBy('customers.fullname', $direction);
35
            })
36
            ->filterColumn('customer_fullname', function ($query, $keyword) {
37
                $query->whereHas('customer', function ($query) use ($keyword) {
38
                    $query->where('fullname', 'like', '%' . $keyword . '%');
39
                });
40
            })
41
            ->orderColumn('status', function ($query, $direction) {
42
                $query->join('order_statuses', 'order_statuses.order_id', '=', 'orders.id')
43
                    ->orderBy('order_statuses.status', $direction);
44
            })
45
            ->filterColumn('status', function ($query, $keyword) {
46
                $query->whereHas('latestStatus', function ($query) use ($keyword) {
47
                    $query->where('status', 'like', '%' . $keyword . '%');
48
                });
49
            })
50
            ->toJson();
51
    }
52
53
    /**
54
     * Show the form for creating a new resource.
55
     *
56
     * @return \Illuminate\Contracts\Support\Renderable
57
     */
58
    public function create()
59
    {
60
        return view('admin.order.create');
61
    }
62
63
    /**
64
     * Store a newly created resource in storage.
65
     *
66
     * @param  \Illuminate\Http\Request  $request
67
     * @return \Illuminate\Http\RedirectResponse
68
     */
69
    public function store(Request $request)
70
    {
71
        Order::create($request->all());
72
73
        return redirect()->route('admin.order.index');
74
    }
75
76
    /**
77
     * Show the form for editing the specified resource.
78
     *
79
     * @param  \App\Models\Order  $order
80
     * @return \Illuminate\Contracts\Support\Renderable
81
     */
82
    public function edit(Order $order)
83
    {
84
        return view('admin.order.edit', compact('order'));
85
    }
86
87
    /**
88
     * Update the specified resource in storage.
89
     *
90
     * @param  \Illuminate\Http\Request  $request
91
     * @param  \App\Models\Order  $order
92
     * @return \Illuminate\Http\RedirectResponse
93
     */
94
    public function update(Request $request, Order $order)
95
    {
96
        $order->update($request->all());
97
98
        return redirect()->route('admin.order.index');
99
    }
100
101
    /**
102
     * Remove the specified resource from storage.
103
     *
104
     * @param  \App\Models\Order  $order
105
     * @return \Illuminate\Http\RedirectResponse
106
     */
107
    public function destroy(Order $order)
108
    {
109
        $order->delete();
110
111
        return redirect()->route('admin.order.index');
112
    }
113
}
114