Passed
Push — develop ( 6dcea6...5ae9a6 )
by Septianata
16:24
created

ItemController::store()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 25
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 25
ccs 0
cts 14
cp 0
rs 9.7666
cc 2
nc 1
nop 2
crap 6
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\Http\Controllers\Controller;
6
use App\Http\Requests\Item\StoreRequest;
7
use App\Http\Requests\Item\UpdateRequest;
8
use App\Models\Item;
9
use App\Models\Order;
10
use Illuminate\Http\Response;
11
use Illuminate\Support\Facades\DB;
12
use Illuminate\Support\Facades\Session;
13
14
class ItemController extends Controller
15
{
16
    /**
17
     * Show the form for creating a new resource.
18
     *
19
     * @param  \App\Models\Order  $order
20
     * @return \Illuminate\Contracts\Support\Renderable
21
     */
22
    public function create(Order $order)
23
    {
24
        $item = new Item;
25
26
        $item->setOrderRelationValue($order);
27
28
        return view('admin.item.create', compact('item'));
29
    }
30
31
    /**
32
     * Store a newly created resource in storage.
33
     *
34
     * @param  \App\Http\Requests\Item\StoreRequest  $request
35
     * @param  \App\Models\Order  $order
36
     * @return \Illuminate\Http\RedirectResponse
37
     *
38
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
39
     */
40
    public function store(StoreRequest $request, Order $order)
41
    {
42
        DB::transaction(function () use ($request, $order) {
43
            /** @var \App\Models\Item $item */
44
            $item = Item::make($request->validated());
45
46
            $item
47
                ->setDenominationRelationValue($request->getDenominationFromRequest())
48
                ->setOrderRelationValue($order)
49
                ->save();
50
51
            if ($order->isMaximumTotalOrderExceeded()) {
52
                Session::flash('alert', [
53
                    'type' => 'alert-danger',
54
                    'message' => 'Maaf, total pesanan anda sudah mencapai batas maksimum',
55
                ]);
56
57
                abort(Response::HTTP_UNPROCESSABLE_ENTITY);
58
            }
59
        });
60
61
        return redirect()->route('admin.order.show', $order)->with([
62
            'alert' => [
63
                'type' => 'alert-success',
64
                'message' => trans('The :resource was created!', ['resource' => trans('admin-lang.order')]),
65
            ],
66
        ]);
67
    }
68
69
    /**
70
     * Show the form for editing the specified resource.
71
     *
72
     * @param  \App\Models\Order  $order
73
     * @param  \App\Models\Item  $item
74
     * @return \Illuminate\Contracts\Support\Renderable
75
     */
76
    public function edit(Order $order, Item $item)
77
    {
78
        $item->load('denomination');
79
80
        return view('admin.item.edit', compact('item'));
81
    }
82
83
    /**
84
     * Update the specified resource in storage.
85
     *
86
     * @param  \App\Http\Requests\Item\UpdateRequest  $request
87
     * @param  \App\Models\Order  $order
88
     * @param  \App\Models\Item  $item
89
     * @return \Illuminate\Http\RedirectResponse
90
     *
91
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
92
     */
93
    public function update(UpdateRequest $request, Order $order, Item $item)
94
    {
95
        DB::transaction(function () use ($request, $order, $item) {
96
            $item
97
                ->fill($request->validated())
98
                ->setDenominationRelationValue($request->getDenominationFromRequest())
99
                ->save();
100
101
            if ($order->isMaximumTotalOrderExceeded()) {
102
                Session::flash('alert', [
103
                    'type' => 'alert-danger',
104
                    'message' => 'Maaf, total pesanan anda sudah mencapai batas maksimum',
105
                ]);
106
107
                abort(Response::HTTP_UNPROCESSABLE_ENTITY);
108
            }
109
        });
110
111
        return redirect()->route('admin.order.show', $order)->with([
112
            'alert' => [
113
                'type' => 'alert-success',
114
                'message' => trans('The :resource was updated!', ['resource' => trans('admin-lang.order')]),
115
            ],
116
        ]);
117
    }
118
119
    /**
120
     * Remove the specified resource from storage.
121
     *
122
     * @param  \App\Models\Order  $order
123
     * @param  \App\Models\Item  $item
124
     * @return \Illuminate\Http\RedirectResponse
125
     */
126
    public function destroy(Order $order, Item $item)
127
    {
128
        $item->delete();
129
130
        return redirect()->route('admin.order.show', $order)->with([
131
            'alert' => [
132
                'type' => 'alert-success',
133
                'message' => trans('The :resource was deleted!', ['resource' => trans(':resource Details', ['resource' => __('admin-lang.order')])]),
134
            ],
135
        ]);
136
    }
137
}
138