Passed
Push — dev6 ( 3fa4bc...200ba5 )
by Ron
18:44
created

LinkCustomerController   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
eloc 20
c 2
b 0
f 0
dl 0
loc 53
ccs 9
cts 9
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 12 2
A addParent() 0 17 2
A removeParent() 0 8 1
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Models\Customer;
6
use App\Events\CustomerLinkedEvent;
7
use App\Http\Controllers\Controller;
8
use App\Http\Requests\Customers\LinkCustomerRequest;
9
10
class LinkCustomerController extends Controller
11
{
12
    /**
13
     * Link or Unlink the customer to a parent customer
14
     */
15
    public function __invoke(LinkCustomerRequest $request)
16 3
    {
17
        if($request->add)
18 3
        {
19
            $msg = $this->addParent($request->cust_id, $request->parent_id);
20
        }
21 2
        else
22 2
        {
23
            $msg = $this->removeParent($request->cust_id);
24 1
        }
25
26
        return back()->with($msg);
27 2
    }
28 2
29
    /**
30 2
     * Add a link for multi-site customer
31
     */
32 2
    protected function addParent($cust, $parent)
33
    {
34
        //  Determine if the selected Parent ID has a parent ID of its own
35
        $p = Customer::findOrFail($parent);
36
        if($p->parent_id)
37
        {
38
            $parent = $p->parent_id;
39
        }
40
41
        Customer::find($cust)->update([
42
            'parent_id' => $parent,
43
        ]);
44
45
        event(new CustomerLinkedEvent($cust, true));
46
        return [
47
            'message' => 'Customer successfully linked',
48
            'type'    => 'success',
49
        ];
50
    }
51
52
    /**
53
     * Remove a multi-site link
54
     */
55
    protected function removeParent($cust)
56
    {
57
        Customer::findOrFail($cust)->update(['parent_id' => null]);
58
59
        event(new CustomerLinkedEvent($cust, false));
60
        return [
61
            'message' => 'Customer link removed',
62
            'type'    => 'warning',
63
        ];
64
    }
65
}
66