|
2 | 2 |
|
3 | 3 | namespace App\Http\Controllers; |
4 | 4 |
|
| 5 | +use App\Actions\CheckoutRequests\CancelCheckoutRequestAction; |
| 6 | +use App\Actions\CheckoutRequests\CreateCheckoutRequestAction; |
| 7 | +use App\Exceptions\AssetNotRequestable; |
5 | 8 | use App\Models\Actionlog; |
6 | 9 | use App\Models\Asset; |
7 | 10 | use App\Models\AssetModel; |
8 | | -use App\Models\Company; |
9 | 11 | use App\Models\Setting; |
10 | 12 | use App\Models\User; |
11 | 13 | use App\Notifications\RequestAssetCancelation; |
12 | 14 | use App\Notifications\RequestAssetNotification; |
| 15 | +use Illuminate\Auth\Access\AuthorizationException; |
13 | 16 | use Illuminate\Http\Request; |
14 | 17 | use Illuminate\Http\RedirectResponse; |
15 | 18 | use \Illuminate\Contracts\View\View; |
16 | | -use Log; |
| 19 | +use Exception; |
17 | 20 |
|
18 | 21 | /** |
19 | 22 | * This controller handles all actions related to the ability for users |
@@ -81,7 +84,7 @@ public function getRequestableIndex() : View |
81 | 84 | return view('account/requestable-assets', compact('assets', 'models')); |
82 | 85 | } |
83 | 86 |
|
84 | | - public function getRequestItem(Request $request, $itemType, $itemId = null, $cancel_by_admin = false, $requestingUser = null) : RedirectResponse |
| 87 | + public function getRequestItem(Request $request, $itemType, $itemId = null, $cancel_by_admin = false, $requestingUser = null): RedirectResponse |
85 | 88 | { |
86 | 89 | $item = null; |
87 | 90 | $fullItemType = 'App\\Models\\'.studly_case($itemType); |
@@ -144,63 +147,33 @@ public function getRequestItem(Request $request, $itemType, $itemId = null, $can |
144 | 147 | * Process a specific requested asset |
145 | 148 | * @param null $assetId |
146 | 149 | */ |
147 | | - public function getRequestAsset($assetId = null) : RedirectResponse |
| 150 | + public function store(Asset $asset): RedirectResponse |
148 | 151 | { |
149 | | - $user = auth()->user(); |
150 | | - |
151 | | - // Check if the asset exists and is requestable |
152 | | - if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { |
153 | | - return redirect()->route('requestable-assets') |
154 | | - ->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')); |
155 | | - } |
156 | | - if (! Company::isCurrentUserHasAccess($asset)) { |
157 | | - return redirect()->route('requestable-assets') |
158 | | - ->with('error', trans('general.insufficient_permissions')); |
159 | | - } |
160 | | - |
161 | | - $data['item'] = $asset; |
162 | | - $data['target'] = auth()->user(); |
163 | | - $data['item_quantity'] = 1; |
164 | | - $settings = Setting::getSettings(); |
165 | | - |
166 | | - $logaction = new Actionlog(); |
167 | | - $logaction->item_id = $data['asset_id'] = $asset->id; |
168 | | - $logaction->item_type = $data['item_type'] = Asset::class; |
169 | | - $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); |
170 | | - |
171 | | - if ($user->location_id) { |
172 | | - $logaction->location_id = $user->location_id; |
173 | | - } |
174 | | - $logaction->target_id = $data['user_id'] = auth()->id(); |
175 | | - $logaction->target_type = User::class; |
176 | | - |
177 | | - // If it's already requested, cancel the request. |
178 | | - if ($asset->isRequestedBy(auth()->user())) { |
179 | | - $asset->cancelRequest(); |
180 | | - $asset->decrement('requests_counter', 1); |
181 | | - |
182 | | - $logaction->logaction('request canceled'); |
183 | | - try { |
184 | | - $settings->notify(new RequestAssetCancelation($data)); |
185 | | - } catch (\Exception $e) { |
186 | | - Log::warning($e); |
187 | | - } |
188 | | - return redirect()->route('requestable-assets') |
189 | | - ->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); |
| 152 | + try { |
| 153 | + CreateCheckoutRequestAction::run($asset, auth()->user()); |
| 154 | + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); |
| 155 | + } catch (AssetNotRequestable $e) { |
| 156 | + return redirect()->back()->with('error', 'Asset is not requestable'); |
| 157 | + } catch (AuthorizationException $e) { |
| 158 | + return redirect()->back()->with('error', trans('admin/hardware/message.requests.error')); |
| 159 | + } catch (Exception $e) { |
| 160 | + report($e); |
| 161 | + return redirect()->back()->with('error', trans('general.something_went_wrong')); |
190 | 162 | } |
| 163 | + } |
191 | 164 |
|
192 | | - $logaction->logaction('requested'); |
193 | | - $asset->request(); |
194 | | - $asset->increment('requests_counter', 1); |
| 165 | + public function destroy(Asset $asset): RedirectResponse |
| 166 | + { |
195 | 167 | try { |
196 | | - $settings->notify(new RequestAssetNotification($data)); |
197 | | - } catch (\Exception $e) { |
198 | | - Log::warning($e); |
| 168 | + CancelCheckoutRequestAction::run($asset, auth()->user()); |
| 169 | + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); |
| 170 | + } catch (Exception $e) { |
| 171 | + report($e); |
| 172 | + return redirect()->back()->with('error', trans('general.something_went_wrong')); |
199 | 173 | } |
200 | | - |
201 | | - return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); |
202 | 174 | } |
203 | 175 |
|
| 176 | + |
204 | 177 | public function getRequestedAssets() : View |
205 | 178 | { |
206 | 179 | return view('account/requested'); |
|
0 commit comments