Test Failed
Push — dev5 ( 7acea7...d3ea14 )
by Ron
07:30
created

CustomerDetailsController::linkParent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 9
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 19
rs 9.9666
ccs 0
cts 0
cp 0
crap 6
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Customers;
6
use App\CustomerFavs;
7
use App\PhoneNumberTypes;
8
use App\CustomerFileTypes;
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Facades\Log;
11
use Illuminate\Support\Facades\Auth;
12
use App\Http\Controllers\Controller;
13
use Illuminate\Support\Facades\Route;
14
use App\Http\Resources\PhoneNumberTypesCollection;
15
use App\Http\Resources\CustomerFileTypesCollection;
16
17
class CustomerDetailsController extends Controller
18
{
19 34
    public function __construct()
20
    {
21 34
        $this->middleware('auth');
22 34
    }
23
24
    //  New Customer Form
25 4
    public function create()
26
    {
27 4
        $this->authorize('hasAccess', 'Add Customer');
28
29 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
30 2
        return view('customer.newCustomer');
31
    }
32
33
    //  Submit the new customer form
34 6
    public function store(Request $request)
35
    {
36 6
        $this->authorize('hasAccess', 'Add Customer');
37
38 4
        $request->validate([
39 4
            'cust_id'   => 'nullable|numeric|unique:customers,cust_id',
40
            'parent_id' => 'nullable|numeric|exists:customers,cust_id',
41
            'name'      => 'required',
42
            'dba_name'  => 'nullable',
43
            'address'   => 'required',
44
            'city'      => 'required',
45
            'zip'       => 'required|numeric'
46
        ]);
47
48 2
        //  Remove any forward slash (/) from the Customer name field
49
        $request->merge(['name' => str_replace('/', '-', $request->name)]);
50 2
51 2
        //  Check if the parent ID noted, has a parent of its own
52 2
        if($request->parent_id)
53 2
        {
54 2
            $parentsParent = Customers::find($request->parent_id);
55 2
56 2
            if($parentsParent->parent_id)
57 2
            {
58
                $request->parent_id = $parentsParent->parent_id;
1 ignored issue
show
Bug introduced by
The property parent_id does not seem to exist on Illuminate\Http\Request.
Loading history...
59
            }
60 2
        }
61 2
62
        $custData = Customers::create([
63 2
            'cust_id'   => $request->cust_id,
64
            'parent_id' => $request->parent_id,
65
            'name'      => $request->name,
66
            'dba_name'  => $request->dba_name,
67 4
            'address'   => $request->address,
68
            'city'      => $request->city,
69 4
            'state'     => $request->selectedState,
70
            'zip'       => $request->zip,
71 4
        ]);
72
73 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
74 2
        Log::notice('New Customer ID-'.$request->custID.' created by User ID-'.Auth::user()->user_id);
75
76
        return response()->json(['success' => true, 'cust_id' => $custData->cust_id ]);
77 2
    }
78 2
79 2
    //  Show the customer details
80
    public function details($id, $name)
81 2
    {
82 2
        $custDetails = Customers::find($id);
83 2
84 2
        if($custDetails === null)
85 2
        {
86 2
            Log::info('User - '.Auth::user()->user_id.' visited invalid customer ID - '.$id.' - '.$name);
87
            return view('customer.customerNotFound');
88
        }
89
90
        $custFav   = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $custDetails->cust_id)->first();
91 6
        $numTypes  = new PhoneNumberTypesCollection(PhoneNumberTypes::all());
92
        $fileTypes = new CustomerFileTypesCollection(CustomerFileTypes::all());
93 6
        $parent    = $custDetails->parent_id ? Customers::find($custDetails->parent_id)->name : null;
94 6
95
        return view('customer.details', [
96
            'cust_id'     => $custDetails->cust_id,
97
            'details'     => $custDetails->toJson(),
98
            'isFav'       => empty($custFav) ? 'false' : 'true',
99
            'numberTypes' => $numTypes,
100
            'fileTypes'   => $fileTypes,
101
            'parent'      => $parent,
102 2
            'linked'      => $custDetails->child_count || $parent ? 'true' : 'false',
103 2
        ]);
104 2
    }
105 2
106 2
    //  Update the customer details
107 2
    public function update(Request $request, $id)
108 2
    {
109
        $request->validate([
110
            'name'     => 'required',
111 2
            'dba_name' => 'nullable',
112 2
            'address'  => 'required',
113 2
            'city'     => 'required',
114 2
            'state'    => 'required',
115 2
            'zip'      => 'required|numeric'
116
        ]);
117
118
        Customers::find($id)->update([
119
            'name'     => $request->name,
120 4
            'dba_name' => $request->dba_name,
121
            'address'  => $request->address,
122 4
            'city'     => $request->city,
123 2
            'state'    => $request->state,
124
            'zip'      => $request->zip
125 2
        ]);
126 2
127
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
128
        Log::notice('Customer Details Updated for Customer ID-'.$id.' by User ID-'.Auth::user()->user_id);
129
        Log::debug('Customer Details Submitted - ', $request->toArray());
130
        return response()->json([
131
            'success' => true
132
        ]);
133
    }
134
135
    //  Link a site to a parent site
136
    public function linkParent(Request $request)
137
    {
138
        $request->validate([
139
            'parent_id' => 'required|numeric|exists:customers,cust_id',
140
            'cust_id'   => 'required|numeric|exists:customers,cust_id'
141
        ]);
142
143
        $parentsParent = Customers::find($request->parent_id);
144
145
        if ($parentsParent->parent_id)
146
        {
147
            $request->parent_id = $parentsParent->parent_id;
1 ignored issue
show
Bug introduced by
The property parent_id does not seem to exist on Illuminate\Http\Request.
Loading history...
148
        }
149
150
        Customers::find($request->cust_id)->update([
151
            'parent_id' => $request->parent_id,
152
        ]);
153
154
        return response()->json(['success' => true]);
155
    }
156
157
158
    public function removeParent($id)
159
    {
160
        Customers::find($id)->update(['parent_id' => null]);
161
    }
162
163
    //  Deactivate a customer - note this will not remove it from the database, but make it inaccessable
164
    public function destroy($id)
165
    {
166
        $this->authorize('hasAccess', 'Deactivate Customer');
167
        Customers::destroy($id);
168
169
        Log::notice('User - '.Auth::user()->user_id.' has deactivated Customer ID '.$id);
170
    }
171
}
172