Passed
Pull Request — master (#112)
by Ron
17:16
created

CustomerEquipmentController::store()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 30
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 15
c 3
b 0
f 0
dl 0
loc 30
rs 9.4555
cc 5
nc 4
nop 1
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Events\Customers\Equipment\CustomerEquipmentAddedEvent;
6
use App\Events\Customers\Equipment\CustomerEquipmentDeletedEvent;
7
use App\Events\Customers\Equipment\CustomerEquipmentRestoredEvent;
8
use App\Events\Customers\Equipment\CustomerEquipmentForceDeletedEvent;
9
10
use App\Events\Customers\Equipment\CustomerEquipmentUpdatedEvent;
11
12
use App\Http\Controllers\Controller;
13
use App\Http\Requests\Customers\CustomerEquipmentRequest;
14
15
use App\Models\Customer;
16
use App\Models\DataField;
17
use App\Models\CustomerEquipment;
18
use App\Models\CustomerEquipmentData;
19
20
class CustomerEquipmentController extends Controller
21
{
22
    /**
23
     * Store new equipment for a customer
24
     */
25
    public function store(CustomerEquipmentRequest $request)
26
    {
27
        $cust    = Customer::findOrFail($request->cust_id);
28
        $cust_id = $cust->cust_id;
29
30
        //  If the equipment is shared, it must be assigned to the parent site
31
        if($request->shared && $cust->parent_id > 0)
32
        {
33
            $cust_id = $cust->parent_id;
34
        }
35
36
        //  Input the equipment type
37
        $newEquip = CustomerEquipment::create([
38
            'cust_id'  => $cust_id,
39
            'equip_id' => $request->equip_id,
40
            'shared'   => $request->shared,
41
        ]);
42
43
        //  Input the equipment data
44
        foreach($request->data as $field)
45
        {
46
            CustomerEquipmentData::create([
47
                'cust_equip_id' => $newEquip->cust_equip_id,
48
                'field_id'      => DataField::where('equip_id', $request->equip_id)->where('type_id', $field['type_id'])->first()->field_id, //  ???
49
                'value'         => isset($field['value']) ? $field['value'] : null,
50
            ]);
51
        }
52
53
        event(new CustomerEquipmentAddedEvent($cust, $newEquip));
54
        return redirect()->back()->with(['message' => 'Successfully Added Equipment', 'type' => 'success']);
55
    }
56
57
    /**
58
     * Update the equipment for the customer
59
     */
60
    public function update(CustomerEquipmentRequest $request, $id)
61
    {
62
        //  If the equipment is shared, it must be assigned to the parent site
63
        $cust = Customer::findOrFail($request->cust_id);
64
        if($request->shared)
65
        {
66
            if($cust->parent_id !== null)
67
            {
68
                $request->cust_id = $cust->parent_id;
69
            }
70
        }
71
72
        //  Update the Customer ID and Shared status of the equipment
73
        $equip = CustomerEquipment::find($id);
74
        $equip->update(['cust_id' => $request->cust_id, 'shared' => $request->shared]);
75
76
        //  Insert the data for the equipment into the database
77
        foreach($request->data as $field)
78
        {
79
            CustomerEquipmentData::where('id', $field['id'])->where('cust_equip_id', $id)->update([
80
                'value' => $field['value'],
81
            ]);
82
        }
83
84
        event(new CustomerEquipmentUpdatedEvent($cust, $equip));
85
        return redirect()->back()->with(['message' => 'Successfully Updated Equipment', 'type' => 'success']);
86
    }
87
88
    /**
89
     * Remove the specified resource from storage
90
     */
91
    public function destroy($id)
92
    {
93
        $equip = CustomerEquipment::find($id);
94
        $cust  = Customer::find($equip->cust_id);
95
        $this->authorize('delete', $equip);
96
        $equip->delete();
97
98
        event(new CustomerEquipmentDeletedEvent($cust, $equip));
99
        return back()->with([
100
            'message' => 'Equipment Deleted',
101
            'type'    => 'warning',
102
        ]);
103
    }
104
105
    /*
106
    *   Restore a piece of equipment that was deleted
107
    */
108
    public function restore($id)
109
    {
110
        $equip = CustomerEquipment::withTrashed()->where('cust_equip_id', $id)->first();
111
112
        $this->authorize('restore', $equip);
113
        $equip->restore();
114
115
        event(new CustomerEquipmentForceDeletedEvent(Customer::find($equip->cust_id), $equip));
116
        return back()->with([
117
            'message' => 'Equipment Restored',
118
            'type'    => 'success',
119
        ]);
120
    }
121
122
    /*
123
    *   Completely delete the equipment
124
    */
125
    public function forceDelete($id)
126
    {
127
        $equip = CustomerEquipment::withTrashed()->where('cust_equip_id', $id)->first();
128
        $this->authorize('forceDelete', $equip);
129
        $equip->forceDelete();
130
131
        event(new CustomerEquipmentRestoredEvent(Customer::find($equip->cust_id), $equip));
132
        return back()->with(['message' => 'Equipment permanently deleted', 'type' => 'danger']);
133
    }
134
}
135