Passed
Push — dev5 ( 3534c9...5191cd )
by Ron
06:25
created

CustomerController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 5
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 8
ccs 6
cts 6
cp 1
crap 1
rs 10
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 28
    public function __construct()
19
    {
20 28
        $this->middleware('auth');
21 28
    }
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 12
            $searchResults = new CustomersCollection(
49 12
                Customers::orderBy($request->sortField, $request->sortType)
50
                    //  Search the name, dba name, and cust id columns
51
                    ->where(function($query) use ($request)
52
                    {
53 12
                        $query->where('name', 'like', '%' . $request->name . '%')
54 12
                            ->orWhere('cust_id', 'like', '%' . $request->name . '%')
55 12
                            ->orWhere('dba_name', 'like', '%' . $request->name . '%');
56 12
                    })
57
                    //  Search the city column
58 12
                    ->where('city', 'like', '%' . $request->city . '%')
59
                    //  Include the customers systems
60 12
                    ->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 2
                            $query->where('sys_id', $request->system);
67 2
                        });
68 12
                    })
69 12
                    ->paginate($request->perPage)
70
            );
71
        }
72
        else
73
        {
74 4
            $searchResults = new CustomersCollection(Customers::orderBy($request->sortField, $request->sortType)->with('CustomerSystems.SystemTypes')->paginate($request->perPage));
75
        }
76
77 16
        return $searchResults;
78
    }
79
80
    //  Check to see if a customer ID already exists
81 4
    public function checkID($id)
82
    {
83 4
        $cust = Customers::find($id);
84
85 4
        if($cust === null)
86
        {
87 2
            Log::debug('Customer ID - '.$id.' is available to use');
88 2
            return response()->json(['dup' => false]);
89
        }
90
91
92 2
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
93 2
        Log::debug('Customer ID is in use by - '.$cust->name);
94 2
        return response()->json(['dup' => true, 'name' => $cust->name]);
95
    }
96
97
    //  Toggle whether or not the customer is listed as a user favorite
98
    public function toggleFav($action, $id)
99
    {
100
        switch($action)
101
        {
102
            case 'add':
103
                CustomerFavs::create([
104
                    'user_id' => Auth::user()->user_id,
105
                    'cust_id' => $id
106
                ]);
107
                break;
108
            case 'remove':
109
                $custFav = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $id)->first();
110
                $custFav->delete();
111
                break;
112
        }
113
114
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
115
        Log::debug('Customer Bookmark Updated.', [
116
            'user_id' => Auth::user()->user_id,
117
            'cust_id' => $id,
118
            'action'  => $action
119
        ]);
120
        return response()->json(['success' => true]);
121
    }
122
}
123