Пример #1
0
 /**
  * @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');
 }
Пример #2
0
 /**
  * @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();
 }
Пример #3
0
 /**
  * @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');
 }
Пример #4
0
 /**
  * @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 &#215; <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');
 }
Пример #5
0
 /**
  * @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]);
 }
Пример #6
0
 /**
  * @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);
 }
Пример #8
0
 /**
  * @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]);
 }
Пример #9
0
 /**
  * @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.');
 }
Пример #10
0
 /**
  * @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()]);
 }
Пример #11
0
 /**
  * @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()]);
 }
Пример #12
0
 /**
  * @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');
 }
Пример #13
0
 /**
  * @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');
 }