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

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