LinkCustomerController::__invoke()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 5
c 2
b 0
f 0
dl 0
loc 12
rs 10
cc 2
nc 2
nop 1
1
<?php
2
3
namespace App\Http\Controllers\Customers;
4
5
use App\Models\Customer;
6
use App\Events\Customers\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
    {
17
        if($request->add)
18
        {
19
            $msg = $this->addParent($request->cust_id, $request->parent_id);
20
        }
21
        else
22
        {
23
            $msg = $this->removeParent($request->cust_id);
24
        }
25
26
        return back()->with($msg);
27
    }
28
29
    /**
30
     * Add a link for multi-site customer
31
     */
32
    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