Passed
Pull Request — master (#77)
by Ron
41:51 queued 13:39
created

CustomerController   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 50
dl 0
loc 103
ccs 52
cts 52
cp 1
rs 10
c 1
b 0
f 0
wmc 11

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A index() 0 7 1
A search() 0 42 4
A toggleFav() 0 23 3
A checkID() 0 13 2
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 34
    public function __construct()
19
    {
20 34
        $this->middleware('auth');
21 34
    }
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
        ]);
32
    }
33
34
    //  Search for a customer
35 16
    public function search(Request $request)
36
    {
37 16
        $request->validate([
38 16
            'sortField' => 'required',
39
            'sortType'  => 'required',
40
            'perPage'   => 'required'
41
        ]);
42
43 16
        Log::debug('Request Data - ', $request->toArray());
44
45 16
        if(isset($request->name) || isset($request->city) || isset($request->system))
46
        {
47 12
            $searchResults = new CustomersCollection(
48 12
                Customers::orderBy($request->sortField, $request->sortType)
49
                    //  Search the name, dba name, and cust id columns
50
                    ->where(function($query) use ($request)
51
                    {
52 12
                        $query->where('name', 'like', '%' . $request->name . '%')
53 12
                            ->orWhere('cust_id', 'like', '%' . $request->name . '%')
54 12
                            ->orWhere('dba_name', 'like', '%' . $request->name . '%');
55 12
                    })
56
                    //  Search the city column
57 12
                    ->where('city', 'like', '%' . $request->city . '%')
58
                    //  Include the customers systems
59 12
                    ->with('CustomerSystems.SystemTypes')
60
                    //  If the system field is present - search for system type
61
                    ->when($request->system, function($query) use ($request)
62
                    {
63
                        $query->whereHas('CustomerSystems.SystemTypes', function($query) use ($request)
64
                        {
65 2
                            $query->where('sys_id', $request->system);
66 2
                        });
67 12
                    })
68 12
                    ->paginate($request->perPage)
69
            );
70
        }
71
        else
72
        {
73 4
            $searchResults = new CustomersCollection(Customers::orderBy($request->sortField, $request->sortType)->with('CustomerSystems.SystemTypes')->paginate($request->perPage));
74
        }
75
76 16
        return $searchResults;
77
    }
78
79
    //  Check to see if a customer ID already exists
80 4
    public function checkID($id)
81
    {
82 4
        $cust = Customers::find($id);
83
84 4
        if($cust === null)
85
        {
86 2
            Log::debug('Customer ID - '.$id.' is available to use');
87 2
            return response()->json(['dup' => false]);
88
        }
89
90 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
91 2
        Log::debug('Customer ID is in use by - '.$cust->name);
92 2
        return response()->json(['dup' => true, 'name' => $cust->name]);
93
    }
94
95
    //  Toggle whether or not the customer is listed as a user favorite
96 4
    public function toggleFav($action, $id)
97
    {
98 4
        switch($action)
99
        {
100 4
            case 'add':
101 4
                CustomerFavs::create([
102 4
                    'user_id' => Auth::user()->user_id,
103 4
                    'cust_id' => $id
104
                ]);
105 4
                break;
106 2
            case 'remove':
107 2
                $custFav = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $id)->first();
108 2
                $custFav->delete();
109 2
                break;
110
        }
111
112 4
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
113 4
        Log::debug('Customer Bookmark Updated.', [
114 4
            'user_id' => Auth::user()->user_id,
115 4
            'cust_id' => $id,
116 4
            'action'  => $action
117
        ]);
118 4
        return response()->json(['success' => true]);
119
    }
120
}
121