/**
  * @EXT\Route(
  *      "/payment/workspace/submit/order/{order}/product/{product}",
  *      name="workspace_product_payment_submit"
  * )
  * @EXT\ParamConverter("authenticatedUser", options={"authenticatedUser" = true})
  * @return Response
  */
 public function addOrderToChartAction(Order $order, Product $product)
 {
     $chart = $order->getChart();
     //check it wasn't already submitted
     if (false) {
         $content = $this->renderView('FormaLibreInvoiceBundle:errors:orderAlreadySubmitedException.html.twig');
         return new Response($content);
     }
     if ($this->session->has('form_price_data')) {
         $priceSolution = $this->session->get('form_price_data');
         $this->session->remove('form_price_data');
         $priceSolution = $this->em->getRepository('FormaLibreInvoiceBundle:PriceSolution')->find($priceSolution->getId());
     }
     $form = $this->createForm(new SharedWorkspaceForm($product));
     $form->handleRequest($this->request);
     if ($form->isValid()) {
         //do that stuff here
         if (!$this->authorization->isGranted('ROLE_USER')) {
             $this->session->set('form_price_data', $form->get('price')->getData());
             $redirectRoute = $this->router->generate('workspace_product_payment_submit', array('order' => $order->getId(), 'product' => $product->getId(), 'chart' => $chart->getId()));
             $this->session->set('redirect_route', $redirectRoute);
             $route = $this->router->generate('claro_security_login', array());
             return new RedirectResponse($route);
         }
         $priceSolution = $form->get('price')->getData();
     }
     $order->setChart($chart);
     $order->setProduct($product);
     $chart->setOwner($this->tokenStorage->getToken()->getUser());
     $chart->setIpAdress($_SERVER['REMOTE_ADDR']);
     $order->setPriceSolution($priceSolution);
     $order->setChart($chart);
     if ($this->swsManager->hasFreeTestMonth($chart->getOwner())) {
         $order->setHasDiscount(true);
         $this->swsManager->useFreeTestMonth($chart->getOwner());
     }
     $this->em->persist($chart);
     $this->em->persist($order);
     $this->em->flush();
     return new RedirectResponse($this->router->generate('chart_payment_confirm', array('chart' => $order->getChart()->getId()), true));
     throw new \Exception('Errors were found: ' . $form->getErrorsAsString());
 }
 /**
  * @EXT\Route(
  *      "/free_test/{product}",
  *      name="formalibre_free_test_workspace"
  * )
  * @return Response
  */
 public function createFreeTestWorkspace(Product $product)
 {
     if (!$this->authorization->isGranted('ROLE_USER')) {
         $redirectRoute = $this->router->generate('formalibre_free_test_workspace', array('product' => $product->getId()));
         $this->session->set('redirect_route', $redirectRoute);
         $route = $this->router->generate('claro_security_login', array());
         return new RedirectResponse($route);
     }
     $user = $this->tokenStorage->getToken()->getUser();
     if (!$this->sharedWorkspaceManager->hasFreeTestMonth($user)) {
         $content = $this->renderView('FormaLibreInvoiceBundle:errors:freeTestMonthUsedException.html.twig');
         return new Response($content);
     }
     $chart = new Chart();
     $ps = $this->productManager->getPriceSolution($product, 1);
     $order = new Order();
     $chart->setOwner($user);
     $chart->setIpAdress($_SERVER['REMOTE_ADDR']);
     $order->setPriceSolution($ps);
     $order->setProduct($product);
     $chart->addOrder($order);
     $order->setChart($chart);
     $this->em->persist($order);
     $this->em->persist($chart);
     $this->sharedWorkspaceManager->useFreeTestMonth($user);
     $invoice = $this->invoiceManager->create($chart, 'free');
     $this->invoiceManager->validate($invoice);
     $invoice->setPaymentSystemName('none');
     $this->em->persist($invoice);
     $this->em->flush();
     return new RedirectResponse($this->router->generate('claro_desktop_open', array()));
 }