Passed
Push — dev5 ( 1c738e...7a9344 )
by Ron
06:10
created

CustomerContactsController   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 133
Duplicated Lines 0 %

Test Coverage

Coverage 72%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 71
dl 0
loc 133
ccs 54
cts 75
cp 0.72
rs 10
c 1
b 0
f 0
wmc 17

6 Methods

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