Passed
Push — master ( 2a90e7...a622eb )
by Ron
02:27 queued 14s
created

SetCustomerEquipment::creatNewEquipment()   A

Complexity

Conditions 6
Paths 7

Size

Total Lines 36
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 6.0052

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 18
c 1
b 0
f 0
nc 7
nop 1
dl 0
loc 36
ccs 18
cts 19
cp 0.9474
crap 6.0052
rs 9.0444
1
<?php
2
3
namespace App\Domains\Customers;
4
5
use Illuminate\Support\Facades\Log;
6
use Illuminate\Support\Facades\Auth;
7
8
use App\Customers;
9
use App\CustomerSystems;
10
use App\CustomerSystemData;
11
12
use App\Http\Requests\CustomerNewEquipmentRequest;
13
use App\Http\Requests\CustomerEditEquipmentRequest;
14
15
class SetCustomerEquipment
16
{
17
    protected $custID;
18
19 10
    public function __construct($custID)
20
    {
21 10
        $this->custID = $custID;
22 10
    }
23
24
    //  Attach new equipment to the customer
25 4
    public function creatNewEquipment(CustomerNewEquipmentRequest $request)
26
    {
27 4
        $equipID = $this->validateEquipment($request->equip['sys_id']);
28 4
        if($equipID)
29
        {
30
            return false;
31
        }
32
33
        //  Determine if the equipment should go to the customer or their parent
34 4
        if($request->share)
35
        {
36 2
            $parent = Customers::find($this->custID)->parent_id;
37
38 2
            if($parent)
39
            {
40 2
                $this->custID = $parent;
41
            }
42
        }
43
44 4
        $newSys = CustomerSystems::create([
45 4
            'cust_id' => $this->custID,
46 4
            'sys_id' => $request->equip['sys_id'],
47 4
            'shared' => $request->share,
48
        ]);
49
50 4
        foreach($request->fields as $field)
51
        {
52 4
            CustomerSystemData::create([
53 4
                'cust_sys_id' => $newSys->cust_sys_id,
54 4
                'field_id'    => $field['field_id'],
55 4
                'value'       => isset($field['value']) ? $field['value'] : null,
56
            ]);
57
        }
58
59 4
        Log::notice('New equipment '.$request->equip['name'].' created for Customer ID '.$this->custID.' by '.Auth::user()->full_name);
60 4
        return true;
61
    }
62
63
    //  Update a customers exising equipment
64 4
    public function updateEquipment(CustomerEditEquipmentRequest $request)
65
    {
66
        //  Verify equipment is valid
67 4
        $equipID = $this->validateEquipment($request->equip['sys_id']); // ->cust_sys_id;
68 4
        if(!$equipID)
69
        {
70 2
            return false;
71
        }
72 2
        $this->updateEquipmentFields($equipID->cust_sys_id, $request->fields);
73
74 2
        Log::info('Customer Equipment Updated for Customer ID - '.$this->custID.' by '.Auth::user()->full_name.'.  Equipment Data - ', array($request->equip));
75 2
        return true;
76
    }
77
78
    //  Delete equipmetn that is assigned to customer
79 2
    public function deleteEquipment($equipID)
80
    {
81
        //  Get the data to make sure this is not shared
82 2
        $equip = CustomerSystems::find($equipID);
83 2
        if($equip->shared && $this->custID != $equip->cust_id)
84
        {
85
            return false;
86
        }
87
88 2
        $equip->delete();
89
90 2
        Log::notice('Customer Equipment ID '.$equipID.' deleted by '.Auth::user()->full_name);
91 2
        return true;
92
    }
93
94
    //  Verify the equipment belongs to the customer or parent customer
95 8
    protected function validateEquipment($sysID)
96
    {
97
        //  Check local customer first
98 8
        $valid = CustomerSystems::where('cust_id', $this->custID)->where('sys_id', $sysID)->first();
99 8
        Log::debug('valid data - ', array($valid));
100
101 8
        if(!$valid)
102
        {
103 6
            $parent = Customers::find($this->custID);
104 6
            if($parent)
105
            {
106 6
                $valid = CustomerSystems::where('cust_id', $parent->parent_id)->where('sys_id', $sysID)->first();
107
            }
108
        }
109
110 8
        Log::debug('new valid data - ', array($valid));
111 8
        return $valid;
112
    }
113
114
    //  Update the equipment data
115 2
    protected function updateEquipmentFields($equipID, $newData)
116
    {
117 2
        $curData = CustomerSystemData::where('cust_sys_id', $equipID)->get();
118 2
        $newData = collect($newData);
119
120 2
        foreach($curData as $data)
121
        {
122 2
            CustomerSystemData::find($data->id)->update([
123 2
                'value' => $newData->where('field_id', $data->field_id)->first()['value'],
124
            ]);
125
        }
126 2
    }
127
}
128