<?php
namespace App\Controller\Meta;
use App\Datatable\Whatsapp\MetaCatalogDatatableType;
use App\Enum\SiteEnum;
use App\Manager\AssetsManager;
use App\Manager\Csv\Exporter\MetaCatalogManagerCsvExporter;
use App\Manager\Excel\Helper\CompatibilityHelper;
use App\Model\Csv\MetaCatalogSpreadsheetModel;
use App\Repository\OnlineShop\ProductRepository;
use Omines\DataTablesBundle\DataTableFactory;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Tbbc\MoneyBundle\Formatter\MoneyFormatter;
class MetaCatalogController extends AbstractController
{
/**
* @Route("/admin/meta/catalog/", name="admin_meta_catalog_index", methods={"GET", "POST"})
*
* @Security("is_granted(constant('App\\Enum\\VotersEnum::LIST_PRODUCT'))")
*/
public function index(DatatableFactory $datatableFactory, Request $request): Response
{
$datatable = $datatableFactory->createFromType(MetaCatalogDatatableType::class)->handleRequest($request);
if ($datatable->isCallback()) {
return $datatable->getResponse();
}
return $this->render('whatsapp/meta_catalog/index.html.twig', [
'datatable' => $datatable,
]);
}
/**
* Catalog feed for ES
* @Route("/meta/catalog/feed/{token}", name="meta_catalog_feed", methods={"GET"})
*/
public function feed(
Request $request,
ProductRepository $productRepository,
MoneyFormatter $moneyFormatter,
AssetsManager $assetsManager,
UrlGeneratorInterface $urlGenerator,
MetaCatalogManagerCsvExporter $exporterManager,
string $token = ''): Response
{
if ($token === 'A3w45xTy89Az8puL') {
$products = $productRepository->findMetaCatalogProductsPublishedAndVisibleBySite(SiteEnum::SITE_STR_ES);
$fileName = 'meta_catalog'.'.'.CompatibilityHelper::CSV;
$fileNamePath = sys_get_temp_dir().DIRECTORY_SEPARATOR.$fileName;
$spreadsheetProperties = new MetaCatalogSpreadsheetModel($fileNamePath, $products, $moneyFormatter, $assetsManager, $urlGenerator);
$exporterManager->writeCsvFileByModel($spreadsheetProperties);
$response = new BinaryFileResponse($fileNamePath, Response::HTTP_OK, ['Content-type' => 'text/'.CompatibilityHelper::CSV]);
return $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
} else {
throw $this->createNotFoundException('Not found');
}
}
/**
* Catalog feed for PT
* @Route("/meta/catalog/feed/pt/{token}", name="meta_catalog_feed_pt", methods={"GET"})
*/
public function feedPt(
Request $request,
ProductRepository $productRepository,
MoneyFormatter $moneyFormatter,
AssetsManager $assetsManager,
UrlGeneratorInterface $urlGenerator,
MetaCatalogManagerCsvExporter $exporterManager,
string $token = ''): Response
{
if ($token === 'B3y44aHc21Ms1puX') {
$products = $productRepository->findMetaCatalogProductsPublishedAndVisibleBySite(SiteEnum::SITE_STR_PT);
$fileName = 'meta_catalog_pt'.'.'.CompatibilityHelper::CSV;
$fileNamePath = sys_get_temp_dir().DIRECTORY_SEPARATOR.$fileName;
$spreadsheetProperties = new MetaCatalogSpreadsheetModel($fileNamePath, $products, $moneyFormatter, $assetsManager, $urlGenerator);
$exporterManager->writeCsvFileByModel($spreadsheetProperties);
$response = new BinaryFileResponse($fileNamePath, Response::HTTP_OK, ['Content-type' => 'text/'.CompatibilityHelper::CSV]);
return $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);
} else {
throw $this->createNotFoundException('Not found');
}
}
}