Passed
Push — master ( 4a884d...c9d1fc )
by Jeff
12:14
created

CustomerAddressController::edit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 10
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 2
1
<?php
2
3
namespace App\Http\Controllers\Front;
4
5
use App\Shop\Addresses\Repositories\AddressRepository;
6
use App\Shop\Addresses\Repositories\Interfaces\AddressRepositoryInterface;
7
use App\Shop\Addresses\Requests\CreateAddressRequest;
8
use App\Shop\Addresses\Requests\UpdateAddressRequest;
9
use App\Shop\Cities\Repositories\Interfaces\CityRepositoryInterface;
10
use App\Shop\Countries\Repositories\Interfaces\CountryRepositoryInterface;
11
use App\Shop\Customers\Repositories\Interfaces\CustomerRepositoryInterface;
12
use App\Shop\Provinces\Repositories\Interfaces\ProvinceRepositoryInterface;
13
use App\Http\Controllers\Controller;
14
15
class CustomerAddressController extends Controller
16
{
17
    /**
18
     * @var AddressRepositoryInterface
19
     */
20
    private $addressRepo;
21
22
    /**
23
     * @var CustomerRepositoryInterface
24
     */
25
    private $customerRepo;
26
27
    /**
28
     * @var CountryRepositoryInterface
29
     */
30
    private $countryRepo;
31
32
    /**
33
     * @var CityRepositoryInterface
34
     */
35
    private $cityRepo;
36
37
    /**
38
     * @var ProvinceRepositoryInterface
39
     */
40
    private $provinceRepo;
41
42
    public function __construct(
43
        AddressRepositoryInterface $addressRepository,
44
        CustomerRepositoryInterface $customerRepository,
45
        CountryRepositoryInterface $countryRepository,
46
        CityRepositoryInterface $cityRepository,
47
        ProvinceRepositoryInterface $provinceRepository
48
    ) {
49
        $this->addressRepo = $addressRepository;
50
        $this->customerRepo = $customerRepository;
51
        $this->countryRepo = $countryRepository;
52
        $this->cityRepo = $cityRepository;
53
        $this->provinceRepo = $provinceRepository;
54
    }
55
56
    /**
57
     * @param int $customerId
58
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
59
     */
60
    public function index($customerId)
61
    {
62
        $customer = $this->customerRepo->findCustomerById($customerId);
63
64
        return view('front.customers.addresses.list', [
65
            'customer' => $customer,
66
            'addresses' => $customer->addresses
67
        ]);
68
    }
69
70
    /**
71
     * @param int $customerId
72
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
73
     */
74
    public function create($customerId)
75
    {
76
        $countries = $this->countryRepo->listCountries();
77
78
        return view('front.customers.addresses.create', [
79
            'customer' => $this->customerRepo->findCustomerById($customerId),
80
            'countries' => $countries,
81
            'cities' => $this->cityRepo->listCities(),
82
            'provinces' => $this->provinceRepo->listProvinces()
83
        ]);
84
    }
85
86
    /**
87
     * @param CreateAddressRequest $request
88
     * @param int $customerId
89
     * @return \Illuminate\Http\RedirectResponse
90
     */
91
    public function store(CreateAddressRequest $request, $customerId)
92
    {
93
        $request['customer_id'] = $request->user()->id;
94
        $this->addressRepo->createAddress($request->except('_token', '_method'));
95
96
        return redirect()->route('accounts', ['tab' => 'address'])
97
            ->with('message', 'Address creation successful');
98
    }
99
100
    /**
101
     * @param $customerId
102
     * @param $addressId
103
     *
104
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
105
     */
106
    public function edit($customerId, $addressId)
107
    {
108
        $countries = $this->countryRepo->listCountries();
109
110
        return view('front.customers.addresses.edit', [
111
            'customer' => $this->customerRepo->findCustomerById($customerId),
112
            'address' => $this->addressRepo->findAddressById($addressId),
113
            'countries' => $countries,
114
            'cities' => $this->cityRepo->listCities(),
115
            'provinces' => $this->provinceRepo->listProvinces()
116
        ]);
117
    }
118
119
    /**
120
     * @param UpdateAddressRequest $request
121
     * @param $customerId
122
     * @param $addressId
123
     *
124
     * @return \Illuminate\Http\RedirectResponse
125
     */
126
    public function update(UpdateAddressRequest $request, $customerId, $addressId)
127
    {
128
        $address = $this->addressRepo->findAddressById($addressId);
129
130
        $addressRepo = new AddressRepository($address);
131
        $request['customer'] = $customerId;
132
        $addressRepo->updateAddress($request->except('_token', '_method'));
133
134
        return redirect()->route('accounts', ['tab' => 'address'])
135
            ->with('message', 'Address update successful');
136
    }
137
138
    /**
139
     * @param $customerId
140
     * @param $addressId
141
     *
142
     * @return \Illuminate\Http\RedirectResponse
143
     * @throws \Exception
144
     */
145
    public function destroy($customerId, $addressId)
146
    {
147
        $address = $this->addressRepo->findAddressById($addressId);
148
        $address->delete();
149
150
        return redirect()->route('customer.address.index', $customerId)
151
            ->with('message', 'Address delete successful');
152
    }
153
}
154