Passed
Push — dev5 ( 0d97ef...978ab8 )
by Ron
08:29
created

CustomerContactsController   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 160
Duplicated Lines 0 %

Test Coverage

Coverage 76.92%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 87
dl 0
loc 160
ccs 70
cts 91
cp 0.7692
rs 10
c 1
b 0
f 0
wmc 24

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
B store() 0 38 8
A edit() 0 30 4
A destroy() 0 10 1
A show() 0 21 2
B update() 0 41 8
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Customers;
6
use App\PhoneNumberTypes;
7
use App\CustomerContacts;
8
use Illuminate\Http\Request;
9
use App\CustomerContactPhones;
10
use JeroenDesloovere\VCard\VCard;
11
use Illuminate\Support\Facades\Log;
12
use Illuminate\Support\Facades\Auth;
13
use App\Http\Controllers\Controller;
14
use Illuminate\Support\Facades\Route;
15
16
class CustomerContactsController extends Controller
17
{
18 26
    public function __construct()
19
    {
20 26
        $this->middleware('auth');
21 26
    }
22
23
    //  Store a new customer contact
24 4
    public function store(Request $request)
25
    {
26 4
        $request->validate([
27 4
            'cust_id' => 'required',
28
            'name'    => 'required'
29
        ]);
30
31
        //  Determine if the contact should be assigned under this site or the parent site
32 4
        $details = Customers::find($request->cust_id);
33 4
        if($details->parent_id && $request->shared == 'true')
34
        {
35 2
            $request->cust_id = $details->parent_id;
36
        }
37
38 4
        $cont = CustomerContacts::create([
39 4
            'cust_id' => $request->cust_id,
40 4
            'name'    => $request->name,
41 4
            'email'   => !empty($request->email) ? $request->email : null,
42 4
            'shared'  => $request->shared == 'true' ? 1 : 0,
43 4
        ])->cont_id;
44
45 4
        foreach($request->numbers['type'] as $key => $num)
46
        {
47 4
            if(!empty($request->numbers['number'][$key]))
48
            {
49 4
                CustomerContactPhones::create([
50 4
                    'cont_id'       => $cont,
51 4
                    'phone_type_id' => $request->numbers['type'][$key],
52 4
                    'phone_number'  => PhoneNumberTypes::cleanPhoneNumber($request->numbers['number'][$key]),
53 4
                    'extension'     => isset($request->numbers['ext'][$key]) ? $request->numbers['ext'][$key] : null
54
                ]);
55
            }
56
        }
57
58 4
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
59 4
        Log::debug('Submitted Data - ', $request->toArray());
60 4
        Log::info('New Customer Contact Created for Cust ID - '.$request->cust_id.'.  Contact ID-'.$cont);
61 4
        return response()->json(['success' => true]);
62
    }
63
64
    //  Get the contacts for a customer
65 4
    public function show($id)
66
    {
67 4
        $contacts = CustomerContacts::where('cust_id', $id)
68 4
            ->with('CustomerContactPhones')
69 4
            ->get();
70
71
        //  Determine if there is a parent site with shared contacts
72 4
        $parent = Customers::find($id)->parent_id;
73 4
        if ($parent)
74
        {
75 2
            $parentList = CustomerContacts::where('cust_id', $parent)
76 2
                ->where('shared', 1)
77 2
                ->with('CustomerContactPhones')
78 2
                ->get();
79
80 2
            $contacts = $contacts->merge($parentList);
81
        }
82
83 4
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
84 4
        Log::debug('Fetched Data - ', $contacts->toArray());
85 4
        return $contacts;
86
    }
87
88
    //  Edit function will actually download the contact information in V-Card format
89
    public function edit($id)
90
    {
91
        $contact  = CustomerContacts::find($id);
92
        $numbers  = CustomerContactPhones::where('cont_id', $id)->get();
93
        $custData = Customers::find($contact->cust_id);
94
95
        $contactName = explode(' ', $contact->name);
96
        $firstName   = $contactName[0];
97
        $lastName    = isset($contactName[1]) ? $contactName[1] : '';
98
        $additional  = '';
99
        $prefix      = '';
100
        $suffix      = '';
101
102
        $vcard = new VCard();
103
        $vcard->addName($lastName, $firstName, $additional, $prefix, $suffix);
104
        $vcard->addCompany($custData->name);
105
        $vcard->addEmail($contact->email);
106
        $vcard->addAddress(null, null, $custData->address, $custData->city, $custData->state, $custData->zip, null);
107
108
        if(!empty($numbers))
109
        {
110
            foreach($numbers as $phone)
111
            {
112
                $vcard->addPhoneNumber($phone->phone_number, $phone->description);
113
            }
114
        }
115
116
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
117
        Log::info('Customer Contact Downloaded - Contact ID-'.$id);
118
        return $vcard->download();
119
    }
120
121
    //  Update an existing Customer Contact
122 6
    public function update(Request $request, $id)
123
    {
124 6
        $request->validate([
125 6
            'cust_id' => 'required',
126
            'name'    => 'required'
127
        ]);
128
129
        //  Update the primary contact information
130 6
        $details = Customers::find($request->cust_id);
131 6
        if ($details->parent_id && $request->shared == 'true') {
132 2
            $request->cust_id = $details->parent_id;
133
        }
134
135 6
        CustomerContacts::find($id)->update([
136 6
            'cust_id' => $request->cust_id,
137 6
            'name'    => $request->name,
138 6
            'email'   => isset($request->email) ? $request->email : null,
139 6
            'shared'  => $request->shared == 'true' ? 1 : 0,
140
        ]);
141
142 6
        $contID = $id;
143
144
        //  Clear all contact phone numbers and re-enter them
145 6
        CustomerContactPhones::where('cont_id', $id)->delete();
146 6
        foreach($request->numbers['type'] as $key => $num)
147
        {
148 6
            if(!empty($request->numbers['number'][$key]))
149
            {
150 6
                CustomerContactPhones::create([
151 6
                    'cont_id'       => $contID,
152 6
                    'phone_type_id' => $request->numbers['type'][$key],
153 6
                    'phone_number'  => PhoneNumberTypes::cleanPhoneNumber($request->numbers['number'][$key]),
154 6
                    'extension'     => isset($request->numbers['ext'][$key]) ? $request->numbers['ext'][$key] : null
155
                ]);
156
            }
157
        }
158
159 6
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
160 6
        Log::debug('Submitted Data - ', $request->toArray());
161 6
        Log::info('Customer Contact Updated for Cust ID - '.$request->cust_id.'.  Contact ID-'.$contID);
162 6
        return response()->json(['success' => true]);
163
    }
164
165
    //  Delete an existing contact
166 2
    public function destroy($id)
167
    {
168 2
        $cont = CustomerContacts::find($id);
169
170 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
171 2
        Log::info('Customer Contact deleted for Customer ID-'.$cont->cust_id.' by User ID-'.Auth::user()->user_id.'. Deleted Contact ID-'.$id);
172
173 2
        $cont->delete();
174
175 2
        return response()->json(['success' => true]);
176
    }
177
}
178