Passed
Push — dev6 ( 85d655...fe3508 )
by Ron
18:08
created

EquipmentController   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 97
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 42
c 1
b 0
f 0
dl 0
loc 97
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A update() 0 16 1
A index() 0 6 1
A edit() 0 10 2
A show() 0 8 1
A destroy() 0 10 1
A store() 0 13 1
1
<?php
2
3
namespace App\Http\Controllers\Equipment;
4
5
use App\Actions\OrderEquipDataTypes;
6
use App\Events\Equipment\EquipmentTypeCreatedEvent;
7
use App\Events\Equipment\EquipmentTypeDeletedEvent;
8
use App\Events\Equipment\EquipmentTypeUpdatedEvent;
9
use App\Http\Controllers\Controller;
10
use App\Http\Requests\Equipment\EquipmentTypeRequest;
11
use App\Models\CustomerEquipment;
12
use App\Models\DataFieldType;
13
use App\Models\EquipmentCategory;
14
use App\Models\EquipmentType;
15
use Illuminate\Http\Request;
16
use Inertia\Inertia;
17
18
class EquipmentController extends Controller
19
{
20
    /**
21
     * Index method will show all available categories and equipment types
22
     */
23
    public function index()
24
    {
25
        $this->authorize('create', EquipmentType::class);
26
27
        return Inertia::render('Equipment/Index', [
28
            'categories' => EquipmentCategory::with('EquipmentType')->get(),
29
        ]);
30
    }
31
    /**
32
     * Store a newly created Equipment Type
33
     */
34
    public function store(EquipmentTypeRequest $request)
35
    {
36
        $newEquip = EquipmentType::create([
37
            'cat_id' => EquipmentCategory::where('name', $request->category)->first()->cat_id,
38
            'name'   => $request->name,
39
        ]);
40
41
        (new OrderEquipDataTypes)->run($request->data_fields, $newEquip->equip_id);
42
43
        event(new EquipmentTypeCreatedEvent($newEquip));
44
        return redirect(route('equipment.index'))->with([
45
            'message' => 'New Equipment Created',
46
            'type'    => 'success',
47
        ]);
48
    }
49
50
    /**
51
     * Show the form for creating a new Equipment Type
52
     */
53
    public function show($id)
54
    {
55
        $this->authorize('create', EquipmentType::class);
56
57
        return Inertia::render('Equipment/Create', [
58
            'category'  => EquipmentCategory::find($id)->name,
59
            'cat_list'  => EquipmentCategory::all(),
60
            'data_list' => DataFieldType::all()->pluck('name'),
61
        ]);
62
    }
63
64
    /**
65
     * Show the form for editing the equipment Type
66
     */
67
    public function edit($id)
68
    {
69
        $equip = EquipmentType::with(['EquipmentCategory', 'DataFieldType'])->findOrFail($id);
70
        $this->authorize('update', $equip);
71
72
        return Inertia::render('Equipment/Edit', [
73
            'equipment' => $equip,
74
            'cat_list'  => EquipmentCategory::all(),
75
            'dataList'  => DataFieldType::all()->pluck('name'),
76
            'in_use'    => CustomerEquipment::where('equip_id', $id)->count() > 0 ? true : false,
77
        ]);
78
    }
79
80
    /**
81
     * Update the Equipment Type
82
     */
83
    public function update(EquipmentTypeRequest $request, $id)
84
    {
85
        $equip = EquipmentType::findOrFail($id);
86
        $equip->update([
87
            'cat_id' => EquipmentCategory::where('name', $request->category)->first()->cat_id,
88
            'name'   => $request->name,
89
        ]);
90
91
        $dataTypeObj = new OrderEquipDataTypes;
92
        $dataTypeObj->run($request->data_fields, $equip->equip_id);
93
        $dataTypeObj->delOptions($request->del_fields, $equip->equip_id);
94
95
        event(new EquipmentTypeUpdatedEvent($equip));
96
        return redirect(route('equipment.index'))->with([
97
            'message' => 'Equipment Updated',
98
            'type'    => 'success',
99
        ]);
100
    }
101
102
    /**
103
     * Remove the Equipment Type
104
     */
105
    public function destroy($id)
106
    {
107
        $equip = EquipmentType::findOrFail($id);
108
        $this->authorize('delete', $equip);
109
        $equip->delete();
110
111
        event(new EquipmentTypeDeletedEvent($equip));
112
        return redirect(route('equipment.index'))->with([
113
            'message' => 'Equipment Deleted',
114
            'type'    => 'danger',
115
        ]);
116
    }
117
}
118