src/Controller/CalculatorController.php line 258

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Calculator;
  4. use App\Entity\Imposition;
  5. use App\Entity\Machine;
  6. use App\Entity\PaperSize;
  7. use App\Entity\Product;
  8. use App\Entity\Task;
  9. use App\Form\CalculatorSettingsType;
  10. use App\Form\CalculatorType;
  11. use App\Repository\CalculatorRepository;
  12. use App\Repository\ImpositionRepository;
  13. use App\Repository\MachineRepository;
  14. use App\Repository\PaperSizeRepository;
  15. use App\Repository\ProductRepository;
  16. use App\Repository\TaskRepository;
  17. use App\Service\BusinessCardCalculator;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Knp\Component\Pager\PaginatorInterface;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  26. /**
  27.  * @Route("/admin/calculator")
  28.  */
  29. class CalculatorController extends AbstractController
  30. {
  31.     /**
  32.      * @Route("/", name="calculator_index")
  33.      */
  34.     public function index(CalculatorRepository $calculatorRepository,
  35.                           PaginatorInterface $paginator,Request $request,
  36.                           EntityManagerInterface $em
  37.     ): Response
  38.     {
  39.         //$queryParams = $this->get_params_from_search_query($request);
  40.         $name trim($request->query->get('name'));
  41.         $query $calculatorRepository->findBySearchQuery($name);
  42.         //$product = $query->getResult();
  43.         //$products = $productRepository->findAll();
  44.         $pagination $paginator->paginate(
  45.             $query/* query NOT result */
  46.             $request->query->getInt('page'1), /*page number*/
  47.             20/*limit per page*/
  48.             [
  49.                 'defaultSortFieldName'      => 'c.createdAt',
  50.                 'defaultSortDirection' => 'desc'
  51.             ]
  52.         );
  53.         return $this->render('calculator/index.html.twig', [
  54.             'pagination' => $pagination
  55.         ]);
  56.     }
  57.     /**
  58.      * @Route("/new", name="calculator_new", methods={"GET", "POST"})
  59.      */
  60.     public function new(Request $requestCalculatorRepository $calculatorRepository): Response
  61.     {
  62.         $calculator = new Calculator();
  63.         $form $this->createForm(CalculatorType::class, $calculator);
  64.         $form->handleRequest($request);
  65.         if ($form->isSubmitted() && $form->isValid()) {
  66.             $calculatorRepository->add($calculatortrue);
  67.             return $this->redirectToRoute('app_calculator_index', [], Response::HTTP_SEE_OTHER);
  68.         }
  69.         return $this->renderForm('calculator/new.html.twig', [
  70.             'calculator' => $calculator,
  71.             'form' => $form,
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/get_printing_types", name="calculator_get_printing_types", methods={"GET"}, options={"expose"=true})
  76.      */
  77.     public function getPrintingTypes(Request $requestMachineRepository $machineRepository): Response
  78.     {
  79.         $query $request->query->get('q''');
  80.         $machines $machineRepository->findPrintingTypesByNameOrCode($query);
  81.         $results = [];
  82.         foreach ($machines as $machine) {
  83.             /* @var $machine Machine */
  84.             $results['results'][] = [
  85.                 'id' => htmlspecialchars($machine->getId(), \ENT_COMPAT | \ENT_HTML5),
  86.                 'text' => htmlspecialchars('[' $machine->getCode() . '] ' $machine->getName(),
  87.                     \ENT_COMPAT | \ENT_HTML5)
  88.             ];
  89.         }
  90.         return $this->json($results);
  91.     }
  92.     /**
  93.      * @Route("/get_machines", name="calculator_get_machines", methods={"GET"}, options={"expose"=true})
  94.      */
  95.     public function getMachines(Request $requestMachineRepository $machineRepository): Response
  96.     {
  97.         $query $request->query->get('q''');
  98.         $printingTypeId $request->query->get('machine_id''');
  99.         $parentMachine $machineRepository->find($printingTypeId);
  100.         $machines $machineRepository->findMachinesByNameOrCode($query$parentMachine);
  101.         $results = [];
  102.         foreach ($machines as $machine) {
  103.             /* @var Machine $machine */
  104.             $results['results'][] = [
  105.                 'id' => htmlspecialchars($machine->getId(), \ENT_COMPAT | \ENT_HTML5),
  106.                 'text' => htmlspecialchars('[' $machine->getCode() . '] ' $machine->getName(),
  107.                     \ENT_COMPAT | \ENT_HTML5)
  108.             ];
  109.         }
  110.         return $this->json($results);
  111.     }
  112.     /**
  113.      * @Route("/get_machine_paper/{machine_id}", name="calculator_get_machine_paper", methods={"GET"}, options={"expose"=true})
  114.      * @ParamConverter("machine", options={"id" = "machine_id"})
  115.      */public function get_machine_papers(Request $requestMachine $machine): Response
  116.     {
  117.         $results = [];
  118.         $paperSizes $machine->getPaperSizes()->toArray();
  119.         foreach ($paperSizes as $paperSize){
  120.             /* @var PaperSize $paperSize */
  121.             $results['results'][] = [
  122.                 'id' => htmlspecialchars($paperSize->getId(), \ENT_COMPAT | \ENT_HTML5),
  123.                 'text' => htmlspecialchars('[' $paperSize->getCode() . '] ' $paperSize->getName(),
  124.                     \ENT_COMPAT | \ENT_HTML5)
  125.             ];
  126.         }
  127.         return $this->json($results200,
  128.             [],
  129.             [
  130.                 'groups' => ['machine']
  131.             ]);
  132.     }
  133.     /**
  134.      * @Route("/get_imposition", name="calculator_get_imposition", methods={"GET"}, options={"expose"=true})
  135.      */
  136.     public function get_imposition(Request $requestImpositionRepository $impositionRepository): Response
  137.     {
  138.         $results = [];
  139.         $query $request->query->get('q''');
  140.         $finishedSizeX $request->query->get('finished_size_x');
  141.         $finishedSizeY $request->query->get('finished_size_y');
  142.         $impositions $impositionRepository->findBy([
  143.             'impositionAcross' => $finishedSizeX,
  144.             'impositionDown' => $finishedSizeY,
  145.         ]);
  146.         foreach ($impositions as $imposition){
  147.             /* @var Imposition $imposition */
  148.             $results['results'][] = [
  149.                 'id' => htmlspecialchars($imposition->getId(), \ENT_COMPAT | \ENT_HTML5),
  150.                 'text' => htmlspecialchars($imposition->getName(),
  151.                     \ENT_COMPAT | \ENT_HTML5)
  152.             ];
  153.         }
  154.         return $this->json($results);
  155.     }
  156.     /**
  157.      * @Route("/get_paper_type", name="calculator_get_paper_type", methods={"GET"}, options={"expose"=true})
  158.      */
  159.     public function get_paper_type(Request $requestPaperSizeRepository $paperSizeRepositoryProductRepository $productRepository): Response
  160.     {
  161.         $results = [];
  162.         $paperSizeId $request->query->get('paper_size_id');
  163.         $query $request->query->get('q''');
  164.         $paperSize $paperSizeRepository->find($paperSizeId);
  165.         if ($paperSize){
  166.             $products $productRepository->findPapersBySize($query$paperSize->getWidth(), $paperSize->getHeight());
  167.             foreach ($products as $product){
  168.                 /* @var Product $product */
  169.                 $results['results'][] = [
  170.                     'id' => htmlspecialchars($product->getId(), \ENT_COMPAT | \ENT_HTML5),
  171.                     'text' => htmlspecialchars($product->getGsm().'gsm '.$product->getName().' '.$product->getDescription(),
  172.                         \ENT_COMPAT | \ENT_HTML5)
  173.                 ];
  174.             }
  175.         }
  176.         return $this->json($results);
  177.     }
  178.     /**
  179.      * @Route("/get_task", methods="GET", name="calculator_get_task", options={"expose"=true})
  180.      */
  181.     public function get_task(Request $requestTaskRepository $taskRepository): JsonResponse
  182.     {
  183.         $query $request->query->get('q''');
  184.         $tasks $taskRepository->findByNameOrCode($query);
  185.         $results = [];
  186.         foreach ($tasks as $task) {
  187.             /* @var $task Task */
  188.             $results['results'][] = [
  189.                 'id' => htmlspecialchars($task->getId(), \ENT_COMPAT | \ENT_HTML5),
  190.                 'text' => htmlspecialchars('[' $task->getCode() . '] ' $task->getName(),
  191.                     \ENT_COMPAT | \ENT_HTML5),
  192.                 'name'=> $task->getName(),
  193.                 'code'=> $task->getCode(),
  194.                 'invoice_description' => $task->getInvoiceDescription(),
  195.                 'technical_notes' => $task->getTechnicalNotes()
  196.             ];
  197.         }
  198.         return $this->json($results);
  199.     }
  200.     /**
  201.      * @Route("/{id}", name="app_calculator_show", methods={"GET"})
  202.      */
  203.     public function show(Calculator $calculator): Response
  204.     {
  205.         return $this->render('calculator/show.html.twig', [
  206.             'calculator' => $calculator,
  207.         ]);
  208.     }
  209.     /**
  210.      * @Route("/{id}/edit", name="calculator_edit", methods={"GET", "POST"})
  211.      */
  212.     public function edit(Request $requestCalculator $calculatorCalculatorRepository $calculatorRepository): Response
  213.     {
  214.         $form $this->createForm(CalculatorType::class, $calculator);
  215.         $form->handleRequest($request);
  216.         if ($form->isSubmitted() && $form->isValid()) {
  217.             //$calculatorRepository->add($calculator, true);
  218.             return $this->redirectToRoute('calculator_index', [], Response::HTTP_SEE_OTHER);
  219.         }
  220.         $template $calculator->getTemplate();
  221.         return $this->renderForm(empty($template)?'calculator/edit.html.twig':'calculator/'.$template, [
  222.             'calculator' => $calculator,
  223.             'form' => $form,
  224.         ]);
  225.     }
  226.     /**
  227.      * @Route("/{id}", name="calculator_delete", methods={"POST"})
  228.      */
  229.     public function delete(Request $requestCalculator $calculatorCalculatorRepository $calculatorRepository): Response
  230.     {
  231.         if ($this->isCsrfTokenValid('delete'.$calculator->getId(), $request->request->get('_token'))) {
  232.             $calculatorRepository->remove($calculatortrue);
  233.         }
  234.         return $this->redirectToRoute('calculator_index', [], Response::HTTP_SEE_OTHER);
  235.     }
  236.     /**
  237.      * @Route("/{id}/settings", name="calculator_settings", methods={"GET", "POST"})
  238.      */
  239.     public function settings(Request $requestCalculator $calculatorCalculatorRepository $calculatorRepository): Response
  240.     {
  241.         $form $this->createForm(CalculatorSettingsType::class, $calculator);
  242.         $form->handleRequest($request);
  243.         if ($form->isSubmitted() && $form->isValid()) {
  244.             $calculatorRepository->add($calculatortrue);
  245.             $this->addFlash('success''Calculator updated.');
  246.             return $this->redirectToRoute('calculator_settings', ['id' => $calculator->getId()], Response::HTTP_SEE_OTHER);
  247.         }
  248.         $template $calculator->getTemplate();
  249.         return $this->renderForm('calculator/settings.html.twig', [
  250.             'calculator' => $calculator,
  251.             'form' => $form,
  252.         ]);
  253.     }
  254.     /**
  255.      * @Route("/{id}/calculate", name="calculate", methods={"POST"})
  256.      */
  257.     public function calculate(Request $requestCalculator $calculatorBusinessCardCalculator $calculatorHelper
  258.                                           ): Response
  259.     {
  260.         $result = [];
  261.         //Get all data
  262.         $data $request->request->all();
  263.         //Business card
  264.         if ($calculator->getId() == ){
  265.             $result $calculatorHelper->getPricing($data$calculator);
  266.             return $this->json([
  267.                 'result' => $result,
  268.                 'html' => $this->renderView('calculator/business_card_calculator_result.html.twig', [
  269.                     'pricing' => $result
  270.                 ])
  271.             ]);
  272.         }
  273.         return $this->json($result);
  274.     }
  275. }