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

OrderStatusController   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 129
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 15
eloc 57
c 1
b 0
f 0
dl 0
loc 129
ccs 0
cts 55
cp 0
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A destroy() 0 18 3
A __construct() 0 14 4
A create() 0 29 5
A store() 0 22 3
1
<?php
2
3
namespace App\Http\Controllers\Admin;
4
5
use App\Enum\OrderStatus as EnumOrderStatus;
6
use App\Events\OrderStatusCreated;
7
use App\Http\Controllers\Controller;
8
use App\Http\Requests\OrderStatus\StoreScheduledRequest;
9
use App\Models\Order;
10
use App\Models\OrderStatus as ModelsOrderStatus;
11
use Illuminate\Http\Request;
12
use Illuminate\Http\Response;
13
use Illuminate\Support\Facades\Auth;
14
use Illuminate\Support\Facades\Event;
15
use Illuminate\Support\Facades\Session;
16
17
class OrderStatusController extends Controller
18
{
19
    /**
20
     * Create a new instance class.
21
     *
22
     * @param  \Illuminate\Http\Request  $request
23
     * @return void
24
     *
25
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
26
     */
27
    public function __construct(Request $request)
28
    {
29
        if ($enumOrderStatus = $request->route('enumOrderStatus')) {
30
            /** @var \App\Enum\OrderStatus $enumOrderStatus */
31
            $enumOrderStatus = EnumOrderStatus::from($enumOrderStatus);
32
33
            if (EnumOrderStatus::on_progress()->equals($enumOrderStatus) ||
34
                EnumOrderStatus::draft()->equals($enumOrderStatus)) {
35
                Session::flash('alert', [
36
                    'type' => 'alert-danger',
37
                    'message' => 'Status pesanan tidak valid',
38
                ]);
39
40
                abort(Response::HTTP_UNPROCESSABLE_ENTITY);
41
            }
42
        }
43
    }
44
45
    /**
46
     * Show the form for creating a new resource.
47
     *
48
     * @param  \Illuminate\Http\Request  $request
49
     * @param  \App\Models\Order  $order
50
     * @param  \App\Enum\OrderStatus  $enumOrderStatus
51
     * @return \Illuminate\Contracts\Support\Renderable
52
     *
53
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
54
     */
55
    public function create(Request $request, Order $order, EnumOrderStatus $enumOrderStatus)
56
    {
57
        switch ($enumOrderStatus) {
58
            case EnumOrderStatus::scheduled():
59
                $icon = 'fa-calendar-plus';
60
                $title = trans('Create :name', ['name' => __('Schedule Date')]);
61
                break;
62
63
            case EnumOrderStatus::rescheduled():
64
                $icon = 'fa-calendar-week';
65
                $title = trans('Create :name', ['name' => __('Reschedule Date')]);
66
                break;
67
68
            case EnumOrderStatus::canceled():
69
                $icon = 'fa-calendar-times';
70
                $title = trans('Cancel Order');
71
                break;
72
73
            case EnumOrderStatus::finished():
74
                $icon = 'fa-calendar-check';
75
                $title = trans('Finish Order');
76
                break;
77
        }
78
79
        $url = route('admin.order.status.create', compact('order', 'enumOrderStatus'));
80
81
        return view('admin.order_status.create', compact(
82
            'order', 'enumOrderStatus',
83
            'url', 'icon', 'title'
84
        ));
85
    }
86
87
    /**
88
     * Store a newly created resource in storage.
89
     *
90
     * @param  \App\Http\Requests\OrderStatus\StoreScheduledRequest  $request
91
     * @param  \App\Models\Order  $order
92
     * @param  \App\Enum\OrderStatus  $enumOrderStatus
93
     * @return \Illuminate\Http\RedirectResponse
94
     */
95
    public function store(StoreScheduledRequest $request, Order $order, EnumOrderStatus $enumOrderStatus)
96
    {
97
        if (EnumOrderStatus::scheduled()->equals($enumOrderStatus) ||
98
            EnumOrderStatus::rescheduled()->equals($enumOrderStatus)) {
99
            $order
100
                ->setAttribute('schedule_date', $request->getScheduleDate())
101
                ->setBranchRelationValue($request->getBranchFromRequest())
102
                ->setUserRelationValue(Auth::user())
0 ignored issues
show
Bug introduced by
It seems like Illuminate\Support\Facades\Auth::user() can also be of type null; however, parameter $user of App\Models\Order::setUserRelationValue() does only seem to accept App\Models\User, 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

102
                ->setUserRelationValue(/** @scrutinizer ignore-type */ Auth::user())
Loading history...
103
                ->save();
104
        }
105
106
        $order->statuses()->save(ModelsOrderStatus::make([
0 ignored issues
show
Bug introduced by
It seems like App\Models\OrderStatus::...t\Facades\Auth::user()) can also be of type Illuminate\Database\Eloquent\Builder; however, parameter $model of Illuminate\Database\Eloq...ns\HasOneOrMany::save() does only seem to accept Illuminate\Database\Eloquent\Model, 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

106
        $order->statuses()->save(/** @scrutinizer ignore-type */ ModelsOrderStatus::make([
Loading history...
107
            'status' => $enumOrderStatus,
108
            'note' => $request->input('order_status.note'),
109
        ])->setIssuerableRelationValue(Auth::user()));
110
111
        Event::dispatch(new OrderStatusCreated($order));
112
113
        return redirect()->route('admin.order.show', $order)->with([
114
            'alert' => [
115
                'type' => 'alert-success',
116
                'message' => trans('The :resource was updated!', ['resource' => trans('admin-lang.order')]),
117
            ],
118
        ]);
119
    }
120
121
    /**
122
     * Remove the specified resource from storage.
123
     *
124
     * @param  \App\Models\Order  $order
125
     * @param  \App\Models\OrderStatus  $status
126
     * @return \Illuminate\Contracts\Support\Renderable
127
     */
128
    public function destroy(Order $order, ModelsOrderStatus $status)
129
    {
130
        if (EnumOrderStatus::on_progress()->equals($status->status) ||
131
            EnumOrderStatus::draft()->equals($status->status)) {
132
            Session::flash('alert', [
133
                'type' => 'alert-danger',
134
                'message' => 'Status pesanan tidak bisa dihapus',
135
            ]);
136
137
            abort(Response::HTTP_UNPROCESSABLE_ENTITY);
138
        }
139
140
        $status->delete();
141
142
        return redirect()->route('admin.order.show', $order)->with([
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route...ns('Order Status')))))) returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Contracts\Support\Renderable.
Loading history...
143
            'alert' => [
144
                'type' => 'alert-success',
145
                'message' => trans('The :resource was deleted!', ['resource' => trans('Order Status')]),
146
            ],
147
        ]);
148
    }
149
}
150