/** * @param SaveAddressRequest $request * * @throws \Illuminate\Database\Eloquent\MassAssignmentException * * @return string */ public function saveAddressAction(SaveAddressRequest $request) { $this->checkoutAssistant->saveAddress($request->getAddressFields()); $this->webUi->successMessage('✔ The delivery address for your order has been saved.'); Analytics::trackEvent('address', 'add'); return $this->webUi->redirect('sales.customer.checkout.choose-payment'); }
/** * @param int $imageId * @param PutImageAltTextRequest $request * * @return \Illuminate\Http\RedirectResponse */ public function putImageAltText(int $imageId, PutImageAltTextRequest $request) { $image = $this->imageRepository->loadById($imageId); $image->alt_text = $request->altText(); $image->save(); $this->webUi->successMessage("Set the alt text for image {$image->id} to {$request->altText()}."); return $this->redirectToImagesIndex(); }
/** * @param TelegramMessageRequest $request * * @return JsonResponse */ public function store(TelegramMessageRequest $request) { $content = ['chat_id' => StaffTelegramGroup::id(), 'text' => sprintf('(%s) %s', App::environment(), $request->text())]; try { $message = $this->telegram->sendMessage($content); $this->webUi->successMessage("Sent message `{$message->getMessageId()}` to staff"); } catch (\Exception $e) { $this->webUi->errorMessage(sprintf('Failed to send message to staff: %s (%s)', $e->getMessage(), json_encode($content))); } return $this->webUi->redirect('telegram.index'); }
/** * @param RemoveFromBasketRequest $request * * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException * @throws \Exception * * @return \Illuminate\Http\RedirectResponse */ public function removeBasketItemAction(RemoveFromBasketRequest $request) { if (!$this->clerk->basket()->getItem($request->basketItemId())->id) { throw new BadRequestHttpException(sprintf('Basket does not contain any item with id `%s`.', $request->basketItemId())); } /** @var $item */ $item = $this->clerk->removeBasketItem($request->basketItemId()); $this->webUi->successMessage(sprintf('1 × <strong>%s (%s)</strong> %s', $item->productOption->product->name, $item->productOption->label, ' was removed from your basket.')); Analytics::trackEvent('basket', 'remove', $request->basketItemId()); return $this->webUi->redirect('sales.customer.basket'); }
/** * @param Request $request * @param string $sku * * @throws \Illuminate\Database\Eloquent\ModelNotFoundException * * @return \Illuminate\Http\RedirectResponse */ public function putProductOffers(Request $request, string $sku) { $product = Product::where('sku', '=', $sku)->firstOrFail(); $product->offers()->sync((array) $request->get('offer-ids')); $this->webUi->successMessage("Set offers for product `{$product->sku}`."); return $this->webUi->redirect('products.show', ['sku' => $sku]); }
/** * @param int $productId * @param int $imageId * * @return RedirectResponse */ public function detachImage(int $productId, int $imageId) { $product = $this->catalogueRepository->loadProductById($productId); $image = $this->catalogueRepository->loadImageById($imageId); $this->catalogueRepository->detachImageFromOwner($image, $product); $this->webUi->successMessage("Removed one image from product `{$product->sku}`."); return $this->redirectToShowProduct($product->sku); }
/** * @param int $optionId * @param int $imageId * * @return \Illuminate\Http\RedirectResponse */ public function detachImage(int $optionId, int $imageId) { $option = $this->catalogueRepository->loadOptionById($optionId); $image = $this->catalogueRepository->loadImageById($imageId); $this->catalogueRepository->detachImageFromOwner($image, $option); $this->webUi->successMessage("Removed one image from option `{$option->label}`."); return $this->redirectToOptionProduct($option); }
/** * @param Request $request * @param string $sku * * @throws NotFoundException * * @return RedirectResponse */ public function putProductTags(Request $request, string $sku) { $product = $this->productRepository->loadBySku($sku); $tagIds = (array) $request->get('tag-ids'); $this->tagRepository->syncProductTagIds($product, $tagIds); $this->webUi->successMessage("Tags updated for `{$product->sku}`"); return $this->webUi->redirect('products.show', [$product->sku]); }
/** * @param int $optionId * @param PutStockRequest $request * * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException * * @return \Illuminate\Http\RedirectResponse */ public function putStock(int $optionId, PutStockRequest $request) { $option = $this->optionResource->with(['product', 'availableStock'])->where('id', '=', $optionId)->firstOrFail(); if ($request->quantity() === count($option->availableStock)) { $this->webUi->infoMessage("Stock for `{$option->label}` was not changed."); return $this->redirectToShowProduct($option->product); } if ($request->quantity() > count($option->availableStock)) { $new = $this->increaseStock($request->quantity(), $option); $this->webUi->successMessage("Added {$new} stock item/s for `{$option->label}`."); return $this->redirectToShowProduct($option->product); } if ($request->quantity() < count($option->availableStock)) { $removed = $this->reduceStock($request->quantity(), $option); $this->webUi->successMessage("Removed {$removed} stock item/s from `{$option->label}`."); return $this->redirectToShowProduct($option->product); } throw new BadRequestHttpException('Failed to diff stock quantity.'); }
/** * @param StripePaymentRequest $request * * @throws \Exception * * @return string */ public function payAction(StripePaymentRequest $request) { try { /** @var Order $order */ $order = $this->checkout->pay($request->stripeToken()); } catch (Card $e) { Log::warning(sprintf('Stripe | mess: %s | code: %s | stripe: %s | param: %s', $e->getMessage(), $e->getDeclineCode(), $e->getStripeCode(), $e->getStripeParam())); $this->webUi->errorMessage("Sorry, the card payment was not successful: {$e->getMessage()}"); if (isset($order)) { $order->deAllocate(); } return $this->webUi->redirect('sales.customer.checkout.choose-payment'); } catch (Exception $e) { Log::error($e->getMessage()); $this->webUi->errorMessage('Sorry, something went wrong during payment. Please contact us.'); return $this->webUi->redirect('sales.customer.checkout.choose-payment'); } $this->trackOrder($order); $this->webUi->successMessage('Thank you; your order is confirmed.'); return $this->webUi->redirect('sales.customer.order.view', [$order->publicId()]); }
/** * @param PayPalReturnRequest $request * * @throws \Exception * @throws \InvalidArgumentException * @throws \RuntimeException * * @return RedirectResponse */ public function returnAction(PayPalReturnRequest $request) { if (!$request->isSuccessful()) { return $this->failure(); } try { /** @var Order $order */ $order = $this->payPalRepository->executePayment($request->paymentId(), $request->payerId()); } catch (StockAllocationException $e) { Log::error("Error executing PayPal payment: {$e->getMessage()}."); $this->webUi->warningMessage('Sorry, we were not able to allocate stock for your order.'); if (isset($order)) { $order->deAllocate(); } return $this->webUi->redirect('sales.customer.checkout.choose-payment'); } catch (Throwable $e) { Log::error("Error executing PayPal payment: {$e->getMessage()}."); return $this->failure(); } $this->webUi->successMessage('Thank you; your order is confirmed.'); $this->trackOrder($order); return $this->webUi->redirect('sales.customer.order.view', [$order->publicId()]); }
/** * @param int $id * @param Request $request * * @throws \Illuminate\Database\Eloquent\ModelNotFoundException * * @return \Illuminate\Http\RedirectResponse */ public function putCategoryParent(int $id, Request $request) { /** @var Category $category */ $category = $this->category->findOrFail($id); if ((int) $request->get('parent-id') === -1) { $category->makeRoot(); $this->webUi->successMessage("Made `{$category->name}` a root-level category."); return $this->webUi->redirect('categories.index'); } /** @var Category $parent */ $parent = $this->category->findOrFail($request->get('parent-id')); $category->makeChildOf($parent); $this->webUi->successMessage("Made `{$category->name}` a child of `{$parent->name}`."); return $this->webUi->redirect('categories.index'); }
/** * @throws \BadMethodCallException * * @return \Illuminate\Http\RedirectResponse */ public function clearProductCache() { $this->view->clearAll(); $this->webUi->successMessage('Product cache was cleared.'); return $this->webUi->redirect('products.index'); }