Passed
Push — master ( 054b32...1c77af )
by Ron
07:39 queued 12s
created

CustomerDetailsController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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
        //  Remove any forward slash (/) from the Customer name field
49 2
        $request->merge(['name' => str_replace('/', '-', $request->name)]);
50
51
        //  Check if the parent ID noted, has a parent of its own
52 2
        if($request->parent_id)
53
        {
54
            $parentsParent = Customers::find($request->parent_id);
55
56
            if($parentsParent->parent_id)
57
            {
58
                $request->parent_id = $parentsParent->parent_id;
59
            }
60
        }
61
62 2
        $custData = Customers::create([
63 2
            'cust_id'   => $request->cust_id,
64 2
            'parent_id' => $request->parent_id,
65 2
            'name'      => $request->name,
66 2
            'dba_name'  => $request->dba_name,
67 2
            'address'   => $request->address,
68 2
            'city'      => $request->city,
69 2
            'state'     => $request->selectedState,
70 2
            'zip'       => $request->zip,
71
        ]);
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 2
        return response()->json(['success' => true, 'cust_id' => $custData->cust_id ]);
77
    }
78
79
    //  Show the customer details
80 4
    public function details($id, $name)
81
    {
82 4
        $custDetails = Customers::find($id);
83
84 4
        if($custDetails === null)
85
        {
86 2
            Log::info('User - '.Auth::user()->user_id.' visited invalid customer ID - '.$id.' - '.$name);
87 2
            return view('customer.customerNotFound');
88
        }
89
90 2
        $custFav   = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $custDetails->cust_id)->first();
91 2
        $numTypes  = new PhoneNumberTypesCollection(PhoneNumberTypes::all());
92 2
        $fileTypes = new CustomerFileTypesCollection(CustomerFileTypes::all());
93 2
        $parent    = $custDetails->parent_id ? Customers::find($custDetails->parent_id)->name : null;
94
95 2
        return view('customer.details', [
96 2
            'cust_id'     => $custDetails->cust_id,
97 2
            'details'     => $custDetails->toJson(),
98 2
            'isFav'       => empty($custFav) ? 'false' : 'true',
99 2
            'numberTypes' => $numTypes,
100 2
            'fileTypes'   => $fileTypes,
101 2
            'parent'      => $parent,
102 2
            'linked'      => $custDetails->child_count || $parent ? 'true' : 'false',
103
        ]);
104
    }
105
106
    //  Update the customer details
107 6
    public function update(Request $request, $id)
108
    {
109 6
        $request->validate([
110 6
            'name'     => 'required',
111
            'dba_name' => 'nullable',
112
            'address'  => 'required',
113
            'city'     => 'required',
114
            'state'    => 'required',
115
            'zip'      => 'required|numeric'
116
        ]);
117
118 2
        Customers::find($id)->update([
119 2
            'name'     => $request->name,
120 2
            'dba_name' => $request->dba_name,
121 2
            'address'  => $request->address,
122 2
            'city'     => $request->city,
123 2
            'state'    => $request->state,
124 2
            'zip'      => $request->zip
125
        ]);
126
127 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
128 2
        Log::notice('Customer Details Updated for Customer ID-'.$id.' by User ID-'.Auth::user()->user_id);
129 2
        Log::debug('Customer Details Submitted - ', $request->toArray());
130 2
        return response()->json([
131 2
            '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;
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 4
    public function destroy($id)
165
    {
166 4
        $this->authorize('hasAccess', 'Deactivate Customer');
167
168
        //  Remove the tip from any users favorites
169 2
        CustomerFavs::where('cust_id', $id)->delete();
170
171
        //  Disable the tip
172 2
        Customers::destroy($id);
173
174 2
        Log::notice('User - '.Auth::user()->user_id.' has deactivated Customer ID '.$id);
175 2
    }
176
}
177