Passed
Push — dev5 ( 92f243...3534c9 )
by Ron
05:48
created

CustomerController   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Test Coverage

Coverage 49.06%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 51
c 1
b 0
f 0
dl 0
loc 117
ccs 26
cts 53
cp 0.4906
rs 10
wmc 11

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A toggleFav() 0 23 3
A checkID() 0 14 2
A search() 0 42 4
A index() 0 8 1
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Customers;
6
use App\SystemTypes;
7
use App\CustomerFavs;
8
use Illuminate\Http\Request;
9
use Illuminate\Support\Facades\Log;
10
use Illuminate\Support\Facades\Auth;
11
use App\Http\Controllers\Controller;
12
use Illuminate\Support\Facades\Route;
13
use App\Http\Resources\CustomersCollection;
14
use App\Http\Resources\SystemTypesCollection;
15
16
class CustomerController extends Controller
17
{
18 22
    public function __construct()
19
    {
20 22
        $this->middleware('auth');
21 22
    }
22
23
    //  Landing page to search for customer
24 2
    public function index()
25
    {
26 2
        $systems = new SystemTypesCollection(SystemTypes::orderBy('cat_id', 'ASC')->orderBy('name', 'ASC')->get());
27
28 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
29 2
        return view('customer.index', [
30 2
            'sysTypes' => $systems,
31 2
            'allowCreate' => $this->authorize('hasAccess', 'add_customer')
32
        ]);
33
    }
34
35
    //  Search for a customer
36 16
    public function search(Request $request)
37
    {
38 16
        $request->validate([
39 16
            'sortField' => 'required',
40
            'sortType'  => 'required',
41
            'perPage'   => 'required'
42
        ]);
43
44 16
        Log::debug('Request Data - ', $request->toArray());
45
46 16
        if(isset($request->name) || isset($request->city) || isset($request->system))
47
        {
48 10
            $searchResults = new CustomersCollection(
49 10
                Customers::orderBy($request->sortField, $request->sortType)
50
                    //  Search the name, dba name, and cust id columns
51
                    ->where(function($query) use ($request)
52
                    {
53 10
                        $query->where('name', 'like', '%' . $request->name . '%')
54 10
                            ->orWhere('cust_id', 'like', '%' . $request->name . '%')
55 10
                            ->orWhere('dba_name', 'like', '%' . $request->name . '%');
56 10
                    })
57
                    //  Search the city column
58 10
                    ->where('city', 'like', '%' . $request->city . '%')
59
                    //  Include the customers systems
60 10
                    ->with('CustomerSystems.SystemTypes')
61
                    //  If the system field is present - search for system type
62
                    ->when($request->system, function($query) use ($request)
63
                    {
64
                        $query->whereHas('CustomerSystems.SystemTypes', function($query) use ($request)
65
                        {
66
                            $query->where('sys_id', $request->system);
67
                        });
68 10
                    })
69 10
                    ->paginate($request->perPage)
70
            );
71
        }
72
        else
73
        {
74 6
            $searchResults = new CustomersCollection(Customers::orderBy($request->sortField, $request->sortType)->with('CustomerSystems.SystemTypes')->paginate($request->perPage));
75
        }
76
77 16
        return $searchResults;
78
    }
79
80
81
82
83
84
85
86
87
88
89
90
91
92
        //  Check to see if a customer ID already exists
93
    public function checkID($id)
94
    {
95
        $cust = Customers::find($id);
96
97
        if($cust === null)
98
        {
99
            Log::debug('Customer ID - '.$id.' is available to use');
100
            return response()->json(['dup' => false]);
101
        }
102
103
104
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
105
        Log::debug('Customer ID is in use by - '.$cust->name);
106
        return response()->json(['dup' => true, 'name' => $cust->name]);
107
    }
108
109
    //  Toggle whether or not the customer is listed as a user favorite
110
    public function toggleFav($action, $id)
111
    {
112
        switch($action)
113
        {
114
            case 'add':
115
                CustomerFavs::create([
116
                    'user_id' => Auth::user()->user_id,
117
                    'cust_id' => $id
118
                ]);
119
                break;
120
            case 'remove':
121
                $custFav = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $id)->first();
122
                $custFav->delete();
123
                break;
124
        }
125
126
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
127
        Log::debug('Customer Bookmark Updated.', [
128
            'user_id' => Auth::user()->user_id,
129
            'cust_id' => $id,
130
            'action'  => $action
131
        ]);
132
        return response()->json(['success' => true]);
133
    }
134
}
135