src/Aviatur/CruiserBundle/Controller/DefaultController.php line 50

Open in your IDE?
  1. <?php
  2. namespace Aviatur\CruiserBundle\Controller;
  3. use Aviatur\AgentBundle\Entity\AgentTransaction;
  4. use Aviatur\CruiserBundle\Entity\CruiseRegionPorts;
  5. use Aviatur\CruiserBundle\Entity\CruiserPortsGeolocalization;
  6. use Aviatur\CruiserBundle\Entity\CruiseShip;
  7. use Aviatur\CruiserBundle\Models\CruiseModel;
  8. use Aviatur\CruiserBundle\Services\EmissionWebservice;
  9. use Aviatur\CruiserBundle\Services\SearchCruiseCookie;
  10. use Aviatur\CustomerBundle\Services\ValidateSanctionsRenewal;
  11. use Aviatur\GeneralBundle\Controller\OrderController;
  12. use Aviatur\GeneralBundle\Entity\FormUserInfo;
  13. use Aviatur\GeneralBundle\Services\AviaturEncoder;
  14. use Aviatur\GeneralBundle\Services\AviaturErrorHandler;
  15. use Aviatur\GeneralBundle\Services\AviaturLogSave;
  16. use Aviatur\GeneralBundle\Services\AviaturMailer;
  17. use Aviatur\GeneralBundle\Services\AviaturUpdateBestprices;
  18. use Aviatur\GeneralBundle\Services\AviaturWebService;
  19. use Aviatur\GeneralBundle\Services\ExceptionLog;
  20. use Aviatur\GeneralBundle\Services\PayoutExtraService;
  21. use Aviatur\PaymentBundle\Controller\CashController;
  22. use Aviatur\PaymentBundle\Controller\P2PController;
  23. use Aviatur\PaymentBundle\Controller\PSEController;
  24. use Aviatur\PaymentBundle\Controller\SafetypayController;
  25. use Aviatur\PaymentBundle\Controller\WorldPayController;
  26. use Aviatur\PaymentBundle\Services\CustomerMethodPaymentService;
  27. use Aviatur\PaymentBundle\Services\TokenizerService;
  28. use Aviatur\TwigBundle\Services\TwigFolder;
  29. use Doctrine\Persistence\ManagerRegistry;
  30. use FOS\UserBundle\Model\UserInterface;
  31. use FOS\UserBundle\Security\LoginManagerInterface;
  32. use Knp\Snappy\Pdf;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  35. use Symfony\Component\HttpFoundation\Cookie;
  36. use Symfony\Component\HttpFoundation\Request;
  37. use Symfony\Component\HttpFoundation\Response;
  38. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  39. use Symfony\Component\Routing\RouterInterface;
  40. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  41. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  42. use Symfony\Component\Security\Core\Exception\AccountStatusException;
  43. use Aviatur\GeneralBundle\Services\QuotationUtils;
  44. use Aviatur\CustomerBundle\Services\PhoneNumberService;
  45. class DefaultController extends AbstractController
  46. {
  47.     public function searchAction()
  48.     {
  49.         return $this->redirect(
  50.             $this->generateUrl(
  51.                 'aviatur_search_cruise',
  52.                 []
  53.             )
  54.         );
  55.     }
  56.     public function availabilityAction(Request $requestSessionInterface $sessionTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAviaturErrorHandler $errorHandlerAuthorizationCheckerInterface $authorizationCheckerAviaturUpdateBestprices $updateBestpricesSearchCruiseCookie $cruiseCookie$region$ship null$port null$date1$date2$adults$adultsAge$ageChd1 null$ageChd2 null$ageChd3 null$ageChd4 null$ageChd5 null$children$option$loyaltyMembershipID null)
  57.     {
  58.         $urlDescription = [];
  59.         $isAgent false;
  60.         $em $this->getDoctrine()->getManager();
  61.         $fullRequest $request;
  62.         $requestUrl $this->generateUrl($fullRequest->attributes->get('_route'), $fullRequest->attributes->get('_route_params'));
  63.         $server $request->server;
  64.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  65.         $agencyFolder $twigFolder->twigFlux();
  66.         $domain str_replace('www.'''$request->getHost());
  67.         $configCruiseAgency $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findProviderForCruiseWithAgency($agency);
  68.         $seoUrl $em->getRepository(\Aviatur\GeneralBundle\Entity\SeoUrl::class)->findByUrlorMaskedUrl($requestUrl);
  69.         $urlDescription['url'] = null != $seoUrl '/'.$seoUrl[0]->getUrl() : $requestUrl;
  70.         $cruiseModel = new CruiseModel();
  71.         $templateXml $cruiseModel->getXmlAvailability();
  72.         $xmlRequest $templateXml[0];
  73.         $ageAdults str_replace('+'','$adultsAge);
  74.         $xmlRequest .= $templateXml[1];
  75.         $variables = [];
  76.         $ageChildren = [];
  77.         $variables['adults'] = $adults;
  78.         $variables['adultsAge'] = $ageAdults;
  79.         if ($fullRequest->query->has('quotation')) {
  80.             $session->set('[cruise][quotation]'$fullRequest->query->get('quotation'));
  81.         }
  82.         if (== $children) {
  83.             $xmlRequest .= $templateXml[3];
  84.         } else {
  85.             for ($i 1$i <= $children; ++$i) {
  86.                 $xmlRequest .= str_replace('childAge''childAge_'.$i$templateXml[2]);
  87.                 $variables['childAge_'.$i] = ${'ageChd'.$i};
  88.                 $ageChildren[] = ${'ageChd'.$i};
  89.             }
  90.         }
  91.         $xmlRequest .= $templateXml[4];
  92.         $variables['dateStart'] = $date1;
  93.         $variables['dateEnd'] = $date2;
  94.         $xmlRequest .= $templateXml[5];
  95.         if (null != $loyaltyMembershipID) {
  96.             $variables['loyaltyMembershipID'] = null != $loyaltyMembershipID $loyaltyMembershipID '';
  97.             $xmlRequest .= $cruiseModel->getXmlPromos();
  98.         }
  99.         if (null != $ship || == $option) {
  100.             $xmlRequest .= $templateXml[6];
  101.             $variables['shipCode'] = null != $ship $ship '';
  102.             if (null != $port) {
  103.                 $xmlRequest .= $templateXml[7];
  104.                 $variables['portName'] = str_replace(['_''-'], [' ''/'], $port);
  105.             }
  106.             $xmlRequest .= $templateXml[8];
  107.         }
  108.         $xmlRequest .= $templateXml[9];
  109.         $variables['regionCode'] = $region;
  110.         $regionObj $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->findOneByRegioncode($region);
  111.         if ($session->has('operatorId')) {
  112.             $userFront simplexml_load_string($session->get('front_user'));
  113.             $additionalUserFront simplexml_load_string($session->get('front_user_additionals'));
  114.             $variables['OperatorId'] = (string) $userFront->USUARIO_ORACLE;
  115.             $variables['OfficeId'] = (string) $additionalUserFront->CODIGO_SUCURSAL_SEVEN;
  116.         }
  117.         $parameters json_decode($session->get($request->getHost().'[parameters]'));
  118.         $webService->setUrls($parameters);   
  119.         if ($request->isXmlHttpRequest()) {
  120.             $provider_id '';
  121.             if ($configCruiseAgency) {
  122.                 foreach ($configCruiseAgency as $configProvider) {
  123.                     $provider_id .= $configProvider->getProvider()->getProvideridentifier().';';
  124.                 }
  125.             } else {
  126.                 $exceptionLog->log('Error Fatal''No se encontró la agencia segun el dominio: '.$domainnullfalse);
  127.                 return new Response('no se encontró agencias para consultar disponibilidad.');
  128.             }
  129.             $variables['ProviderId'] = substr($provider_id0, -1);
  130.             $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseAvail''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablestrue);
  131.             if (isset($response['error'])) {
  132.                 $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseAvail''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablestrue);
  133.                 if (isset($response['error'])) {
  134.                     if (false !== strpos($response['error'], 'No results found')) {
  135.                         return new Response('No encontramos disponibilidad en línea para el destino solicitado. Encuentra más opciones <a href="/formularios/cotizacion-cruceros" target = "_blank">aqui</a>');
  136.                     } else {
  137.                         $SubjectError = [
  138.                             'region' => $regionObj->getname(),
  139.                             'variables' => $variables,
  140.                             'child' => $children,
  141.                             'front' => $session->has('operatorId'),
  142.                         ];
  143.                         $response $this->render($twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/error_answer.html.twig'), $SubjectError);
  144.                         return ($response);
  145.                     }
  146.                 }
  147.             } elseif (!isset($response->Message->OTA_CruiseSailAvailRS)) {
  148.                 $errorHandler->errorRedirect($server->get('REQUEST_URI'), 'Error disponibilidad cruceros'$response->Message);
  149.                 return new Response('No hemos encontrado información para el destino solicitado. '$request->getHost());
  150.             } elseif(!isset($response->Message->OTA_CruiseSailAvailRS->SailingOptions->SailingOption)){
  151.                 $SubjectError = [
  152.                     'region' => $regionObj->getname(),
  153.                     'variables' => $variables,
  154.                     'child' => $children
  155.                     'front' => $session->has('operatorId'),
  156.                 ];
  157.                 $response $this->render($twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/error_answer.html.twig'), $SubjectError);
  158.                 return ($response);
  159.             }
  160.             $response = \simplexml_load_string(str_replace('http://''https://'$response->asXml()));
  161.             $cruises = [];
  162.             $vendorsName = [];
  163.             $durations = [];
  164.             $shipsInAvail = [];
  165.             $finantial_rate = (string) $response->Message->OTA_CruiseSailAvailRS->SailingOptions->SailingOption[0]->TPA_Extensions->Cruise['finantialrate'];
  166.             $variables['convertRate'] = $finantial_rate;
  167.             $repositorycruiseShip $this->getDoctrine()->getRepository(\Aviatur\CruiserBundle\Entity\CruiseShip::class);
  168.             $querycruiseShip $repositorycruiseShip
  169.             ->createQueryBuilder('c')
  170.             ->select('c.name')
  171.             ->getQuery();
  172.             $cruiseShip $querycruiseShip->getResult();
  173.             $cruise_ship = [];
  174.             $shipArray = [];
  175.             $originPortsName = [];
  176.             foreach ($cruiseShip as $ship) {
  177.                 $cruise_ship[] = $ship['name'];
  178.             }
  179.             $transactionId = (string) $response->Message->OTA_CruiseSailAvailRS['TransactionIdentifier'];
  180.             $nameProduct 'cruiser';
  181.             $productCommission $em->getRepository(\Aviatur\AgentBundle\Entity\AgentQseProductCommission::class)->findOneByProductname($nameProduct);
  182.             $session->set($transactionId.'_isActiveQse', ((is_countable($productCommission) ? count($productCommission) : 0) > 0) ? true false);
  183.             if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  184.                 $user $this->getUser();
  185.                 $emailuser $user->getemail();
  186.                 $agent $user->getAgent();
  187.                 $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  188.                 if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  189.                     $idagent $agent[0]->getid();
  190.                     $nombreagente $user->getFirstname().' '.$user->getLastname();
  191.                     $agencyFolder $twigFolder->twigFlux();
  192.                     $agentCommission $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($idagent);
  193.                     $infoQse json_decode($agentCommission->getQseproduct());
  194.                     $infoQseNameProduct = empty($infoQse->$nameProduct) ? false $infoQse->$nameProduct;
  195.                     $infoQse = empty($infoQse) ? false $infoQseNameProduct;
  196.                     $agentQseAmount = ($infoQse) ? (int) $infoQse->commission_money 0;
  197.                     $agentQseAmountMax $productCommission->getQsecommissionmax();
  198.                     $cruiserpercentage = ($infoQse) ? (float) $infoQse->commission_percentage 0;
  199.                     $cruiserpercentagemax $productCommission->getPercentageCommissionMax();
  200.                     $cruiserActive = ($infoQse) ? (int) $infoQse->active 0;
  201.                     $isAgent true;
  202.                 } else {
  203.                     $session->set($transactionId.'_isActiveQse'false);
  204.                 }
  205.             }
  206.             foreach ($response->Message->OTA_CruiseSailAvailRS->SailingOptions->SailingOption as $SailingOption) {
  207.                 $cruisesValues = [];
  208.                 $cruisesValues[0] = new \stdClass();
  209.                 $cruisesValues[1] = new \stdClass();
  210.                 $cruisesValues[2] = new \stdClass();
  211.                 $cruisesValues[3] = new \stdClass();
  212.                 $cruisesValues[0]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruiseinside'] = $SailingOption->TPA_Extensions->Cruise['cruiseinside'] * $finantial_rate;
  213.                 $cruisesValues[1]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruiseoutside'] = $SailingOption->TPA_Extensions->Cruise['cruiseoutside'] * $finantial_rate;
  214.                 $cruisesValues[2]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruisebalcony'] = $SailingOption->TPA_Extensions->Cruise['cruisebalcony'] * $finantial_rate;
  215.                 $cruisesValues[3]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruisesuite'] = $SailingOption->TPA_Extensions->Cruise['cruisesuite'] * $finantial_rate;
  216.                 usort($cruisesValues, fn ($a$b) => $a->cruise['value'] - $b->cruise['value']);
  217.                 if (!= $cruisesValues[0]->cruise['value']) {
  218.                     $SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[0]->cruise['value'];
  219.                 } elseif (!= $cruisesValues[1]->cruise['value']) {
  220.                     $SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[1]->cruise['value'];
  221.                 } elseif (!= $cruisesValues[2]->cruise['value']) {
  222.                     $SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[2]->cruise['value'];
  223.                 } else {
  224.                     $SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[3]->cruise['value'];
  225.                 }
  226.                 // Commission Agent QSE
  227.                 if ($isAgent) {
  228.                     $SailingOption->TPA_Extensions->Cruise['CommissionActive'] = $cruiserActive;
  229.                     if ('0' == $cruiserActive) {
  230.                         $SailingOption->TPA_Extensions->Cruise['CommissionAgent'] = $agentQseAmount;
  231.                     } elseif ('1' == $cruiserActive) {
  232.                         $totalValue $SailingOption->TPA_Extensions->Cruise['minPrice'];
  233.                         $SailingOption->TPA_Extensions->Cruise['CommissionAgent'] = round($totalValue $cruiserpercentage);
  234.                     }
  235.                     $SailingOption->TPA_Extensions->Cruise['minPrice'] += round($SailingOption->TPA_Extensions->Cruise['CommissionAgent']);
  236.                 }
  237.                 $cruises[] = $SailingOption;
  238.                 if (!in_array($SailingOption->SelectedSailing->CruiseLine['VendorName'], $vendorsName)) {
  239.                     $vendorsName[(string) $SailingOption->SelectedSailing->CruiseLine['VendorCode']] = (string) $SailingOption->SelectedSailing->CruiseLine['VendorName'];
  240.                 }
  241.                 if (!in_array($SailingOption->SelectedSailing['Duration'], $durations)) {
  242.                     $durations[(string) $SailingOption->SelectedSailing['Duration']] = (string) $SailingOption->SelectedSailing['Duration'];
  243.                 }
  244.                 $originNamePort $SailingOption->TPA_Extensions->ports->port[0];
  245.                 $cutPos strpos((string) $originNamePort'-') + 1;
  246.                 $originNamePort substr((string) $originNamePort$cutPos);
  247.                 if (!in_array($originNamePort$originPortsName)) {
  248.                     $originPortsName[$originNamePort] = $originNamePort;
  249.                 }
  250.                 $shipCode = (string) $SailingOption->SelectedSailing->CruiseLine['ShipCode'];
  251.                 $shipName = (string) $SailingOption->SelectedSailing->CruiseLine['ShipName'];
  252.                 // information for filter in availability
  253.                 if (!in_array((string) $shipName$shipsInAvail)) {
  254.                     $shipsInAvail[(string) $shipName] = (string) $shipName;
  255.                 }
  256.                 // informatio for data base
  257.                 if (!in_array($shipName$shipArray) && !in_array($shipName$cruise_ship)) {
  258.                     $shipArray[] = $shipName;
  259.                     $cruiseShipObj = new CruiseShip();
  260.                     $cruiseShipObj->setShipcode((int) $shipCode);
  261.                     $cruiseShipObj->setName($shipName);
  262.                     $cruiseLine $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseLine::class)->findOneBy(['linecode' => $SailingOption->SelectedSailing->CruiseLine['VendorCode']]);
  263.                     $cruiseShipObj->setCruiseline($cruiseLine);
  264.                     $em->persist($cruiseShipObj);
  265.                     $em->flush();
  266.                 }
  267.             }
  268.             usort($cruises, fn ($a$b) => $a->TPA_Extensions->Cruise['minPrice'] - $b->TPA_Extensions->Cruise['minPrice']);
  269.             $variables['TransactionIdentifier'] = (string) $response->Message->OTA_CruiseSailAvailRS['TransactionIdentifier'];
  270.             $variables['vendorsName'] = $vendorsName;
  271.             $variables['durations'] = $durations;
  272.             $variables['shipsList'] = $shipsInAvail;
  273.             $variables['portsOrigin'] = $originPortsName;
  274.             $variables['region'] = json_encode(['id' => $regionObj->getId(), 'regionCode' => $regionObj->getregionCode(), 'name' => $regionObj->getName()]);
  275.             if ($session->has('[cruise][quotation]')) {
  276.                 $variables['quotation'] = $session->get('[cruise][quotation]');
  277.                 $session->set($variables['TransactionIdentifier'].'[cruise][quotation]'$session->get('[cruise][quotation]'));
  278.                 $session->remove('[cruise][quotation]');
  279.             }
  280.             $urlAvailability $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/AjaxAvailability.html.twig');
  281.             $CruiseBestPrice = (string) $cruises[0]->TPA_Extensions->Cruise['minPrice'];
  282.             $updateBestprices->Add($CruiseBestPrice$requestUrl); // Always send array or object, as price list
  283.             return $this->render($urlAvailability, [
  284.                 'Cruises' => $cruises,
  285.                 'variables' => $variables,
  286.                 'urlDescription' => $urlDescription,
  287.             ]);
  288.         } else {
  289.             if ($configCruiseAgency) {
  290.                 $provider_id $configCruiseAgency[0]->getProvider()->getProvideridentifier();
  291.             } else {
  292.                 $exceptionLog->log('Error Fatal''No se encontró la agencia segun el dominio: '.$domainnullfalse);
  293.                 return new Response('no se encontró agencias para consultar disponibilidad.');
  294.             }
  295.             $originPortByregion $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->getPortByRegion($region);
  296.             $cookieArray = [
  297.                 'ProviderId' => $provider_id,
  298.                 'region' => $region,
  299.                 'dateIn' => $date1,
  300.                 'dateReturn' => $date2,
  301.                 'adults' => $adults,
  302.                 'ageAdults' => explode(','$ageAdults),
  303.                 'children' => $children,
  304.                 'ageChildren' => $ageChildren,
  305.                 'ports' => $originPortByregion,
  306.             ];
  307.             $urlAvailability $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/availability.html.twig');
  308.             $regions $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->findAll();
  309.             $ships $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseShip::class)->findShipByCruiseLine();
  310.             $safeUrl 'https://'.$agency->getDomainsecure();
  311.             $cookieLastSearch $cruiseCookie->searchCruiseCookie(['cruise' => base64_encode(json_encode($cookieArray))]);
  312.             $pointRedemption $em->getRepository(\Aviatur\GeneralBundle\Entity\PointRedemption::class)->findPointRedemptionWithAgency($agency);
  313.             if (null != $pointRedemption) {
  314.                 $points 0;
  315.                 if ($fullRequest->request->has('pointRedemptionValue')) {
  316.                     $points $fullRequest->request->get('pointRedemptionValue');
  317.                     $session->set('point_redemption_value'$points);
  318.                 } elseif ($fullRequest->query->has('pointRedeem')) {
  319.                     $points $fullRequest->query->get('pointRedeem');
  320.                     $session->set('point_redemption_value'$points);
  321.                 } elseif ($session->has('point_redemption_value')) {
  322.                     $points $session->get('point_redemption_value');
  323.                 }
  324.                 $pointRedemption['Config']['Amount']['CurPoint'] = $points;
  325.             }
  326.             $availableArrayCruise array_merge($cookieArray, ['regionName' => $regionObj->getName()]);
  327.             $response $this->render($urlAvailability, [
  328.                 'ajaxUrl' => $requestUrl,
  329.                 'availableArrayCruise' => $availableArrayCruise,
  330.                 'safeUrl' => $safeUrl,
  331.                 'cookieLastSearch' => $cookieLastSearch,
  332.                 'regions' => $regions,
  333.                 'ships' => $ships,
  334.                 'ports' => $originPortByregion,
  335.                 'urlDescription' => $urlDescription,
  336.                 'pointRedemption' => $pointRedemption,
  337.             ]);
  338.             $response->headers->setCookie(new Cookie('_availability_array[cruise]'base64_encode(json_encode($cookieArray)), time() + 3600 24 7'/'));
  339.             return $response;
  340.         }
  341.     }
  342.     public function availabilitySeoAction(Request $requestSessionInterface $sessionRouterInterface $router$url)
  343.     {
  344.         $em $this->getDoctrine()->getManager();
  345.         $seoUrl $em->getRepository(\Aviatur\GeneralBundle\Entity\SeoUrl::class)->findOneByUrl('cruceros/'.$url);
  346.         if (null != $seoUrl) {
  347.             $maskedUrl $seoUrl->getMaskedurl();
  348.             $session->set('maxResults'$request->query->get('maxResults'));
  349.             if (false !== strpos($maskedUrl'?')) {
  350.                 $parameters explode('&'substr($maskedUrlstrpos($maskedUrl'?') + 1));
  351.                 foreach ($parameters as $parameter) {
  352.                     $sessionInfo explode('='$parameter);
  353.                     if (== sizeof($sessionInfo)) {
  354.                         $session->set($sessionInfo[0], $sessionInfo[1]);
  355.                     }
  356.                 }
  357.                 $maskedUrl substr($maskedUrl0strpos($maskedUrl'?'));
  358.             }
  359.             if (null != $seoUrl) {
  360.                 $route $router->match($maskedUrl);
  361.                 $route['_route_params'] = [];
  362.                 foreach ($route as $param => $val) {
  363.                     // set route params without defaults
  364.                     if ('_' !== \substr($param01)) {
  365.                         $route['_route_params'][$param] = $val;
  366.                     }
  367.                 }
  368.                 return $this->forward($route['_controller'], $route);
  369.             } else {
  370.                 throw $this->createNotFoundException('La página que solicitaste no existe o se ha movido permanentemente');
  371.             }
  372.         } else {
  373.             throw $this->createNotFoundException('La página que solicitaste no existe o se ha movido permanentemente');
  374.         }
  375.     }
  376.     public function detailAction(Request $requestSessionInterface $sessionLoginManagerInterface $loginManagerTwigFolder $twigFolderAviaturWebService $webServiceAviaturErrorHandler $errorHandlerAuthorizationCheckerInterface $authorizationCheckerRouterInterface $routerParameterBagInterface $parameterBag)
  377.     {
  378.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  379.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  380.         $transactionID null;
  381.         $variables = [];
  382.         $isAgent false;
  383.         $em $this->getDoctrine()->getManager();
  384.         $transactionId $session->get($transactionIdSessionName);
  385.         if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  386.             $nameProduct 'cruiser';
  387.             $productCommission $em->getRepository(\Aviatur\AgentBundle\Entity\AgentQseProductCommission::class)->findOneByProductname($nameProduct);
  388.             $parameterTax $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_payment_iva');
  389.             $user $this->getUser();
  390.             $emailuser $user->getemail();
  391.             $agent $user->getAgent();
  392.             if (!empty($agent[0])) {
  393.                 $idagent $agent[0]->getid();
  394.                 $nombreagente $user->getFirstname().' '.$user->getLastname();
  395.                 $agencyFolder $twigFolder->twigFlux();
  396.                 $agentCommission $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($idagent);
  397.                 $infoQse json_decode($agentCommission->getQseproduct());
  398.                 $infoQseNameProduct = empty($infoQse->$nameProduct) ? false $infoQse->$nameProduct;
  399.                 $infoQse = empty($infoQse) ? false $infoQseNameProduct;
  400.                 $agentQseAmount = ($infoQse) ? (int) $infoQse->commission_money 0;
  401.                 $agentQseAmountMax $productCommission->getQsecommissionmax();
  402.                 $cruiserpercentage = ($infoQse) ? (float) $infoQse->commission_percentage 0;
  403.                 $cruiserpercentagemax $productCommission->getPercentageCommissionMax();
  404.                 $qsePercentegeMax $productCommission->getQsecommissionpercentage();
  405.                 $taPercentagePay $productCommission->getTacommissionpercentage();
  406.                 $cruiserActive = ($infoQse) ? (int) $infoQse->active 0;
  407.                 $activeDetail $agentCommission->getActivedetail();
  408.                 $taxParameter $parameterTax->getValue();
  409.                 $isAgent true;
  410.             }
  411.         }
  412.         $server $request->server;
  413.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  414.         $fullRequest $request;
  415.         $request $fullRequest->request;
  416.         $agencyFolder $twigFolder->twigFlux();
  417.         $resultno $request->get('resultno');
  418.         $startDate $request->get('startDate');
  419.         $endDate $request->get('endDate');
  420.         $nights $request->get('nights');
  421.         $adults $request->get('adults');
  422.         $children $request->get('children');
  423.         $correlationId $request->get('correlationID');
  424.         $cruiseImage $request->get('cruiseImage');
  425.         $cruiseName $request->get('cruiseName');
  426.         $shipName $request->get('shipName');
  427.         $shipCode $request->get('shipCode');
  428.         $vendorImage $request->get('vendorImage');
  429.         $vendorName $request->get('vendorName');
  430.         $finantial_rate $request->get('convertRate');
  431.         $regionJson $request->get('region');
  432.         if (true === $request->has('whitemarkDataInfo')) {
  433.             $session->set('whitemarkDataInfo'json_decode($request->get('whitemarkDataInfo'), true));
  434.         }
  435.         if (true === $request->has('userLogin') && '' != $request->get('userLogin') && null != $request->get('userLogin')) {
  436.             $user $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->findOneByEmail($request->get('userLogin'));
  437.             $this->authenticateUser($user$loginManager);
  438.         }
  439.         if ('' != $request->get('operator_Id')) {
  440.             $session->set('officeId'$request->get('office_Id'));
  441.             $session->set('operatorId'$request->get('operator_Id'));
  442.         }
  443.         $isFront $session->has('operatorId');
  444.         $ageChild = [];
  445.         for ($chd 1$chd <= $children; ++$chd) {
  446.             $ageChild[] = $request->get('ageChild'.$chd);
  447.         }
  448.         $session->set($correlationIdSessionName$correlationId);
  449.         if (true === $request->has('transactionID')) {
  450.             $session->set($transactionIdSessionName$request->get('transactionID'));
  451.             $transactionID $request->get('transactionID');
  452.         } elseif (true === $session->has($transactionIdSessionName)) {
  453.             $transactionID $session->get($transactionIdSessionName);
  454.         }
  455.         if (!$session->has($transactionID.'[cruise][quotation]') && $request->has('quotation')) {
  456.             $session->set($transactionID.'[cruise][quotation]'$request->get('quotation'));
  457.         }
  458.         if (true !== $session->has($transactionID.'[availability_url]')) {
  459.             $session->set($transactionID.'[availability_url]'$server->get('HTTP_REFERER'));
  460.         }
  461.         if ($session->has($transactionID.'[cruiser][provider]')) {
  462.             $provider $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($session->get($transactionID.'[cruiser][provider]'));
  463.             $providerId $session->get($transactionID.'[cruiser][provider]');
  464.         } elseif ($request->has('providerID')) {
  465.             $providerId $request->get('providerID');
  466.             $provider $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($request->get('providerID'));
  467.             $session->set($transactionID.'[cruiser][provider]'$provider->getProvideridentifier());
  468.         } else {
  469.             $response 'error';
  470.             $responseCruiseDetail $response;
  471.         }
  472.         $cruiseModel = new CruiseModel();
  473.         $templateXml $cruiseModel->getXmlDetail();
  474.         $xmlRequest $templateXml[0];
  475.         $xmlRequest .= $templateXml[1];
  476.         $xmlRequest .= $templateXml[2];
  477.         $variables['transactionId'] = $transactionID;
  478.         $variables['shipCode'] = $shipCode;
  479.         $variables['resultno'] = $resultno;
  480.         $variables['ProviderId'] = $providerId;
  481.         $variables['correlationId'] = $correlationId;
  482.         $parameters json_decode($session->get($fullRequest->getHost().'[parameters]'));
  483.         $webService->setUrls($parameters); 
  484.          
  485.         $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseDetail''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablesfalse$variables['transactionId']);
  486.         if (isset($response['error'])) {
  487.             return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), 'Error detalle de producto'$response['error']));
  488.         } elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
  489.             return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), 'Error disponibilidad cruceros'$response->Message));
  490.         }
  491.         if (!isset($response->Message->OTACruiseCabinAvailRS->CabinOptions)) {
  492.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''La Url Ingresada no tiene resultados'));
  493.         } else {
  494.             $cabinOptions = [];
  495.             $currency = (string) $response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption[0]['GradeScurrency'];
  496.             $session->set('[cruiser][finantial_rate]'$finantial_rate);
  497.             foreach ($response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption as $cabinOption) {
  498.                 if (isset($cabinOption['GradePrice'])) {
  499.                     if (isset($cabinOption->Prices)) {
  500.                         $Prices $cabinOption->Prices;
  501.                         foreach ($Prices->Price as $price) {
  502.                             if ('supplier' == $price['Marker']) {
  503.                                 $cabinOption->PricingInfo['AmmountBase'] = $price['Value'];
  504.                             }
  505.                             if ('noncommadd' == $price['Marker']) {
  506.                                 $cabinOption->PricingInfo['AmmountNccf'] = $price['Value'];
  507.                             }
  508.                             if ('gratuities' == $price['Marker']) {
  509.                                 $cabinOption->PricingInfo['gratuities'] = $price['Value'];
  510.                                 $cabinOption->PricingInfo['gratuitiesCOP'] = round((float) $price['Value'] * $finantial_rate);
  511.                             }
  512.                         }
  513.                         $cabinOption->PricingInfo['AmmountCop'] = round((float) $cabinOption['GradePrice'] * $finantial_rate);
  514.                         /*                         * ************************ Commission Agent QSE or Percentage **************** */
  515.                         if ($isAgent) {
  516.                             $taxAgent $taxParameter 1;
  517.                             $cabinOption->PricingInfo['CommissionActive'] = $cruiserActive;
  518.                             if ('0' == $cruiserActive) {
  519.                                 $cabinOption->PricingInfo['CommissionAgentCop'] = $agentQseAmount;
  520.                                 $cabinOption->PricingInfo['CommissionPay'] = round(($agentQseAmount $taxAgent) * $qsePercentegeMax);
  521.                             } elseif ('1' == $cruiserActive) {
  522.                                 // $totalValue = $cabinOption->PricingInfo['AmmountCop'];
  523.                                 $totalValue round($cabinOption->PricingInfo['AmmountBase'] * $finantial_rate);
  524.                                 $valueCommissionPercentage round($totalValue $cruiserpercentage);
  525.                                 $cabinOption->PricingInfo['CommissionAgentCop'] = $valueCommissionPercentage;
  526.                                 $cabinOption->PricingInfo['CommissionPay'] = round(($valueCommissionPercentage $taxAgent) * $qsePercentegeMax);
  527.                             }
  528.                             $cabinOption->PricingInfo['taPercentage'] = $taPercentagePay;
  529.                             $cabinOption->PricingInfo['activeDetail'] = $activeDetail;
  530.                             $cabinOption->PricingInfo['paymentPercentage'] = $qsePercentegeMax;
  531.                             $cabinOption->PricingInfo['CommissionAgent'] = round((float) $cabinOption->PricingInfo['CommissionAgentCop'] / $finantial_rate2);
  532.                             $cabinOption['GradePrice'] = (float) $cabinOption['GradePrice'] + (float) $cabinOption->PricingInfo['CommissionAgent'];
  533.                             $cabinOption->PricingInfo['AmmountCop'] += round($cabinOption->PricingInfo['CommissionAgentCop']);
  534.                         }
  535.                         $cabinOption->PricingInfo['AmmountTaxes'] = $cabinOption['GradeTaxes'];
  536.                         $cabinOption->PricingInfo['AmmountTaxesCOP'] = round((float) $cabinOption['GradeTaxes'] * $finantial_rate);
  537.                         $cabinOption->PricingInfo['AmmountFees'] = $cabinOption['GradeFees'];
  538.                         $cabinOption->PricingInfo['AmmountFeesCOP'] = round((float) $cabinOption['GradeFees'] * $finantial_rate);
  539.                         // $cabinOption->PricingInfo['TotalAmmount'] = $cabinOption->PricingInfo['AmmountBase'] + $cabinOption->PricingInfo['AmmountAddition'];
  540.                     } else {
  541.                         $cabinOption->PricingInfo['AmmountBase'] = $cabinOption['GradePrice'];
  542.                         $cabinOption->PricingInfo['AmmountNccf'] = 0;
  543.                     }
  544.                     $cabinOption->PricingInfo['AmmountBaseCOP'] = round($cabinOption->PricingInfo['AmmountBase'] * $finantial_rate);
  545.                     $cabinOption->PricingInfo['AmmountNccfCOP'] = round((float) $cabinOption->PricingInfo['AmmountNccf'] * $finantial_rate);
  546.                     $cabinOption->PricingInfo['TotalAmmount'] = $cabinOption->PricingInfo['AmmountBase'] + $cabinOption->PricingInfo['AmmountNccf'];
  547.                     $cabinOption['DeckNumber'] = isset($cabinOption['DeckNumber']) ? str_replace('Deck '''$cabinOption['DeckNumber']) : '';
  548.                     $cabinOptions[] = $cabinOption;
  549.                 }
  550.             }
  551.             if (== count($cabinOptions)) {
  552.                 $referer $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
  553.                 if (true === $session->has($transactionID.'[availability_url]')) {
  554.                     return $this->redirect($errorHandler->errorRedirect($session->get($transactionID.'[availability_url]'), 'Error en el proceso''No se encontraron productos para venta en línea para este itinerario, por favor intente nuevamente o comuníquese con nosotros'));
  555.                 } elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
  556.                     return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '''Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
  557.                 } else {
  558.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Error en el proceso''No se encontraron productos para venta en línea para este itinerario, por favor intente nuevamente o comuníquese con nosotros'));
  559.                 }
  560.             }
  561.             usort($cabinOptions, fn ($a$b) => $a['GradePrice'] - $b['GradePrice']);
  562.             $groupCabins = [];
  563.             foreach ($cabinOptions as $cabin) {
  564.                 $groupCabins[(string) $cabin['GradeDescription']][] = $cabin;
  565.             }
  566.             $salilingAtSea = ['Cruising''At Sea''En El Mar''Inside Passage (Cruising)'];
  567.             $itinerary_ports = [];
  568.             $region $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->find(json_decode($regionJsontrue)['id']);
  569.             $portsArray = [];
  570.             $is_origin true;
  571.             $first_port null;
  572.             foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary->item as $port) {
  573.                 if (!in_array($port['name'], $salilingAtSea)) {
  574.                     if (isset($port['latitude']) && '' != $port['latitude'] && !$isFront) {
  575.                         $countryPort $this->get_location($port['latitude'], $port['longitude']);
  576.                     } else {
  577.                         $countryPort['error'] = 'No information';
  578.                     }
  579.                     if (!isset($countryPort['error'])) {
  580.                         $country_name $em->getRepository(\Aviatur\GeneralBundle\Entity\Country::class)->findOneBy(['iatacode' => $countryPort['country'], 'languagecode' => 'es-ES']);
  581.                         $port_geolocal $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiserPortsGeolocalization::class)->findBy(['portName' => (string) $port['name']]);
  582.                         if (null != $country_name && == count($port_geolocal)) {
  583.                             $portsArray[] = (string) $port['name'];
  584.                             $cruiserPortsGeolocalization = new CruiserPortsGeolocalization();
  585.                             $cruiserPortsGeolocalization->setPortname((string) $port['name']);
  586.                             $cruiserPortsGeolocalization->setLongitude((string) $port['longitude']);
  587.                             $cruiserPortsGeolocalization->setLatitude((string) $port['latitude']);
  588.                             $cruiserPortsGeolocalization->setCountry($country_name);
  589.                             $em->persist($cruiserPortsGeolocalization);
  590.                             $em->flush();
  591.                             if ($is_origin) {
  592.                                 $first_port $cruiserPortsGeolocalization;
  593.                             }
  594.                         } elseif ($is_origin && == count($port_geolocal)) {
  595.                             $first_port $port_geolocal[0];
  596.                         }
  597.                         if ($is_origin) {
  598.                             $cruiserRegionPorts $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->findOnePortByRegion((string) $port['name'], $region->getregionCode());
  599.                             if (null === $cruiserRegionPorts || (is_countable($cruiserRegionPorts) ? count($cruiserRegionPorts) : 0) == 0) {
  600.                                 $cruiseRegionPorts = new CruiseRegionPorts();
  601.                                 $cruiseRegionPorts->setCruiserPortsGeolocalization($first_port);
  602.                                 $cruiseRegionPorts->setRegion($region);
  603.                                 $em->persist($cruiseRegionPorts);
  604.                                 $em->flush();
  605.                             }
  606.                         }
  607.                     }
  608.                     $itinerary_ports[] = $port;
  609.                 }
  610.                 $is_origin false;
  611.             }
  612.             $facilities = [];
  613.             if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->facilities->facility)) {
  614.                 foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->facilities->facility as $facility) {
  615.                     $facilities[] = $facility;
  616.                 }
  617.             }
  618.             foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->images->image as $image) {
  619.                 $shipGalery[] = $image;
  620.             }
  621.             array_shift($shipGalery); // remove first element
  622.             $galeryResume = [];
  623.             if (count($shipGalery) > 3) {
  624.                 $galeryResume array_slice($shipGalery03);
  625.             } elseif (count($shipGalery) > 0) {
  626.                 $galeryResume $shipGalery;
  627.             }
  628.             $safeUrl 'https://'.$agency->getDomainsecure();
  629.             $startItinerary $itinerary_ports[0];
  630.             $endItinerary end($itinerary_ports);
  631.             $session->set($transactionID.'[cruiser][infoTravel]', [
  632.                 'referer' => $session->get($transactionID.'[availability_url]'),
  633.                 'adults' => $adults,
  634.                 'children' => $children,
  635.                 'ageChild' => $ageChild,
  636.                 'region' => $regionJson,
  637.                 'vendorName' => $vendorName,
  638.                 'vendorCode' => $request->get('vendorCode'),
  639.                 'vendorImage' => $vendorImage,
  640.                 'cruiseName' => $cruiseName,
  641.                 'cruiseImage' => $cruiseImage,
  642.                 'shipName' => $shipName,
  643.                 'shipCode' => $shipCode,
  644.                 'nights' => $nights,
  645.                 'startDate' => $startDate,
  646.                 'endDate' => $endDate,
  647.                 'description' => 'Crucero - '.$vendorName.' '.$cruiseName.' ('.$startDate.' al '.$endDate.')',
  648.                 'currency' => $currency,
  649.                 'cruiseDetailItinerary' => json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary),
  650.                 'totalRawItinerary' => str_replace('<i class="icon icon_dart_right pb-2 pr-1 pl-1"></i>''=>'$request->get('totalRawItinerary')),
  651.                 'galeryResume' => json_encode($galeryResume),
  652.             ]);
  653.             $pointRedemption $em->getRepository(\Aviatur\GeneralBundle\Entity\PointRedemption::class)->findPointRedemptionWithAgency($agency);
  654.             if (null != $pointRedemption) {
  655.                 $points 0;
  656.                 if ($fullRequest->request->has('pointRedemptionValue')) {
  657.                     $points $fullRequest->request->get('pointRedemptionValue');
  658.                     $session->set('point_redemption_value'$points);
  659.                 } elseif ($fullRequest->query->has('pointRedeem')) {
  660.                     $points $fullRequest->query->get('pointRedeem');
  661.                     $session->set('point_redemption_value'$points);
  662.                 } elseif ($session->has('point_redemption_value')) {
  663.                     $points $session->get('point_redemption_value');
  664.                 }
  665.                 $pointRedemption['Config']['Amount']['CurPoint'] = $points;
  666.             }
  667.             $urlDetail $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_detail.html.twig');
  668.             return $this->render(
  669.                 $urlDetail,
  670.                 [
  671.                         'safeUrl' => $safeUrl,
  672.                         'ProviderId' => $providerId,
  673.                         'variables' => $variables,
  674.                         'startDate' => $startDate,
  675.                         'endDate' => $endDate,
  676.                         'nights' => $nights,
  677.                         'adults' => $adults,
  678.                         'children' => $children,
  679.                         'CabinOptions' => $response->Message->OTACruiseCabinAvailRS->CabinOptions,
  680.                         'groupCabins' => $groupCabins,
  681.                         'Itinerary' => $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary,
  682.                         'startItinerary' => $startItinerary,
  683.                         'endItinerary' => $endItinerary,
  684.                         'vendorName' => $vendorName,
  685.                         'cabinOptions' => $cabinOptions,
  686.                         'cruiseImage' => $cruiseImage,
  687.                         'cruiseName' => $cruiseName,
  688.                         'shipName' => $shipName,
  689.                         'vendorImage' => $vendorImage,
  690.                         'sailingTravel' => $itinerary_ports,
  691.                         'facilities' => $facilities,
  692.                         'shipGalery' => $shipGalery,
  693.                         'referer' => $session->get($transactionID.'[availability_url]'),
  694.                         'pointRedemption' => $pointRedemption,
  695.                             ]
  696.             );
  697.         }
  698.     }
  699.     public function detailInvalidAction(Request $requestSessionInterface $sessionTwigFolder $twigFolderAviaturErrorHandler $errorHandlerRouterInterface $routerParameterBagInterface $parameterBag)
  700.     {
  701.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  702.         $server $request->server;
  703.         if (true === $session->has($transactionIdSessionName)) {
  704.             $transactionId $session->get($transactionIdSessionName);
  705.             $referer $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
  706.             if (true === $session->has($transactionId.'[availability_url]')) {
  707.                 return $this->redirect($errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), 'Página no accesible''No puedes acceder al detalle sin disponibilidad'));
  708.             } elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
  709.                 return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '''Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
  710.             } else {
  711.                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Página no accesible''No puedes acceder al detalle sin disponibilidad'));
  712.             }
  713.         } else {
  714.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Página no accesible''No puedes acceder al detalle sin disponibilidad'));
  715.         }
  716.     }
  717.     public function cabinsDetailAction(Request $requestSessionInterface $sessionTwigFolder $twigFolderAviaturWebService $webServiceAviaturErrorHandler $errorHandlerAuthorizationCheckerInterface $authorizationCheckerParameterBagInterface $parameterBag)
  718.     {
  719.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  720.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  721.         $transactionID null;
  722.         $isAgent false;
  723.         $em $this->getDoctrine()->getManager();
  724.         $transactionId $session->get($transactionIdSessionName);
  725.         if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  726.             $user $this->getUser();
  727.             $emailuser $user->getemail();
  728.             $agent $user->getAgent();
  729.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  730.             if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  731.                 $idagent $agent[0]->getid();
  732.                 $nombreagente $user->getFirstname().' '.$user->getLastname();
  733.                 $agencyFolder $twigFolder->twigFlux();
  734.                 $isAgent true;
  735.             }
  736.         }
  737.         $server $request->server;
  738.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  739.         $fullRequest $request;
  740.         $request $fullRequest->request;
  741.         $agencyFolder $twigFolder->twigFlux();
  742.         if (true === $request->has('correlationID')) {
  743.             $correlationId $request->get('correlationID');
  744.         } else {
  745.             $correlationId $session->get($correlationIdSessionName);
  746.         }
  747.         if (true === $request->has('transactionID')) {
  748.             $transactionID $request->get('transactionID');
  749.         } elseif (true === $session->has($transactionIdSessionName)) {
  750.             $transactionID $session->get($transactionIdSessionName);
  751.         }
  752.         if ($session->has($transactionID.'[cruiser][provider]')) {
  753.             $providerId $session->get($transactionID.'[cruiser][provider]');
  754.         } elseif ($request->has('providerID')) {
  755.             $providerId $request->get('providerID');
  756.             $session->set($transactionID.'[cruiser][provider]'$providerId);
  757.         }
  758.         $url_availability $session->get($transactionID.'[availability_url]');
  759.         $gradeNo $request->get('gradeNo');
  760.         $gradeResultNo $request->get('gradeResultNo');
  761.         // $totalRawItinerary = str_replace('<i class="icon icon_dart_right"></i>', "=>", $request->get('totalRawItinerary'));
  762.         $cruiseModel = new CruiseModel();
  763.         $templateXml $cruiseModel->getXmlCabinsDetail();
  764.         $xmlRequest $templateXml[0];
  765.         $variables = [];
  766.         $variables['transactionId'] = $transactionID;
  767.         $variables['ProviderId'] = $providerId;
  768.         $variables['correlationId'] = $correlationId;
  769.         $variables['groupCode'] = $gradeNo;
  770.         $variables['fareCode'] = $gradeResultNo;
  771.         $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseCabin''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablesfalse$variables['transactionId']);
  772.         if (isset($response['error'])) {
  773.             $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseCabin''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablestrue);
  774.             if (isset($response['error'])) {
  775.                 return $this->redirect($errorHandler->errorRedirect($url_availability'1-Error disponibilidad cabinas'$response['error']));
  776.             }
  777.         } elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
  778.             return $this->redirect($errorHandler->errorRedirect($url_availability'2-Error disponibilidad cabinas'$response->Message));
  779.         }
  780.         $cabins = [];
  781.         $deckImages = [];
  782.         $highlightsList = [];
  783.         $sizedImages = [];
  784.         $indexList 0;
  785.         foreach ($response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption as $cabinOption) {
  786.             $cabins[] = $cabinOption;
  787.             if (isset($cabinOption->CabinDeck['Imageurl']) && isset($cabinOption->CabinDeck['Imageid']) && '' != $cabinOption->CabinDeck['Imageid']) {
  788.                 // Images array
  789.                 if (!in_array((string) $cabinOption->CabinDeck['Id'], $deckImages)) {
  790.                     $deckImages[(string) $cabinOption->CabinDeck['Id']] = [
  791.                         'Imageid' => (string) $cabinOption->CabinDeck['Imageid'],
  792.                         'Deckid' => (string) $cabinOption->CabinDeck['Id'],
  793.                         'Imageurl' => (string) $cabinOption->CabinDeck['Imageurl'],
  794.                         'DeckNumber' => (string) $cabinOption['DeckNumber'],
  795.                     ];
  796.                 }
  797.                 if (!in_array((string) $cabinOption->CabinDeck['Imageurl'], $sizedImages)) {
  798.                     [$width$height] = getimagesize(str_replace('https''http', (string) $cabinOption->CabinDeck['Imageurl']));
  799.                     $sizedImages[] = (string) $cabinOption->CabinDeck['Imageurl'];
  800.                     $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['width'] = $width;
  801.                     $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['height'] = $height;
  802.                 } else {
  803.                     $width $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['width'];
  804.                     $height $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['height'];
  805.                 }
  806.                 $highlightsList[(string) $cabinOption->CabinDeck['Id']][$indexList] = [
  807.                     'imageid' => (string) $cabinOption->CabinDeck['Imageid'],
  808.                     'deckid' => (string) $cabinOption->CabinDeck['Id'],
  809.                     'cabinno' => (string) $cabinOption['CabinNumber'],
  810.                     'passengersCapacity' => (string) $cabinOption['ConfirmedOccupancy'],
  811.                     'width' => $width,
  812.                     'height' => $height,
  813.                     'x1' => (int) $cabinOption['X1'],
  814.                     'y1' => (int) $cabinOption['Y1'],
  815.                     'x2' => (int) $cabinOption['X2'],
  816.                     'y2' => (int) $cabinOption['Y2'],
  817.                 ];
  818.             }
  819.             ++$indexList;
  820.         }
  821.         usort($cabins, function ($a$b) {
  822.             if ((int) $a['DeckNumber'] == (int) $b['DeckNumber']) {
  823.                 return (int) $a['CabinNumber'] <=> (int) $b['CabinNumber'];
  824.             } else {
  825.                 return ((int) $a['DeckNumber'] > (int) $b['DeckNumber']) ? -1;
  826.             }
  827.         });
  828.         usort($deckImages, fn ($a$b) => (int) $a['DeckNumber'] <=> (int) $b['DeckNumber']);
  829.         $highlightsList = \json_encode($highlightsList);
  830.         $cabinsData $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_cabin_options.html.twig');
  831.         $infoTravel $session->get($transactionID.'[cruiser][infoTravel]');
  832.         $typePerson[1] = [
  833.             'ADT' => $infoTravel['adults'],
  834.             'CHD' => $infoTravel['children'],
  835.             'INF' => 0,
  836.         ];
  837.         $infoTravel['cabinType'] = $request->get('cabinType');
  838.         $infoTravel['cabinName'] = $request->get('cabinName');
  839.         $infoTravel['cabinDescription'] = $request->get('cabinDescription');
  840.         $infoTravel['cabinTypePrice'] = $request->get('cabinPrice');
  841.         $infoTravel['cabinTypePriceCOP'] = $request->get('cabinPriceCOP');
  842.         $infoTravel['cabinGroupCode'] = $variables['groupCode'];
  843.         $infoTravel['cabinFareCode'] = $variables['fareCode'];
  844.         $infoTravel['cabinAmmountBase'] = $request->get('cabinAmmountBase');
  845.         $infoTravel['cabinAmmountFees'] = $request->get('cabinAmmountFees');
  846.         $infoTravel['cabinAmmountTaxes'] = $request->get('cabinAmmountTaxes');
  847.         $infoTravel['cabinAmmountNccf'] = $request->get('cabinAmmountNccf');
  848.         $infoTravel['cabinAmmountBaseCOP'] = $request->get('cabinAmmountBaseCOP');
  849.         $infoTravel['cabinAmmountFeesCOP'] = $request->get('cabinAmmountFeesCOP');
  850.         if ($isAgent) {
  851.             $infoTravel['cabincommissionCOP'] = $request->get('cabinCommissionCOP');
  852.             $infoTravel['cabinCommissionPay'] = $request->get('cabinCommissionPay');
  853.             $infoTravel['cabinCommission'] = $request->get('cabinCommission');
  854.             $infoTravel['cabinCommissionActive'] = $request->get('cabinCommissionActive');
  855.             $infoTravel['activeDetail'] = $request->get('activeDetail');
  856.             $infoTravel['cabinIsAgent'] = $isAgent;
  857.             $infoTravel['taPercentage'] = $request->get('taPercentage');
  858.             $infoTravel['paymentPercentage'] = $request->get('paymentPercentage');
  859.         } else {
  860.             $infoTravel['cabinIsAgent'] = $isAgent;
  861.         }
  862.         $infoTravel['cabinAmmountTaxesCOP'] = $request->get('cabinAmmountTaxesCOP');
  863.         $infoTravel['cabinAmmountNccfCOP'] = $request->get('cabinAmmountNccfCOP');
  864.         if ($request->has('cabinAmmountGratuities')) {
  865.             $infoTravel['cabinAmmountGratuities'] = $request->get('cabinAmmountGratuities');
  866.             $infoTravel['cabinAmmountGratuitiesCOP'] = $request->get('cabinAmmountGratuitiesCOP');
  867.         }
  868.         $session->set($transactionID.'[cruiser][infoTravel]'$infoTravel);
  869.         $safeUrl 'https://'.$agency->getDomainsecure();
  870.         $cruiseDetailItinerary json_decode($infoTravel['cruiseDetailItinerary'], true);
  871.         $startItinerary $cruiseDetailItinerary['item'][0];
  872.         $endItinerary end($cruiseDetailItinerary['item']);
  873.         return $this->render($cabinsData, [
  874.                     'safeUrl' => $safeUrl,
  875.                     'variables' => $variables,
  876.                     'Cabins' => $cabins,
  877.                     'services' => $typePerson,
  878.                     'infoTravel' => $infoTravel,
  879.                     'deckImages' => $deckImages,
  880.                     'highlightsList' => $highlightsList,
  881.                     'startItinerary' => $startItinerary,
  882.                     'endItinerary' => $endItinerary,
  883.         ]);
  884.     }
  885.     public function cabinReservationAction(Request $requestSessionInterface $sessionAviaturWebService $webServiceTokenStorageInterface $tokenStorageManagerRegistry $registryParameterBagInterface $parameterBagTwigFolder $twigFolderAviaturErrorHandler $errorHandlerPayoutExtraService $extraServiceAuthorizationCheckerInterface $authorizationCheckerCustomerMethodPaymentService $methodPaymentServiceRouterInterface $routerAviaturLogSave $logSave)
  886.     {
  887.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  888.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  889.         $transactionID null;
  890.         $typePerson = [];
  891.         $providerId null;
  892.         $isAgent false;
  893.         $em $this->getDoctrine()->getManager();
  894.         $phoneService = new PhoneNumberService($em);
  895.         $phonePrefixes $phoneService->getActivePrefixes();
  896.         $transactionId $session->get($transactionIdSessionName);
  897.         if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  898.             $user $this->getUser();
  899.             $emailuser $user->getemail();
  900.             $agent $user->getAgent();
  901.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  902.             if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  903.                 $isAgent true;
  904.             }
  905.         }
  906.         $server $request->server;
  907.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  908.         $fullRequest $request;
  909.         $request $fullRequest->request;
  910.         $agencyFolder $twigFolder->twigFlux();
  911.         $typeGender $em->getRepository(\Aviatur\CustomerBundle\Entity\Gender::class)->findAll();
  912.         $typeDocument $em->getRepository(\Aviatur\CustomerBundle\Entity\DocumentType::class)->findAll();
  913.         $isFront $session->has('operatorId');
  914.         $conditions $em->getRepository(\Aviatur\GeneralBundle\Entity\HistoricalInfo::class)->findMessageByAgencyOrNull($agency'reservation_conditions_for_cruise');
  915.         // $paymentMethodAgency = $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findBy(array('paymentMethod' => array(1, 2, 4), 'agency' => $agency, 'isactive' => 1));
  916.         $paymentOptions = [];
  917.         $finantial_rate $session->get('[cruiser][finantial_rate]');
  918.         if (true === $request->has('transactionID')) {
  919.             $transactionID $request->get('transactionID');
  920.         } elseif (true === $session->has($transactionIdSessionName)) {
  921.             $transactionID $session->get($transactionIdSessionName);
  922.         }
  923.         if ($session->has($transactionID.'[cruiser][provider]')) {
  924.             $providerId $session->get($transactionID.'[cruiser][provider]');
  925.         } elseif ($request->has('providerID')) {
  926.             $providerId $request->get('providerID');
  927.             $session->set($transactionID.'[cruiser][provider]'$providerId);
  928.         }
  929.         $infoTravel $session->get($transactionID.'[cruiser][infoTravel]');
  930.         $typePerson[1] = [
  931.             'ADT' => $infoTravel['adults'],
  932.             'CHD' => $infoTravel['children'],
  933.             'INF' => 0,
  934.         ];
  935.         // Travel date minor that 31 days or payment date is weekend only pay with credit card method
  936.         $segundos strtotime($infoTravel['startDate']) - strtotime('now');
  937.         $diferencia_dias intval($segundos 60 60 24);
  938.         $restrictDays = []; // No se aplican restricciones por el momento.
  939.         if ($diferencia_dias 31 || in_array(date('w'), $restrictDays)) {
  940.             $queryPaymentMethods = ['paymentMethod' => [14], 'agency' => $agency'isactive' => 1];
  941.         } else {
  942.             $queryPaymentMethods = ['paymentMethod' => [124], 'agency' => $agency'isactive' => 1];
  943.         }
  944.         $paymentMethodAgency $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findBy($queryPaymentMethods);
  945.         $routeName $fullRequest->get('_route');
  946.         if ('aviatur_cruise_retry_secure' == $routeName) {
  947.             $detail_data_cruise json_decode($session->get($transactionID.'[cruiser][detail_data_cruise]'));
  948.             $billingData $detail_data_cruise->BD;
  949.             $passangerInfo $detail_data_cruise->PI;
  950.             $contactData $detail_data_cruise->CD;
  951.             $cruiseData $detail_data_cruise->QD;
  952.             $paymentData $detail_data_cruise->PD;
  953.             $retry true;
  954.             $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
  955.             if (false !== strpos($billingData->first_name'***')) {
  956.                 $billingData->first_name $customer->getFirstname();
  957.                 $billingData->last_name $customer->getLastname();
  958.                 $billingData->address $customer->getAddress();
  959.                 $billingData->phone $customer->getPhone();
  960.                 $billingData->email $customer->getEmail();
  961.             }
  962.             if (false !== strpos($passangerInfo->first_name_1_1'***')) {
  963.                 $passangerInfo->first_name_1_1 $customer->getFirstname();
  964.                 $passangerInfo->last_name_1_1 $customer->getLastname();
  965.                 $passangerInfo->email_1_1 $customer->getEmail();
  966.                 $contactData->phone $customer->getPhone();
  967.             }
  968.             if (isset($paymentData->cusPOptSelected)) {
  969.                 $customerLogin $tokenStorage->getToken()->getUser();
  970.                 if (is_object($customerLogin)) {
  971.                     $paymentsSaved $methodPaymentService->getMethodsByCustomer($customerLoginfalse);
  972.                 }
  973.             }
  974.             $quotationMode = isset($cruiseData->quotationMode) ? true false;
  975.         } else {
  976.             $session->set($transactionID.'[cruiser][detail]'$request);
  977.             $session->set($transactionID.'[cruiser][provider]'$providerId);
  978.             $infoTravel['cabinNumber'] = $request->get('cabinNumber');
  979.             $infoTravel['cabinCategoryCode'] = $request->get('cabinCategoryCode');
  980.             $session->set($transactionID.'[cruiser][infoTravel]'$infoTravel);
  981.             $retry false;
  982.             $quotationMode false;
  983.             if (!isset($infoTravel['basketCode'])) {
  984.                 $request1 = new Request([], $request->all(), [], $request->all(), [], [], [], $request);
  985.                 $response $this->addCabinShoppingCart($request1$session$parameterBag$webService$errorHandler);
  986.                 $infoTravel $session->get($transactionID.'[cruiser][infoTravel]');
  987.                 if (isset($response['error'])) {
  988.                     $referer $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
  989.                     if (true === $session->has($transactionID.'[availability_url]')) {
  990.                         return $this->redirect($errorHandler->errorRedirect($session->get($transactionID.'[availability_url]'), 'Error en el proceso''1-No fue posible realizar la reserva, por favor intentalo nuevamente'));
  991.                     } elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
  992.                         return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '''Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
  993.                     } else {
  994.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Error en el proceso''2-No fue posible realizar la reserva, por favor intentalo nuevamente'));
  995.                     }
  996.                 }
  997.                 $finantial_rate $session->get('[cruiser][finantial_rate]');
  998.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode']) && '' != $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode']) {
  999.                     $infoTravel['basketCode'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode'];
  1000.                     $infoTravel['reservationKey'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['itemkey'];
  1001.                     $infoTravel['commissionPercentage'] = (string) round($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['value']);
  1002.                     $infoTravel['commissionValue'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['amount'];
  1003.                     $infoTravel['commissionValueCOP'] = round((float) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['amount'] * $finantial_rate);
  1004.                     if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  1005.                         $infoTravel['commissionFareAgent'] = round($infoTravel['commissionValue'] * $infoTravel['taPercentage']);
  1006.                         $infoTravel['commissionFareAgentCOP'] = round($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']);
  1007.                     }
  1008.                 } else {
  1009.                     $referer $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
  1010.                     if (true === $session->has($transactionID.'[availability_url]')) {
  1011.                         return $this->redirect($errorHandler->errorRedirect($session->get($transactionID.'[availability_url]'), 'Error en el proceso''3-No fue posible realizar la reserva, por favor intentalo nuevamente'));
  1012.                     } elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
  1013.                         return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '''Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
  1014.                     } else {
  1015.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '4-Error en el proceso''No fue posible realizar la reserva, por favor intentalo nuevamente'));
  1016.                     }
  1017.                 }
  1018.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) && $diferencia_dias < (int) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) {
  1019.                     // if ($diferencia_dias < 1200) {
  1020.                     $quotationMode true;
  1021.                 }
  1022.                 $cruiseFare = [];
  1023.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown->item)) {
  1024.                     foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown->item as $item) {
  1025.                         $cruiseFare[(string) $item['category']][(string) $item['description']] = (string) $item['totalcost'];
  1026.                     }
  1027.                 }
  1028.                 $infoTravel['taxes'] = $cruiseFare;
  1029.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->optionalextras)) {
  1030.                     foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->optionalextras->optionalextra as $extra) {
  1031.                         if ('grats' == $extra['code']) {
  1032.                             $infoTravel['gratuities'] = (string) $extra['sprice'];
  1033.                             $infoTravel['gratuitiesCOP'] = round((float) $infoTravel['gratuities'] * $finantial_rate);
  1034.                         }
  1035.                     }
  1036.                 }
  1037.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits)) {
  1038.                     $dueDate $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['duedate'];
  1039.                     $newDueDate strtotime('-30 day'strtotime($dueDate));
  1040.                     $newDueDate date('Y-m-d'$newDueDate);
  1041.                     $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['duedate'] = $newDueDate;
  1042.                     $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['priceCOP'] = $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['price'] * $finantial_rate;
  1043.                     $infoTravel['deposit'] = json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits);
  1044.                 } else {
  1045.                     $infoTravel['deposit'] = null;
  1046.                     $infoTravel['deposit'] = null;
  1047.                 }
  1048.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->cardcharges)) {
  1049.                     $cardPermitted = [];
  1050.                     $cardPermitted['stringnames'] = '';
  1051.                     foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->cardcharges->cardcharge as $cardcharge) {
  1052.                         $cardPermitted['stringnames'] .= mb_strtolower($cardcharge['cardname']);
  1053.                         $cardPermitted[(string) $cardcharge['cardtype']]['name'] = (string) $cardcharge['cardname'];
  1054.                         if ('none' != $cardcharge['chargetype']) {
  1055.                             $cardPermitted[(string) $cardcharge['cardtype']]['chargeVal'] = (string) $cardcharge['chargevalue'];
  1056.                         }
  1057.                     }
  1058.                     $infoTravel['cardPermitted'] = $cardPermitted;
  1059.                 }
  1060.                 if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->dining)) {
  1061.                     $dinningOptions json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->dining);
  1062.                     $infoTravel['dinningOptions'] = $dinningOptions;
  1063.                 }
  1064.                 $infoTravel['service_quotation'] = $session->has($transactionID.'[cruise][quotation]') ? true false;
  1065.                 $session->set($transactionID.'[cruiser][infoTravel]'$infoTravel);
  1066.             } else {
  1067.                 $infoTravel $session->get($transactionID.'[cruiser][infoTravel]');
  1068.                 $responseCabinAvail simplexml_load_string($session->get($transactionID.'[cruiser][CabinAvailResponse]'));
  1069.                 $segundos strtotime($infoTravel['startDate']) - strtotime('now');
  1070.                 $diferencia_dias intval($segundos 60 60 24);
  1071.                 if (isset($responseCabinAvail->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) && $diferencia_dias < (int) $responseCabinAvail->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) {
  1072.                     $quotationMode true;
  1073.                 }
  1074.             }
  1075.         }
  1076.         foreach ($paymentMethodAgency as $payMethod) {
  1077.             $paymentCode $payMethod->getPaymentMethod()->getCode();
  1078.             if (!in_array($paymentCode$paymentOptions)) {
  1079.                 $paymentOptions[] = $paymentCode;
  1080.             }
  1081.         }
  1082.         $cybersource = [];
  1083.         if (in_array('cybersource'$paymentOptions)) {
  1084.             $cybersource['merchant_id'] = $paymentMethodAgency[array_search('cybersource'$paymentOptions)]->getSitecode();
  1085.             $cybersource['org_id'] = $paymentMethodAgency[array_search('cybersource'$paymentOptions)]->getTrankey();
  1086.         }
  1087.         foreach ($paymentOptions as $key => $paymentOption) {
  1088.             if ('cybersource' == $paymentOption) {
  1089.                 unset($paymentOptions[$key]); // strip from other renderizable payment methods
  1090.             }
  1091.         }
  1092.         $banks = [];
  1093.         if (in_array('pse'$paymentOptions)) {
  1094.             $banks $em->getRepository(\Aviatur\PaymentBundle\Entity\PseBank::class)->findAll();
  1095.         }
  1096.         $ageRuleByCruise = [
  1097.             '22' => 21,
  1098.             '3' => 21,
  1099.             '66' => 21,
  1100.         ];
  1101.         $cruisesInTravel = [
  1102.             $infoTravel['vendorCode'] => $infoTravel['vendorName'],
  1103.         ];
  1104.         $repositoryDocumentType $registry->getRepository(\Aviatur\CustomerBundle\Entity\DocumentType::class);
  1105.         $queryDocumentType $repositoryDocumentType
  1106.                 ->createQueryBuilder('p')
  1107.                 ->where('p.paymentcode != :paymentcode')
  1108.                 ->setParameter('paymentcode''')
  1109.                 ->getQuery();
  1110.         $documentPaymentType $queryDocumentType->getResult();
  1111.         $provider $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($providerId);
  1112.         $payment_type_form_name $provider->getPaymentType()->getTwig();
  1113.         $formReservation $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_formReservation.html.twig');
  1114.         $cruiseDetailItinerary json_decode($infoTravel['cruiseDetailItinerary'], true);
  1115.         $startItinerary $cruiseDetailItinerary['item'][0];
  1116.         $endItinerary end($cruiseDetailItinerary['item']);
  1117.         $isNational false;
  1118.         $args = (object) [
  1119.                     'passangerTypes' => $typePerson,
  1120.                     'isNational' => $isNational,
  1121.         ];
  1122.         $payoutExtras null;
  1123.         if (!$isFront) {
  1124.             $payoutExtras $extraService->loadPayoutExtras($agency$transactionID'cruiser'$args);
  1125.         }
  1126.         if ($isAgent) {
  1127.             $amountProduct = (float) $infoTravel['cabinAmmountBaseCOP'] - (float) $infoTravel['commissionValueCOP'];
  1128.             $amountProduct += ((float) $infoTravel['cabinAmmountFeesCOP'] + (float) $infoTravel['cabinAmmountTaxesCOP']);
  1129.             $info_product = ['amountQse' => (float) $infoTravel['cabincommissionCOP'],
  1130.                 'commissionQse' => (float) $infoTravel['cabinCommissionPay'],
  1131.                 'amountTa' => (float) $infoTravel['commissionValueCOP'],
  1132.                 'commissionTa' => (float) round($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']),
  1133.                 'amountProduct' => $amountProduct,
  1134.                 'percentageTa' => isset($infoTravel['commissionValue']) ? (float) $infoTravel['commissionValue'] : 0, ];
  1135.             $session->set($transactionId.'_agentInfoTransaction'$info_product);
  1136.             $infoTravel['commissionQSE'] = $infoTravel['cabinCommissionPay'];
  1137.             $infoTravel['cabinCommissionPay'] += (float) ($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']);
  1138.         }
  1139.         $isFront $session->has('operatorId');
  1140.         $quotation_web $session->has($transactionID.'[cruise][quotation]') ? true false;
  1141.         $cotizationWeb false;
  1142.         if (($quotation_web && !$isFront) || $request->has('makeCotization')) {
  1143.             $cotizationWeb true;
  1144.         }
  1145.         // dd($infoTravel);
  1146.         /* Aplicando para vuelo, pero teniendo cuidado con los otros productos */
  1147.         /* Necesitamos crear un arreglo que tenga todos los rangos de IIN asociados a su franquicia y a sus límites de número de tarjeta */
  1148.         $iinRecordsArray $webService->getIINRanges($em);
  1149.         return $this->render($formReservation, [
  1150.                     'airline_miles' => null,
  1151.                     'banks' => $banks,
  1152.                     'cybersource' => $cybersource,
  1153.                     'cards' => $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findBy(['isactive' => 1]),
  1154.                     'inactiveCards' => $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findBy(['isactive' => 0]),
  1155.                     'twig_readonly' => $retry,
  1156.                     'cotization' => $cotizationWeb,
  1157.                     'paymentOptions' => $paymentOptions,
  1158.                     'payment_type_form_name' => $payment_type_form_name,
  1159.                     'payment_doc_type' => $documentPaymentType,
  1160.                     'doc_type' => $typeDocument,
  1161.                     'passengers' => $passangerInfo ?? null,
  1162.                     'billingData' => $billingData ?? null,
  1163.                     'contactData' => $contactData ?? null,
  1164.                     'cruiseData' => $cruiseData ?? null,
  1165.                     'services' => $typePerson,
  1166.                     'gender' => $typeGender,
  1167.                     'conditions' => $conditions,
  1168.                     'infoTravel' => $infoTravel,
  1169.                     'startItinerary' => $startItinerary,
  1170.                     'endItinerary' => $endItinerary,
  1171.                     'deposit' => null != $infoTravel['deposit'] ? json_decode($infoTravel['deposit'], true) : null,
  1172.                     'dinningOptions' => isset($infoTravel['dinningOptions']) ? json_decode($infoTravel['dinningOptions'], true) : null,
  1173.                     'ageRuleByCruise' => $ageRuleByCruise,
  1174.                     'cruisesInTravel' => $cruisesInTravel,
  1175.                     'payoutExtras' => $payoutExtras,
  1176.                     'service_quotation' => $infoTravel['service_quotation'],
  1177.                     'paymentsSaved' => isset($paymentsSaved) ? $paymentsSaved['info'] : null,
  1178.                     'quotationMode' => $quotationMode,
  1179.                     'vendorCode' => $infoTravel['vendorName'],
  1180.                     'pse' => true,
  1181.                     'ccranges' => $iinRecordsArray["ccranges"],
  1182.                     'ccfranchises' => $iinRecordsArray["ccfranchises"],
  1183.                     'phone_prefixes' => $phonePrefixes,
  1184.                     'default_country' => 'CO',
  1185.         ]);
  1186.     }
  1187.     public function prePaymentStep1Action(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailerPdf $pdfTokenStorageInterface $tokenStorageTokenizerService $tokenizerServiceAviaturErrorHandler $errorHandlerCustomerMethodPaymentService $methodPaymentServiceAviaturLogSave $logSave QuotationUtils $QuotationUtils)
  1188.     {
  1189.         $projectDir $parameterBag->get('kernel.project_dir');
  1190.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1191.         $aviaturPaymentRetryTimes $parameterBag->get('aviatur_payment_retry_times');
  1192.         if ($request->isXmlHttpRequest()) {
  1193.             $transactionId $session->get($transactionIdSessionName);
  1194.             $billingData $request->request->get('BD');
  1195.             $em $this->getDoctrine()->getManager();
  1196.             $postData $request->request->all();
  1197.             $publicKey $aviaturEncoder->aviaturRandomKey();
  1198.             if (isset($postData['PD']['card_num'])) {
  1199.                 $postDataInfo $postData;
  1200.                 if (isset($postDataInfo['PD']['cusPOptSelected'])) {
  1201.                     $customerLogin $tokenStorage->getToken()->getUser();
  1202.                     $infoMethodPaymentByClient $methodPaymentService->getMethodsByCustomer($customerLogintrue);
  1203.                     $cardToken $infoMethodPaymentByClient['info'][$postDataInfo['PD']['cusPOptSelected']]['token'];
  1204.                     $postDataInfo['PD']['card_num'] = $cardToken;
  1205.                 } else {
  1206.                     $postDataInfo['PD']['card_num'] = $tokenizerService->getToken($postData['PD']['card_num']);
  1207.                 }
  1208.                 $postData['PD']['card_values'] = ['card_num_token' => $postDataInfo['PD']['card_num'], 'card_num' => $postData['PD']['card_num']];
  1209.             }
  1210.             $quotation_web $session->has($transactionId.'[cruise][quotation]') ? true false;
  1211.             if ($session->has($transactionId.'[cruise][quotation]') || isset($postData['QD']['quotationMode'])) {
  1212.                 $session->set($transactionId.'[cruiser][detail_data_cruise]'json_encode($postData));
  1213.                 if (isset($postData['QD']['quotationMode']) || true == $quotation_web) {
  1214.                     $infoTravel $session->get($transactionId.'[cruiser][infoTravel]');
  1215.                     $infoTravel['web_quotation'] = true;
  1216.                     $session->set($transactionId.'[cruiser][infoTravel]'$infoTravel);
  1217.                 }
  1218.                 $this->sendCruiseConfirmationAction($request$parameterBag$aviaturEncoder$twigFolder$exceptionLog$webService$authorizationChecker$mailer$pdf$logSave$errorHandler$QuotationUtils);
  1219.                 $response = new Response(json_encode(['url' => $this->generateUrl('aviatur_cruise_payment_success_secure')]));
  1220.                 $response->headers->set('Content-Type''application/json');
  1221.                 return $response;
  1222.             } else {
  1223.                 $encodedInfo $aviaturEncoder->AviaturEncode(json_encode($postDataInfo ?? $postData), $publicKey);
  1224.                 $formUserInfo = new FormUserInfo();
  1225.                 $formUserInfo->setInfo($encodedInfo);
  1226.                 $formUserInfo->setPublicKey($publicKey);
  1227.                 $em->persist($formUserInfo);
  1228.                 $em->flush();
  1229.                 $session->set($transactionId.'[cruiser][user_info]'$formUserInfo->getId());
  1230.                 if ((true !== $session->has($transactionId.'[cruiser][retry]')) || (true !== $session->has($transactionId.'[cruiser][prepayment_check]'))) {
  1231.                     if (true === $session->has($transactionId.'[cruiser][detail]')) {
  1232.                         // $postData = $request->all();
  1233.                         $session->set($transactionId.'[cruiser][detail_data_cruise]'json_encode($postData));
  1234.                         $passangersData $request->request->get('PI');
  1235.                         $passangerNames = [];
  1236.                         for ($i 1$i <= $passangersData['person_count_1']; ++$i) {
  1237.                             $passangerNames[] = mb_strtolower($passangersData['first_name_1_'.$i]);
  1238.                             $passangerNames[] = mb_strtolower($passangersData['last_name_1_'.$i]);
  1239.                         }
  1240.                         $nameWhitelist $em->getRepository(\Aviatur\GeneralBundle\Entity\NameWhitelist::class)->findLikeWhitelist($passangerNames);
  1241.                         if (== sizeof($nameWhitelist)) {
  1242.                             $nameBlacklist $em->getRepository(\Aviatur\GeneralBundle\Entity\NameBlacklist::class)->findLikeBlacklist($passangerNames);
  1243.                             if ((sizeof(preg_grep("/^[a-z- *\.]+$/"$passangerNames)) != sizeof($passangerNames))
  1244.                                 || sizeof($nameBlacklist)
  1245.                                 || sizeof(preg_grep('/(([b-df-hj-np-tv-xz])(?!\2)){4}/'$passangerNames))) {
  1246.                                 return $this->json(['error' => 'error''message' => 'nombre inválido']);
  1247.                             }
  1248.                         }
  1249.                         $isFront $session->has('operatorId');
  1250.                         if ($isFront) {
  1251.                             $customer null;
  1252.                             $ordersProduct null;
  1253.                         } else {
  1254.                             $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($billingData['id']);
  1255.                             $ordersProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->getOrderProductsPending($customer);
  1256.                         }
  1257.                         if (null == $ordersProduct) {
  1258.                             $session->set($transactionId.'[cruiser][retry]'$aviaturPaymentRetryTimes);
  1259.                             $detail $session->get($transactionId.'[cruiser][detail]');
  1260.                             $session->set($transactionId.'[cruiser][prepayment]'$detail);
  1261.                             $ajaxUrl $this->generateUrl('aviatur_cruise_prepayment_step_2_secure');
  1262.                             return $this->json(['ajax_url' => $ajaxUrl]);
  1263.                         } else {
  1264.                             $booking = [];
  1265.                             $cus = [];
  1266.                             foreach ($ordersProduct as $orderProduct) {
  1267.                                 $productResponse $aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey());
  1268.                                 $paymentResponse json_decode($productResponse);
  1269.                                 array_push($booking'ON'.$orderProduct->getOrder()->getId().'-PN'.$orderProduct->getId());
  1270.                                 if (isset($paymentResponse->x_approval_code)) {
  1271.                                     array_push($cus$paymentResponse->x_approval_code);
  1272.                                 } elseif (isset($paymentResponse->createTransactionResult->trazabilityCode)) {
  1273.                                     array_push($cus$paymentResponse->createTransactionResult->trazabilityCode);
  1274.                                 }
  1275.                             }
  1276.                             return $this->json([
  1277.                                 'error' => 'pending payments',
  1278.                                 'message' => 'pending_payments',
  1279.                                 'booking' => $booking,
  1280.                                 'cus' => $cus,
  1281.                             ]);
  1282.                         }
  1283.                     } else {
  1284.                         return $this->json(['error' => 'fatal''message' => $errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), '''No encontramos información del detalle de tu búsqueda, por favor vuelve a intentarlo 1')]);
  1285.                     }
  1286.                 } else {
  1287.                     $paymentData $request->request->get('PD');
  1288.                     $paymentData json_decode(json_encode($paymentData));
  1289.                     $json json_decode($session->get($transactionId.'[cruiser][order]'));
  1290.                     if (!is_null($json)) {
  1291.                         $json->ajax_url $this->generateUrl('aviatur_cruise_prepayment_step_2_secure');
  1292.                         // reemplazar datos de pago por los nuevos.
  1293.                         $oldPostData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1294.                         if (isset($paymentData->cusPOptSelected) || isset($paymentData->card_num)) {
  1295.                             if (isset($paymentData->cusPOptSelected)) {
  1296.                                 $customerLogin $tokenStorage->getToken()->getUser();
  1297.                                 $infoMethodPaymentByClient $methodPaymentService->getMethodsByCustomer($customerLogintrue);
  1298.                                 $card_num_token $infoMethodPaymentByClient['info'][$paymentData->cusPOptSelected]['token'];
  1299.                             } else {
  1300.                                 $card_num_token $tokenizerService->getToken($paymentData->card_num);
  1301.                             }
  1302.                             $card_values = ['card_num_token' => $card_num_token'card_num' => $paymentData->card_num];
  1303.                         }
  1304.                         unset($oldPostData->PD);
  1305.                         $oldPostData->PD $paymentData;
  1306.                         if (isset($card_num_token)) {
  1307.                             $oldPostData->PD->card_values $card_values;
  1308.                         }
  1309.                         $session->set($transactionId.'[cruiser][detail_data_cruise]'json_encode($oldPostData));
  1310.                         $response = new Response(json_encode($json));
  1311.                         $response->headers->set('Content-Type''application/json');
  1312.                         return $response;
  1313.                     } else {
  1314.                         return $this->json(['error' => 'fatal''message' => $errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), '''No encontramos datos de tu orden, por favor vuelve a intentarlo')]);
  1315.                     }
  1316.                 }
  1317.             }
  1318.         } else {
  1319.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Acceso no autorizado'));
  1320.         }
  1321.     }
  1322.     public function prePaymentStep2Action(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagEmissionWebservice $emissionWebserviceOrderController $orderControllerTwigFolder $twigFolderAviaturErrorHandler $errorHandlerAuthorizationCheckerInterface $authorizationChecker)
  1323.     {
  1324.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1325.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  1326.         $order = [];
  1327.         if ($request->isXmlHttpRequest()) {
  1328.             // $isAgent es una variable para identificar agentes de octopus
  1329.             $isAgent false;
  1330.             // $request trae los datos de form data-formulario
  1331.             $fullRequest $request;
  1332.             $request $request->request;
  1333.             $em $this->getDoctrine()->getManager();
  1334.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  1335.             $billingData $request->get('BD');
  1336.             $transactionId $session->get($transactionIdSessionName);
  1337.             $session->set($transactionId.'[cruiser][prepayment_check]'true);
  1338.             $infoTravel $session->get($transactionId.'[cruiser][infoTravel]');
  1339.             $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1340.             $correlationId $session->get($correlationIdSessionName);
  1341.             if (true !== $session->has($transactionId.'[cruiser][order]')) {
  1342.                 if (true === $session->has($transactionId.'[cruiser][detail]')) {
  1343.                     if (isset($agency)) {
  1344.                         $customerData $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($billingData['id']);
  1345.                         $isFront $session->has('operatorId');
  1346.                         if ($isFront) {
  1347.                             $customer $billingData;
  1348.                             $customer['isFront'] = true;
  1349.                             $status 'B2T';
  1350.                         } else {
  1351.                             $customer $customerData;
  1352.                             $status 'waiting';
  1353.                         }
  1354.                         $productType $em->getRepository(\Aviatur\MpaBundle\Entity\ProductType::class)->findByCode('CRUISER');
  1355.                         $orderIdentifier '{order_product_num}';
  1356.                         $order $orderController->createAction($agency$customer$productType$orderIdentifier$status);
  1357.                         $orderId str_replace('ON'''$order['order']);
  1358.                         $orderEntity $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderId);
  1359.                         $formUserInfo $em->getRepository(\Aviatur\GeneralBundle\Entity\FormUserInfo::class)->find($session->get($transactionId.'[cruiser][user_info]'));
  1360.                         $formUserInfo->setOrder($orderEntity);
  1361.                         $em->persist($formUserInfo);
  1362.                         $productId str_replace('PN'''$order['products']);
  1363.                         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  1364.                         $emissionData $this->getEmissionData($session$transactionIdSessionName$postData$correlationId$customerData$infoTravel$fullRequest);
  1365.                         $orderProduct->setEmissiondata(json_encode($emissionData));
  1366.                         $em->persist($orderProduct);
  1367.                         $em->flush();
  1368.                         // Agent Transaction, Save commission QSE or Percentage
  1369.                         if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
  1370.                             $user $this->getUser();
  1371.                             $emailuser $user->getemail();
  1372.                             $agent $user->getAgent();
  1373.                             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  1374.                             if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  1375.                                 $commissionPay round((float) $infoTravel['cabinCommissionPay'] + (float) ($infoTravel['commissionValueCOP'] * 0.7));
  1376.                                 $agentId $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
  1377.                                 $agentCommission $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($agentId);
  1378.                                 // return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', $idAgentCommision.' '.$agentId));
  1379.                                 $agentTransaction = new AgentTransaction();
  1380.                                 $arrayInfo $session->get($transactionId.'_agentInfoTransaction');
  1381.                                 $agentTransaction->setAgent($agentId);
  1382.                                 $agentTransaction->setAgentCommission($agentCommission);
  1383.                                 $agentTransaction->setOrderProduct($orderProduct);
  1384.                                 $agentTransaction->setCommissionvalue(round((float) $commissionPay));
  1385.                                 $agentTransaction->setAmountQse($arrayInfo['amountQse']);
  1386.                                 $agentTransaction->setCommissionQse($arrayInfo['commissionQse']);
  1387.                                 $agentTransaction->setPercentageTarifa($arrayInfo['percentageTa']);
  1388.                                 $agentTransaction->setAmountTarifa($arrayInfo['amountTa']);
  1389.                                 $agentTransaction->setCommissionTarifa($arrayInfo['commissionTa']);
  1390.                                 $agentTransaction->setAmountProduct($arrayInfo['amountProduct']);
  1391.                                 $em->persist($agentTransaction);
  1392.                                 $em->flush();
  1393.                             }
  1394.                         }
  1395.                         $response $emissionWebservice->callServiceEmission('emitir_tc'$emissionData$productId);
  1396.                         if (!isset($response['error'])) {
  1397.                             $responseArray json_decode(json_encode($response), true);
  1398.                             if ('' != $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation']) {
  1399.                                 $infoTravel['bookReservation'] = $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation'];
  1400.                                 $infoTravel['travelTekId'] = $responseArray['RESPUESTA']['results']['book']['@attributes']['reservation'];
  1401.                                 $session->set($transactionId.'[cruiser][infoTravel]'$infoTravel);
  1402.                                 $quotation_web $session->has($transactionId.'[cruise][quotation]') ? true false;
  1403.                                 if ($isFront || (!$isFront && $quotation_web)) {
  1404.                                     $orderProduct->setAddProductData(str_replace($order['products'], $infoTravel['bookReservation'], $orderProduct->getAddProductData()));
  1405.                                     $em->persist($orderProduct);
  1406.                                     $em->flush();
  1407.                                     // $this->sendShoppingCartInfo($postData, $infoTravel, $order['products']);
  1408.                                     $order['url'] = $this->generateUrl('aviatur_cruise_payment_success_secure');
  1409.                                     return $this->json($order);
  1410.                                 } else {
  1411.                                     $order['url'] = $this->generateUrl('aviatur_cruise_payment_secure');
  1412.                                 }
  1413.                             } else {
  1414.                                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No fue posible confirmar la reserva'));
  1415.                             }
  1416.                         } else {
  1417.                             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No fue posible confirmar la reserva'));
  1418.                         }
  1419.                         return $this->json($order);
  1420.                     } else {
  1421.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró la agencia con el dominio: '.$fullRequest->getHost()));
  1422.                     }
  1423.                 } else {
  1424.                     return $this->json(['error' => 'fatal''message' => $errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), '''No encontramos información del detalle de tu búsqueda, por favor vuelve a intentarlo 2')]);
  1425.                 }
  1426.             } else {
  1427.                 $order['url'] = $this->generateUrl('aviatur_cruise_payment_secure');
  1428.                 return $this->json($order);
  1429.             }
  1430.         } else {
  1431.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Acceso no autorizado'));
  1432.         }
  1433.     }
  1434.     public function paymentAction(Request $requestSessionInterface $sessionP2PController $p2PControllerWorldPayController $worldPayControllerPSEController $PSEControllerTwigFolder $twigFolderAviaturErrorHandler $errorHandlerPayoutExtraService $extraServiceRouterInterface $routerParameterBagInterface $parameterBagCashController $cashControllerSafetypayController $safetypayController, \Swift_Mailer $mailer TokenizerService $tokenizerService ,  CustomerMethodPaymentService $methodPaymentService AviaturLogSave $logSaveOrderController  $aviaturOrderController)
  1435.     {
  1436.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1437.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  1438.         $emailNotification $parameterBag->get('email_notification');
  1439.         $orderProduct = [];
  1440.         $paymentResponse null;
  1441.         $return null;
  1442.         $safetyData null;
  1443.         $response null;
  1444.         $array = [];
  1445.         $emissionData = [];
  1446.         $retryCount null;
  1447.         $em $this->getDoctrine()->getManager();
  1448.         $transactionId $session->get($transactionIdSessionName);
  1449.         $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1450.         $orderInfo json_decode($session->get($transactionId.'[cruiser][order]'));
  1451.         $infoDates $session->get($transactionId.'[cruiser][infoTravel]');
  1452.         $correlationId $session->get($correlationIdSessionName);
  1453.         $productId str_replace('PN'''$orderInfo->products);
  1454.         $orderProduct[] = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  1455.         $paymentData $postData->PD;
  1456.         $cruisedata $postData->QD;
  1457.         $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($postData->BD->id);
  1458.         $phoneNumberService = new PhoneNumberService($em);
  1459.         $formattedPhone $phoneNumberService->choosePhone([
  1460.             'full_phone' => ''
  1461.             'phone' => $customer->getPhone()
  1462.         ]);
  1463.         $customer->setPhone($formattedPhone); 
  1464.         if (isset($paymentData->phone)) {
  1465.             $paymentData->phone $phoneNumberService->choosePhone([
  1466.                 'full_phone' => $paymentData->full_phone ?? '',
  1467.                 'phone' => $paymentData->phone
  1468.             ]);
  1469.         }
  1470.         $x_total_amount = (float) $postData->QD->cruiseTotalPaymentCOP;
  1471.         $x_amount_base 0;
  1472.         $x_amount_iva 0;
  1473.         $payoutExtrasValues null;
  1474.         if (isset($postData->payoutExtrasSelection)) {
  1475.             $payoutExtrasValues $extraService->getPayoutExtrasValues($postData->payoutExtrasSelection$transactionId);
  1476.         }
  1477.         $infoDates['cruisePaydetail'] = $cruisedata;
  1478.         $orderProduct[0]->setEmail(json_encode($infoDates));
  1479.         $orderProduct[0]->setEmissiondata(json_encode($this->getEmissionData($session$transactionIdSessionName$postData$correlationId$customer$infoDates$request)));
  1480.         $em->persist($orderProduct[0]);
  1481.         $em->flush();
  1482.         if( $paymentData ==  null){
  1483.             return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
  1484.         }
  1485.         if ('p2p' == $paymentData->type || 'world' == $paymentData->type) {
  1486.             $array = [
  1487.                 'x_currency_code' => (string) 'COP',
  1488.                 'x_amount' => number_format(round((float) $x_total_amount), 0'.'''),
  1489.                 'x_tax' => number_format(round((float) $x_amount_iva), 2'.'''),
  1490.                 'x_amount_base' => number_format(round((float) $x_amount_base), 2'.'''),
  1491.                 'x_invoice_num' => $orderInfo->order.'-'.$orderInfo->products,
  1492.                 'x_first_name' => $customer->getFirstname(),
  1493.                 'x_last_name' => $customer->getLastname(),
  1494.                 'x_description' => $infoDates['description'],
  1495.                 'x_city' => $customer->getCity()->getIatacode(),
  1496.                 'x_country_id' => $customer->getCountry()->getIatacode(),
  1497.                 'x_cust_id' => $customer->getDocumentType()->getPaymentcode().' '.$customer->getDocumentnumber(),
  1498.                 'x_address' => $customer->getAddress(),
  1499.                 'x_phone' => $customer->getPhone(),
  1500.                 'x_email' => $customer->getEmail(),
  1501.                 'x_card_num' => $paymentData->card_num,
  1502.                 'x_exp_date' => $paymentData->exp_month.$paymentData->exp_year,
  1503.                 'x_card_code' => $paymentData->card_code,
  1504.                 'x_differed' => $paymentData->differed,
  1505.                 'x_client_id' => $postData->BD->id,
  1506.                 'product_type' => 'cruiser',
  1507.                 'franchise' => $paymentData->franquise,
  1508.                 'worldpay_validate' => true
  1509.             ];
  1510.             if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
  1511.                 foreach ($payoutExtrasValues as $payoutExtraValues) {
  1512.                     $array['x_amount'] += round((float) $payoutExtraValues->values->fare->total);
  1513.                     $array['x_tax'] += round((float) $payoutExtraValues->values->fare->tax);
  1514.                     $array['x_amount_base'] += round((float) $payoutExtraValues->values->fare->base);
  1515.                 }
  1516.             }
  1517.             if (isset($paymentData->card_values)) {
  1518.                 $array['card_values'] = (array) $paymentData->card_values;
  1519.             }
  1520.             $payoutExtrasValues $extraService->setPayoutExtrasAsProcessed($transactionId);
  1521.             if (isset($paymentData->cusPOptSelected)) {
  1522.                 $array['isToken'] = (string) $paymentData->card_values->card_num_token;
  1523.             }
  1524.             if ('p2p' == $paymentData->type) {
  1525.                 if (isset($paymentData->savePaymProc)) {
  1526.                     $array['x_provider_id'] = 1;
  1527.                 } elseif (isset($paymentData->cusPOptSelected)) {
  1528.                     if (isset($paymentData->cusPOptSelectedStatus)) {
  1529.                         if ('NOTVERIFIED' == $paymentData->cusPOptSelectedStatus) {
  1530.                             $array['x_provider_id'] = 1;
  1531.                         } else {
  1532.                             $array['x_provider_id'] = 2;
  1533.                         }
  1534.                     } else {
  1535.                         $array['x_provider_id'] = 2;
  1536.                     }
  1537.                 }
  1538.                 $paymentResponse $p2PController->placetopayAction($parameterBag $tokenizerService $methodPaymentService $mailer$logSave $array $combination false,$segment null,$orderId false);
  1539.                 $return $this->redirect($this->generateUrl('aviatur_cruise_payment_p2p_return_url_secure', [], true));
  1540.             } elseif ('world' == $paymentData->type) {
  1541.                 $array['city'] = $customer->getCity()->getIatacode();
  1542.                 $array['countryCode'] = $customer->getCity()->getCountry()->getIatacode();
  1543.                 $paymentResponse $worldPayController->worldAction($request$mailer $logSave$methodPaymentService,$parameterBag$array$combination false$segment null);
  1544.                 // $paymentResponse = $worldPayController->worldAction($array);
  1545.                 $return $this->redirect($this->generateUrl('aviatur_cruise_payment_world_return_url_secure', [], true));
  1546.             }
  1547.             unset($array['x_client_id']);
  1548.             if (null != $paymentResponse) {
  1549.                 return $return;
  1550.             } else {
  1551.                 $orderProduct[0]->setStatus('pending');
  1552.                 $em->persist($orderProduct[0]);
  1553.                 $em->flush();
  1554.                 return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '''No hay respuesta por parte del servicio de pago, por favor intenta nuevamente o comunícate con nosotros para finalizar tu transacción'));
  1555.             }
  1556.         } elseif ('pse' == $paymentData->type) {
  1557.             $array = ['x_doc_num' => $customer->getDocumentnumber(),
  1558.                 'x_doc_type' => $customer->getDocumentType()->getPaymentcode(),
  1559.                 'x_first_name' => $customer->getFirstname(),
  1560.                 'x_last_name' => $customer->getLastname(),
  1561.                 'x_company' => 'Aviatur',
  1562.                 'x_email' => $customer->getEmail(),
  1563.                 'x_address' => $customer->getAddress(),
  1564.                 'x_city' => $customer->getCity()->getDescription(),
  1565.                 'x_province' => $customer->getCity()->getDescription(),
  1566.                 'x_country' => $customer->getCountry()->getDescription(),
  1567.                 'x_phone' => $customer->getPhone(),
  1568.                 'x_mobile' => $customer->getCellphone(),
  1569.                 'x_bank' => $paymentData->pse_bank,
  1570.                 'x_type' => $paymentData->pse_type,
  1571.                 'x_reference' => $orderInfo->order.'-'.$orderInfo->products,
  1572.                 'x_description' => $infoDates['description'],
  1573.                 'x_currency' => (string) 'COP',
  1574.                 'x_total_amount' => number_format(round((float) $x_total_amount), 0'.'''),
  1575.                 'x_tax_amount' => number_format(round((float) $x_amount_iva), 2'.'''),
  1576.                 'x_devolution_base' => number_format(round((float) $x_amount_base), 2'.'''),
  1577.                 'x_tax' => number_format(round((float) 0), 2'.'''),
  1578.                 'x_tip_amount' => number_format(round((float) 0), 2'.'''),
  1579.                 'product_type' => 'cruiser',
  1580.             ];
  1581.             if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
  1582.                 foreach ($payoutExtrasValues as $payoutExtraValues) {
  1583.                     $array['x_total_amount'] += round((float) $payoutExtraValues->values->fare->total);
  1584.                     $array['x_tax_amount'] += round((float) $payoutExtraValues->values->fare->tax);
  1585.                     $array['x_devolution_base'] += round((float) $payoutExtraValues->values->fare->base);
  1586.                 }
  1587.             }
  1588.             $payoutExtrasValues $extraService->setPayoutExtrasAsProcessed($transactionId);
  1589.             $route $router->match(str_replace($request->getSchemeAndHttpHost(), ''$request->getUri()));
  1590.             $isMulti false !== strpos($route['_route'], 'multi') ? true false;
  1591.             if ($isMulti) {
  1592.                 return $this->json($array);
  1593.             }
  1594.             $paymentResponse $PSEController->sendPaymentAction($request,$session,$router,$parameterBag,$mailer,$aviaturOrderController$array$orderProduct);
  1595.             if (!isset($paymentResponse->error)) {
  1596.                 switch ($paymentResponse->createTransactionResult->returnCode) {
  1597.                     case 'SUCCESS':
  1598.                         return $this->redirect($paymentResponse->createTransactionResult->bankURL);
  1599.                     case 'FAIL_EXCEEDEDLIMIT':
  1600.                         return $this->redirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '');
  1601.                     case 'FAIL_BANKUNREACHEABLE':
  1602.                         return $this->redirect($this->generateUrl('aviatur_cruise_retry_secure'), '');
  1603.                     default:
  1604.                         return $this->redirect($this->generateUrl('aviatur_cruise_retry_secure'), '');
  1605.                 }
  1606.             } else {
  1607.                 return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), 'Error al procesar el pago''Ocurrió un problema al intentar crear tu transacción, '.$paymentResponse->error));
  1608.             }
  1609.         } elseif ('safety' == $paymentData->type) {
  1610.             $transactionUrl $this->generateUrl('aviatur_payment_safetypay', [], true);
  1611.             $array = ['x_doc_num' => $customer->getDocumentnumber(),
  1612.                 'x_doc_type' => $customer->getDocumentType()->getPaymentcode(),
  1613.                 'x_first_name' => $customer->getFirstname(),
  1614.                 'x_last_name' => $customer->getLastname(),
  1615.                 'x_company' => 'Aviatur',
  1616.                 'x_email' => $customer->getEmail(),
  1617.                 'x_address' => $customer->getAddress(),
  1618.                 'x_city' => $customer->getCity()->getDescription(),
  1619.                 'x_province' => $customer->getCity()->getDescription(),
  1620.                 'x_country' => $customer->getCountry()->getDescription(),
  1621.                 'x_phone' => $customer->getPhone(),
  1622.                 'x_mobile' => $customer->getCellphone(),
  1623.                 'x_reference' => $orderInfo->products,
  1624.                 'x_booking' => $infoDates['basketCode'],
  1625.                 'x_description' => $infoDates['description'],
  1626.                 'x_currency' => 'COP',
  1627.                 'x_total_amount' => number_format(round((float) $x_total_amount), 2'.'''),
  1628.                 'x_tax_amount' => number_format(round((float) 0), 2'.'''),
  1629.                 'x_devolution_base' => number_format(round((float) 0), 2'.'''),
  1630.                 'x_tip_amount' => number_format(round(0), 2'.'''),
  1631.                 'x_payment_data' => $paymentData->type,
  1632.                 'x_type_description' => 'cruise',
  1633.             ];
  1634.             if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
  1635.                 foreach ($payoutExtrasValues as $payoutExtraValues) {
  1636.                     $array['x_total_amount'] += round((float) $payoutExtraValues->values->fare->total);
  1637.                     $array['x_tax_amount'] += round((float) $payoutExtraValues->values->fare->tax);
  1638.                     $array['x_devolution_base'] += round((float) $payoutExtraValues->values->fare->base);
  1639.                 }
  1640.             }
  1641.             $payoutExtrasValues $extraService->setPayoutExtrasAsProcessed($transactionId);
  1642.             $parametMerchant = [
  1643.                 'MerchantSalesID' => $array['x_reference'],
  1644.                 'Amount' => $array['x_total_amount'],
  1645.                 'transactionUrl' => $transactionUrl,
  1646.                 'dataTrans' => $array,
  1647.             ];
  1648.             $safeTyPay $safetypayController->safetyAction($router$parameterBag$mailer$parametMerchant$array);
  1649.             if ('ok' == $safeTyPay['status']) {
  1650.                 if ('baloto' == $paymentData->type) {
  1651.                     $cash '&CountryId=COL&ChannelId=CASH';
  1652.                     $session->set($transactionId.'[cruiser][retry]'0);
  1653.                     return $this->redirect($safeTyPay['response'].$cash);
  1654.                 } else {
  1655.                     return $this->redirect($safeTyPay['response']);
  1656.                 }
  1657.             } else {
  1658.                 $safetyData->x_booking $array['x_booking'];
  1659.                 $safetyData->x_first_name $array['x_first_name'];
  1660.                 $safetyData->x_last_name $array['x_last_name'];
  1661.                 $safetyData->x_doc_num $array['x_doc_num'];
  1662.                 $safetyData->x_reference $array['x_reference'];
  1663.                 $safetyData->x_description $array['x_description'];
  1664.                 $safetyData->x_total_amount $array['x_total_amount'];
  1665.                 $safetyData->x_email $array['x_email'];
  1666.                 $safetyData->x_address $array['x_address'];
  1667.                 $safetyData->x_phone $array['x_phone'];
  1668.                 $safetyData->x_type_description $array['x_type_description'];
  1669.                 $safetyData->x_resultSafetyPay $safeTyPay;
  1670.                 $mailInfo print_r($safetyDatatrue).'<br>'.print_r($responsetrue);
  1671.                 $message = (new \Swift_Message())
  1672.                     ->setContentType('text/html')
  1673.                     ->setFrom($session->get('emailNoReply'))
  1674.                     ->setTo($emailNotification)
  1675.                     ->setSubject('Error Creación Token SafetyPay Cruise'.$safetyData->x_reference)
  1676.                     ->setBody($mailInfo);
  1677.                 $mailer->send($message);
  1678.                 return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
  1679.             }
  1680.         } elseif ('cash' == $paymentData->type) {
  1681.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  1682.             $agencyName $agency->getOfficeId();
  1683.             $orderInfo json_decode($session->get($transactionId.'[cruiser][order]'));
  1684.             $array['x_officeId'] = $agencyName;
  1685.             $array['x_doc_num'] = $customer->getDocumentnumber();
  1686.             $array['x_doc_type'] = $customer->getDocumentType()->getPaymentcode();
  1687.             $array['x_first_name'] = $this->unaccent($customer->getFirstname());
  1688.             $array['x_last_name'] = $this->unaccent($customer->getLastname());
  1689.             $array['x_company'] = 'Aviatur';
  1690.             $array['x_email'] = $customer->getEmail();
  1691.             $array['x_address'] = $customer->getAddress();
  1692.             $array['x_city'] = $customer->getCity()->getDescription();
  1693.             $array['x_province'] = $customer->getCity()->getDescription();
  1694.             $array['x_country'] = $customer->getCountry()->getDescription();
  1695.             $array['x_phone'] = $customer->getPhone();
  1696.             $array['x_mobile'] = $customer->getCellphone();
  1697.             $array['x_payment_data'] = $paymentData->type;
  1698.             $array['x_reference'] = $orderInfo->products;
  1699.             $array['x_description'] = $infoDates['description'];
  1700.             $array['x_booking'] = $orderProduct[0]->getBooking();
  1701.             $array['x_total_amount'] = number_format(round((float) $x_total_amount), 0'.''');
  1702.             $array['x_tax_amount'] = number_format(round((float) 0), 2'.''');
  1703.             $array['x_devolution_base'] = number_format(round((float) 0), 2'.''');
  1704.             $array['x_tip_amount'] = number_format(round(0), 0'.''');
  1705.             $array['x_currency'] = 'COP';
  1706.             $array['x_type_description'] = $orderProduct[0]->getDescription();
  1707.             $fecha $orderProduct[0]->getCreationDate()->format('Y-m-d H:i:s');
  1708.             $fechalimite $orderProduct[0]->getCreationDate()->format('Y-m-d 23:40:00');
  1709.             $nuevafecha strtotime('+2 hour'strtotime($fecha));
  1710.             $fechavigencia date('Y-m-d H:i:s'$nuevafecha);
  1711.             if (strcmp($fechavigencia$fechalimite) > 0) {
  1712.                 $fechavigencia $fechalimite;
  1713.             }
  1714.             $array['x_fechavigencia'] = $fechavigencia;
  1715.             $cashPay $cashController->cashAction($logSave$array);
  1716.             if ('ok' == $cashPay->status) {
  1717.                 $session->set($transactionId.'[cruiser][cash_result]'json_encode($cashPay));
  1718.                 return $this->redirect($this->generateUrl('aviatur_cruise_reservation_success_secure'));
  1719.             } else {
  1720.                 $toEmails = ['soportepagoelectronico@aviatur.com.co''soptepagelectronic@aviatur.com'$emailNotification];
  1721.                 $emissionData['x_booking'] = $array['x_booking'];
  1722.                 $emissionData['x_first_name'] = $array['x_first_name'];
  1723.                 $emissionData['x_last_name'] = $array['x_last_name'];
  1724.                 $emissionData['x_doc_num'] = $array['x_doc_num'];
  1725.                 $emissionData['x_reference'] = $array['x_reference'];
  1726.                 $emissionData['x_description'] = $array['x_description'];
  1727.                 $emissionData['x_total_amount'] = $array['x_total_amount'];
  1728.                 $emissionData['x_email'] = $array['x_email'];
  1729.                 $emissionData['x_address'] = $array['x_address'];
  1730.                 $emissionData['x_phone'] = $array['x_phone'];
  1731.                 $emissionData['x_type_description'] = $array['x_type_description'];
  1732.                 $emissionData['x_error'] = $cashPay->status;
  1733.                 $mailInfo print_r($emissionDatatrue).'<br>'.print_r($cashPaytrue);
  1734.                 $message = (new \Swift_Message())
  1735.                     ->setContentType('text/html')
  1736.                     ->setFrom($session->get('emailNoReply'))
  1737.                     ->setTo($toEmails)
  1738.                     ->setSubject('Error Creación Transacción Baloto'.$emissionData['x_reference'].' - '.$orderProduct[0]->getOrder()->getAgency()->getName())
  1739.                     ->setBody($mailInfo);
  1740.                 $mailer->send($message);
  1741.                 $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  1742.                 return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
  1743.             }
  1744.         } else {
  1745.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '''El tipo de pago es invalido'));
  1746.         }
  1747.     }
  1748.     public function getEmissionData(SessionInterface $session$transactionIdSessionName$postData$correlationId$customer$infoDatesRequest $request)
  1749.     {
  1750.         $transactionId $session->get($transactionIdSessionName);
  1751.         $billingData $postData->BD;
  1752.         $passengerData $postData->PI;
  1753.         $contactData $postData->ED;
  1754.         $cruisedata $postData->QD;
  1755.         $em $this->getDoctrine()->getManager();
  1756.         if (isset($postData->PD)) {
  1757.             $paymentData $postData->PD;
  1758.         } else {
  1759.             $paymentData = new \stdClass();
  1760.             $paymentData->type 'front';
  1761.         }
  1762.         $phoneNumberService = new PhoneNumberService($em);
  1763.         $formattedPhone $phoneNumberService->choosePhone([
  1764.             'full_phone' => ''
  1765.             'phone' => $customer->getPhone()
  1766.         ]);
  1767.         $customer->setPhone($formattedPhone);
  1768.         if (isset($billingData->phone)) {
  1769.             $billingData->phone $phoneNumberService->choosePhone([
  1770.                 'full_phone' => $billingData->full_phone ?? '',
  1771.                 'phone' => $billingData->phone
  1772.             ]);
  1773.         }
  1774.         if (false !== strpos($billingData->first_name'***')) {
  1775.             $billingData->first_name $customer->getFirstname();
  1776.             $billingData->last_name $customer->getLastname();
  1777.             $billingData->address $customer->getAddress();
  1778.             $billingData->doc_num $customer->getDocumentnumber();
  1779.             $billingData->phone $customer->getPhone();
  1780.             $billingData->email $customer->getEmail();
  1781.         }
  1782.     if ($session->has('officeId')) {
  1783.         $userFront simplexml_load_string($session->get('front_user'));
  1784.         $mailFront = (string) $userFront->CORREO_ELECTRONICO;
  1785.     } else {
  1786.         $mailFront $customer->getEmail();
  1787.     }
  1788.     $emissionData = new \stdClass();
  1789.     $dataIssuance = new \stdClass();
  1790.     $dataIssuance->Session $correlationId;
  1791.     $dataIssuance->Description['ShipCode'] = $infoDates['shipCode'];
  1792.     $dataIssuance->Description['DepartureDate'] = $infoDates['startDate'];
  1793.     $dataIssuance->Description['CruiseLength'] = $infoDates['cruiseDuration'];
  1794.     $dataIssuance->Description['PackageId'] = $infoDates['cruisePackageId'];
  1795.     $dataIssuance->Description['Category'] = $infoDates['cabinGradeCategory'];
  1796.     $dataIssuance->Description['CabinNo'] = $infoDates['cabinNumber'];
  1797.     $dataIssuance->Description['Guests'] = $passengerData->person_count_1;
  1798.     $dataIssuance->Contact['title'] = (null != $customer) ? (('335' == $customer->getGenderAviatur()->getCode()) ? 'Mr' 'Mrs') : 'Mr';
  1799.     if (strlen($billingData->first_name) > 14 || strlen($billingData->last_name) > 14) {
  1800.         if ($billingData->doc_type 'NT') {
  1801.             $first_name trim(substr($billingData->first_name014));
  1802.             $dataIssuance->Contact['firstname'] = $first_name;
  1803.             if ('' != $billingData->last_name) {
  1804.                 $dataIssuance->Contact['lastname'] = trim(substr($billingData->last_name014));
  1805.             } else {
  1806.                 $dataIssuance->Contact['lastname'] = $first_name;
  1807.             }
  1808.         } else {
  1809.             $dataIssuance->Contact['firstname'] = explode(' '$billingData->first_name)[0];
  1810.             $dataIssuance->Contact['lastname'] = explode(' '$billingData->last_name)[0];
  1811.         }
  1812.     } else {
  1813.         $dataIssuance->Contact['firstname'] = $billingData->first_name;
  1814.         $dataIssuance->Contact['lastname'] = $billingData->last_name;
  1815.     }
  1816.     $dataIssuance->Contact['address1'] = $billingData->address ?? 'Av. 19 No. 4-62';
  1817.     $dataIssuance->Contact['city'] = 'Bogota';
  1818.     $dataIssuance->Contact['postcode'] = '571';
  1819.     $dataIssuance->Contact['county'] = 'Colombia';
  1820.     $dataIssuance->Contact['country'] = 'CO';
  1821.     $dataIssuance->Contact['telephone'] = $billingData->phone;
  1822.         $dataIssuance->Contact['email'] = $billingData->email ?? $mailFront;
  1823.         $assigned_adult 1;
  1824.         for ($pass 1$pass <= $infoDates['adults'] + $infoDates['children']; ++$pass) {
  1825.             $first_name 'first_name_1_'.$pass;
  1826.             $last_name 'last_name_1_'.$pass;
  1827.             $birthday 'birthday_1_'.$pass;
  1828.             $passanger_type 'passanger_type_1_'.$pass;
  1829.             $nationality 'nationality_1_'.$pass;
  1830.             $gender 'gender_1_'.$pass;
  1831.             $type 'passanger_type_1_'.$pass;
  1832.             $documentNumber 'doc_num_1_'.$pass;
  1833.             // $document_Expire = '';
  1834.             //var_dump($dataIssuance);
  1835.             //var_dump($dataIssuance->Passengers);
  1836.             //var_dump($dataIssuance->Passengers->passenger);
  1837.             //die;
  1838.             $dataIssuance->Passengers = new \stdClass();
  1839.             $dataIssuance->Passengers->passenger = [];
  1840.             $dataIssuance->Passengers->passenger[$pass 1]['paxno'] = $pass;
  1841.             $dataIssuance->Passengers->passenger[$pass 1]['paxtype'] = ($passengerData->$type == 'ADT') ? 'adult' 'child';
  1842.             $dataIssuance->Passengers->passenger[$pass 1]['title'] = ($passengerData->$gender == '335') ? (($passengerData->$type == 'ADT') ? 'Mr' 'Mr') : (($passengerData->$type == 'ADT') ? 'Mrs' 'Miss');
  1843.             $dataIssuance->Passengers->passenger[$pass 1]['firstname'] = $passengerData->$first_name;
  1844.             $dataIssuance->Passengers->passenger[$pass 1]['lastname'] = $passengerData->$last_name;
  1845.             $dataIssuance->Passengers->passenger[$pass 1]['dob'] = $passengerData->$birthday;
  1846.             if ($passengerData->$passanger_type == 'CHD') {
  1847.                 $dataIssuance->Passengers->passenger[$pass 1]['travelling'] = (string) $assigned_adult++; // asociar un niño por adulto
  1848.             }
  1849.             $dataIssuance->Passengers->passenger[$pass 1]['nationality'] = $passengerData->$nationality;
  1850.             $dataIssuance->Passengers->passenger[$pass 1]['passport'] = $passengerData->$documentNumber;
  1851.             $dataIssuance->Passengers->passenger[$pass 1]['ExpireDate'] = ''// $passengerData->$document_Expire;
  1852.         }
  1853.         if (isset($cruisedata->cruiseDinningType)) {
  1854.             $diningData explode('-'$cruisedata->cruiseDinningType);
  1855.             $dataIssuance->Dining['basketcode'] = $infoDates['reservationKey'];
  1856.             if (isset($cruisedata->tablesizes)) {
  1857.                 $dataIssuance->Dining['tablesize'] = $cruisedata->tablesizes;
  1858.             }
  1859.             $dataIssuance->Dining['seating'] = $diningData[0];
  1860.         }
  1861.         $dataIssuance->Adapter $session->get($transactionId.'[cruiser][provider]');
  1862.         $emissionData->dataIssuance $dataIssuance;
  1863.         return $emissionData;
  1864.     }
  1865.     public function p2pCallbackAction(Request $requestSessionInterface $sessionTokenStorageInterface $tokenStorageAviaturMailer $aviaturMailerTwigFolder $twigFolderAviaturWebService $webServiceAuthorizationCheckerInterface $authorizationCheckerParameterBagInterface $parameterBag, \Swift_Mailer $mailerPdf $pdfExceptionLog $exceptionLogValidateSanctionsRenewal $validateSanctionsAviaturEncoder $aviaturEncoderOrderController $orderControllerAviaturErrorHandler $errorHandlerAviaturLogSave $logSavePayoutExtraService $extraServiceCustomerMethodPaymentService $methodPaymentServiceQuotationUtils $QuotationUtils)
  1866.     {
  1867.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  1868.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  1869.         $aviaturPaymentRetryTimes $parameterBag->get('aviatur_payment_retry_times');
  1870.         $projectDir $parameterBag->get('kernel.project_dir');
  1871.         $em $this->getDoctrine()->getManager();
  1872.         $fullRequest $request;
  1873.         $request $fullRequest->request;
  1874.         $transactionId $session->get($transactionIdSessionName);
  1875.         if (true === $request->has('correlationID')) {
  1876.             $correlationId $request->get('correlationID');
  1877.         } else {
  1878.             $correlationId $session->get($correlationIdSessionName);
  1879.         }
  1880.         $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1881.         $orderProductCode $session->get($transactionId.'[cruiser][order]');
  1882.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  1883.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  1884.         $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  1885.         $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  1886.         $jsonSendEmail $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('send_email');
  1887.         if (isset(json_decode($jsonSendEmail->getDescription())->email)) {
  1888.             $email json_decode($jsonSendEmail->getDescription())->email->CallBack;
  1889.         }
  1890.         $reference str_replace('{"order":"'''$orderProductCode);
  1891.         $reference str_replace('","products":"''-'$reference);
  1892.         $reference str_replace('"}'''$reference);
  1893.         $references $reference;
  1894.         $bookings $orderProduct->getBooking();
  1895.         if (null != $decodedResponse) {
  1896.             // $agency = $orderProduct->getOrder()->getAgency();
  1897.             $agency $orderProduct->getOrder()->getAgency();
  1898.             $twig '';
  1899.             $additionalQS '';
  1900.             $retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
  1901.             switch ($decodedResponse->x_response_code) {
  1902.                 case isset($decodedResponse->x_response_code_cyber) && (== $decodedResponse->x_response_code_cyber):
  1903.                     // rechazado cybersource
  1904.                     $parameters $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_switch_rechazada_cyber');
  1905.                     if ($parameters) {
  1906.                         if (== $parameters->getValue()) {
  1907.                             if (== $decodedResponse->x_response_code) {
  1908.                                 $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1909.                                 if (isset($postData->PD->cusPOptSelected)) {
  1910.                                     if (isset($postData->PD->cusPOptSelectedStatus)) {
  1911.                                         if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
  1912.                                             $postData->PD->cusPOptSelectedStatus 'ACTIVE';
  1913.                                             $customerLogin $tokenStorage->getToken()->getUser();
  1914.                                             $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1915.                                         }
  1916.                                     }
  1917.                                 }
  1918.                                 if (isset($postData->PD->savePaymProc)) {
  1919.                                     $customerLogin $tokenStorage->getToken()->getUser();
  1920.                                     $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1921.                                 }
  1922.                             }
  1923.                         }
  1924.                     }
  1925.                     $infoDates $session->get($transactionId.'[cruiser][infoTravel]');
  1926.                     $infoDates['rejectCyber'] = true;
  1927.                     // $this->sendShoppingCartInfo($request, $session, $twigFolder, $webService, $mailer, $exceptionLog, $transactionIdSessionName, $postData, $infoDates, json_decode($orderProductCode)->products);
  1928.                     $this->sendShoppingCartInfo($fullRequest$session$parameterBag$twigFolder$webService$mailer,  $exceptionLog$postData$infoDatesjson_decode($orderProductCode)->products);
  1929.                     $twig 'aviatur_cruise_payment_rejected_secure';
  1930.                     // no break
  1931.                 case 3:// pendiente p2p
  1932.                     $twig '' != $twig $twig 'aviatur_cruise_payment_pending_secure';
  1933.                     $updateOrder $orderController->updatePaymentAction($orderProduct);
  1934.                     $orderProduct->setUpdatingdate(new \DateTime());
  1935.                     $em->persist($orderProduct);
  1936.                     $em->flush();
  1937.                     $retryCount 1;
  1938.                     break;
  1939.                 case 0:// error p2p
  1940.                     $twig 'aviatur_cruise_payment_error_secure'// no existe?
  1941.                     if (isset($email)) {
  1942.                         $from 'noreply@aviatur.com';
  1943.                         $error $twig;
  1944.                         $subject $orderProduct->getDescription().':Error en el proceso de pago de Aviatur';
  1945.                         $body '</br>El proceso de pago a retornado un error </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
  1946.                         $aviaturMailer->sendEmailGeneral($from$email$subject$body);
  1947.                     }
  1948.                     // no break
  1949.                 case 2:// rechazada p2p
  1950.                     $twig '' != $twig $twig 'aviatur_cruise_payment_rejected_secure';
  1951.                     $orderProduct->setResume('No reservation');
  1952.                     if (isset($email)) {
  1953.                         $from 'noreply@aviatur.com';
  1954.                         $error $twig;
  1955.                         $subject $orderProduct->getDescription().':Transacción rechazada';
  1956.                         $body '</br>El pago fue rechazado </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
  1957.                         $aviaturMailer->sendEmailGeneral($from$email$subject$body);
  1958.                     }
  1959.                     break;
  1960.                 case 1:// aprobado p2p
  1961.                     $decodedRequest->product_type 'cruiser';
  1962.                     $decodedResponse->product_type 'cruiser';
  1963.                     $encodedRequest $aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey());
  1964.                     $encodedResponse $aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey());
  1965.                     $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  1966.                     if (isset($postData->PD->cusPOptSelected)) {
  1967.                         if (isset($postData->PD->cusPOptSelectedStatus)) {
  1968.                             if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
  1969.                                 $postData->PD->cusPOptSelectedStatus 'ACTIVE';
  1970.                                 $customerLogin $tokenStorage->getToken()->getUser();
  1971.                                 $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1972.                             }
  1973.                         }
  1974.                     }
  1975.                     if (isset($postData->PD->savePaymProc)) {
  1976.                         $customerLogin $tokenStorage->getToken()->getUser();
  1977.                         $methodPaymentService->setMethodsByCustomer($customerLoginjson_decode(json_encode($postData), true));
  1978.                     }
  1979.                     $orderProduct->setPayrequest($encodedRequest);
  1980.                     $orderProduct->setPayresponse($encodedResponse);
  1981.                     $updateOrder $orderController->updatePaymentAction($orderProduct);
  1982.                     $twig 'aviatur_cruise_payment_success_secure';
  1983.                     if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
  1984.                         $additionalQS '?bookingid='.$orderProduct->getBooking().'&total='.$decodedRequest->x_amount;
  1985.                     }
  1986.                     $orderController->updatePaymentAction($orderProductfalsenull);
  1987.                     // $response = $this->sendCruiseConfirmationAction($request ,$parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler);
  1988.                     $response $this->sendCruiseConfirmationAction($fullRequest $parameterBag$aviaturEncoder,$twigFolder,$exceptionLog$webService$authorizationChecker$mailer$pdf,$logSave,$errorHandler$QuotationUtils);
  1989.                     $session->set($transactionId.'[cruiser][retry]'$aviaturPaymentRetryTimes);
  1990.                     if (isset($response['error'])) {
  1991.                         $orderProduct->setResume('Book_in_basket');
  1992.                     }
  1993.                     $em->persist($orderProduct);
  1994.                     $em->flush();
  1995.                     break;
  1996.             }
  1997.             $extraService->payoutExtrasCallback($twig$transactionId'cruiser'$agency);
  1998.             $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  1999.             $urlResume $this->generateUrl($twig);
  2000.             $urlResume .= $additionalQS;
  2001.             // ////// se envia el correo del modulo anti fraude en caso de ser necesario//////////
  2002.             /*
  2003.             if ($session->has('Marked_name') && $session->has('Marked_document')) {
  2004.                 $product = 'Cruceros';
  2005.                 $validateSanctions->sendMarkedEmail($orderProductCode, $session, $agency, $orderProduct, $transactionId, $product);
  2006.             }
  2007.             */
  2008.             /* Pero solo si hay condicionados (no bloqueados) y que paguen con Tarjeta */
  2009.             if ($session->has('Marked_users')) {
  2010.                 $product 'Cruceros';
  2011.                 $validateSanctions->sendMarkedEmail($orderProductCode$session$agency$orderProduct$transactionId$product);
  2012.             }
  2013.             // //////////////////////////////////////////////////////////////////////////////////
  2014.             return $this->redirect($urlResume);
  2015.         } else {
  2016.             $orderProduct->setStatus('pending');
  2017.             $em->persist($orderProduct);
  2018.             $em->flush();
  2019.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '''No hay respuesta por parte del servicio de pago'));
  2020.         }
  2021.     }
  2022.     public function pseCallbackAction(Request $requestParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailerPdf $pdfSessionInterface $sessionPSEController $PSEControllerAviaturLogSave $logSaveOrderController $orderControllerAviaturErrorHandler $errorHandlerPayoutExtraService $extraService$transaction)
  2023.     {
  2024.         $projectDir $parameterBag->get('kernel.project_dir');
  2025.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2026.         $aviaturPaymentRetryTimes $parameterBag->get('aviatur_payment_retry_times');
  2027.         $status null;
  2028.         $twig null;
  2029.         $em $this->getDoctrine()->getManager();
  2030.         if ($session->has('agencyId')) {
  2031.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  2032.         } else {
  2033.             $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find(1);
  2034.         }
  2035.         $paymentMethod $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode('pse');
  2036.         $paymentMethodAgency $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findOneBy(['agency' => $agency'paymentMethod' => $paymentMethod]);
  2037.         $tranKey $paymentMethodAgency->getTrankey();
  2038.         $decodedUrl json_decode($aviaturEncoder->AviaturDecode(base64_decode($transaction), $tranKey), true);
  2039.         $transactionId = ($session->has($transactionIdSessionName)) ? $session->get($transactionIdSessionName) : null;
  2040.         $orders $decodedUrl['x_orders'];
  2041.         if (isset($orders['cruiser'])) {
  2042.             $cruiseOrders explode('+'$orders['cruiser']);
  2043.             $orderProductCode $cruiseOrders[0];
  2044.             $productId $cruiseOrders[0];
  2045.             $retryCount 1;
  2046.         } else {
  2047.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontro identificador de la transacción'));
  2048.         }
  2049.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2050.         if (empty($orderProduct)) {
  2051.             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  2052.         } else {
  2053.             if ('approved' == $orderProduct->getStatus()) {
  2054.                 return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción'));
  2055.             } else {
  2056.                 $agency $orderProduct->getOrder()->getAgency();
  2057.                 $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  2058.                 if (isset($decodedResponse->createTransactionResult)) {
  2059.                     $pseTransactionId $decodedResponse->createTransactionResult->transactionID;
  2060.                     $agency $orderProduct->getOrder()->getAgency();
  2061.                     $paymentResponse $PSEController->pseCallbackAction($pseTransactionId);
  2062.                     if (!isset($paymentResponse->error)) {
  2063.                         if (!$session->has($transactionId.'[cruiser][infoTravel]')) {
  2064.                             $message 'Una vez el pago sea confirmado recibirá su confirmación de reserva, de no ser así comuníquese con nuestra central de reservas.';
  2065.                             return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Gracias por su compra'$message));
  2066.                         }
  2067.                         $decodedResponse->getTransactionInformationResult $paymentResponse->getTransactionInformationResult;
  2068.                         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  2069.                         $orderProduct->setUpdatingdate(new \DateTime());
  2070.                         $em->persist($orderProduct);
  2071.                         $em->flush();
  2072.                         if ('SUCCESS' == (string) $paymentResponse->getTransactionInformationResult->returnCode) {
  2073.                             switch ((string) $paymentResponse->getTransactionInformationResult->transactionState) {
  2074.                                 case 'OK':
  2075.                                     $twig 'aviatur_cruise_payment_success_secure';
  2076.                                     $status 'approved';
  2077.                                     break;
  2078.                                 case 'PENDING':
  2079.                                     $twig 'aviatur_cruise_payment_pending_secure';
  2080.                                     $status 'pending';
  2081.                                     break;
  2082.                                 case 'NOT_AUTHORIZED':
  2083.                                     $twig 'aviatur_cruise_payment_error_secure';
  2084.                                     $status 'rejected';
  2085.                                     break;
  2086.                                 case 'FAILED':
  2087.                                     $twig 'aviatur_cruise_payment_error_secure';
  2088.                                     $status 'failed';
  2089.                                     break;
  2090.                             }
  2091.                             $orderProduct->setStatus($status);
  2092.                             $orderProduct->getOrder()->setStatus($status);
  2093.                             $orderProduct->setUpdatingdate(new \DateTime());
  2094.                             $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  2095.                             $em->persist($orderProduct);
  2096.                             $em->flush();
  2097.                             if ('approved' == $status) {
  2098.                                 $orderController->updatePaymentAction($orderProductfalsenull);
  2099.                                 $response $this->sendCruiseConfirmationAction($request$parameterBag$aviaturEncoder$twigFolder$exceptionLog$webService$authorizationChecker$mailer$pdf$logSave$errorHandler$transactionIdSessionName);
  2100.                                 $session->set($transactionId.'[cruiser][retry]'$aviaturPaymentRetryTimes);
  2101.                                 if (isset($response['error'])) {
  2102.                                     $orderProduct->setResume('Book_in_basket');
  2103.                                 }
  2104.                                 $em->persist($orderProduct);
  2105.                                 $em->flush();
  2106.                             }
  2107.                         } elseif ('FAIL_INVALIDTRAZABILITYCODE' == (string) $paymentResponse->getTransactionInformationResult->returnCode || 'FAIL_ACCESSDENIED' == $paymentResponse->getTransactionInformationResult->returnCode || 'FAIL_TIMEOUT' == $paymentResponse->getTransactionInformationResult->returnCode) {
  2108.                             echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
  2109.                             PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
  2110.                             unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
  2111.                             forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
  2112.                             comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
  2113.                             inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
  2114.                             transacción <#CUS> .';
  2115.                             $orderProduct->setEmissiondata('error');
  2116.                             $orderProduct->setUpdatingdate(new \DateTime());
  2117.                             $em->persist($orderProduct);
  2118.                             $em->flush();
  2119.                             $twig 'aviatur_cruise_payment_error_secure';
  2120.                         }
  2121.                         $extraService->payoutExtrasCallback($twig$transactionId'cruiser'$agency);
  2122.                         if ($session->has($transactionId.'[cruiser][retry]')) {
  2123.                             $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  2124.                         }
  2125.                         return $this->redirect($this->generateUrl($twig));
  2126.                     } else {
  2127.                         $decodedResponse->getTransactionInformationResult $paymentResponse;
  2128.                         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  2129.                         $orderProduct->setUpdatingdate(new \DateTime());
  2130.                         $em->persist($orderProduct);
  2131.                         $em->flush();
  2132.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Ocurrió un error al consultar el estado de la transacción'));
  2133.                     }
  2134.                 } else {
  2135.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción'));
  2136.                 }
  2137.             }
  2138.         }
  2139.     }
  2140.     public function safetyCallbackOkAction(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailerPdf $pdfOrderController $orderControllerAviaturErrorHandler $errorHandlerPayoutExtraService $extraServiceSafetypayController $safetypayControllerAviaturLogSave $logSave)
  2141.     {
  2142.         $projectDir $parameterBag->get('kernel.project_dir');
  2143.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2144.         $aviaturPaymentRetryTimes $parameterBag->get('aviatur_payment_retry_times');
  2145.         $status null;
  2146.         $twig null;
  2147.         $em $this->getDoctrine()->getManager();
  2148.         $safeTyPay $safetypayController->safetyok();
  2149.         if (true === $session->has($transactionIdSessionName)) {
  2150.             $transactionId $session->get($transactionIdSessionName);
  2151.             if (true === $session->has($transactionId.'[cruiser][order]')) {
  2152.                 $orderProductCode $session->get($transactionId.'[cruiser][order]');
  2153.                 $productId str_replace('PN'''json_decode($orderProductCode)->products);
  2154.                 $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2155.                 $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  2156.                 $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  2157.                 $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  2158.                 $payError $decodedResponse->payResponse->OperationResponse->ErrorManager->ErrorNumber->{'@content'};
  2159.                 $notifyError $decodedResponse->notificationResponse->OperationActivityNotifiedResponse->ErrorManager->ErrorNumber->{'@content'};
  2160.                 if (isset($decodedResponse->payResponse->OperationResponse)) {
  2161.                     $agency $orderProduct->getOrder()->getAgency();
  2162.                     if (== $payError) {
  2163.                         $retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
  2164.                         if (== $notifyError) {
  2165.                             switch ($payError) {
  2166.                                 case 0:
  2167.                                     $twig 'aviatur_cruise_payment_success_secure';
  2168.                                     $status 'approved';
  2169.                                     break;
  2170.                                 case 2:
  2171.                                     $twig 'aviatur_cruise_payment_error_secure';
  2172.                                     $status 'failed';
  2173.                                     break;
  2174.                             }
  2175.                             $orderProduct->setStatus($status);
  2176.                             $orderProduct->getOrder()->setStatus($status);
  2177.                             $orderProduct->setUpdatingdate(new \DateTime());
  2178.                             $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  2179.                             $em->persist($orderProduct);
  2180.                             $em->flush();
  2181.                             $orderController->updatePaymentAction($orderProduct);
  2182.                             if (== $payError) {
  2183.                                 if ('approved' == $status) {
  2184.                                     $response $this->sendCruiseConfirmationAction($request$parameterBag$aviaturEncoder$twigFolder$exceptionLog$webService$authorizationChecker$mailer$pdf$logSave$errorHandler$transactionIdSessionName);
  2185.                                     $session->set($transactionId.'[cruiser][retry]'$aviaturPaymentRetryTimes);
  2186.                                     if (isset($response['error'])) {
  2187.                                         $orderProduct->setResume('Book_in_basket');
  2188.                                         // return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'Hubo un error en la confirmación de la reserva, contactate con nosotros por favor'));
  2189.                                     }
  2190.                                     $em->persist($orderProduct);
  2191.                                     $em->flush();
  2192.                                 }
  2193.                             }
  2194.                         } else {
  2195.                             echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
  2196.                             PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
  2197.                             unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
  2198.                             forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
  2199.                             comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
  2200.                             inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
  2201.                             transacción <#CUS> .';
  2202.                             $orderProduct->setEmissiondata('error');
  2203.                             $orderProduct->setUpdatingdate(new \DateTime());
  2204.                             $em->persist($orderProduct);
  2205.                             $em->flush();
  2206.                             $twig 'aviatur_cruise_payment_error_secure';
  2207.                         }
  2208.                         $extraService->payoutExtrasCallback($twig$transactionId'cruiser'$agency);
  2209.                         $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  2210.                         return $this->redirect($this->generateUrl($twig));
  2211.                     } else {
  2212.                         $decodedResponse->payResponse->OperationResponse->ListOfOperations $paymentResponse;
  2213.                         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
  2214.                         $orderProduct->setUpdatingdate(new \DateTime());
  2215.                         $em->persist($orderProduct);
  2216.                         $em->flush();
  2217.                         return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''Ocurrió un error al consultar el estado de la transacción'));
  2218.                     }
  2219.                 } else {
  2220.                     return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró información de la transacción, por favor comuniquese con nosotros'));
  2221.                 }
  2222.             } else {
  2223.                 return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  2224.             }
  2225.         } else {
  2226.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró identificador de la transacción'));
  2227.         }
  2228.     }
  2229.     public function safetyCallbackErrorAction(SessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderAviaturErrorHandler $errorHandlerTwigFolder $twigFolder)
  2230.     {
  2231.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2232.         $status null;
  2233.         $em $this->getDoctrine()->getManager();
  2234.         $transactionId $session->get($transactionIdSessionName);
  2235.         $retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
  2236.         $orderProductCode json_decode($session->get($transactionId.'[cruiser][order]'));
  2237.         $productId str_replace('PN'''$orderProductCode->products);
  2238.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2239.         $payResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey()));
  2240.         $payRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayRequest(), $orderProduct->getPublicKey()));
  2241.         $orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($payResponse), $orderProduct->getPublicKey()));
  2242.         if ('baloto' == $payRequest->dataTransf->x_payment_data) {
  2243.             $status 'pending';
  2244.             $payResponse->dataTransf->x_response_code 100;
  2245.             $payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Pending';
  2246.         } elseif ('safety' == $payRequest->dataTransf->x_payment_data) {
  2247.             $status 'rejected';
  2248.             $payResponse->dataTransf->x_response_code 100;
  2249.             $payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Expired';
  2250.         }
  2251.         $orderProduct->setStatus($status);
  2252.         $orderProduct->setUpdatingdate(new \DateTime());
  2253.         $orderProduct->getOrder()->setUpdatingdate(new \DateTime());
  2254.         $order $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderProduct->getOrder()->getId());
  2255.         $order->setStatus($status);
  2256.         $em->persist($order);
  2257.         $em->persist($orderProduct);
  2258.         $em->flush();
  2259.         if (true === $session->has($transactionId.'[cruiser][order]')) {
  2260.             $orderProductCode $session->get($transactionId.'[cruiser][order]');
  2261.         } else {
  2262.             return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '''No se encontró orden asociada a este pago'));
  2263.         }
  2264.         $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  2265.         return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
  2266.     }
  2267.     public function worldCallbackAction(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAviaturLogSave $logSaveAuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailerPdf $pdfAviaturErrorHandler $errorHandlerOrderController $orderController)
  2268.     {
  2269.         $projectDir $parameterBag->get('kernel.project_dir');
  2270.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2271.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  2272.         $aviaturPaymentRetryTimes $parameterBag->get('aviatur_payment_retry_times');
  2273.         $em $this->getDoctrine()->getManager();
  2274.         $fullRequest $request;
  2275.         $request $fullRequest->request;
  2276.         $transactionId $session->get($transactionIdSessionName);
  2277.         if (true === $request->has('correlationID')) {
  2278.             $correlationId $request->get('correlationID');
  2279.         } else {
  2280.             $correlationId $session->get($correlationIdSessionName);
  2281.         }
  2282.         $postData json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  2283.         $orderProductCode $session->get($transactionId.'[cruiser][order]');
  2284.         $productId str_replace('PN'''json_decode($orderProductCode)->products);
  2285.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2286.         $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  2287.         $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  2288.         if (null != $decodedResponse) {
  2289.             // $agency = $orderProduct->getOrder()->getAgency();
  2290.             $twig 'aviatur_cruise_payment_rejected_secure';
  2291.             $retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
  2292.             if (isset($decodedResponse->x_response_code_cyber) && (== $decodedResponse->x_response_code_cyber)) {
  2293.                 $decodedResponse->x_response_code_case 99;
  2294.             } else {
  2295.                 if (isset($decodedResponse->resultado->reply->orderStatus->payment->lastEvent)) {
  2296.                     $decodedResponse->x_response_code_case = (string) $decodedResponse->resultado->reply->orderStatus->payment->lastEvent;
  2297.                 } elseif (isset($decodedResponse->resultado->reply->orderStatusEvent->payment->lastEvent)) {
  2298.                     $decodedResponse->x_response_code_case 'REFUSED';
  2299.                 } elseif (isset($decodedResponse->resultado->reply->error)) {
  2300.                     $decodedResponse->x_response_code_case 'REFUSED';
  2301.                 }
  2302.             }
  2303.             switch ($decodedResponse->x_response_code_case) {
  2304.                 case 99:
  2305.                     $twig 'aviatur_cruise_payment_rejected_secure';
  2306.                     break;
  2307.                 case 'ERROR':
  2308.                     $twig 'aviatur_cruise_payment_error_secure';
  2309.                     // no break
  2310.                 case 'REFUSED':  // rechazada
  2311.                     $twig '' != $twig $twig 'aviatur_cruise_payment_rejected_secure';
  2312.                     $orderProduct->setResume('No reservation');
  2313.                     break;
  2314.                 case 'AUTHORISED':// aprobado
  2315.                     $decodedRequest->product_type 'cruiser';
  2316.                     $decodedResponse->product_type 'cruiser';
  2317.                     $encodedRequest $aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey());
  2318.                     $encodedResponse $aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey());
  2319.                     $orderProduct->setPayrequest($encodedRequest);
  2320.                     $orderProduct->setPayresponse($encodedResponse);
  2321.                     $updateOrder $orderController->updatePaymentAction($orderProduct);
  2322.                     $twig 'aviatur_cruise_payment_success_secure';
  2323.                     $orderController->updatePaymentAction($orderProductfalsenull);
  2324.                     $response $this->sendCruiseConfirmationAction$request,  $parameterBag,  $aviaturEncoder,  $twigFolder,  $exceptionLog,  $webService,  $authorizationChecker,  $mailer,  $pdf,  $logSave,  $errorHandler);
  2325.                     $session->set($transactionId.'[cruiser][retry]'$aviaturPaymentRetryTimes);
  2326.                     if (isset($response['error'])) {
  2327.                         $orderProduct->setResume('Book_in_basket');
  2328.                     }
  2329.                     $em->persist($orderProduct);
  2330.                     $em->flush();
  2331.                     break;
  2332.                 default:
  2333.                     $twig '' != $twig $twig 'aviatur_cruise_payment_pending_secure';
  2334.                     $updateOrder $orderController->updatePaymentAction($orderProduct);
  2335.                     $orderProduct->setUpdatingdate(new \DateTime());
  2336.                     $em->persist($orderProduct);
  2337.                     $em->flush();
  2338.                     $retryCount 1;
  2339.                     break;
  2340.             }
  2341.             $session->set($transactionId.'[cruiser][retry]'$retryCount 1);
  2342.             return $this->redirect($this->generateUrl($twig));
  2343.         } else {
  2344.             $orderProduct->setStatus('pending');
  2345.             $em->persist($orderProduct);
  2346.             $em->flush();
  2347.             return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '''No hay respuesta por parte del servicio de pago'));
  2348.         }
  2349.     }
  2350.     public function paymentOutputAction(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderAviaturWebService $webServiceTwigFolder $twigFolderExceptionLog $exceptionLog, \Swift_Mailer $mailerPdf $pdf)
  2351.     {
  2352.         $projectDir $parameterBag->get('kernel.project_dir');
  2353.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2354.         $emailNotification $parameterBag->get('email_notification');
  2355.         $orderProduct null;
  2356.         $clientFranquice = [];
  2357.         $paymentData null;
  2358.         $orderProductCode null;
  2359.         $paymentResume = [];
  2360.         $customer null;
  2361.         $agency null;
  2362.         $em $this->getDoctrine()->getManager();
  2363.         $transactionId $session->get($transactionIdSessionName);
  2364.         $infoDates $session->get($transactionId.'[cruiser][infoTravel]');
  2365.         $detail_data_cruise json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  2366.         $agencyFolder $twigFolder->twigFlux();
  2367.         $isFront $session->has('officeId');
  2368.         $finantial_rate $session->get('[cruiser][finantial_rate]');
  2369.         if (true != $infoDates['service_quotation'] && !isset($infoDates['web_quotation'])) {
  2370.             $orderProductCode json_decode($session->get($transactionId.'[cruiser][order]'));
  2371.             $paymentData $detail_data_cruise->BD;
  2372.             $productId str_replace('PN'''$orderProductCode->products);
  2373.             $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2374.             $agency $orderProduct->getOrder()->getAgency();
  2375.         }
  2376.         if (!$isFront && (true == $infoDates['service_quotation'])) {
  2377.             $nameProduct 'cruceros';
  2378.             $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Hotel/Default/resume_quotation.html.twig');
  2379.             $renderResumeView = ['nameProduct'=> $nameProduct];
  2380.             $orderProductResume $this->render($urlResume$renderResumeView);
  2381.         } else {
  2382.             if (!$isFront && !isset($infoDates['web_quotation'])) {
  2383.                 $opRequestInitial json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  2384.                 $opRequest $opRequestInitial->multi_transaction_hotel ?? $opRequestInitial;
  2385.                 $opResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey()));
  2386.                 if (isset($opResponse->x_franchise) && ('' != $opResponse->x_franchise)) {
  2387.                     $franquiceCode str_replace(['CR_''RM_''CDNSA'], ['''''CS'], $opResponse->x_franchise);
  2388.                     $clientFranquice $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findOneByPaymentgatewaycode($franquiceCode);
  2389.                 } else {
  2390.                     $clientFranquice['description'] = 'error';
  2391.                     if (isset($opRequest->paymentMethod) && 'world' == $opRequest->paymentMethod) {
  2392.                         $clientFranquice['description'] = 'World Pay';
  2393.                     }
  2394.                 }
  2395.                 // $emailData = json_decode($orderProduct->getEmail(), true);
  2396.                 if ((null != $opRequest) && (null != $opResponse)) {
  2397.                     $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($paymentData->id);
  2398.                     if (isset($opResponse->x_description)) {
  2399.                         $paymentResume = [
  2400.                             'transaction_state' => $opResponse->x_response_code,
  2401.                             'ta_transaction_state' => $opResponse->x_ta_response_code,
  2402.                             'id' => $orderProduct->getBooking(),
  2403.                             'id_context' => $opRequest->x_invoice_num,
  2404.                             'total_amount' => $opResponse->x_amount,
  2405.                             'total_amount_usd' => round((float) $opResponse->x_amount $finantial_rate2),
  2406.                             'currency' => $opResponse->x_bank_currency,
  2407.                             'amount' => != $opRequest->x_amount_base $opRequest->x_amount_base $opResponse->x_amount,
  2408.                             'amount_usd' => != $opRequest->x_amount_base round((float) $opRequest->x_amount_base $finantial_rate2) : round((float) $opResponse->x_amount $finantial_rate2),
  2409.                             'iva' => $opRequest->x_tax,
  2410.                             'iva_usd' => round((float) $opRequest->x_tax $finantial_rate2),
  2411.                             'ip_address' => $opRequest->x_customer_ip,
  2412.                             'bank_name' => $opResponse->x_bank_name,
  2413.                             'client_franquice' => ['description' => (is_object($clientFranquice) ? $clientFranquice->getDescription() : $clientFranquice['description'])],
  2414.                             'cuotas' => $opRequest->x_differed,
  2415.                             'card_num' => '************'.substr($opRequest->x_card_numstrlen($opRequest->x_card_num) - 4),
  2416.                             'reference' => $opResponse->x_transaction_id,
  2417.                             'auth' => $opResponse->x_approval_code,
  2418.                             'transaction_date' => $opResponse->x_transaction_date,
  2419.                             'description' => $opResponse->x_description,
  2420.                             'reason_code' => $opResponse->x_response_reason_code,
  2421.                             'reason_description' => $opResponse->x_response_reason_text,
  2422.                             'client_names' => $opResponse->x_first_name.' '.$opResponse->x_last_name,
  2423.                             'client_email' => $opResponse->x_email,
  2424.                             'cabin_description' => $infoDates['cabinDescription'],
  2425.                         ];
  2426.                     } elseif (isset($opRequest->dataTransf)) {
  2427.                         if (isset($opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'})) {
  2428.                             $state $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
  2429.                             if (102 == $state) {
  2430.                                 $state 1;
  2431.                                 $reason_description 'SafetyPay recibe la confirmación del pago de un Banco Asociado';
  2432.                             } elseif (101 == $state) {
  2433.                                 $state 2;
  2434.                                 $reason_description 'Transacción creada';
  2435.                             }
  2436.                             $paymentResume = [
  2437.                                     'transaction_state' => $state,
  2438.                                     'id' => $orderProduct->getBooking(),
  2439.                                     'currency' => $opRequest->dataTransf->x_currency,
  2440.                                     'total_amount' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'},
  2441.                                     'total_amount_usd' => round((float) $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'} / $finantial_rate2),
  2442.                                     'amount' => null,
  2443.                                     'amount_usd' => 0,
  2444.                                     'iva' => null,
  2445.                                     'iva_usd' => null,
  2446.                                     'ip_address' => $opRequest->dataTransf->dirIp,
  2447.                                     'airport_tax' => null,
  2448.                                     'reference' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:MerchantSalesID'},
  2449.                                     'auth' => $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationID'},
  2450.                                     'transaction_date' => $opResponse->payResponse->OperationResponse->ResponseDateTime,
  2451.                                     'description' => $opRequest->dataTransf->x_description,
  2452.                                     'reason_code' => $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'},
  2453.                                     'reason_description' => $reason_description,
  2454.                                     'client_names' => $opRequest->dataTransf->x_first_name.' '.$opRequest->dataTransf->x_last_name,
  2455.                                     'client_email' => $opRequest->dataTransf->x_email,
  2456.                                     'x_payment_data' => $opRequest->dataTransf->x_payment_data,
  2457.                                     'client_franquice' => ['description' => 'SafetyPay'],
  2458.                                     'id_context' => $orderProductCode->order.'-'.$orderProductCode->products,
  2459.                                     'cabin_description' => $infoDates['cabinDescription'],
  2460.                                 ];
  2461.                         } else {
  2462.                             $paymentResume = [
  2463.                                 'transaction_state' => 2,
  2464.                                 'id' => $orderProduct->getBooking(),
  2465.                                 'currency' => $opRequest->dataTransf->x_currency,
  2466.                                 'total_amount' => $opRequest->dataTransf->x_total_amount,
  2467.                                 'total_amount_usd' => round((float) $opRequest->dataTransf->x_total_amount $finantial_rate2),
  2468.                                 'amount' => null,
  2469.                                 'amount_usd' => 0,
  2470.                                 'iva' => null,
  2471.                                 'iva_usd' => null,
  2472.                                 'ip_address' => $opRequest->dataTransf->dirIp,
  2473.                                 'airport_tax' => null,
  2474.                                 'reference' => $opRequest->dataTransf->x_reference,
  2475.                                 'auth' => null,
  2476.                                 'transaction_date' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:RequestDateTime'},
  2477.                                 'description' => $opRequest->dataTransf->x_description,
  2478.                                 'reason_code' => 101,
  2479.                                 'reason_description' => 'Transacción creada',
  2480.                                 'x_payment_data' => $opRequest->dataTransf->x_payment_data,
  2481.                                 'client_names' => $opRequest->dataTransf->x_first_name.' '.$opRequest->dataTransf->x_last_name,
  2482.                                 'client_email' => $opRequest->dataTransf->x_email,
  2483.                                 'cabin_description' => $infoDates['cabinDescription'],
  2484.                             ];
  2485.                         }
  2486.                         if ('baloto' == $opRequest->dataTransf->x_payment_data) {
  2487.                             $paymentResume['transaction_state'] = 3;
  2488.                         }
  2489.                     } elseif (isset($opRequest->infoCash)) {
  2490.                         $paymentResume = [
  2491.                             'transaction_state' => 2,
  2492.                             'id' => $orderProduct->getBooking(),
  2493.                             'id_booking' => $opRequest->infoCash->x_booking,
  2494.                             'id_context' => $opRequest->infoCash->x_reference,
  2495.                             'currency' => $opRequest->infoCash->x_currency,
  2496.                             'total_amount' => $opRequest->infoCash->x_total_amount,
  2497.                             'total_amount_usd' => round((float) $opRequest->infoCash->x_total_amount $finantial_rate2),
  2498.                             'client_franquice' => ['description' => 'Efectivo'],
  2499.                             'amount' => null,
  2500.                             'amount_usd' => 0,
  2501.                             'iva' => null,
  2502.                             'iva_usd' => null,
  2503.                             'ip_address' => $opRequest->infoCash->dirIp,
  2504.                             'airport_tax' => null,
  2505.                             'reference' => $opRequest->infoCash->x_reference,
  2506.                             'auth' => null,
  2507.                             'transaction_date' => $opRequest->infoCash->x_fechavigencia,
  2508.                             'description' => $opRequest->infoCash->x_description,
  2509.                             'reason_code' => 101,
  2510.                             'reason_description' => 'Transacción creada',
  2511.                             'client_names' => $opRequest->infoCash->x_first_name.' '.$opRequest->infoCash->x_last_name,
  2512.                             'client_email' => $opRequest->infoCash->x_email,
  2513.                             'fecha_vigencia' => $opRequest->infoCash->x_fechavigencia,
  2514.                             'cabin_description' => $infoDates['cabinDescription'],
  2515.                         ];
  2516.                         $cash_result json_decode($session->get($transactionId.'[cruiser][cash_result]'));
  2517.                         $paymentResume['transaction_state'] = 3;
  2518.                         if ('' == $cash_result) {
  2519.                             $paymentResume['transaction_state'] = 2;
  2520.                         }
  2521.                     } else {
  2522.                         $bank_info $em->getRepository(\Aviatur\PaymentBundle\Entity\PseBank::class)->findOneByCode($opRequest->bankCode);
  2523.                         $bank_name $bank_info->getName();
  2524.                         $clientFranquice['description'] = 'PSE';
  2525.                         $paymentResume = [
  2526.                             'transaction_state' => $opResponse->getTransactionInformationResult->responseCode,
  2527.                             'id' => $orderProduct->getBooking(),
  2528.                             'id_context' => $opRequest->reference,
  2529.                             'currency' => $opRequest->currency,
  2530.                             'total_amount' => $opRequest->totalAmount,
  2531.                             'total_amount_usd' => round((float) $opRequest->totalAmount $finantial_rate2),
  2532.                             'amount' => != $opRequest->devolutionBase $opRequest->devolutionBase $opRequest->totalAmount,
  2533.                             'amount_usd' => != $opRequest->devolutionBase round((float) $opRequest->devolutionBase $finantial_rate2) : round((float) $opRequest->totalAmount $finantial_rate2),
  2534.                             'iva' => $opRequest->taxAmount,
  2535.                             'iva_usd' => round((float) $opRequest->taxAmount $finantial_rate2),
  2536.                             'ip_address' => $opRequest->ipAddress,
  2537.                             'bank_name' => $bank_name,
  2538.                             'client_franquice' => $clientFranquice,
  2539.                             'reference' => $opResponse->createTransactionResult->transactionID,
  2540.                             'auth' => $opResponse->getTransactionInformationResult->trazabilityCode,
  2541.                             'transaction_date' => $opResponse->getTransactionInformationResult->bankProcessDate,
  2542.                             'description' => $opRequest->description,
  2543.                             'reason_code' => $opResponse->getTransactionInformationResult->responseReasonCode,
  2544.                             'reason_description' => $opResponse->getTransactionInformationResult->responseReasonText,
  2545.                             'client_names' => $opRequest->payer->firstName.' '.$opRequest->payer->lastName,
  2546.                             'client_email' => $opRequest->payer->emailAddress,
  2547.                             'cabin_description' => $infoDates['cabinDescription'],
  2548.                         ];
  2549.                     }
  2550.                 } else {
  2551.                     $customer null;
  2552.                     $paymentResume['id'] = $orderProduct->getBooking();
  2553.                 }
  2554.                 $paymentResume['transaction_state_cyber'] = $opResponse->x_response_code_cyber ?? '1';
  2555.             }
  2556.             if (true != $infoDates['service_quotation'] && !isset($infoDates['web_quotation'])) {
  2557.                 if (false !== strpos($paymentData->first_name'***')) {
  2558.                     $facturationResume = [
  2559.                         'customer_names' => $customer->getFirstname().' '.$customer->getLastname(),
  2560.                         'customer_address' => $customer->getAddress(),
  2561.                         'customer_doc_num' => $customer->getDocumentnumber(),
  2562.                         'customer_phone' => $customer->getPhone(),
  2563.                         'customer_email' => $customer->getEmail(),
  2564.                     ];
  2565.                 } else {
  2566.                     $facturationResume = [
  2567.                         'customer_names' => $paymentData->first_name.' '.$paymentData->last_name,
  2568.                         'customer_address' => $paymentData->address ?? null,
  2569.                         'customer_doc_num' => $paymentData->doc_num,
  2570.                         'customer_phone' => $paymentData->phone,
  2571.                         'customer_email' => $paymentData->email ?? null,
  2572.                     ];
  2573.                 }
  2574.                 if (false !== strpos($detail_data_cruise->PI->first_name_1_1'***')) {
  2575.                     $detail_data_cruise->PI->first_name_1_1 $customer->getFirstname();
  2576.                     $detail_data_cruise->PI->last_name_1_1 $customer->getLastname();
  2577.                     $detail_data_cruise->PI->email_1_1 $customer->getEmail();
  2578.                     $detail_data_cruise->PI->address_1_1 $customer->getAddress();
  2579.                     $detail_data_cruise->CD->phone $customer->getPhone();
  2580.                 }
  2581.                 $clientFranquice '';
  2582.                 $retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
  2583.                 $emailData = [
  2584.                     'retry_count' => $retryCount,
  2585.                     'product' => $infoDates['vendorName'].' - '.$infoDates['cruiseName'],
  2586.                     'barco' => $infoDates['shipName'],
  2587.                     'order' => $orderProductCode->order,
  2588.                     'products' => $orderProductCode->products,
  2589.                     'Name' => $infoDates['description'],
  2590.                     'info_travelers' => (array) $detail_data_cruise->PI,
  2591.                     'contact_phone' => $detail_data_cruise->CD->phone,
  2592.                     'transactionID' => $transactionId,
  2593.                     'infoClient' => $facturationResume,
  2594.                     'dateEntry' => $infoDates['startDate'],
  2595.                     'dateEnd' => $infoDates['endDate'],
  2596.                     'total_amount' => $infoDates['cabinTypePrice'],
  2597.                 ];
  2598.                 if (isset($infoDates['bookReservation'])) {
  2599.                     $emailData['bookReservation'] = $infoDates['bookReservation'];
  2600.                 }
  2601.                 if ($session->has($transactionId.'[cruiser][cash_result]')) {
  2602.                     $emailData['cash_result'] = json_decode($session->get($transactionId.'[cruiser][cash_result]'), true);
  2603.                 }
  2604.                 $voucherFile $projectDir.'/app/serviceLogs/CashTransaction/ON'.$emailData['products'].'_'.$transactionId.'.pdf';
  2605.                 if (file_exists($voucherFile)) {
  2606.                     $emailData['NameArchive'] = 'ON'.$emailData['products'].'_'.$transactionId.'.pdf';
  2607.                 }
  2608.                 if (!$isFront) {
  2609.                     $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume.html.twig');
  2610.                 } else {
  2611.                     $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume_front.html.twig');
  2612.                 }
  2613.                 $renderResumeView $emailData;
  2614.                 if (isset($paymentResume)) {
  2615.                     $renderResumeView['infos'][0] = ['paymentResume' => $paymentResume];
  2616.                 } elseif ($isFront) {
  2617.                     $renderResumeView['infos'][0] = ['paymentResume' => ['total_amount' => $detail_data_cruise->QD->cruiseTotalPaymentCOP]];
  2618.                 }
  2619.                 $renderResumeView['infos'][0]['agencyData']['agency_phone'] = $orderProduct->getOrder()->getAgency()->getPhone();
  2620.                 $renderResumeView['infos'][0]['agencyData']['agency_email'] = $orderProduct->getOrder()->getAgency()->getMailContact();
  2621.                 if ($session->has($transactionId.'[cruiser][cash_result]') && !$session->has($transactionId.'[emission_baloto_email]')) {
  2622.                     $configCruiserAgency $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
  2623.                     $toMails explode(';'$configCruiserAgency->getMailsWeb());
  2624.                     $toMails[] = 'soportepagoelectronico@aviatur.com.co';
  2625.                     $toMails[] = 'soptepagelectronic@aviatur.com';
  2626.                     $toMails[] = $emailNotification;
  2627.                     $toMails[] = $agency->getMailContact();
  2628.                     $renderResumeView['exportPDF'] = true;
  2629.                     $ruta '@AviaturTwig/'.$agencyFolder.'/General/Templates/email_cash.html.twig';
  2630.                     if (!file_exists($voucherFile)) {
  2631.                         $pdf->generateFromHtml($this->renderView($twigFolder->twigExists($ruta), $renderResumeView), $voucherFile);
  2632.                         $renderResumeView['NameArchive'] = 'ON'.$renderResumeView['products'].'_'.$transactionId.'.pdf';
  2633.                     }
  2634.                     $clientEmail $renderResumeView['infos'][0]['paymentResume']['client_email'];
  2635.                     $renderResumeView['exportPDF'] = false;
  2636.                     $message = (new \Swift_Message())
  2637.                             ->setContentType('text/html')
  2638.                             ->setFrom($session->get('emailNoReply'))
  2639.                             ->setTo($clientEmail)
  2640.                             ->setBcc($toMails)
  2641.                             ->setSubject('Transacción Efectivo Creada '.$renderResumeView['order'].' - '.$agency->getName())
  2642.                             ->attach(\Swift_Attachment::fromPath($voucherFile))
  2643.                             ->setBody(
  2644.                                 $this->renderView($twigFolder->twigExists($ruta), $renderResumeView)
  2645.                             );
  2646.                     try {
  2647.                         $mailer->send($message);
  2648.                         $session->set($transactionId.'[emission_baloto_email]''emailed');
  2649.                         // send info to cruise departament
  2650.                         $this->sendShoppingCartInfo($request$session$parameterBag$twigFolder$webService$mailer$exceptionLog$transactionIdSessionName$detail_data_cruise$infoDates$orderProductCode->products);
  2651.                     } catch (Exception $ex) {
  2652.                         $exceptionLog->log(var_dump($message), $ex);
  2653.                     }
  2654.                 }
  2655.                 $orderProductResume $this->render($urlResume$renderResumeView);
  2656.                 if (isset($infoDates['bookReservation'])) {
  2657.                     $orderProduct->setResume($orderProductResume);
  2658.                     $em->persist($orderProduct);
  2659.                     $em->flush();
  2660.                 }
  2661.             } else {
  2662.                 $nameProduct 'cruceros';
  2663.                 $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Hotel/Default/resume_quotation.html.twig');
  2664.                 $renderResumeView = ['nameProduct'=> $nameProduct];
  2665.                 $orderProductResume $this->render($urlResume$renderResumeView);
  2666.             }
  2667.         }
  2668.         return $orderProductResume;
  2669.     }
  2670.     public function addCabinShoppingCart(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagAviaturWebService $webServiceAviaturErrorHandler $errorHandler)
  2671.     {
  2672.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2673.         $correlationIdSessionName $parameterBag->get('correlation_id_session_name');
  2674.         // $em = $this->getDoctrine()->getManager();
  2675.         $fullRequest $request;
  2676.         $oldFullRequest $this->get('request_stack')->getCurrentRequest();
  2677.         // $fullRequest->attributes->get('_route') = aviatur_cruise_cabin_reservation_secure
  2678.         $requestUrl $this->generateUrl($oldFullRequest->attributes->get('_route'), $oldFullRequest->attributes->get('_route_params'));
  2679.         $transactionId $session->get($transactionIdSessionName);
  2680.         $infoTravel $session->get($transactionId.'[cruiser][infoTravel]');
  2681.         $correlationId $session->get($correlationIdSessionName);
  2682.         if ($session->has($transactionId.'[cruiser][provider]')) {
  2683.             $providerId $session->get($transactionId.'[cruiser][provider]');
  2684.         } elseif ($fullRequest->request->has('providerID')) {
  2685.             $providerId $fullRequest->request->get('providerID');
  2686.             $session->set($transactionId.'[cruiser][provider]'$providerId);
  2687.         }
  2688.         $cruiseModel = new CruiseModel();
  2689.         $templateXml $cruiseModel->getXmlCabinShoppingCart();
  2690.         $xmlRequest $templateXml[0];
  2691.         $variables = [];
  2692.         $variables['transactionId'] = $transactionId;
  2693.         $variables['ProviderId'] = $providerId;
  2694.         $variables['correlationId'] = $correlationId;
  2695.         $variables['cabinNumber'] = $variables['groupCode'] = $infoTravel['cabinGroupCode'];
  2696.         $variables['fareCode'] = $infoTravel['cabinFareCode'];
  2697.         $variables['cabinNumber'] = $infoTravel['cabinCategoryCode'];
  2698.         $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseReserve''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablesfalse$variables['transactionId']);
  2699.         if (isset($response['error'])) {
  2700.             $response $webService->callWebServiceAmadeus('SERVICIO_MPT''CruiseReserve''dummy|http://www.aviatur.com.co/dummy/'$xmlRequest$variablesfalse$variables['transactionId']);
  2701.             if (isset($response['error'])) {
  2702.                 $errorHandler->errorRedirect($requestUrl'Error reserva del crucero'$response['error']);
  2703.                 return $response;
  2704.             }
  2705.         } elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
  2706.             $errorHandler->errorRedirect($requestUrl'Respuesta vacia del proveedor de servicios'$response->Message);
  2707.             return ['error' => 'Respuesta vacia del proveedor de servicios'];
  2708.         } else {
  2709.             $session->set($transactionId.'[cruiser][CabinAvailResponse]'$response->asXML());
  2710.             $breakdown $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown// Toca controlar por que a veces no llega
  2711.             $detailBreakdown = [];
  2712.             foreach ($breakdown->item as $item) {
  2713.                 $detailBreakdown[(string) $item['description']] = $item;
  2714.             }
  2715.             $discountTotalCost = isset($detailBreakdown['Discount']) ? (float) $detailBreakdown['Discount']['totalcost'] : '0';
  2716.             $baseAmount = (float) $detailBreakdown['Cruise Fare']['totalcost'] + $discountTotalCost;
  2717.             $discountMiscellaneous '0';
  2718.             if (isset($detailBreakdown['Non-Commissionable Fare Discount'])) {
  2719.                 $discountMiscellaneous = (float) $detailBreakdown['Non-Commissionable Fare Discount']['totalcost'];
  2720.             }
  2721.             $finantial_rate $session->get('[cruiser][finantial_rate]');
  2722.             $infoTravel['cabinAmmountBase'] = $baseAmount;
  2723.             $infoTravel['cabinAmmountFees'] = (int) $infoTravel['cabinAmmountFees'] + $discountMiscellaneous;
  2724.             $infoTravel['cabinAmmountNccf'] += $discountMiscellaneous;
  2725.             $infoTravel['cabinAmmountBaseCOP'] = round((float) $baseAmount $finantial_rate);
  2726.             $infoTravel['cabinAmmountFeesCOP'] = round((float) $infoTravel['cabinAmmountFees'] * $finantial_rate);
  2727.             $infoTravel['cabinAmmountNccfCOP'] = round((float) $infoTravel['cabinAmmountNccf'] * $finantial_rate);
  2728.             $infoTravel['cabinGradeCategory'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->cabin['cabingrade'];
  2729.             $infoTravel['cruiseDuration'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['nights'];
  2730.             $infoTravel['cruisePackageId'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['codetocruiseid'];
  2731.             $session->set($transactionId.'[cruiser][infoTravel]'$infoTravel);
  2732.         }
  2733.         return $response;
  2734.     }
  2735.     public function sendShoppingCartInfo(Request $requestSessionInterface $sessionParameterBagInterface $parameterBagTwigFolder $twigFolderAviaturWebService $webService, \Swift_Mailer $mailerExceptionLog $exceptionLog$detail_data_cruise$infoDates$productId)
  2736.     {
  2737.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2738.         $fullRequest $request;
  2739.         $em $this->getDoctrine()->getManager();
  2740.         $transactionID $session->get($transactionIdSessionName);
  2741.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  2742.         $agencyFolder $twigFolder->twigFlux();
  2743.         $passengersDetail $detail_data_cruise->PI;
  2744.         $clientInformation $detail_data_cruise->BD;
  2745.         $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
  2746.         if (false !== strpos($clientInformation->first_name'***')) {
  2747.             $clientInformation->first_name $customer->getFirstname();
  2748.             $clientInformation->last_name $customer->getLastname();
  2749.             $clientInformation->address $customer->getAddress();
  2750.             $clientInformation->phone $customer->getPhone();
  2751.             $clientInformation->email $customer->getEmail();
  2752.         }
  2753.         if (false !== strpos($passengersDetail->first_name_1_1'***')) {
  2754.             $passengersDetail->first_name_1_1 $customer->getFirstname();
  2755.             $passengersDetail->last_name_1_1 $customer->getLastname();
  2756.             $passengersDetail->email_1_1 $customer->getEmail();
  2757.         }
  2758.         $passengersDetail = (array) $passengersDetail;
  2759.         $clientInformation = (array) $clientInformation;
  2760.         // $updatingdate = new \DateTime();
  2761.         // $updatingdate->add(new \DateInterval('PT2H30M'));
  2762.         // $timelimit = $updatingdate->format('Y-m-d H:i:s');
  2763.         $dataRequested = [
  2764.             'Reservation_code' => $infoDates['bookReservation'],
  2765.             'Provider_code' => $infoDates['travelTekId'],
  2766.             'Product' => $productId,
  2767.             'Nombre_crucero' => $infoDates['cruiseName'],
  2768.             'Naviera' => $infoDates['vendorName'],
  2769.             'Nombre_barco' => $infoDates['shipName'],
  2770.             'Fecha_embarque' => $infoDates['startDate'],
  2771.             'Fecha_regreso' => $infoDates['endDate'],
  2772.             'Numero_cabina' => $infoDates['cabinNumber'],
  2773.             'Adultos' => $infoDates['adults'],
  2774.             'Ninos' => $infoDates['children'],
  2775.             'Pago_crucero' => $detail_data_cruise->QD,
  2776.             'Cliente' => $clientInformation,
  2777.             'Pasajeros' => $passengersDetail,
  2778.             // 'time_limit' => $timelimit
  2779.         ];
  2780.         $configCruiserAgency $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
  2781.         $toCruiserDep explode(';'$configCruiserAgency->getMailsWeb());
  2782.         $bccMails = ['andrei.sotelo@aviatur.com'];
  2783.         if ($session->has('front_user')) {
  2784.             $userFront simplexml_load_string($session->get('front_user'));
  2785.             $toMails = (string) $userFront->CORREO_ELECTRONICO;
  2786.             $bccMails array_merge($bccMails$toCruiserDep);
  2787.             $subject 'Solicitud reserva de crucero - Front del Asesor';
  2788.         } else {
  2789.             $bccMails[] = 'soportepagoelectronico@aviatur.com.co';
  2790.             $bccMails[] = 'soptepagelectronic@aviatur.com';
  2791.             $bccMails[] = $agency->getMailContact();
  2792.             $toMails $toCruiserDep;
  2793.             $subject 'Solicitud Crucero Pago Baloto - Generado '.$agency->getName();
  2794.             if (isset($infoDates['rejectCyber'])) {
  2795.                 $subject 'Solicitud Crucero Pago TC Generado - Rechazo Cybersource '.$agency->getName();
  2796.                 $dataRequested['rejectCyber'] = true;
  2797.                 $bccMails[] = 'controlpagoelectronico@aviatur.com';
  2798.             }
  2799.         }
  2800.         if ($session->has('front_user')) {
  2801.             $productId str_replace('PN'''$productId);
  2802.             $orderProductEntity $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2803.             $orderXml $orderProductEntity->getAddProductData();
  2804.             try {
  2805.                 $responseOrder $webService->busWebServiceAmadeus(nullnull$orderXml);
  2806.             } catch (\Exception $e) {
  2807.             }
  2808.         }
  2809.         $mailCash '@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cash_generated_cruise.html.twig';
  2810.         $message2 = (new \Swift_Message())
  2811.                 ->setContentType('text/html')
  2812.                 ->setFrom($session->get('emailNoReply'))
  2813.                 ->setTo($toMails)
  2814.                 ->setBcc($bccMails)
  2815.                 ->setSubject($subject)
  2816.                 ->setBody($this->renderView($twigFolder->twigExists($mailCash), $dataRequested));
  2817.         try {
  2818.             $mailer->send($message2);
  2819.         } catch (Exception $ex) {
  2820.             $exceptionLog->log(var_dump($message2), $ex);
  2821.         }
  2822.     }
  2823.     public function sendCruiseConfirmationAction(Request $requestParameterBagInterface $parameterBagAviaturEncoder $aviaturEncoderTwigFolder $twigFolderExceptionLog $exceptionLogAviaturWebService $webServiceAuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailerPdf $pdfAviaturLogSave $logSaveAviaturErrorHandler $errorHandler QuotationUtils $QuotationUtils)
  2824.     {
  2825.         $projectDir $parameterBag->get('kernel.project_dir');
  2826.         $transactionIdSessionName $parameterBag->get('transaction_id_session_name');
  2827.         $codImg null;
  2828.         $additionalUserFront null;
  2829.         $orderProduct null;
  2830.         $customer null;
  2831.         $urltmp null;
  2832.         $nameImg null;
  2833.         $fullRequest $request;
  2834.         $session $fullRequest->getSession();
  2835.         $em $this->getDoctrine()->getManager();
  2836.         $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  2837.         $transactionId $session->get($transactionIdSessionName);
  2838.         $agencyFolder $twigFolder->twigFlux();
  2839.         $infoTravel $session->get($transactionId.'[cruiser][infoTravel]');
  2840.         $detail_data_cruise json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
  2841.         $clientInformation $detail_data_cruise->BD;
  2842.         $infoTransaction = [];
  2843.         $orderProductCode $session->get($transactionId.'[cruiser][order]');
  2844.         $datosUserFront simplexml_load_string ($session->get('front_user'));
  2845.         $additionalUserFront simplexml_load_string($session->get('front_user_additionals'));
  2846.         if (true == $infoTravel['service_quotation']) {
  2847.             $infoAdults $infoChildren = [];
  2848.         } else {
  2849.             if (!isset($infoTravel['web_quotation'])) {
  2850.                 $productId str_replace('PN'''json_decode($orderProductCode)->products);
  2851.                 $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  2852.                 $decodedRequest json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
  2853.                 $decodedResponse json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
  2854.                 if (isset($decodedResponse->dataTransf)) {
  2855.                     if (isset($decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'})) {
  2856.                         $state $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
  2857.                         $infoTransaction['x_invoice_num'] = $decodedRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:MerchantSalesID'};
  2858.                         $infoTransaction['x_approval_code'] = $decodedResponse->payResponse->OperationResponse->ListOfOperations->Operation->PaymentReferenceNo;
  2859.                         $infoTransaction['x_response_reason_code'] = $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
  2860.                         $infoTransaction['x_response_reason_text'] = 'Transacción creada';
  2861.                         $infoTransaction['x_transaction_id'] = $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationID'};
  2862.                         $infoTransaction['x_amount'] = $decodedRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'};
  2863.                     } else {
  2864.                         $infoTransaction['x_invoice_num'] = $decodedRequest->dataTransf->x_reference;
  2865.                         $infoTransaction['x_approval_code'] = null;
  2866.                         $infoTransaction['x_response_reason_code'] = 101;
  2867.                         $infoTransaction['x_response_reason_text'] = 'Transacción creada*';
  2868.                         $infoTransaction['x_transaction_id'] = '';
  2869.                         $infoTransaction['x_amount'] = null;
  2870.                     }
  2871.                 } elseif (isset($decodedResponse->createTransactionResult)) {
  2872.                     $infoTransaction['x_invoice_num'] = $decodedRequest->reference;
  2873.                     $infoTransaction['x_approval_code'] = $decodedResponse->getTransactionInformationResult->trazabilityCode;
  2874.                     $infoTransaction['x_response_reason_code'] = $decodedResponse->getTransactionInformationResult->responseReasonCode;
  2875.                     $infoTransaction['x_response_reason_text'] = $decodedResponse->getTransactionInformationResult->responseReasonText;
  2876.                     $infoTransaction['x_transaction_id'] = $decodedResponse->createTransactionResult->transactionID;
  2877.                     $infoTransaction['x_amount'] = $decodedRequest->totalAmount;
  2878.                 } else {
  2879.                     $infoTransaction $decodedResponse;
  2880.                     if (isset($decodedRequest->paymentMethod) && 'world' == $decodedRequest->paymentMethod) {
  2881.                         $infoTransaction->x_invoice_num $decodedRequest->x_invoice_num ?? '';
  2882.                     }
  2883.                 }
  2884.             }
  2885.             $passengersDetail $detail_data_cruise->PI;
  2886.             $customer $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
  2887.             if (false !== strpos($clientInformation->first_name'***')) {
  2888.                 $clientInformation->first_name $customer->getFirstname();
  2889.                 $clientInformation->last_name $customer->getLastname();
  2890.                 $clientInformation->address $customer->getAddress();
  2891.                 $clientInformation->phone $customer->getPhone();
  2892.                 $clientInformation->email $customer->getEmail();
  2893.             }
  2894.             if (false !== strpos($passengersDetail->first_name_1_1'***')) {
  2895.                 $passengersDetail->first_name_1_1 $customer->getFirstname();
  2896.                 $passengersDetail->last_name_1_1 $customer->getLastname();
  2897.                 $passengersDetail->email_1_1 $customer->getEmail();
  2898.             }
  2899.             $passengersDetail = (array) $passengersDetail;
  2900.             $TotalADT $infoTravel['adults'];
  2901.             $TotalCHD $infoTravel['children'];
  2902.             $infoAdults = [];
  2903.             $infoChildren = [];
  2904.             $indexADT 0;
  2905.             $indexCHD 0;
  2906.             for ($i 1$i <= ($TotalADT $TotalCHD); ++$i) {
  2907.                 if (335 == $passengersDetail['gender_1_'.$i]) {
  2908.                     $type 'M';
  2909.                 } else {
  2910.                     $type 'F';
  2911.                 }
  2912.                 if ('ADT' == $passengersDetail['passanger_type_1_'.$i]) {
  2913.                     $infoAdults[$indexADT] = [
  2914.                         'Type' => $type,
  2915.                         'First_name' => $passengersDetail['first_name_1_'.$i],
  2916.                         'First_last_name' => $passengersDetail['last_name_1_'.$i],
  2917.                         'Document_type' => $passengersDetail['doc_type_1_'.$i],
  2918.                         'Document_id' => $passengersDetail['doc_type_1_'.$i],
  2919.                         'Document_number' => $passengersDetail['doc_num_1_'.$i],
  2920.                         'birthday' => $passengersDetail['birthday_1_'.$i],
  2921.                     ];
  2922.                     ++$indexADT;
  2923.                 } else {
  2924.                     $infoChildren[$indexCHD] = [
  2925.                         'Type' => $type,
  2926.                         'First_name' => $passengersDetail['first_name_1_'.$i],
  2927.                         'First_last_name' => $passengersDetail['last_name_1_'.$i],
  2928.                         'Document_type' => $passengersDetail['doc_type_1_'.$i],
  2929.                         'Document_id' => $passengersDetail['doc_type_1_'.$i],
  2930.                         'Document_number' => $passengersDetail['doc_num_1_'.$i],
  2931.                         'birthday' => $passengersDetail['birthday_1_'.$i],
  2932.                     ];
  2933.                     ++$indexCHD;
  2934.                 }
  2935.             }
  2936.         }
  2937.         $template_pdf $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email_pdf.html.twig');
  2938.         $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email.html.twig');
  2939.         $emailData = [
  2940.             'infoTravel' => $infoTravel,
  2941.             'cruisePayData' => $detail_data_cruise->QD,
  2942.             'infoAdults' => $infoAdults,
  2943.             'infoChildren' => $infoChildren,
  2944.             'agencyData' => [
  2945.                 'agency_name' => $agency->getName(),
  2946.                 'agency_nit' => $agency->getNit(),
  2947.                 'agency_phone' => $agency->getPhone(),
  2948.                 'agency_email' => $agency->getMailContact(),
  2949.                 'agency_address' => $agency->getAddress(),
  2950.                 'agency_domain' => $agency->getDomain(),
  2951.             ],
  2952.             'clientInformation' => $clientInformation,
  2953.             'cruiseDetailItinerary' => json_decode($infoTravel['cruiseDetailItinerary'], true),
  2954.             'galeryResume' => json_decode($infoTravel['galeryResume'], true),
  2955.             'infoTransaction' => $infoTransaction,
  2956.         ];
  2957.         $emailData['codImg'] = $QuotationUtils->curlImg($session'_front');
  2958.         $configCruiserAgency $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
  2959.         $bccMails explode(';'$configCruiserAgency->getMailsWeb());
  2960.         if ($session->has('front_user')) {
  2961.             $toMails $additionalUserFront->CORREO_ELECTRONICO;
  2962.             $subject true != $infoTravel['service_quotation'] ? 'Solicitud reserva de crucero - Front del Asesor' 'Cotización de Crucero - Front del Asesor';
  2963.             $datosUserFront simplexml_load_string ($session->get('front_user'));
  2964.             /* Se debe revisar que la codificación está bien en estos dos campos */
  2965.             $agentAddress mb_convert_encoding((string)$additionalUserFront->DIRECCION_SUCURSAL"ISO-8859-1"mb_detect_encoding((string)$additionalUserFront->DIRECCION_SUCURSAL)) ?? (mb_convert_encoding((string)$datosUserFront->NOMBRE_OFICINA_PERTENECE"ISO-8859-1"mb_detect_encoding((string)$datosUserFront->NOMBRE_OFICINA_PERTENECE)) ?? (mb_convert_encoding((string)$datosUserFront->CIUDAD"ISO-8859-1"mb_detect_encoding((string)$datosUserFront->CIUDAD))));
  2966.             $agentCity mb_convert_encoding((string)$datosUserFront->CIUDAD"ISO-8859-1"mb_detect_encoding((string)$datosUserFront->CIUDAD));
  2967.             $InfoAgentContact = [
  2968.                 'agentName' => ucwords(strtolower(($additionalUserFront->NOMBRE_USUARIO ?? '') . ' ' . ($additionalUserFront->APELLIDOS_USUARIO ?? '') ?: $datosUserFront->NOMBRE_AGENTE)),
  2969.                 'agentMail' => $datosUserFront->CORREO_ELECTRONICO,
  2970.                 'agentPhone' => $additionalUserFront->TELEFONO_SUCURSAL,
  2971.                 'agentAddress' => $agentAddress,
  2972.                 'agentCity' => $agentCity
  2973.             ];
  2974.         } else {
  2975.             $InfoAgentContact = [
  2976.                 'agentName' => $agency->getName(),
  2977.                 'agentMail' => $agency->getMailContact(),
  2978.                 'agentPhone' => $agency->getPhone(),
  2979.                 'agentAddress' => $agency->getAddress(),
  2980.                 'agentCity' => ''
  2981.             ];
  2982.             $toMails $clientInformation->email;
  2983.             $bccMails[] = 'supervisorescallcenter@aviatur.com';
  2984.             $intention '';
  2985.             if (true != $infoTravel['service_quotation'] && !isset($infoTravel['web_quotation'])) {
  2986.                 $intention 'Reserva';
  2987.             } elseif (isset($infoTravel['web_quotation']) || $infoTravel['service_quotation']) {
  2988.                 $intention 'Solicitud';
  2989.             }
  2990.             if ($session->has('whitemark')) {
  2991.                 $subject $intention.' de Crucero Creada - '.$session->get('whitemarkName');
  2992.             } else {
  2993.                 $subject $intention.' de Crucero Creada - '.$agency->getName();
  2994.             }
  2995.         }
  2996.         $emailData['date'] = date('d/m/Y');
  2997.         $emailData['agentContact'] = $InfoAgentContact;
  2998.         if (true != $infoTravel['service_quotation'] && !isset($infoTravel['web_quotation'])) {
  2999.             if (isset($infoTravel['bookReservation'])) {
  3000.                 $orderProduct->setUpdatepaymentdata(str_replace('{cruise_book_id}'$infoTravel['bookReservation'], $orderProduct->getUpdatepaymentdata()));
  3001.                 $em->persist($orderProduct);
  3002.             } else {
  3003.                 $infoTravel['bookReservation'] = 'PN'.$orderProduct->getId();
  3004.                 $orderProduct->setUpdatepaymentdata(str_replace('{cruise_book_id}''PN'.$orderProduct->getId(), $orderProduct->getUpdatepaymentdata()));
  3005.                 $em->persist($orderProduct);
  3006.             }
  3007.             $orderProduct->setEmail(json_encode($emailData));
  3008.             $em->persist($orderProduct);
  3009.             $em->flush();
  3010.             if ($session->has('operatorId')) {
  3011.                 $orderXml $orderProduct->getAddProductData();
  3012.                 try {
  3013.                     $responseOrder $webService->busWebServiceAmadeus(nullnull$orderXml);
  3014.                 } catch (\Exception $e) {
  3015.                 }
  3016.             }
  3017.             /*             * *
  3018.              * Agente Octopus
  3019.              * Cambiar logo Correo Gracias por tu compra.
  3020.              */
  3021.             $isAgent false;
  3022.             if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR')) {
  3023.                 $user $this->getUser();
  3024.                 $emailuser $user->getemail();
  3025.                 $agent $user->getAgent();
  3026.                 $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  3027.                 if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  3028.                     $isAgent true;
  3029.                     $agent $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
  3030.                     $idAgentLogo $agent->getId();
  3031.                     $folderImg 'assets/octopus_assets/img/custom/logoAgent/'.$idAgentLogo.'.png';
  3032.                     $domain 'https://'.$agency->getDomain();
  3033.                     $folderLogoAgent $domain.'/'.$folderImg;
  3034.                     if (file_exists($folderImg)) {
  3035.                         $emailData['imgLogoAgent'] = $folderLogoAgent;
  3036.                     }
  3037.                 }
  3038.             }
  3039.             /*
  3040.              * Email de la reserva del agente hijo enviado al agente Padre Octopus.
  3041.              */
  3042.             if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR')) {
  3043.                 $user $this->getUser();
  3044.                 $emailuser $user->getemail();
  3045.                 $agent $user->getAgent();
  3046.                 $agency $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
  3047.                 if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
  3048.                     $agent $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
  3049.                     $parent $agent->getparentAgent();
  3050.                     if (!= $parent) {
  3051.                         $myParent $em->createQuery('SELECT a,b FROM AviaturAgentBundle:Agent a  JOIN a.customer b WHERE a.id= :idAgent');
  3052.                         $myParent $myParent->setParameter('idAgent'$parent);
  3053.                         $parentInfo $myParent->getResult();
  3054.                         $emailParent $parentInfo[0]->getCustomer()->getEmail();
  3055.                         $emailData['infoSubAgent'] = ['nameSubAgent' => strtoupper($agent->getCustomer()->__toString()), 'emailSubAgent' => strtoupper($agent->getCustomer()->getEmail())];
  3056.                         $messageAgent = (new \Swift_Message())
  3057.                                 ->setContentType('text/html')
  3058.                                 ->setFrom($session->get('emailNoReply'))
  3059.                                 ->setTo([$agent->getCustomer()->getEmail(), $emailParent])
  3060.                                 ->setBcc($bccMails)
  3061.                                 ->setSubject($session->get('agencyShortName').' - '.$subject.' - '.$customer->getFirstname().' '.$customer->getLastname().' Vendedor - '.$agent->getCustomer()->getFirstName().' '.$agent->getCustomer()->getLastName())
  3062.                                 ->setBody($this->renderView($urlResume$emailData));
  3063.                         $mailer->send($messageAgent);
  3064.                     } else {
  3065.                         $messageAgent = (new \Swift_Message())
  3066.                                 ->setContentType('text/html')
  3067.                                 ->setFrom($session->get('emailNoReply'))
  3068.                                 ->setTo($agent->getCustomer()->getEmail())
  3069.                                 ->setBcc($bccMails)
  3070.                                 ->setSubject($session->get('agencyShortName').' - '.$subject.' - '.$customer->getFirstname().' '.$customer->getLastname().' Vendedor - '.$agent->getCustomer()->getFirstName().' '.$agent->getCustomer()->getLastName())
  3071.                                 ->setBody($this->renderView($urlResume$emailData));
  3072.                         $mailer->send($messageAgent);
  3073.                     }
  3074.                 }
  3075.             }
  3076.             if ($session->has('whitemark')) {
  3077.                 if ('' != $session->get('whitemarkMail')) {
  3078.                     $bccMails[] = $session->get('whitemarkMail');
  3079.                     $bccMails[] = 'sebastian.huertas@aviatur.com';
  3080.                 }
  3081.             }
  3082.         } else {
  3083.             $emailData['isQuotation'] = true;
  3084.         }
  3085.         $message 'Aviatur_cotizacion_Crucero_'.$transactionId;
  3086.         $vouchersFiles = [];
  3087.         $vouchersFiles[] = $voucherCruiseFile $projectDir.'/app/quotationLogs/cruiseQuotation/'.$message.'.pdf';
  3088.         $vouchersFiles[] = $politicsCruiseFile $projectDir.'/app/quotationLogs/cruiseQuotation/Politicas_de_cancelacion_'.$emailData['infoTravel']['vendorCode'].'.pdf';
  3089.         if ($session->has('operatorId')) {
  3090.             $urlimg str_replace('https''http'$infoTravel['cruiseImage']);
  3091.             $nameImg explode('/'$urlimg);
  3092.             $urltmp $projectDir.'/app/quotationLogs/cruiseQuotation/';
  3093.             if (file_exists($urltmp.end($nameImg))) {
  3094.                 unlink($urltmp.end($nameImg));
  3095.             }
  3096.             if (@getimagesize($urlimg)) {
  3097.                 copy($urlimg$urltmp.end($nameImg));
  3098.                 $emailData['infoTravel']['cruiseImage'] = $urltmp.end($nameImg);
  3099.             } else {
  3100.                 $emailData['infoTravel']['cruiseImage'] = 'noimagen';
  3101.             }
  3102.         }
  3103.         if (true == $infoTravel['service_quotation'] || isset($infoTravel['web_quotation'])) {
  3104.             $urlResume $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email_quotation.html.twig');
  3105.         }
  3106.         if(isset($emailData['isQuotation']) && $emailData['isQuotation'] == true){
  3107.             $emailData['domain'] = $agency->getDomain();
  3108.             $body $this->renderView($urlResume$emailData);    
  3109.             if (!file_exists($voucherCruiseFile)) {
  3110.                 $pdf->setOption('page-size''Legal');
  3111.                 $pdf->setOption('margin-top'0);
  3112.                 $pdf->setOption('margin-right'0);
  3113.                 $pdf->setOption('margin-bottom'0);
  3114.                 $pdf->setOption('margin-left'0);
  3115.                 $pdf->setOption('orientation''portrait');
  3116.                 $pdf->setOption('enable-javascript'true);
  3117.                 $pdf->setOption('no-stop-slow-scripts'true);
  3118.                 $pdf->setOption('no-background'false);
  3119.                 $pdf->setOption('lowquality'false);
  3120.                 $pdf->setOption('encoding''utf-8');
  3121.                 $pdf->setOption('images'true);
  3122.                 $pdf->setOption('dpi'300);
  3123.                 $pdf->setOption('enable-external-links'true);
  3124.                 $pdf->generateFromHtml($this->renderView($template_pdf$emailData), $voucherCruiseFile);
  3125.             }
  3126.             $nameProduct str_replace(["cotizacion""/""check-conditions"], ""$fullRequest->getPathInfo());
  3127.             $QuotationUtils->sendQuotation($nameProduct,$vouchersFiles,$mailer$session$twigFolder$emailData['codImg'], $fullRequest,$parameterBag $webService ,$pdf $exceptionLog);
  3128.             if ($infoTransaction != null) {
  3129.                 try {
  3130.                     $messageEmail = (new \Swift_Message())
  3131.                         ->setContentType('text/html')
  3132.                         ->setFrom($session->get('emailNoReply'))
  3133.                         ->setTo($toMails)
  3134.                         ->setBcc($bccMails)
  3135.                         ->setSubject($session->get('agencyShortName') . ' - ' $subject)
  3136.                         ->setBody($this->renderView($urlResume$emailData))
  3137.                         ->attach(\Swift_Attachment::fromPath($politicsCruiseFile));
  3138.     
  3139.                     $mailer->send($messageEmail);
  3140.                 } catch (\Exception $ex) {
  3141.                     $exceptionLog->log('Cotizacion cruceros' $ex);
  3142.                 }
  3143.             }
  3144.         }
  3145.         if (file_exists($voucherCruiseFile)) {
  3146.             unlink($voucherCruiseFile);
  3147.         }
  3148.         if ($session->has('operatorId') && file_exists($urltmp end($nameImg))) {
  3149.             unlink($urltmp end($nameImg));
  3150.         }
  3151.         if ($session->has('front_user') && isset($emailData['isQuotation'])) {
  3152.             $this->saveInformationCGS($logSave$webService$errorHandler$emailData$additionalUserFront$agency);
  3153.         }
  3154.         return true;
  3155.     }
  3156.     public function saveInformationCGS(AviaturLogSave $logSaveAviaturWebService $webServiceAviaturErrorHandler $errorHandler$data$customer$agency)
  3157.     {
  3158.         $em $this->getDoctrine()->getManager();
  3159.         $parametersLogin $this->getDoctrine()->getManager()->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findParameters($agency'aviatur_service_login_cgs');
  3160.         $urlLoginCGS $parametersLogin[0]['value'];
  3161.         $parametersProduct $this->getDoctrine()->getManager()->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findParameters($agency'aviatur_service_cruise_cgs');
  3162.         $urlAddProductCruise $parametersProduct[0]['value'];
  3163.         /*
  3164.          * get token api autentication
  3165.          * PENDIENTE: Validar si se puede obtener el token, si no entonces no hacer este proceso
  3166.          */
  3167.         $userLoginCGS $webService->encryptUser(trim(strtolower($customer->CODIGO_USUARIO)), 'AviaturCGSMTK');
  3168.         $jsonReq json_encode(['username' => $userLoginCGS]); // j_acosta (encriptado)
  3169.         $curl curl_init();
  3170.         curl_setopt_array($curl, [
  3171.             CURLOPT_URL => $urlLoginCGS,
  3172.             CURLOPT_RETURNTRANSFER => true,
  3173.             CURLOPT_SSL_VERIFYPEER => false,
  3174.             CURLOPT_ENCODING => '',
  3175.             CURLOPT_MAXREDIRS => 10,
  3176.             CURLOPT_TIMEOUT => 0,
  3177.             CURLOPT_FOLLOWLOCATION => true,
  3178.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  3179.             CURLOPT_CUSTOMREQUEST => 'POST',
  3180.             CURLOPT_POSTFIELDS => $jsonReq,
  3181.             CURLOPT_HTTPHEADER => [
  3182.                 'Content-Type: application/json',
  3183.             ],
  3184.         ]);
  3185.         $response curl_exec($curl);
  3186.         $httpcode curl_getinfo($curlCURLINFO_HTTP_CODE);
  3187.         curl_close($curl);
  3188.         if (200 != $httpcode) {
  3189.             $logSave->logSave('HTTPCODE: '.$httpcode.' Error usuario: '.strtolower($customer->CODIGO_USUARIO), 'CGS_LOGIN''CGSCRUISE_ERRORLOGIN');
  3190.             $logSave->logSave(print_r($responsetrue), 'CGS_LOGIN''RSLoginCGS');
  3191.             return $this->redirect($errorHandler->errorRedirectNoEmail('/buscar/cruceros''Error Login''Error Login'));
  3192.         } else {
  3193.             $tokenInfoApiQuotation json_decode($response);
  3194.             $tokenApiQuotation $tokenInfoApiQuotation->TOKEN;
  3195.         }
  3196.         $destinations = [];
  3197.         $cruiseItem $data['cruiseDetailItinerary']['item'];
  3198.         for ($i 0$i < (is_countable($cruiseItem) ? count($cruiseItem) : 0); ++$i) {
  3199.             $destinations[$i] = [
  3200.                 'origin' => (string) $cruiseItem[$i]['@attributes']['name'],
  3201.                 'destination' => (string) (array_key_exists($i 1$cruiseItem)) ? $cruiseItem[$i 1]['@attributes']['name'] : 'Fin',
  3202.                 'routes' => [[
  3203.                     'origin' => (string) $cruiseItem[$i]['@attributes']['name'],
  3204.                     'destination' => (string) (array_key_exists($i 1$cruiseItem)) ? $cruiseItem[$i 1]['@attributes']['name'] : 'Fin',
  3205.                     'terminalOrigin' => (string) $cruiseItem[$i]['@attributes']['name'],
  3206.                     'terminalDestination' => (string) (array_key_exists($i 1$cruiseItem)) ? $cruiseItem[$i 1]['@attributes']['name'] : 'Fin',
  3207.                     'departureDate' => (string) $cruiseItem[$i]['@attributes']['departdate'].'T'.$cruiseItem[$i]['@attributes']['departtime'].'.529Z',
  3208.                     'departureDateString' => (string) $cruiseItem[$i]['@attributes']['departdate'].'T'.$cruiseItem[$i]['@attributes']['departtime'].'.529Z',
  3209.                     'departureDescription' => (string) $cruiseItem[$i]['@attributes']['name'],
  3210.                     'arrivalDate' => (string) $cruiseItem[$i]['@attributes']['arrivedate'].'T'.$cruiseItem[$i]['@attributes']['arrivetime'].'.529Z',
  3211.                     'arrivalDateString' => (string) $cruiseItem[$i]['@attributes']['arrivedate'].'T'.$cruiseItem[$i]['@attributes']['arrivetime'].'.529Z',
  3212.                     'arrivalDescription' => (string) (array_key_exists($i 1$cruiseItem)) ? $cruiseItem[$i 1]['@attributes']['name'] : 'Fin',
  3213.                     'cabinClass' => (string) $data['infoTravel']['cabinName'].' - '.$data['infoTravel']['cabinNumber'],
  3214.                 ]],
  3215.             ];
  3216.         }
  3217.         $emails_arr = [
  3218.             'active' => true,
  3219.             'dateCreated' => '0001-01-01T00:00:00',
  3220.             'emailAddress' => (string) $data['clientInformation']->email,
  3221.             'id' => 0,
  3222.             'lastUpdated' => '0001-01-01T00:00:00',
  3223.             'version' => 0,
  3224.         ];
  3225.         $phones_arr = [
  3226.             'active' => true,
  3227.             'dateCreated' => '0001-01-01T00:00:00',
  3228.             'id' => 0,
  3229.             'lastUpdated' => '0001-01-01T00:00:00',
  3230.             'number' => (int) $data['clientInformation']->phone,
  3231.             'type' => null,
  3232.             'version' => 0,
  3233.         ];
  3234.         $data_send = [
  3235.             'customer' => [
  3236.                 'firstName' => (string) $data['clientInformation']->first_name,
  3237.                 'lastName' => (string) $data['clientInformation']->last_name,
  3238.                 'fullName' => (string) $data['clientInformation']->first_name.' '.$data['clientInformation']->last_name,
  3239.                 'emails' => [$emails_arr],
  3240.                 'phones' => [$phones_arr],
  3241.             ],
  3242.             'quote' => [
  3243.                 'channel' => 'B2C WEB',
  3244.             ],
  3245.             'selectedProduct' => [
  3246.                 'cabinCode' => (string) $data['infoTravel']['cabinGradeCategory'],
  3247.                 'cabinCount' => 0,
  3248.                 'cabinName' => (string) $data['infoTravel']['cabinName'],
  3249.                 'nameCruise' => (string) $data['infoTravel']['vendorName'].' '.ucfirst(strtolower($data['infoTravel']['cruiseName'])),
  3250.                 'shipName' => (string) ucfirst(strtolower($data['infoTravel']['shipName'])),
  3251.                 'complementProductList' => [[
  3252.                     'productType' => [
  3253.                         'description' => 'Cruceros',
  3254.                         'typeProduct' => 'Cruceros',
  3255.                     ],
  3256.                     'segments' => $destinations,
  3257.                 ]],
  3258.                 'description' => 'Cruceros',
  3259.                 'packageName' => 'Cruceros',
  3260.                 'emit' => false,
  3261.                 'fareData' => [
  3262.                     'aditionalFee' => 0.0,
  3263.                     'airpotService' => null,
  3264.                     'baseFare' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
  3265.                     'cO' => 0.0,
  3266.                     'commission' => 0.0,
  3267.                     'commissionPercentage' => 0.0,
  3268.                     'complements' => null,
  3269.                     'currency' => [
  3270.                         'type' => 'COP',
  3271.                     ],
  3272.                     'equivFare' => 0.0,
  3273.                     'iva' => 0.0,
  3274.                     'otherDebit' => null,
  3275.                     'otherTax' => null,
  3276.                     'price' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
  3277.                     'providerPrice' => 0.0,
  3278.                     'qSe' => 0.0,
  3279.                     'qSeIva' => 0.0,
  3280.                     'qse' => null,
  3281.                     'revenue' => 0.0,
  3282.                     'serviceCharge' => 0.0,
  3283.                     'sureCancel' => null,
  3284.                     'tA' => 0.0,
  3285.                     'taIva' => 0.0,
  3286.                     'tax' => 0.0,
  3287.                     'total' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
  3288.                     'yQ' => 0.0,
  3289.                     'yQiva' => 0.0,
  3290.                     'originalNationalCurrencyTotal' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
  3291.                 ],
  3292.                 'passengerDataList' => [
  3293.                     [
  3294.                         'fareData' => null,
  3295.                         'gender' => '',
  3296.                         'id' => '',
  3297.                         'lastName' => (string) $data['clientInformation']->last_name,
  3298.                         'mail' => (string) $data['clientInformation']->email,
  3299.                         'mothersName' => '',
  3300.                         'name' => (string) $data['clientInformation']->first_name,
  3301.                         'passengerCode' => [
  3302.                             'accountCode' => '',
  3303.                             'promo' => false,
  3304.                             'realType' => 'ADT',
  3305.                             'type' => 'ADT',
  3306.                         ],
  3307.                         'passengerContact' => null,
  3308.                         'passengerInsuranceInfo' => null,
  3309.                         'phone' => null,
  3310.                         'document' => null,
  3311.                         'typeDocument' => null,
  3312.                     ],
  3313.                 ],
  3314.                 'route' => [
  3315.                     'terminalOrigin' => (string) $cruiseItem[0]['@attributes']['name'],
  3316.                     'departureDate' => (string) $cruiseItem[0]['@attributes']['departdate'].'T'.$cruiseItem[0]['@attributes']['departtime'].'.529Z',
  3317.                     'departureDateString' => (string) $cruiseItem[0]['@attributes']['departdate'].'T'.$cruiseItem[0]['@attributes']['departtime'].'.529Z',
  3318.                     'departureDescription' => (string) $cruiseItem[0]['@attributes']['name'],
  3319.                     'arrivalDate' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivedate'].'T'.$cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivetime'].'.529Z',
  3320.                     'arrivalDateString' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivedate'].'T'.$cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivetime'].'.529Z',
  3321.                     'arrivalDescription' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['name'],
  3322.                     'terminalDestination' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['name'],
  3323.                     'cabinClass' => (string) $data['infoTravel']['cabinName'].' - '.$data['infoTravel']['cabinNumber'],
  3324.                 ],
  3325.                 'productType' => [
  3326.                     'description' => 'Cruceros',
  3327.                     'typeProduct' => 'Cruceros',
  3328.                 ],
  3329.             ],
  3330.         ];
  3331.         $authorization 'Authorization: Bearer '.$tokenApiQuotation;
  3332.         // API URL
  3333.         $url $urlAddProductCruise;
  3334.         // create a new cURL resource
  3335.         $ch curl_init($url);
  3336.         // setup request to send json via POST
  3337.         $payload json_encode($data_send);
  3338.         $logSave->logSave(print_r($payloadtrue), 'CGS_CRUISE''RQCruiseCGS');
  3339.         // print_r($payload);die;
  3340.         // attach encoded JSON string to the POST fields
  3341.         curl_setopt($chCURLOPT_POSTFIELDS$payload);
  3342.         // set the content type to application/json
  3343.         curl_setopt($chCURLOPT_HTTPHEADER, [
  3344.             'accept: application/json',
  3345.             'authorization: Bearer '.$tokenApiQuotation,
  3346.             'content-type: application/json',
  3347.         ]);
  3348.         curl_setopt($chCURLOPT_CUSTOMREQUEST'POST');
  3349.         curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  3350.         curl_setopt($chCURLOPT_MAXREDIRS10);
  3351.         curl_setopt($chCURLOPT_TIMEOUT0);
  3352.         curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
  3353.         curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
  3354.         // return response instead of outputting
  3355.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  3356.         // execute the POST request
  3357.         $result curl_exec($ch);
  3358.         $logSave->logSave(print_r($resulttrue), 'CGS_CRUISE''RSCruiseCGS');
  3359.         // print_r($result);
  3360.         // close CURL resource
  3361.         curl_close($ch);
  3362.         /*
  3363.          * End API data send
  3364.          */
  3365.     }
  3366.     public function confirmBasketFrontAction(EmissionWebservice $emissionWebservice, \Swift_Mailer $mailer)
  3367.     {
  3368.         $tempRequest explode('<avi:dataIssuanceRQ>'file_get_contents('php://input'));
  3369.         $tempRequest explode('</avi:dataIssuanceRQ>'$tempRequest[1]);
  3370.         $request '<avi:dataIssuanceRQ>'.$tempRequest[0].'</avi:dataIssuanceRQ>';
  3371.         $xmlRequestObject simplexml_load_string(str_replace('avi:'''$request));
  3372.         $em $this->getDoctrine()->getManager();
  3373.         $productId str_replace('PN''', (string) $xmlRequestObject->office['product']);
  3374.         $orderProduct $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
  3375.         $cruiseModel = new CruiseModel();
  3376.         $baseXml = new \SimpleXMLElement($cruiseModel->getResponseXml());
  3377.         if (null == $orderProduct) {
  3378.             $response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
  3379.             $response->addChild('error''NOT FOUND');
  3380.             $response->addChild('message''PRODUCT PN'.$productId.' NOT FOUND');
  3381.             $metaResponse str_replace('{responseBody}'str_replace('<?xml version="1.0"?>'''$response->asXML()), $baseXml->asXML());
  3382.             return new Response($metaResponseResponse::HTTP_OK, ['content-type' => 'text/xml']);
  3383.         }
  3384.         $agent_mail = (string) $xmlRequestObject->office['mail'];
  3385.         $resume $orderProduct->getResume();
  3386.         if ('confirmation_error' == $resume || '' == $resume) {
  3387.             $emissionData json_decode($orderProduct->getEmissiondata());
  3388.             $creditCard = new \stdClass();
  3389.             $creditCard->title = (string) $xmlRequestObject->creditCard['title'];
  3390.             $creditCard->firstname = (string) $xmlRequestObject->creditCard['firstname'];
  3391.             $creditCard->lastname = (string) $xmlRequestObject->creditCard['lastname'];
  3392.             $creditCard->address1 = (string) $xmlRequestObject->creditCard['address1'];
  3393.             $creditCard->city = (string) $xmlRequestObject->creditCard['city'];
  3394.             $creditCard->county = (string) $xmlRequestObject->creditCard['county'];
  3395.             $creditCard->country = (string) $xmlRequestObject->creditCard['country'];
  3396.             $creditCard->cardtype = (string) $xmlRequestObject->creditCard['cardtype'];
  3397.             $creditCard->nameoncard = (string) $xmlRequestObject->creditCard['nameoncard'];
  3398.             $creditCard->cardno = (string) $xmlRequestObject->creditCard['cardno'];
  3399.             $creditCard->expirymonth = (string) $xmlRequestObject->creditCard['expirymonth'];
  3400.             $creditCard->expiryyear = (string) $xmlRequestObject->creditCard['expiryyear'];
  3401.             $emissionData->dataIssuance->Creditcard $creditCard;
  3402.             $transaction $emissionData->dataIssuance->Transaction->transaction;
  3403.             $transaction->authcode = (string) $xmlRequestObject->creditCard['authcode'];
  3404.             $transaction->cardtype = (string) $xmlRequestObject->creditCard['cardtype'];
  3405.             $emissionData->dataIssuance->Transaction->transaction $transaction;
  3406.             $response $emissionWebservice->callServiceEmission('emitir_tc'$emissionData$productId);
  3407.             if (!isset($response['error'])) {
  3408.                 $responseArray json_decode(json_encode($response), true);
  3409.                 $bookReservation $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation'];
  3410.                 $orderProduct->setResume($bookReservation);
  3411.                 $orderProduct->setEmissiondata(json_encode($emissionData));
  3412.                 $orderProduct->setUpdatingdate(new \DateTime());
  3413.                 $em->persist($orderProduct);
  3414.                 $em->flush();
  3415.                 //                $messageEmail = (new \Swift_Message())
  3416.                 //                        ->setContentType("text/html")
  3417.                 //                        ->setFrom($session->get('emailNoReply'))
  3418.                 // //                        ->setTo('yared.toro@aviatur.com')//ENVIAR A DEPARTAMENTO DE CRUCEROS
  3419.                 //                        ->setTo($agent_mail)
  3420.                 // //                    ->setBcc($bccMails)
  3421.                 //                        ->setSubject('Reserva de Crucero confirmada PN' . $productId)
  3422.                 //                        ->setBody('La reserva de crucero con PN' . $productId . ' ha sido confirmada, el código de reserva es: ' . $bookReservation);
  3423.                 //                $mailer->send($messageEmail);
  3424.                 //                $orderProduct->setEmissiondata(json_encode($emissionData));
  3425.                 //                $em->persist($orderProduct);
  3426.                 //                $em->flush();
  3427.                 $response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
  3428.                 $response->addChild('message''SUCCESSFUL');
  3429.                 $response->addChild('confirmationId'$bookReservation);
  3430.                 $metaResponse str_replace('{responseBody}'str_replace('<?xml version="1.0"?>'''$response->asXML()), $baseXml->asXML());
  3431.                 return new Response($metaResponseResponse::HTTP_OK, ['content-type' => 'text/xml']);
  3432.             } else {
  3433.                 $orderProduct->setResume('confirmation_error');
  3434.                 $orderProduct->setUpdatingdate(new \DateTime());
  3435.                 $em->persist($orderProduct);
  3436.                 $em->flush();
  3437.                 $response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
  3438.                 $response->addChild('error''CONFIRMATION ERROR');
  3439.                 $metaResponse str_replace('{responseBody}'str_replace('<?xml version="1.0"?>'''$response->asXML()), $baseXml->asXML());
  3440.                 return new Response($metaResponseResponse::HTTP_OK, ['content-type' => 'text/xml']);
  3441.             }
  3442.         } else {
  3443.             $response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
  3444.             $response->addChild('message''BOOKING ALREADY CONFIRMED');
  3445.             $response->addChild('confirmationId'$orderProduct->getResume());
  3446.             $metaResponse str_replace('{responseBody}'str_replace('<?xml version="1.0"?>'''$response->asXML()), $baseXml->asXML());
  3447.             return new Response($metaResponseResponse::HTTP_OK, ['content-type' => 'text/xml']);
  3448.         }
  3449.     }
  3450.     //    function typeDevice() {
  3451.     //        $aMobileUA = array(
  3452.     //            '/iphone/i' => 'iPhone',
  3453.     //            '/ipod/i' => 'iPod',
  3454.     //            '/ipad/i' => 'iPad',
  3455.     //            '/android/i' => 'Android',
  3456.     //            '/blackberry/i' => 'BlackBerry',
  3457.     //            '/webos/i' => 'Mobile'
  3458.     //        );
  3459.     //
  3460.     // //Return mobile if Mobile User Agent is detected
  3461.     //        foreach ($aMobileUA as $sMobileKey => $sMobileOS) {
  3462.     //            if (preg_match($sMobileKey, $this->get('request_stack')->getCurrentRequest()->server->get('HTTP_USER_AGENT'))) {
  3463.     //                return 'mobile';
  3464.     //            }
  3465.     //        }
  3466.     //        return 'desktop';
  3467.     //    }
  3468.     public function getPortByRegionAction(Request $request)
  3469.     {
  3470.         $regionCode $request->query->get('region');
  3471.         $em $this->getDoctrine()->getManager();
  3472.         $originPortByregion $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->getPortByRegion($regionCode);
  3473.         return $this->json($originPortByregion);
  3474.     }
  3475.     public function get_location($latitude ''$longitude '')
  3476.     {
  3477.         $geolocation $latitude.','.$longitude;
  3478.         $geolocation $latitude.','.trim($longitude);
  3479.         $request 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'&sensor=false';
  3480.         $file_contents file_get_contents($request);
  3481.         $json_decode json_decode($file_contents);
  3482.         $loc = [];
  3483.         if (isset($json_decode->results[0])) {
  3484.             $response = [];
  3485.             foreach ($json_decode->results[0]->address_components as $addressComponet) {
  3486.                 if (in_array('political'$addressComponet->types)) {
  3487.                     $response[] = $addressComponet->short_name;
  3488.                 }
  3489.             }
  3490.             $loc['country'] = '';
  3491.             if (isset($response[4]) && isset($response[1])) {
  3492.                 $loc['city'] = $response[1];
  3493.                 $loc['country'] = $response[4];
  3494.             } elseif (isset($response[3]) && isset($response[1])) {
  3495.                 $loc['city'] = $response[1];
  3496.                 $loc['country'] = $response[3];
  3497.             } elseif (isset($response[2]) && isset($response[0])) {
  3498.                 $loc['city'] = $response[0];
  3499.                 $loc['country'] = $response[2];
  3500.             } elseif (isset($response[1])) {
  3501.                 $loc['country'] = $response[1];
  3502.             } elseif (isset($response[0])) {
  3503.                 $loc['country'] = $response[0];
  3504.             }
  3505.         } else {
  3506.             $loc['error'] = 'error';
  3507.         }
  3508.         return $loc;
  3509.     }
  3510.     private function unaccent($string)
  3511.     {
  3512.         return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i''$1'htmlentities($stringENT_QUOTES'UTF-8'));
  3513.     }
  3514.     protected function authenticateUser(UserInterface $userLoginManagerInterface $loginManager)
  3515.     {
  3516.         try {
  3517.             $loginManager->loginUser(
  3518.                 'main',
  3519.                 $user
  3520.             );
  3521.         } catch (AccountStatusException $ex) {
  3522.             // We simply do not authenticate users which do not pass the user
  3523.             // checker (not enabled, expired, etc.).
  3524.         }
  3525.     }
  3526. }