<?php
/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare (strict_types = 1);
namespace App\Controller;
use App\Entity\Core\OrderItem;
use App\Entity\Core\Product;
use App\Entity\Section;
use App\Form\Type\ContactType;
use App\Form\Type\CustomEstimationType;
use App\Service\EmailService;
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class SectionController extends ResourceController
{
public function getSectionTemplate(string $sectionSlug): Response
{
$section = $this->get('doctrine')
->getRepository(Section::class)
->findOneBySlug($sectionSlug)
;
return $this->render('app/Section/templates/' . $section->getCurrentTemplateValue() . '.html.twig', array(
'section' => $section,
));
}
public function solutionsAndApplications($sectionSlug): Response
{
return $this->getSectionTemplate($sectionSlug);
}
public function companyShow($sectionSlug): Response
{
return $this->getSectionTemplate($sectionSlug);
}
public function customizedSolutions(Request $request)
{
$productRepository = $this->container->get('sylius.repository.product');
$products = $productRepository->getByTypeCustom();
return $this->render('app/CustomizedSolutions/customized_solutions.html.twig', [
'products' => $products,
]);
}
public function customizedProduct(Request $request, $productCode): Response
{
$productRepository = $this->container->get('sylius.repository.product');
$product = $productRepository->findOneByCode($productCode);
// $productVariant = $product->getVariants()->first();
$orderItem = new OrderItem;
if (!$product || $product->getType() !== Product::CUSTOM) {
return $this->render('app/CustomizedSolutions/_product.html.twig');
}
$form = $this->createForm(CustomEstimationType::class, $orderItem);
$form = $this->createForm(CustomEstimationType::class, $orderItem, [
'product' => $product
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$estimationCart = $this->container->get('App\Service\EstimationCartService');
$cart = $estimationCart->getCart();
if (!$cart) {
$cart = $estimationCart->newCart();
}
$productAttributeItems = $form['productAttributeItems']->getData();
$quantity = $form['quantity']->getData();
$metres = $form['metres']->getData();
$estimationCart->addItemToCart($cart, $product->getVariants()->first()->getCode(), $quantity, $metres, $productAttributeItems);
return $this->redirectToRoute('app_estimation_cart');
}
return $this->render('app/CustomizedSolutions/_product.html.twig', [
'product' => $product,
'form' => $form->createView(),
]);
}
public function customizedProductEdit(Request $request, $orderItemId): Response
{
$orderItemRepository = $this->container->get('sylius.repository.order_item');
$orderItem = $orderItemRepository->findOneById($orderItemId);
$form = $this->createForm(CustomEstimationType::class, $orderItem, [
'product' => $orderItem->getVariant()->getProduct()
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$orderItem = $form->getData();
$entityManager->persist($orderItem);
$entityManager->flush();
return $this->redirectToRoute('app_estimation_cart');
}
return $this->render('app/CustomizedSolutions/_edit_product.html.twig', [
'orderItem' => $orderItem,
'form' => $form->createView(),
]);
}
public function contactForm(Request $request, EmailService $emailManager): Response
{
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contactData = $form->getData();
try {
$emailManager->sendContactEmail($contactData['email'], [
'contactData' => $contactData,
]);
$this->addFlash('success', 'El mensaje se ha sido enviado con éxito!');
} catch (\Swift_TransportException $e) {
$this->addFlash('danger', $e->getMessage());
}
return $this->redirectToRoute('app_contact_form');
}
return $this->render('app/Section/templates/contact_form.html.twig', [
'form' => $form->createView(),
]);
}
public function onlineStore(): Response
{
$taxonRepository = $this->container->get('sylius.repository.taxon');
$productRepository = $this->container->get('sylius.repository.product');
$offerRepository = $this->container->get('app.repository.offer');
$channelContext = $this->container->get('sylius.context.channel');
$currentChannel = $channelContext->getChannel();
$parentGroup = $taxonRepository->findOneByCode('products-and-services');
$products = $productRepository->findAllOnTaxon($parentGroup, $currentChannel);
$offers = $offerRepository->findAll();
return $this->render('app/Section/templates/base_online_store.html.twig', [
'parentGroup' => $parentGroup,
'products' => $products,
'offers' => $offers,
]);
}
public function getResultsProductsAction(Request $request)
{
$taxonRepository = $this->container->get('sylius.repository.taxon');
$productRepository = $this->container->get('sylius.repository.product');
$parentGroupId = $request->get('parentGroup');
$order = $request->get('order');
$attribute = $request->get('attribute');
$parentGroup = $taxonRepository->findOneById($parentGroupId);
$products = $productRepository->OrderBy($parentGroup, $order, $attribute);
$template = $this->render('app/OnlineStore/sorting.html.twig', [
'parentGroup' => $parentGroup,
'products' => $products,
]);
return $template;
}
}