Passed
Push — master ( 3b9459...1d6d9a )
by Ron
11:07 queued 34s
created

CustomerContactsController   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 159
Duplicated Lines 0 %

Test Coverage

Coverage 76.14%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 84
c 1
b 0
f 0
dl 0
loc 159
rs 10
ccs 67
cts 88
cp 0.7614
wmc 24

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A edit() 0 30 4
A show() 0 21 2
A destroy() 0 10 1
B update() 0 40 8
B store() 0 38 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
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
27
28 4
        $request->validate([
29 4
            'cust_id' => 'required',
30
            'name'    => 'required'
31
        ]);
32
33
        //  Determine if the contact should be assigned under this site or the parent site
34 4
        $details = Customers::find($request->cust_id);
35 4
        if($details->parent_id && $request->shared == 'true')
36
        {
37 2
            $request->cust_id = $details->parent_id;
38
        }
39
40 4
        $cont = CustomerContacts::create([
41 4
            'cust_id' => $request->cust_id,
42 4
            'name'    => $request->name,
43 4
            'email'   => !empty($request->email) ? $request->email : null,
44 4
            'shared'  => $request->shared == 'true' ? 1 : 0,
45 4
        ])->cont_id;
46
47 4
        foreach($request->numbers['type'] as $key => $num)
48
        {
49 4
            if(!empty($request->numbers['number'][$key]))
50
            {
51 4
                CustomerContactPhones::create([
52 4
                    'cont_id'       => $cont,
53 4
                    'phone_type_id' => $request->numbers['type'][$key],
54 4
                    'phone_number'  => PhoneNumberTypes::cleanPhoneNumber($request->numbers['number'][$key]),
55 4
                    'extension'     => isset($request->numbers['ext'][$key]) ? $request->numbers['ext'][$key] : null
56
                ]);
57
            }
58
        }
59
60 4
        Log::info('New Customer Contact Created for Cust ID - '.$request->cust_id.'.  New 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 '.Auth::user()->full_name);
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.' by '.Auth::user()->full_name);
118
        return $vcard->download();
119
    }
120
121
    //  Update an existing Customer Contact
122 6
    public function update(Request $request, $id)
123
    {
124 6
        Log::debug('Route ' . Route::currentRouteName() . ' visited by ' . Auth::user()->full_name.'. Submitted Data - ', $request->toArray());
125
126 6
        $request->validate([
127 6
            'cust_id' => 'required',
128
            'name'    => 'required'
129
        ]);
130
131
        //  Update the primary contact information
132 6
        $details = Customers::find($request->cust_id);
133 6
        if ($details->parent_id && $request->shared == 'true') {
134 2
            $request->cust_id = $details->parent_id;
135
        }
136
137 6
        CustomerContacts::find($id)->update([
138 6
            'cust_id' => $request->cust_id,
139 6
            'name'    => $request->name,
140 6
            'email'   => isset($request->email) ? $request->email : null,
141 6
            'shared'  => $request->shared == 'true' ? 1 : 0,
142
        ]);
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'       => $id,
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
160 6
        Log::info('Customer Contact Updated for Cust ID - '.$request->cust_id.'.  Contact ID-'.$id);
161 6
        return response()->json(['success' => true]);
162
    }
163
164
    //  Delete an existing contact
165 2
    public function destroy($id)
166
    {
167 2
        $cont = CustomerContacts::find($id);
168
169 2
        Log::debug('Route '.Route::currentRouteName().' visited by '.Auth::user()->full_name);
170 2
        Log::info('Customer Contact deleted for Customer ID-'.$cont->cust_id.' by User ID-'.Auth::user()->full_name.'. Deleted Contact ID-'.$id);
171
172 2
        $cont->delete();
173
174 2
        return response()->json(['success' => true]);
175
    }
176
}
177