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

LinkCustomerController::__invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 5
c 2
b 0
f 0
dl 0
loc 12
ccs 5
cts 5
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
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