diff --git a/app/Actions/BaseAction.php b/app/Actions/BaseAction.php new file mode 100644 index 0000000000..bb48b336d0 --- /dev/null +++ b/app/Actions/BaseAction.php @@ -0,0 +1,19 @@ +$method(...$args); + } + + //abstract static function run($parameters = null) + //{ + // return call_user_func($this->run(...$parameters)); + //} + +} diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php b/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php new file mode 100644 index 0000000000..6b5a7565c7 --- /dev/null +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php @@ -0,0 +1,75 @@ +user(); + + // Check if the asset exists and is requestable + if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { + return $status = 'doesNotExist'; + } + if (!Company::isCurrentUserHasAccess($asset)) { + return $status = 'accessDenied'; + } + + $data['item'] = $asset; + $data['target'] = auth()->user(); + $data['item_quantity'] = 1; + $settings = Setting::getSettings(); + + $logaction = new Actionlog(); + $logaction->item_id = $data['asset_id'] = $asset->id; + $logaction->item_type = $data['item_type'] = Asset::class; + $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); + + if ($user->location_id) { + $logaction->location_id = $user->location_id; + } + $logaction->target_id = $data['user_id'] = auth()->id(); + $logaction->target_type = User::class; + + // If it's already requested, cancel the request. + if ($asset->isRequestedBy(auth()->user())) { + $asset->cancelRequest(); + $asset->decrement('requests_counter', 1); + + $logaction->logaction('request canceled'); + try { + $settings->notify(new RequestAssetCancelation($data)); + } catch (\Exception $e) { + \Log::warning($e); + } + return $status = 'cancelled'; + } + + $logaction->logaction('requested'); + $asset->request(); + $asset->increment('requests_counter', 1); + try { + $settings->notify(new RequestAssetNotification($data)); + } catch (\Exception $e) { + \Log::warning($e); + } + dump('handle end'); + + return $status = 'success'; + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 6772a57620..67c3ee1c8e 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Actions\CheckoutRequests\CreateCheckoutRequest; +use App\Actions\CheckoutRequests\CreateCheckoutRequestNew; use App\Models\Actionlog; use App\Models\Asset; use App\Models\AssetModel; @@ -143,9 +144,10 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset($assetId = null): RedirectResponse + public function getRequestAsset(CreateCheckoutRequestNew $checkoutRequestNew, $assetId = null): RedirectResponse { - $status = CreateCheckoutRequest::run($assetId); + $status = CreateCheckoutRequestNew::run($assetId); + //$status = $checkoutRequestNew->run($assetId); return match ($status) { 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')),