src/Nordpeis/Bundle/CalculatorBundle/Controller/DefaultController.php line 20

Open in your IDE?
  1. <?php
  2. namespace Nordpeis\Bundle\CalculatorBundle\Controller;
  3. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  4. use Nordpeis\Bundle\CalculatorBundle\Entity\Calculation;
  5. use Nordpeis\Bundle\CalculatorBundle\Entity\CalculationHasColor;
  6. use Nordpeis\Bundle\CalculatorBundle\Entity\CalculationHasModule;
  7. use Nordpeis\Bundle\CalculatorBundle\Form\Type\CalculatorType;
  8. use Nordpeis\Bundle\CalculatorBundle\Form\Type\DeliveryType;
  9. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  10. use Symfony\Component\Debug\Exception\ContextErrorException;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. class DefaultController extends Controller
  16. {
  17.     public function indexAction(Request $request)
  18.     {
  19.         $parameters $request->query->all();
  20.         $calculator null;
  21.         if (isset($parameters['fireplace'])) {
  22.             $entityManager $this->get('doctrine')->getManager();
  23.             $fireplaceRepository $entityManager->getRepository('NordpeisCalculatorBundle:Fireplace');
  24.             $fireplace $fireplaceRepository->findOneByArtNr($parameters['fireplace']);
  25.             if (!empty($fireplace)) {
  26.                 $calculator['fireplace'] = $fireplace->getId();
  27.             }
  28.         }
  29.         $form $this->createForm(CalculatorType::class, $calculator);
  30.         return $this->render(
  31.             'NordpeisCalculatorBundle:Default:index.html.twig',
  32.             array(
  33.                 'formCalculator' => $form->createView(),
  34.             )
  35.         );
  36.     }
  37.     public function fireplaceAction(Request $request)
  38.     {
  39.         $response = array();
  40.         $producerId $request->get('producer_id');
  41.         if (empty($producerId)) {
  42.             return new JsonResponse($response);
  43.         }
  44.         $translator $this->get('translator');
  45.         $entityManager $this->get('doctrine')->getManager();
  46.         $query $entityManager->createQuery(
  47.             'SELECT f from NordpeisCalculatorBundle:Fireplace f
  48.             JOIN NordpeisCalculatorBundle:Scheme s WITH s.fireplace = f
  49.             WHERE s.hidden = :hidden
  50.             and f.producer = :producer
  51.             ORDER BY f.name ASC'
  52.         )->setParameter('producer'$producerId)
  53.         ->setParameter('hidden'false);
  54.         $fireplaces $query->getResult();
  55.         if (empty($fireplaces)) {
  56.             return new JsonResponse($response);
  57.         }
  58.         foreach ($fireplaces as $fireplace) {
  59.             $response[] = [
  60.                 'id' => $fireplace->getId(),
  61.                 'type' => $translator->trans($fireplace->getName()),
  62.             ];
  63.         }
  64.         return new JsonResponse($response);
  65.     }
  66.     public function schemeAction(Request $request)
  67.     {
  68.         $response = array();
  69.         $fireplaceId $request->get('fireplace_id');
  70.         $pipeId $request->get('pipe_id');
  71.         if (empty($fireplaceId)) {
  72.             return new JsonResponse($response);
  73.         }
  74.         $translator $this->get('translator');
  75.         $entityManager $this->get('doctrine')->getManager();
  76.         $fireplaceRepository $entityManager->getRepository('NordpeisCalculatorBundle:Fireplace');
  77.         $fireplace $fireplaceRepository->findOneById($fireplaceId);
  78.         $query = [
  79.             'fireplace' => $fireplace,
  80.             'hidden' => false,
  81.         ];
  82.         if(!empty($pipeId)) $query['pipe'] = $pipeId;
  83.         $schemeRepository $entityManager->getRepository('NordpeisCalculatorBundle:Scheme');
  84.         $schemes $schemeRepository->findBy($query);
  85.         foreach ($schemes as $scheme) {
  86.             $response[] = [
  87.                 'id' => $scheme->getId(),
  88.                 'name' => $translator->trans($scheme->getMounting()->getMounting()) . ' - ' $translator->trans($scheme->getType()->getType()),
  89.                 'type' => $scheme->getType()->getId(),
  90.                 'pipe' => $scheme->getPipe()->getId(),
  91.                 'calculation_height' => $scheme->getCalculationHeight(),
  92.                 'mounting_id' => $scheme->getMounting()->getId(),
  93.                 'mount_option' => $scheme->getMountOption(),
  94.                 'rear' => $scheme->getMounting()->getRear(),
  95.                 'wall' => ($scheme->getMounting()->getInnerWall() || $scheme->getMounting()->getOuterWall()) ? true false,
  96.                 'ext' => $scheme->getMounting()->getOuterWall(),
  97.                 'no_fireplace' => $scheme->getNoFireplace(),
  98.                 'needs_x' => $scheme->getHangingFireplace() ||
  99.                     (!empty($scheme->getMinBottomClearance()) || !empty($scheme->getMaxBottomClearance()) ||
  100.                     !empty($scheme->getMinTopClearance()) || !empty($scheme->getMaxTopClearance())),
  101.             ];
  102.         }
  103.         return new JsonResponse($response);
  104.     }
  105.     public function pipeAction(Request $request)
  106.     {
  107.         $response = array();
  108.         $fireplaceId $request->get('fireplace_id');
  109.         if (empty($fireplaceId)) {
  110.             return new JsonResponse($response);
  111.         }
  112.         $translator $this->get('translator');
  113.         $entityManager $this->get('doctrine')->getManager();
  114.         $fireplaceRepository $entityManager->getRepository('NordpeisCalculatorBundle:Fireplace');
  115.         $fireplace $fireplaceRepository->findOneById($fireplaceId);
  116.         $schemeRepository $entityManager->getRepository('NordpeisCalculatorBundle:Scheme');
  117.         $schemes $schemeRepository->findBy([
  118.             'fireplace' => $fireplace,
  119.             'hidden' => false,
  120.         ]);
  121.         $checkOption = array();
  122.         foreach ($schemes as $scheme) {
  123.             if(in_array($scheme->getPipe()->getId(), $checkOption) == false ){
  124.                 $checkOption[] = $scheme->getPipe()->getId();
  125.                 $response[] = [
  126.                     'id' => $scheme->getPipe()->getId(),
  127.                     'type' => $translator->trans($scheme->getPipe()->getDiameter()),
  128.                 ];
  129.             }
  130.         }
  131.         return new JsonResponse($response);
  132.     }
  133.     public function coverPlateAction(Request $request)
  134.     {
  135.         $response = array();
  136.         $shemeId $request->get('scheme_id');
  137.         $translator $this->get('translator');
  138.         if (empty($shemeId)) {
  139.             return new JsonResponse($response);
  140.         }
  141.         $entityManager $this->get('doctrine')->getManager();
  142.         $schemeRepository $entityManager->getRepository('NordpeisCalculatorBundle:Scheme');
  143.         $scheme $schemeRepository->findOneById($shemeId);
  144.         if (empty($scheme)) {
  145.             return new JsonResponse($response);
  146.         }
  147.         if ($scheme->getMounting()->getId() == 4) {
  148.             $response = [[
  149.                 'id' => 2,
  150.                 'type' => 'Firkantet',
  151.             ]];
  152.             return new JsonResponse($response);
  153.         }
  154.         $typeId $scheme->getType()->getId();
  155.         if($scheme->getPipe()->getId() == 1){
  156.             switch ($scheme->getType()->getId()) {
  157.                 case 1// Fully isolated
  158.                 case 3// Unisolated
  159.                 case 5// Ventilated - Fully Isolated
  160.                     $typeId 1// convert to Fully isolated
  161.                     break;
  162.                 case 2// Half isolated                
  163.                 case 4// Ventilated - Half Isolated                
  164.                 case 6// Ventilated DV
  165.                     $typeId 2// convert to Half isolated
  166.                     break;
  167.             }
  168.         }else{
  169.             switch ($scheme->getType()->getId()) {
  170.                 case 1// Fully isolated
  171.                 case 2// Half isolated
  172.                 case 3// Unisolated
  173.                 case 4// Ventilated - Half Isolated
  174.                 case 5// Ventilated - Fully Isolated
  175.                 case 6// Ventilated DV
  176.                     $typeId 1// convert to Fully isolated
  177.                     break;
  178.             }
  179.         }
  180.         $query $entityManager->createQuery(
  181.             'SELECT cp
  182.                 FROM NordpeisCalculatorBundle:Module m
  183.                 JOIN NordpeisCalculatorBundle:CoverPlate cp WITH m.coverPlate = cp
  184.                 WHERE m.pipe in(:pipe)
  185.                 AND m.type = :type
  186.                 AND m.coverPlate IS NOT NULL
  187.                 ORDER BY cp.name ASC'
  188.             )->setParameter('type'$typeId)
  189.             ->setParameter('pipe'$scheme->getPipe());
  190.         $modules $query->getResult();
  191.      
  192.         foreach ($modules as $module) {
  193.             $response[] = [
  194.                 'id' => $module->getId(),
  195.                 'type' => $translator->trans($module->getName()),
  196.             ];
  197.         }
  198.         return new JsonResponse($response);
  199.     }
  200.     public function pipehatAction(Request $request)
  201.     {
  202.         $response = array();
  203.         $mountingId $request->get('mounting_id');
  204.         $translator $this->get('translator');
  205.         if (empty($mountingId)) {
  206.             return new JsonResponse($response);
  207.         }
  208.         $entityManager $this->get('doctrine')->getManager();
  209.         $mountingRepo $entityManager->getRepository('NordpeisCalculatorBundle:Mounting');
  210.         $mounting $mountingRepo->findOneById($mountingId);
  211.         if (empty($mounting)) {
  212.             return new JsonResponse($response);
  213.         }
  214.         $pipehats $mounting->getPipehat();
  215.         foreach ($pipehats as $pipehat) {
  216.             $response[] = [
  217.                 'id' => $pipehat->getId(),
  218.                 'type' => $translator->trans($pipehat->getType()),
  219.             ];
  220.         }
  221.         return new JsonResponse($response);
  222.     }
  223.     public function horizontalSelectAction(Request $request)
  224.     {
  225.         $response = array();
  226.         $mountingId $request->get('mounting_id');
  227.         if (empty($mountingId)) {
  228.             return new JsonResponse($response);
  229.         }
  230.         $entityManager $this->get('doctrine')->getManager();
  231.         $mountingRepo $entityManager->getRepository('NordpeisCalculatorBundle:Mounting');
  232.         $mounting $mountingRepo->findOneById($mountingId);
  233.         if (empty($mounting)) {
  234.             return new JsonResponse($response);
  235.         }
  236.         if ($mounting->getOuterWall()) {
  237.             $response = [[
  238.                 'text' => '170 - 370',
  239.                 'value' => '370',
  240.             ], [
  241.                 'text' => '371 - 470',
  242.                 'value' => '470',
  243.             ], [
  244.                 'text' => '471 - 670',
  245.                 'value' => '670',
  246.             ], [
  247.                 'text' => '671 - 1370',
  248.                 'value' => '1370',
  249.             ]];
  250.         } else {
  251.             $response = [[
  252.                 'text' => '310 - 510',
  253.                 'value' => '510',
  254.             ], [
  255.                 'text' => '511 - 610',
  256.                 'value' => '610',
  257.             ], [
  258.                 'text' => '611 - 810',
  259.                 'value' => '810',
  260.             ]];
  261.         }
  262.         return new JsonResponse($response);
  263.     }
  264.     public function angleSelectAction(Request $request)
  265.     {
  266.         try {
  267.             $sizeList $this->getParameter('calculation.angle.sizes');
  268.         } catch (\Exception $e) {
  269.             return new JsonResponse([]);
  270.         }
  271.         $pipeId $request->get('pipe_id');
  272.         if ($pipeId && array_key_exists('pipe_' $pipeId$sizeList) == true ) {
  273.             $sizes $sizeList['pipe_' $pipeId];
  274.         }else{
  275.             $sizes $sizeList['pipe_1'];
  276.         }
  277.         $fullyIsolated = array();
  278.         foreach ($sizes['fullyIsolated'] as $size) {
  279.             $fullyIsolated[] = [
  280.                 'text' => (string) $size,
  281.                 'value' => (string) $size,
  282.             ];
  283.         }
  284.         $halfIsolated = array();
  285.         foreach ($sizes['halfIsolated'] as $size) {
  286.             $halfIsolated[] = [
  287.                 'text' => (string) $size,
  288.                 'value' => (string) $size,
  289.             ];
  290.         }
  291.         $response[1] = $response[3] = $response[5] = [
  292.             => $fullyIsolated,
  293.             => $fullyIsolated,
  294.         ];
  295.         $response[2] = $response[4] = $response[6] = [
  296.             => $halfIsolated,
  297.             => $fullyIsolated,
  298.         ];
  299.         return new JsonResponse($response);
  300.     }
  301.     public function floorAction(Request $request)
  302.     {
  303.         $response = array();
  304.         if ($request->get('floor_id')) {
  305.             $entityManager $this->get('doctrine')->getManager();
  306.             $floorRepository $entityManager->getRepository('NordpeisCalculatorBundle:Floor');
  307.             $floor $floorRepository->findOneById($request->get('floor_id'));
  308.             if (!empty($floor)) {
  309.                 $response = [
  310.                     'numFloors' => $floor->getNumFloors(),
  311.                     'hasAttic' => $floor->getHasAttic(),
  312.                 ];
  313.             }
  314.         }
  315.         return new JsonResponse($response);
  316.     }
  317.     public function imageUrlAction(Request $request)
  318.     {
  319.         $parameters $request->query->all();
  320.         return new JsonResponse(array('url' => $this->getImageUrl($parameters)));
  321.     }
  322.     private function getImageUrl($parameters)
  323.     {
  324.         $url 'bundles/nordpeiscalculator/images/examples/Stal_calc';
  325.         switch (isset($parameters['has_angle']) ? ($parameters['has_angle'] === 'true' true false) : null) {
  326.             case 0:
  327.                 break;
  328.             case 1:
  329.                 $url $url ' vinkel';
  330.                 break;
  331.             default:
  332.                 return null;
  333.                 break;
  334.         }
  335.         switch (isset($parameters['mounting_id']) ? (int) $parameters['mounting_id'] : null) {
  336.             case 1// Top
  337.                 $url $url ' topp';
  338.                 break;
  339.             case 2// Rear
  340.                 $url $url ' bak';
  341.                 break;
  342.             case 3// Rear Through Inner Wall
  343.                 $url 'bundles/nordpeiscalculator/images/examples/Stal_calc bak inne'// No vinkel for these
  344.                 // $url = $url . ' bak inne';
  345.                 break;
  346.             case 4// Rear Through Outer Wall
  347.                 $pipeId = isset($parameters['pipe_id']) ? (int) $parameters['pipe_id'] : null;
  348.                 $pipeUrl $pipeId == ' 130' '';
  349.                 return 'bundles/nordpeiscalculator/images/examples/Stal_calc utvendig 3'$pipeUrl .'.png'// There is only one image for backmounted through outer wall
  350.                 break;
  351.             default:
  352.                 // return new JsonResponse('Missing mounting_id', 400);
  353.                 return null;
  354.                 break;
  355.         }
  356.         switch (isset($parameters['type_id']) ? (int) $parameters['type_id'] : null) {
  357.             case 1// Fully isolated
  358.                 $url $url ' full';
  359.                 break;
  360.             case 2// Half isolated
  361.                 $url $url ' halv';
  362.                 break;
  363.             case 3// Unisolated
  364.                 $url $url ' oisolerat';
  365.                 break;
  366.             
  367.             case 5// Ventilated - Fully Isolated
  368.                 $url $url ' full TL';
  369.                 break;
  370.                 
  371.             case 4// Ventilated - Half Isolated
  372.             case 6// Ventilated DV
  373.                 $url $url ' halv TL';
  374.                 break;
  375.             default:
  376.                 // return new JsonResponse('Missing type_id', 400);
  377.                 return null;
  378.                 break;
  379.         }
  380.         switch (isset($parameters['floor_id']) ? (int) $parameters['floor_id'] : null) {
  381.             case 1:
  382.                 $url $url ' 1-plan';
  383.                 break;
  384.             case 2:
  385.                 $url $url ' 2-plan';
  386.                 break;
  387.             case 3:
  388.                 $url $url ' 3-plan';
  389.                 break;
  390.             default:
  391.                 // return new JsonResponse('Missing floor_id', 400);
  392.                 return null;
  393.                 break;
  394.         }
  395.         switch (isset($parameters['pipe_id']) ? (int) $parameters['pipe_id'] : null) {
  396.             case 1:
  397.                 $url $url '';
  398.                 break;
  399.             case 2:
  400.                 $url $url ' 130';
  401.                 break;
  402.             default:
  403.                 // return new JsonResponse('Missing floor_id', 400);
  404.                 return null;
  405.                 break;
  406.         }
  407.         $url $url '.png';
  408.         return $url;
  409.     }
  410.     public function addAction(Request $request)
  411.     {
  412.         $response = array();
  413.         $entityManager $this->get('doctrine')->getManager();
  414.         $calculation = new Calculation();
  415.         $parameters $request->request->all();
  416.         $serverVariables = array('HTTP_CLIENT_IP''HTTP_X_FORWARDED_FOR''REMOTE_ADDR');
  417.         foreach ($serverVariables as $svrVar) {
  418.             if (!empty($_SERVER[$svrVar])) {
  419.                 $clientIP $_SERVER[$svrVar];
  420.                 break;
  421.             }
  422.         }
  423.         $date = new \DateTime();
  424.         $hash hash('crc32'$date->getTimestamp() . $clientIP);
  425.         $calculation->setTimestamp($date->getTimestamp());
  426.         $calculation->setHash($hash);
  427.         if (isset($parameters['scheme'])) {
  428.             $schemeRepository $entityManager->getRepository('NordpeisCalculatorBundle:Scheme');
  429.             $scheme $schemeRepository->findOneById($parameters['scheme']);
  430.             $calculation->setScheme($scheme);
  431.         }
  432.         if (isset($parameters['floor'])) {
  433.             $floorRepository $entityManager->getRepository('NordpeisCalculatorBundle:Floor');
  434.             $floor $floorRepository->findOneById($parameters['floor']);
  435.             $calculation->setFloor($floor);
  436.         }
  437.         if (isset($parameters['roof'])) {
  438.             $roofTypeRepository $entityManager->getRepository('NordpeisCalculatorBundle:RoofType');
  439.             $roofType $roofTypeRepository->findOneById($parameters['roof']);
  440.             $calculation->setRoofType($roofType);
  441.         }
  442.         if (isset($parameters['upper_floor_living_room'])) {
  443.             $calculation->setUpperFloorLivingRoom($parameters['upper_floor_living_room'] === 'true' true false);
  444.         } else {
  445.             $calculation->setUpperFloorLivingRoom(false);
  446.         }
  447.         if (isset($parameters['is_oppheng'])) {
  448.             $calculation->setIsMount($parameters['is_oppheng'] === 'true' true false);
  449.         } else {
  450.             $calculation->setIsMount(false);
  451.         }
  452.         if (isset($parameters['a_size'])) {
  453.             $calculation->setA((int) $parameters['a_size']);
  454.         }
  455.         if (isset($parameters['g_size'])) {
  456.             $calculation->setG((float) $parameters['g_size']);
  457.         }
  458.         if (isset($parameters['h_size'])) {
  459.             $calculation->setH((int) $parameters['h_size']);
  460.         }
  461.         $needsX $scheme->getNoFireplace() ||
  462.         $scheme->getHangingFireplace() ||
  463.         !empty($scheme->getMinBottomClearance()) ||
  464.         !empty($scheme->getMaxBottomClearance()) ||
  465.         !empty($scheme->getMinTopClearance()) ||
  466.         !empty($scheme->getMaxTopClearance());
  467.         if (isset($parameters['fireplace_height']) && $needsX) {
  468.             $calculation->setX((int) $parameters['fireplace_height']);
  469.         }
  470.         if (isset($parameters['l1_size'])) {
  471.             $calculation->setL1((int) $parameters['l1_size']);
  472.         }
  473.         if (isset($parameters['l2_size'])) {
  474.             $calculation->setL2((int) $parameters['l2_size']);
  475.         } else {
  476.             $calculation->setL2(0);
  477.         }
  478.         if (isset($parameters['l3_size']) && (isset($scheme) && $scheme->getMounting()->getInnerWall() || $scheme->getMounting()->getOuterWall())) {
  479.             $calculation->setL3((int) $parameters['l3_size']);
  480.         }
  481.         if (isset($parameters['has_angle'])) {
  482.             $has_angle $parameters['has_angle'] === 'true' true false;
  483.             $calculation->setHasAngle($has_angle);
  484.             if ($has_angle && isset($parameters['cc_size']) && isset($parameters['v1_size'])) {
  485.                 // if ($parameters['v1_size'] > $parameters['l1_size'] + $parameters['l2_size']) {
  486.                 //     return new JsonResponse(array(
  487.                 //         'calculator[v1_size]' => array('V1 needs to be less than L1 + L2')
  488.                 //     ), 409);
  489.                 // }
  490.                 $calculation->setCC((int) $parameters['cc_size']);
  491.                 $calculation->setV1((int) $parameters['v1_size']);
  492.             }
  493.         }
  494.         $colors = array();
  495.         if (isset($parameters['color_1_floor'])) {
  496.             $colorRepository $entityManager->getRepository('NordpeisCalculatorBundle:Color');
  497.             $color $colorRepository->findOneById($parameters['color_1_floor']);
  498.             $colors[] = [
  499.                 'color' => $color,
  500.                 'floor' => 1,
  501.             ];
  502.         }
  503.         if (isset($parameters['color_2_floor'])) {
  504.             $colorRepository $entityManager->getRepository('NordpeisCalculatorBundle:Color');
  505.             $color $colorRepository->findOneById($parameters['color_2_floor']);
  506.             $colors[] = [
  507.                 'color' => $color,
  508.                 'floor' => 2,
  509.             ];
  510.         }
  511.         if (isset($parameters['pipehat'])) {
  512.             $pipehatRepository $entityManager->getRepository('NordpeisCalculatorBundle:Pipehat');
  513.             $pipehat $pipehatRepository->findOneById($parameters['pipehat']);
  514.             $calculation->setPipehat($pipehat);
  515.         }
  516.         if (isset($parameters['cover_plate'])) {
  517.             $coverPlateRepository $entityManager->getRepository('NordpeisCalculatorBundle:CoverPlate');
  518.             $coverPlate $coverPlateRepository->findOneById($parameters['cover_plate']);
  519.             $calculation->setCoverPlate($coverPlate);
  520.         }
  521.         $ventilationModule null;
  522.         $ventilation2Type null;
  523.         if (isset($parameters['ventilation_duct']) && ($scheme->getNoFireplace() && ( $scheme->getType()->getId() === || $scheme->getType()->getId() === ))) {
  524.             $moduleRepository $entityManager->getRepository('NordpeisCalculatorBundle:Module');
  525.             $ventilationModule $moduleRepository->findOneById($parameters['ventilation_duct']);
  526.             $productTypeRepository $entityManager->getRepository('NordpeisCalculatorBundle:ProductType');
  527.             $ventilation2Type $productTypeRepository->findOneById(7);
  528.         }
  529.         $validator $this->get('validator');
  530.         $errors $validator->validate($calculation);
  531.         $messages $this->parseErrors($errors);
  532.         if (!empty($messages)) {
  533.             return new JsonResponse($messages409);
  534.         }
  535.         try {
  536.             $calculationHasColorArr = [];
  537.             foreach ($colors as $color) {
  538.                 $calculationHasColor = new CalculationHasColor();
  539.                 $calculationHasColor->setCalculation($calculation);
  540.                 $calculationHasColor->setColor($color['color']);
  541.                 $calculationHasColor->setFloor($color['floor']);
  542.                 $calculationHasColorArr[] = $calculationHasColor;
  543.             }
  544.             $calculationHasModule null;
  545.             if (!empty($ventilationModule) && !empty($ventilation2Type)) {
  546.                 $calculationHasModule = new CalculationHasModule();
  547.                 $calculationHasModule->setCalculation($calculation);
  548.                 $calculationHasModule->setModule($ventilationModule);
  549.                 $calculationHasModule->setProductType($ventilation2Type);
  550.             }
  551.             // Pre-calculate to check if its good.
  552.             $calculator $this->get('nordpeis_calculator.calculator');
  553.             $result $calculator->processCalculation($calculation$calculationHasColorArr);
  554.             if (isset($result['errors']) && !empty($result['errors'])) {
  555.                 return new JsonResponse($result['errors'], 409);
  556.             }
  557.             foreach ($result['modules'] as $module) {
  558.                 $entityManager->refresh($module['module']);
  559.             }
  560.             $entityManager->persist($calculation);
  561.             $entityManager->flush();
  562.             foreach ($calculationHasColorArr as $floorColor) {
  563.                 $entityManager->persist($floorColor);
  564.                 $entityManager->flush();
  565.             }
  566.             if (!empty($calculationHasModule)) {
  567.                 $entityManager->persist($calculationHasModule);
  568.                 $entityManager->flush();
  569.             }
  570.         } catch (\Exception $e) {
  571.             $messages[] = $e->getMessage();
  572.             return new JsonResponse($messages409);
  573.         }
  574.         $response = [
  575.             'hash' => $hash,
  576.             'id' => $calculation->getId(),
  577.         ];
  578.         return new JsonResponse($response);
  579.     }
  580.     private function parseErrors($errors)
  581.     {
  582.         $translator $this->get('translator');
  583.         $messages = array();
  584.         if (count($errors) > 0) {
  585.             $messages = [];
  586.             foreach ($errors as $violation) {
  587.                 $field $violation->getPropertyPath();
  588.                 if (strlen($field) < 3) {
  589.                     $field $field '_size';
  590.                 }
  591.                 if ($field == 'scheme') {
  592.                     $field 'mounting';
  593.                 }
  594.                 $messages["calculator[$field]"][] = $translator->trans($violation->getMessage());
  595.             }
  596.         }
  597.         return $messages;
  598.     }
  599.     public function showAction(Request $request$id)
  600.     {
  601.         $entityManager $this->get('doctrine')->getManager();
  602.         if (empty($id)) {
  603.             throw new NotFoundHttpException("Invalid identifier");
  604.         }
  605.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  606.         if (preg_match('/^[a-f0-9]{8}$/'$id)) {
  607.             $calculation $calculationRepository->findOneByHash($id);
  608.         } else {
  609.             $calculation $calculationRepository->findOneById($id);
  610.         }
  611.         if (empty($calculation)) {
  612.             throw new NotFoundHttpException("Sorry, calculation doesn't exist!");
  613.         }
  614.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  615.         $calculationHasColor $calculationHasColorRepository->findBy(
  616.             array('calculation' => $calculation),
  617.             array('floor' => 'ASC')
  618.         );
  619.         $calculator $this->get('nordpeis_calculator.calculator');
  620.         $result $calculator->processCalculation($calculation$calculationHasColor);
  621.         $serializer $this->get('nordpeis_calculator.serializer');
  622.         $summarizedCalculation $serializer->summarizeModules($calculation$result['modules']);
  623.         $serializedForm $serializer->serializeForm($calculation$calculationHasColor);
  624.         $tempText $calculation->getScheme()->getTempText();
  625.         if(!empty($tempText)){
  626.             $tempTextArray explode('|'$tempText);
  627.             if(count($tempTextArray) > 1){
  628.                 foreach( $tempTextArray as $tempTextItem ){
  629.                     $result['warnings'][] = trim($tempTextItem);
  630.                 }
  631.             }else{
  632.                 $result['warnings'][] = $tempText;
  633.             }            
  634.         }
  635.         $imageUrl $this->getImageUrl([
  636.             'has_angle' => $calculation->getHasAngle() ? 'true' 'false',
  637.             'mounting_id' => $calculation->getScheme()->getMounting()->getId(),
  638.             'type_id' => $calculation->getScheme()->getType()->getId(),
  639.             'floor_id' => $calculation->getFloor()->getId(),
  640.             'pipe_id' => $calculation->getScheme()->getPipe()->getId(),
  641.         ]);
  642.         $params = [
  643.             'calculation' => $calculation,
  644.             'calculationHasColor' => $calculationHasColor,
  645.             'imageUrl' => $imageUrl,
  646.             'leftover' => $result['leftover'],
  647.             'moduleList' => $summarizedCalculation,
  648.             'warnings' => $result['warnings'],
  649.             'errorsArray' => $result['errors'],
  650.             'serializedForm' => $serializedForm,
  651.         ];
  652.         return $this->render('NordpeisCalculatorBundle:Default:show.html.twig'$params);
  653.     }
  654.     public function printAction($id)
  655.     {
  656.         $entityManager $this->get('doctrine')->getManager();
  657.         if (empty($id)) {
  658.             throw new NotFoundHttpException("Invalid identifier");
  659.         }
  660.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  661.         if (preg_match('/^[a-f0-9]{8}$/'$id)) {
  662.             $calculation $calculationRepository->findOneByHash($id);
  663.         } else {
  664.             $calculation $calculationRepository->findOneById($id);
  665.         }
  666.         if (empty($calculation)) {
  667.             throw new NotFoundHttpException("Sorry, calculation doesn't exist!");
  668.         }
  669.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  670.         $calculationHasColor $calculationHasColorRepository->findBy(
  671.             array('calculation' => $calculation),
  672.             array('floor' => 'ASC')
  673.         );
  674.         $calculator $this->get('nordpeis_calculator.calculator');
  675.         $result $calculator->processCalculation($calculation$calculationHasColor);
  676.         $serializer $this->get('nordpeis_calculator.serializer');
  677.         $imageUrl $this->getImageUrl([
  678.             'has_angle' => $calculation->getHasAngle() ? 'true' 'false',
  679.             'mounting_id' => $calculation->getScheme()->getMounting()->getId(),
  680.             'type_id' => $calculation->getScheme()->getType()->getId(),
  681.             'floor_id' => $calculation->getFloor()->getId(),
  682.             'pipe_id' => $calculation->getScheme()->getPipe()->getId(),
  683.         ]);
  684.         $params = [
  685.             'calculation' => $calculation,
  686.             'calculationHasColor' => $calculationHasColor,
  687.             'imageUrl' => $imageUrl,
  688.             'descriptor' => $serializer->serializeModules($calculation$result['modules']),
  689.             'moduleList' => $serializer->summarizeModules($calculation$result['modules']),
  690.             'leftover' => $result['leftover'],
  691.             'warnings' => $result['warnings'],
  692.             'errors' => $result['errors'],
  693.         ];
  694.         return $this->render('NordpeisCalculatorBundle:Default:print.html.twig'$params);
  695.         // $html = $this->renderView('NordpeisCalculatorBundle:Default:print.html.twig', $params);
  696.     }
  697.     public function pdfAction($id)
  698.     {
  699.         $pageUrl $this->generateUrl('nordpeis_calculator_print', array('id' => $id), UrlGeneratorInterface::ABSOLUTE_URL);
  700.         return new PdfResponse(
  701.             $this->get('knp_snappy.pdf')->getOutput(
  702.                 str_replace('https''http'$pageUrl),
  703.                 array(
  704.                     'lowquality' => false,
  705.                     'encoding' => 'utf-8',
  706.                     'images' => true,
  707.                     'enable-javascript' => true,
  708.                     'javascript-delay' => 5000,
  709.                     'print-media-type' => true,
  710.                 )
  711.             ),
  712.             "calculation{$id}.pdf"
  713.         );
  714.     }
  715.     public function drawAction($id)
  716.     {
  717.         $entityManager $this->get('doctrine')->getManager();
  718.         if (empty($id)) {
  719.             throw new NotFoundHttpException("Invalid identifier");
  720.         }
  721.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  722.         if (preg_match('/^[a-f0-9]{8}$/'$id)) {
  723.             $calculation $calculationRepository->findOneByHash($id);
  724.         } else {
  725.             $calculation $calculationRepository->findOneById($id);
  726.         }
  727.         if (empty($calculation)) {
  728.             throw new NotFoundHttpException("Could not find an associated calculation");
  729.         }
  730.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  731.         $calculationHasColor $calculationHasColorRepository->findBy(
  732.             array('calculation' => $calculation),
  733.             array('floor' => 'ASC')
  734.         );
  735.         $calculator $this->get('nordpeis_calculator.calculator');
  736.         $result $calculator->processCalculation($calculation$calculationHasColor);
  737.         $serializer $this->get('nordpeis_calculator.serializer');
  738.         $params = [
  739.             'calculation' => $calculation,
  740.             'calculationHasColor' => $calculationHasColor,
  741.             'descriptor' => $serializer->serializeModules($calculation$result['modules']),
  742.         ];
  743.         return $this->render('NordpeisCalculatorBundle:Default:draw.html.twig'$params);
  744.     }
  745.     public function deliveryAction($id)
  746.     {
  747.         if (!isset($_COOKIE['username']) || empty($_COOKIE['username'])) {
  748.             return $this->redirectToRoute('nordpeis_calculator_form', array(), 301);
  749.         }
  750.         $entityManager $this->get('doctrine')->getManager();
  751.         if (empty($id)) {
  752.             throw new NotFoundHttpException("Invalid identifier");
  753.         }
  754.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  755.         if (preg_match('/^[a-f0-9]{8}$/'$id)) {
  756.             $calculation $calculationRepository->findOneByHash($id);
  757.         } else {
  758.             $calculation $calculationRepository->findOneById($id);
  759.         }
  760.         if (empty($calculation)) {
  761.             throw new NotFoundHttpException("Could not find an associated calculation");
  762.         }
  763.         // $calculationHasColorRepository = $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  764.         // $calculationHasColor = $calculationHasColorRepository->findBy(
  765.         //     array( 'calculation' => $calculation ),
  766.         //     array( 'floor' => 'ASC' )
  767.         // );
  768.         // $calculator = $this->get('nordpeis_calculator.calculator');
  769.         $form $this->createForm(DeliveryType::class);
  770.         $params = [
  771.             'calculation' => $calculation,
  772.             // 'calculationHasColor' => $calculationHasColor,
  773.             'deliveryForm' => $form->createView(),
  774.             // 'descriptor' => $serializer->serializeModules($calculation, $result['modules'])
  775.         ];
  776.         return $this->render('NordpeisCalculatorBundle:Default:delivery.html.twig'$params);
  777.     }
  778.     //TODO:: need info on reseller stuff
  779.     public function resellerAction(Request $request)
  780.     {
  781.         //Just for now
  782.         $response = [
  783.             'reseller' => 'Example Company',
  784.             'address' => 'Test Street, 123',
  785.             'contact' => 'Sales McSales',
  786.             'references' => 'Reference',
  787.         ];
  788.         return new JsonResponse($response);
  789.     }
  790.     public function orderAction(Request $request)
  791.     {
  792.         $logger $this->get('logger');
  793.         $entityManager $this->get('doctrine')->getManager();
  794.         $parameters $request->request->all();
  795.         $response = array();
  796.         if (!isset($parameters['id'])) {
  797.             // $response[] = 'Invalid id';
  798.             // return new JsonResponse($response, 400);
  799.             return new JsonResponse(array(
  800.                 'errorCode' => array(-1),
  801.                 'message' => 'Missing calculation id',
  802.             ));
  803.         }
  804.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  805.         $calculation $calculationRepository->findOneById($parameters['id']);
  806.         if (empty($calculation)) {
  807.             return new JsonResponse(array(
  808.                 'errorCode' => array(-2),
  809.                 'message' => 'Calculation id does not exist',
  810.             ));
  811.         }
  812.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  813.         $calculationHasColor $calculationHasColorRepository->findBy(
  814.             array('calculation' => $calculation),
  815.             array('floor' => 'ASC')
  816.         );
  817.         $calculator $this->get('nordpeis_calculator.calculator');
  818.         $result $calculator->processCalculation($calculation$calculationHasColor);
  819.         if ($calculation->getScheme()->getHidden() == true) {
  820.             return new JsonResponse(array(
  821.                 'errorCode' => array(-3),
  822.                 'message' => 'Ildstedet er deaktivert',
  823.             ));
  824.         }
  825.         if (isset($result['errors']) && !empty($result['errors'])) {
  826.             $errorMessage '';
  827.             foreach ($result['errors'] as $error) {
  828.                 $errorMessage .= !empty($errorMessage) ? '; ' '';
  829.                 $errorMessage .= implode("; "$error);
  830.             }
  831.             return new JsonResponse(array(
  832.                 'errorCode' => array(-4),
  833.                 'message' => $errorMessage,
  834.             ));
  835.         }
  836.         $serializer $this->get('nordpeis_calculator.serializer');
  837.         $summarized $serializer->summarizeModules($calculation$result['modules']);
  838.         $deliveryInfo $parameters;
  839.         // $deliveryInfo['calculationId'] = $deliveryInfo['id'];
  840.         unset($deliveryInfo['id']);
  841.         // Set for test account, else get the username from somewhere
  842.         if ($this->get('kernel')->getEnvironment() === 'dev') {
  843.             $costumerId '11532';
  844.         } else {
  845.             $fallback = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  846.             $costumerId = isset($parameters['costumerId']) ? $parameters['costumerId'] : $fallback;
  847.         }
  848.         $backendInfo = array(
  849.             'clientId' => $this->getParameter('app.backend.clientId'),
  850.             'token' => $this->getParameter('app.backend.token'),
  851.             'costumerId' => $costumerId,
  852.             'orderStatus' => $this->getParameter('app.backend.orderStatus'),
  853.         );
  854.         if (isset($parameters['customerPurchaseNo']) && !empty($parameters['customerPurchaseNo'])) {
  855.             $backendInfo['webId'] = $parameters['customerPurchaseNo'];
  856.         }
  857.         if (isset($parameters['orderType']) && !empty($parameters['orderType']) && $parameters['orderType'] === 'on') {
  858.             $backendInfo['ordertype'] = $this->getParameter('app.backend.orderType');
  859.         }
  860.         $invoicer $this->get('nordpeis_calculator.invoicer');
  861.         $invoice $invoicer->makeInvoice($backendInfo$summarized$deliveryInfo);
  862.         $serializedInvoice $serializer->serializeInvoice($invoice);
  863.         $stream_options = array(
  864.             'http' => array(
  865.                 'method' => 'POST',
  866.                 'header' => 'Content-type: text/xml' '\r\n',
  867.                 'content' => $serializedInvoice,
  868.             ),
  869.         );
  870.         $url $this->getParameter('app.backend.orderAddress');
  871.         $logger->alert('Posting an order to vitari backend'array_merge($backendInfo$deliveryInfo));
  872.         $logger->info('Invoice'$invoice);
  873.         $context stream_context_create($stream_options);
  874.         try {
  875.             $postResponse file_get_contents($urlnull$context);
  876.             if ($postResponse === false) {
  877.                 return new JsonResponse(array(
  878.                     'errorCode' => '-2',
  879.                     'message' => 'Failed to access order backend',
  880.                 ), 400);
  881.             }
  882.             $messages $serializer->deserializeXML($postResponse);
  883.             if (isset($messages->ErrorMessage) && !empty($messages->ErrorMessage->errorCode)) {
  884.                 $message = (string) $messages->ErrorMessage->message[0];
  885.                 return new JsonResponse(array(
  886.                     'errorCode' => count($messages->ErrorMessage->errorCode) > ? (string) $messages->ErrorMessage->errorCode[0] : '-1',
  887.                     'message' => $message,
  888.                 ), 400);
  889.             }
  890.             $response['orderNumber'] = (string) $messages->Customer->orderNo;
  891.         } catch (ContextErrorException Exception $e) {
  892.             $logger->critical('Failed to access order backend', array(
  893.                 'cause' => $e->getMessage()
  894.             ));
  895.             
  896.             return new JsonResponse(array(
  897.                 'errorCode' => '-3',
  898.                 'message' => 'Failed to access order backend',
  899.             ), 400);
  900.         }
  901.         return new JsonResponse($response);
  902.     }
  903.     public function exportAction(Request $request$id)
  904.     {
  905.         $logger $this->get('logger');
  906.         $entityManager $this->get('doctrine')->getManager();
  907.         $parameters $request->request->all();
  908.         $response = array();
  909.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  910.         $calculation $calculationRepository->findOneById($id);
  911.         if (empty($calculation)) {
  912.             return new JsonResponse(array(
  913.                 'errorCode' => array(-2),
  914.                 'message' => 'Calculation id does not exist',
  915.             ));
  916.         }
  917.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  918.         $calculationHasColor $calculationHasColorRepository->findBy(
  919.             array('calculation' => $calculation),
  920.             array('floor' => 'ASC')
  921.         );
  922.         $calculator $this->get('nordpeis_calculator.calculator');
  923.         $result $calculator->processCalculation($calculation$calculationHasColor);
  924.         if ($calculation->getScheme()->getHidden() == true) {
  925.             return new JsonResponse(array(
  926.                 'errorCode' => array(-3),
  927.                 'message' => 'Ildstedet er deaktivert',
  928.             ));
  929.         }
  930.         if (isset($result['errors']) && !empty($result['errors'])) {
  931.             $errorMessage '';
  932.             foreach ($result['errors'] as $error) {
  933.                 $errorMessage .= !empty($errorMessage) ? '; ' '';
  934.                 $errorMessage .= implode("; "$error);
  935.             }
  936.             return new JsonResponse(array(
  937.                 'errorCode' => array(-4),
  938.                 'message' => $errorMessage,
  939.             ));
  940.         }
  941.         $serializer $this->get('nordpeis_calculator.serializer');
  942.         $summarized $serializer->summarizeModules($calculation$result['modules']);
  943.         $deliveryInfo $parameters;
  944.         // $deliveryInfo['calculationId'] = $deliveryInfo['id'];
  945.         unset($deliveryInfo['id']);
  946.         // Set for test account, else get the username from somewhere
  947.         if ($this->get('kernel')->getEnvironment() === 'dev') {
  948.             $costumerId '11532';
  949.         } else {
  950.             $fallback = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
  951.             $costumerId = isset($parameters['costumerId']) ? $parameters['costumerId'] : $fallback;
  952.         }
  953.         $backendInfo = array(
  954.             'clientId' => $this->getParameter('app.backend.clientId'),
  955.             'token' => $this->getParameter('app.backend.token'),
  956.             'costumerId' => $costumerId,
  957.             'orderStatus' => $this->getParameter('app.backend.orderStatus'),
  958.         );
  959.         if (isset($parameters['customerPurchaseNo']) && !empty($parameters['customerPurchaseNo'])) {
  960.             $backendInfo['webId'] = $parameters['customerPurchaseNo'];
  961.         }
  962.         if (isset($parameters['orderType']) && !empty($parameters['orderType']) && $parameters['orderType'] === 'on') {
  963.             $backendInfo['ordertype'] = $this->getParameter('app.backend.orderType');
  964.         }
  965.         $invoicer $this->get('nordpeis_calculator.invoicer');
  966.         $invoice $invoicer->makeInvoice($backendInfo$summarized$deliveryInfo);
  967.         $serializedInvoice $serializer->serializeInvoice($invoice);
  968.         $params = [
  969.             'xml' => $serializedInvoice
  970.         ];
  971.         return $this->render('NordpeisCalculatorBundle:Default:export.xml.twig'$params);
  972.     }
  973.     public function putOrderActionRequest $request ){
  974.         
  975.         $logger $this->get('logger');
  976.         $entityManager $this->get('doctrine')->getManager();
  977.         $parameters $request->request->all();
  978.         $response = array();
  979.         if( !isset($parameters['id']) ){
  980.             return new JsonResponse(
  981.                 array(
  982.                     'errorCode' => array(-1),
  983.                     'message'   => 'Missing calculation id.'
  984.                 )
  985.             );
  986.         }
  987.         $calculationRepository $entityManager->getRepository('NordpeisCalculatorBundle:Calculation');
  988.         $calculation $calculationRepository->findOneById($parameters['id']);
  989.         if( empty( $calculation ) ){
  990.             return new JsonResponse(
  991.                 array(
  992.                     'errorCode' => array(-2),
  993.                     'message'   => 'Calculation id does not exist.'
  994.                 )
  995.             );
  996.         }
  997.         $calculationHasColorRepository $entityManager->getRepository('NordpeisCalculatorBundle:CalculationHasColor');
  998.         $calculationHasColor $calculationHasColorRepository->findBy(
  999.             array('calculation' => $calculation),
  1000.             array('floor' => 'ASC')
  1001.         );
  1002.         $calculator $this->get('nordpeis_calculator.calculator');
  1003.         $result $calculator->processCalculation($calculation$calculationHasColor);
  1004.         if( $calculation->getScheme()->getHidden() == true ){
  1005.             return new JsonResponse(
  1006.                 array(
  1007.                     'errorCode' => array(-3),
  1008.                     'message'   => 'Ildstedet er deaktivert'
  1009.                 )
  1010.             );
  1011.         }
  1012.         if( isset( $result['errors'] ) && !empty( $result['errors'] ) ){
  1013.             $errorMessage '';
  1014.             foreach( $result['errors'] as $error ){
  1015.                 $errorMessage .= !empty($errorMessage) ? '; ' '';
  1016.                 $errorMessage .= implode("; "$error);
  1017.             }
  1018.             return new JsonResponse(
  1019.                 array(
  1020.                     'errorCode' => array(-4),
  1021.                     'message'   => $errorMessage
  1022.                 )
  1023.             );
  1024.         }
  1025.         $serializer $this->get('nordpeis_calculator.serializer');
  1026.         $summarized $serializer->summarizeModules($calculation$result['modules']);
  1027.         $deliveryInfo $parameters;
  1028.         $deliveryInfo['calculationId'] = $deliveryInfo['id'];
  1029.         unset($deliveryInfo['id']);
  1030.         // test account
  1031.         if( $this->get('kernel')->getEnvironment() === 'dev' )
  1032.             $customerId '11532';
  1033.         else{
  1034.             $fallback = isset( $_COOKIE['username'] ) ? $_COOKIE['username'] : '';
  1035.             $customerId = isset( $parameters['customerId'] ) ? $parameters['customerId'] : $fallback;
  1036.         }
  1037.         $backendInfo = array(
  1038.             'clientId' => $this->getParameter('app.backend.clientId'),
  1039.             'token' => $this->getParameter('app.backend.token'),
  1040.             'costumerId' => $customerId,
  1041.             'orderStatus' => $this->getParameter('app.backend.orderStatus')
  1042.         );
  1043.         if( isset( $parameters['orderno'] ) && !empty( $parameters['orderno'] ) )
  1044.             $backendInfo['orderno'] = $parameters['orderno'];
  1045.         else{
  1046.             return new JsonResponse(
  1047.                 array(
  1048.                     'errorCode' => array(-7),
  1049.                     'message' => 'Missing order number.'
  1050.                 )
  1051.             );
  1052.         }
  1053.         $invoicer $this->get('nordpeis_calculator.invoicer');
  1054.         $invoice $invoicer->makePutInvoice($backendInfo$summarized$deliveryInfo);
  1055.         $serializedInvoice $serializer->serializeInvoice($invoice);
  1056.         $stream_options = array(
  1057.             'http' => array(
  1058.                 'method' => 'POST',
  1059.                 'header' => 'Content-type: text/xml' '\r\n',
  1060.                 'content' => $serializedInvoice
  1061.             )
  1062.         );
  1063.         $url $this->getParameter('app.backend.putOrderAddress');
  1064.         $logger->alert('Updating an order to Vitari backend'array_merge($backendInfo$deliveryInfo));
  1065.         $logger->info('Invoice'$invoice);
  1066.         $context stream_context_create($stream_options);
  1067.         try{
  1068.             $putResponse file_get_contents($urlnull$context);
  1069.             if( !$putResponse ){
  1070.                 return new JsonResponse(
  1071.                     array(
  1072.                         'errorCode' => array(-6),
  1073.                         'message' => 'Failed to get access to order backend.'
  1074.                     )
  1075.                 );
  1076.             }
  1077.             $messages $serializer->deserializeXML($putResponse);
  1078.             if (isset($messages->ErrorMessage[0]) && !empty($messages->ErrorMessage[0]->ErrorCode)) {
  1079.                 $message = (string) $messages->ErrorMessage[0]->Message;
  1080.                 $code = (string) $messages->ErrorMessage[0]->ErrorCode;
  1081.                 
  1082.                 return new JsonResponse(array(
  1083.                     'errorCode' => count$messages->ErrorMessage[0]->ErrorCode ) > $code '-1',
  1084.                     'message' => $message,
  1085.                 ), 400);
  1086.             }
  1087.             $response['orderNumber'] = (string) $messages->Customer->orderNo;
  1088.         }catch( Exception $e ){
  1089.             $logger->critical('Failed to get access to order backend.',
  1090.                 array(
  1091.                 'cause' => $e->getMessage()
  1092.                 )
  1093.             );
  1094.             return new JsonResponse(array(
  1095.                 'errorCode' => array(-5),
  1096.                 'message'   => 'Failed to get access to order backend.'
  1097.             ),400);
  1098.         }
  1099.         return new JsonResponse($response);
  1100.     }
  1101. }