Passed
Push — dev5 ( e66ef8...5a922b )
by Ron
05:53
created

CustomerController::toggleFav()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 16
nc 3
nop 2
dl 0
loc 23
ccs 17
cts 17
cp 1
crap 3
rs 9.7333
c 0
b 0
f 0
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 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 4
    public function toggleFav($action, $id)
99
    {
100 4
        switch($action)
101
        {
102 4
            case 'add':
103 4
                CustomerFavs::create([
104 4
                    'user_id' => Auth::user()->user_id,
105 4
                    'cust_id' => $id
106
                ]);
107 4
                break;
108 2
            case 'remove':
109 2
                $custFav = CustomerFavs::where('user_id', Auth::user()->user_id)->where('cust_id', $id)->first();
110 2
                $custFav->delete();
111 2
                break;
112
        }
113
114 4
        Log::debug('Route '.Route::currentRouteName().' visited by User ID-'.Auth::user()->user_id);
115 4
        Log::debug('Customer Bookmark Updated.', [
116 4
            'user_id' => Auth::user()->user_id,
117 4
            'cust_id' => $id,
118 4
            'action'  => $action
119
        ]);
120 4
        return response()->json(['success' => true]);
121
    }
122
}
123