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

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