<?php
namespace App\Controller;
use App\Service\TessituraBundle\CateringService;
use App\Service\TessituraBundle\Entity\CateringItemPerformance;
use App\Service\TessituraBundle\Item\PackageItemPackage;
use App\Service\TessituraBundle\PackageService;
use App\Service\TessituraSDK\Entity\Remote\Package;
use App\Service\TessituraSDK\Entity\Remote\Season;
use App\Service\TessituraSDK\Resource\ReferenceData\Seasons;
use App\Service\TessituraSDK\Resource\TXN\Packages;
use App\Service\TessituraSDK\TessituraClient;
use Doctrine\ORM\NoResultException;
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\Request;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraints\DateTime;
class PackageController 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}/package/",
* name="package",
* defaults={
* "_locale": "fi"
* },
* requirements={
* "_locale": "fi|sv|en"
* }
* )
* @param Request $request
* @param PackageService $packageService
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function packageAction(Request $request, PackageService $packageService)
{
$seasonId = (int)$this->params->get('tessitura.package_season');
$packages = $packageService->getAll($seasonId);
// Display only packages that are translated
$packages = array_filter($packages, function ($package) {
/** @var PackageItemPackage $package */
try {
$package->getPackage();
} catch (NoResultException $exception) {
return false;
}
return true;
});
return $this->render('page/package.html.twig', [
'packages' => $packages
]);
}
}