authorize('viewAny', Discount::class); $pagination = RequestHelper::pagination($request); $discounts = $this->executor->execute( $query, new GetPaginatedDiscountsQueryInput( pagination: $pagination, ) ); return view('bo.discounts.index', compact('discounts')); } public function create(GetDiscountFormDataQuery $query): View { $this->authorize('create', Discount::class); $formData = $this->executor->execute( $query, new GetDiscountFormDataQueryInput() ); return view('bo.discounts.create', [ 'discountTypes' => $formData->discountTypes, 'existingProds' => $formData->existingProds, 'selectedProds' => $formData->selectedProds, ]); } public function store(StoreDiscountRequest $request, CreateDiscount $action): RedirectResponse { $this->authorize('create', Discount::class); $discount = $this->executor->execute( $action, $request->toCreateDiscountInput(), ); return to_route('bo.discounts.edit', $discount) ->with('success', trans('crud.messages.has_been_created', [ 'model' => Str::ucfirst(trans_choice('models.classes.discounts', 1)), ])); } public function edit(Discount $discount, GetDiscountFormDataQuery $query): View { $this->authorize('update', $discount); $formData = $this->executor->execute( $query, new GetDiscountFormDataQueryInput($discount) ); return view('bo.discounts.edit', [ 'discount' => $formData->discount, 'discountTypes' => $formData->discountTypes, 'existingProds' => $formData->existingProds, 'selectedProds' => $formData->selectedProds, ]); } public function update(UpdateDiscountRequest $request, Discount $discount, UpdateDiscount $action): RedirectResponse { $this->authorize('update', $discount); $this->executor->execute( $action, $request->toUpdateDiscountInput($discount), ); return to_route('bo.discounts.edit', $discount) ->with('success', trans('crud.messages.has_been_updated', [ 'model' => Str::ucfirst(trans_choice('models.classes.discounts', 1)), ])); } public function destroy(Discount $discount, DeleteDiscount $action): RedirectResponse { $this->authorize('delete', $discount); $this->executor->execute( $action, new DeleteDiscountInput(discount: $discount), ); return to_route('bo.discounts.index') ->with('warning', trans('crud.messages.has_been_deleted', [ 'model' => Str::ucfirst(trans_choice('models.classes.discounts', 1)), ])); } }