<?php
namespace App\Controller;
use App\Service\TessituraBundle\AddNotAvailableException;
use App\Service\TessituraBundle\CartService;
use App\Service\TessituraBundle\Entity\CateringItemPerformance;
use App\Service\TessituraBundle\Item\CartItemGiftCertificate;
use App\Service\TessituraBundle\PackageService;
use App\Service\TessituraSDK\TessituraClient;
use App\Service\TessituraSDK\TessituraClientException;
use Psr\Cache\CacheItemPoolInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class GiftCardController extends AbstractController
{
/**
* @var TessituraClient
*/
private $client;
/**
* @var Serializer
*/
private $serializer;
/**
* @var CacheItemPoolInterface|TagAwareAdapterInterface
*/
private $cache;
/**
* @var TranslatorInterface
*/
private $translator;
/**
* @var ParameterBagInterface
*/
private $params;
/**
* CartController constructor.
*
* @param TessituraClient $client
* @param SerializerInterface $serializer
* @param ContainerInterface $container
* @param TranslatorInterface $translator
* @param ParameterBagInterface $params
*/
public function __construct(
TessituraClient $client,
SerializerInterface $serializer,
ContainerInterface $container,
TranslatorInterface $translator,
ParameterBagInterface $params
) {
$this->client = $client;
$this->serializer = $serializer;
$this->container = $container;
$this->cache = $container->get('cache.app');
$this->translator = $translator;
$this->params = $params;
}
/**
* @Route(
* "/{_locale}/gift-card/",
* name="gift-card",
* defaults={
* "_locale": "fi"
* },
* requirements={
* "_locale": "fi|sv|en"
* }
* )
* @param Request $request
* @param PackageService $packageService
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function giftCardAction(Request $request)
{
return $this->render('page/gift-card.html.twig', [
]);
}
/**
* @Route(
* "/{_locale}/gift-card/api/v1/gift-card-add/",
* name="post-api-gift-card-add",
* defaults={
* "_locale": "fi"
* },
* requirements={
* "_locale": "fi|sv|en"
* },
* methods={"POST"}
* )
*/
public function addToCartAction(Request $request, CartService $cartService)
{
$amount = $request->get('amount');
try {
$cartService->evaluateFundsInCart(CartItemGiftCertificate::class);
} catch (AddNotAvailableException $exception) {
return new JsonResponse([
'success' => false,
'message' => $this->translator->trans('fund_in_cart_error')
]);
}
try {
$cartService->addGiftCard($amount);
} catch (TessituraClientException $exception) {
return new JsonResponse([
'success' => false,
'message' => $this->translator->trans('giftcard_add_failure')
]);
}
return new JsonResponse([
'success' => true,
'redirect' => $this->generateUrl('cart'),
]);
}
}