Passed
Push — develop ( 7888af...9324e6 )
by Septianata
13:14
created

OrderController::datatableRowChild()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
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
                    ->select('orders.*', 'customers.id as customer_id', 'customers.fullname as customer_fullname')
35
                    ->orderBy('customers.fullname', $direction);
36
            })
37
            ->filterColumn('customer_fullname', function ($query, $keyword) {
38
                $query->whereHas('customer', function ($query) use ($keyword) {
39
                    $query->where('fullname', 'like', '%' . $keyword . '%');
40
                });
41
            })
42
            ->orderColumn('status', function ($query, $direction) {
43
                $query->join('order_statuses', 'order_statuses.order_id', '=', 'orders.id')
44
                    ->select('orders.*', 'order_statuses.id as order_status_id', 'order_statuses.status as order_status')
45
                    ->orderBy('order_statuses.status', $direction);
46
            })
47
            ->filterColumn('status', function ($query, $keyword) {
48
                $query->whereHas('latestStatus', function ($query) use ($keyword) {
49
                    $query->where('status', 'like', '%' . $keyword . '%');
50
                });
51
            })
52
            ->toJson();
53
    }
54
55
    /**
56
     * Return datatable row child data.
57
     *
58
     * @param  \App\Models\Order  $order
59
     * @return \Illuminate\Contracts\Support\Renderable
60
     */
61
    public function datatableRowChild(Order $order)
62
    {
63
        return view('admin.order.datatable-row-child', compact('order'));
64
    }
65
66
    /**
67
     * Show the form for creating a new resource.
68
     *
69
     * @return \Illuminate\Contracts\Support\Renderable
70
     */
71
    public function create()
72
    {
73
        return view('admin.order.create');
74
    }
75
76
    /**
77
     * Store a newly created resource in storage.
78
     *
79
     * @param  \Illuminate\Http\Request  $request
80
     * @return \Illuminate\Http\RedirectResponse
81
     */
82
    public function store(Request $request)
83
    {
84
        Order::create($request->all());
85
86
        return redirect()->route('admin.order.index');
87
    }
88
89
    /**
90
     * Show the form for editing the specified resource.
91
     *
92
     * @param  \App\Models\Order  $order
93
     * @return \Illuminate\Contracts\Support\Renderable
94
     */
95
    public function edit(Order $order)
96
    {
97
        return view('admin.order.edit', compact('order'));
98
    }
99
100
    /**
101
     * Update the specified resource in storage.
102
     *
103
     * @param  \Illuminate\Http\Request  $request
104
     * @param  \App\Models\Order  $order
105
     * @return \Illuminate\Http\RedirectResponse
106
     */
107
    public function update(Request $request, Order $order)
108
    {
109
        $order->update($request->all());
110
111
        return redirect()->route('admin.order.index');
112
    }
113
114
    /**
115
     * Remove the specified resource from storage.
116
     *
117
     * @param  \App\Models\Order  $order
118
     * @return \Illuminate\Http\RedirectResponse
119
     */
120
    public function destroy(Order $order)
121
    {
122
        $order->delete();
123
124
        return redirect()->route('admin.order.index');
125
    }
126
}
127