<?php
namespace Aviatur\CruiserBundle\Controller;
use Aviatur\AgentBundle\Entity\AgentTransaction;
use Aviatur\CruiserBundle\Entity\CruiseRegionPorts;
use Aviatur\CruiserBundle\Entity\CruiserPortsGeolocalization;
use Aviatur\CruiserBundle\Entity\CruiseShip;
use Aviatur\CruiserBundle\Models\CruiseModel;
use Aviatur\CruiserBundle\Services\EmissionWebservice;
use Aviatur\CruiserBundle\Services\SearchCruiseCookie;
use Aviatur\CustomerBundle\Services\ValidateSanctionsRenewal;
use Aviatur\GeneralBundle\Controller\OrderController;
use Aviatur\GeneralBundle\Entity\FormUserInfo;
use Aviatur\GeneralBundle\Services\AviaturEncoder;
use Aviatur\GeneralBundle\Services\AviaturErrorHandler;
use Aviatur\GeneralBundle\Services\AviaturLogSave;
use Aviatur\GeneralBundle\Services\AviaturMailer;
use Aviatur\GeneralBundle\Services\AviaturUpdateBestprices;
use Aviatur\GeneralBundle\Services\AviaturWebService;
use Aviatur\GeneralBundle\Services\ExceptionLog;
use Aviatur\GeneralBundle\Services\PayoutExtraService;
use Aviatur\PaymentBundle\Controller\CashController;
use Aviatur\PaymentBundle\Controller\P2PController;
use Aviatur\PaymentBundle\Controller\PSEController;
use Aviatur\PaymentBundle\Controller\SafetypayController;
use Aviatur\PaymentBundle\Controller\WorldPayController;
use Aviatur\PaymentBundle\Services\CustomerMethodPaymentService;
use Aviatur\PaymentBundle\Services\TokenizerService;
use Aviatur\TwigBundle\Services\TwigFolder;
use Doctrine\Persistence\ManagerRegistry;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Security\LoginManagerInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Exception\AccountStatusException;
class DefaultController extends AbstractController
{
public function searchAction()
{
return $this->redirect(
$this->generateUrl(
'aviatur_search_cruise',
[]
)
);
}
public function availabilityAction(Request $request, SessionInterface $session, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AviaturErrorHandler $errorHandler, AuthorizationCheckerInterface $authorizationChecker, AviaturUpdateBestprices $updateBestprices, SearchCruiseCookie $cruiseCookie, $region, $ship = null, $port = null, $date1, $date2, $adults, $adultsAge, $ageChd1 = null, $ageChd2 = null, $ageChd3 = null, $ageChd4 = null, $ageChd5 = null, $children, $option, $loyaltyMembershipID = null)
{
$urlDescription = [];
$isAgent = false;
$em = $this->getDoctrine()->getManager();
$fullRequest = $request;
$requestUrl = $this->generateUrl($fullRequest->attributes->get('_route'), $fullRequest->attributes->get('_route_params'));
$server = $request->server;
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$agencyFolder = $twigFolder->twigFlux();
$domain = str_replace('www.', '', $request->getHost());
$configCruiseAgency = $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findProviderForCruiseWithAgency($agency);
$seoUrl = $em->getRepository(\Aviatur\GeneralBundle\Entity\SeoUrl::class)->findByUrlorMaskedUrl($requestUrl);
$urlDescription['url'] = null != $seoUrl ? '/'.$seoUrl[0]->getUrl() : $requestUrl;
$cruiseModel = new CruiseModel();
$templateXml = $cruiseModel->getXmlAvailability();
$xmlRequest = $templateXml[0];
$ageAdults = str_replace('+', ',', $adultsAge);
$xmlRequest .= $templateXml[1];
$variables = [];
$ageChildren = [];
$variables['adults'] = $adults;
$variables['adultsAge'] = $ageAdults;
if ($fullRequest->query->has('quotation')) {
$session->set('[cruise][quotation]', $fullRequest->query->get('quotation'));
}
if (0 == $children) {
$xmlRequest .= $templateXml[3];
} else {
for ($i = 1; $i <= $children; ++$i) {
$xmlRequest .= str_replace('childAge', 'childAge_'.$i, $templateXml[2]);
$variables['childAge_'.$i] = ${'ageChd'.$i};
$ageChildren[] = ${'ageChd'.$i};
}
}
$xmlRequest .= $templateXml[4];
$variables['dateStart'] = $date1;
$variables['dateEnd'] = $date2;
$xmlRequest .= $templateXml[5];
if (null != $loyaltyMembershipID) {
$variables['loyaltyMembershipID'] = null != $loyaltyMembershipID ? $loyaltyMembershipID : '';
$xmlRequest .= $cruiseModel->getXmlPromos();
}
if (null != $ship || 1 == $option) {
$xmlRequest .= $templateXml[6];
$variables['shipCode'] = null != $ship ? $ship : '';
if (null != $port) {
$xmlRequest .= $templateXml[7];
$variables['portName'] = str_replace(['_', '-'], [' ', '/'], $port);
}
$xmlRequest .= $templateXml[8];
}
$xmlRequest .= $templateXml[9];
$variables['regionCode'] = $region;
$regionObj = $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->findOneByRegioncode($region);
if ($session->has('operatorId')) {
$userFront = simplexml_load_string($session->get('front_user'));
$additionalUserFront = simplexml_load_string($session->get('front_user_additionals'));
$variables['OperatorId'] = (string) $userFront->USUARIO_ORACLE;
$variables['OfficeId'] = (string) $additionalUserFront->CODIGO_SUCURSAL_SEVEN;
}
if ($request->isXmlHttpRequest()) {
$provider_id = '';
if ($configCruiseAgency) {
foreach ($configCruiseAgency as $configProvider) {
$provider_id .= $configProvider->getProvider()->getProvideridentifier().';';
}
} else {
$exceptionLog->log('Error Fatal', 'No se encontró la agencia segun el dominio: '.$domain, null, false);
return new Response('no se encontró agencias para consultar disponibilidad.');
}
$variables['ProviderId'] = substr($provider_id, 0, -1);
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseAvail', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, true);
if (isset($response['error'])) {
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseAvail', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, true);
if (isset($response['error'])) {
if (false !== strpos($response['error'], 'No results found')) {
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>');
} else {
$SubjectError = [
'region' => $regionObj->getname(),
'variables' => $variables,
'child' => $children,
'front' => $session->has('operatorId'),
];
$response = $this->render($twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/error_answer.html.twig'), $SubjectError);
return ($response);
}
}
} elseif (!isset($response->Message->OTA_CruiseSailAvailRS)) {
$errorHandler->errorRedirect($server->get('REQUEST_URI'), 'Error disponibilidad cruceros', $response->Message);
return new Response('No hemos encontrado información para el destino solicitado.');
}
$response = \simplexml_load_string(str_replace('http://', 'https://', $response->asXml()));
$cruises = [];
$vendorsName = [];
$durations = [];
$shipsInAvail = [];
$finantial_rate = (string) $response->Message->OTA_CruiseSailAvailRS->SailingOptions->SailingOption[0]->TPA_Extensions->Cruise['finantialrate'];
$variables['convertRate'] = $finantial_rate;
$repositorycruiseShip = $this->getDoctrine()->getRepository(\Aviatur\CruiserBundle\Entity\CruiseShip::class);
$querycruiseShip = $repositorycruiseShip
->createQueryBuilder('c')
->select('c.name')
->getQuery();
$cruiseShip = $querycruiseShip->getResult();
$cruise_ship = [];
$shipArray = [];
$originPortsName = [];
foreach ($cruiseShip as $ship) {
$cruise_ship[] = $ship['name'];
}
$transactionId = (string) $response->Message->OTA_CruiseSailAvailRS['TransactionIdentifier'];
$nameProduct = 'cruiser';
$productCommission = $em->getRepository(\Aviatur\AgentBundle\Entity\AgentQseProductCommission::class)->findOneByProductname($nameProduct);
$session->set($transactionId.'_isActiveQse', ((is_countable($productCommission) ? count($productCommission) : 0) > 0) ? true : false);
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$idagent = $agent[0]->getid();
$nombreagente = $user->getFirstname().' '.$user->getLastname();
$agencyFolder = $twigFolder->twigFlux();
$agentCommission = $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($idagent);
$infoQse = json_decode($agentCommission->getQseproduct());
$infoQseNameProduct = empty($infoQse->$nameProduct) ? false : $infoQse->$nameProduct;
$infoQse = empty($infoQse) ? false : $infoQseNameProduct;
$agentQseAmount = ($infoQse) ? (int) $infoQse->commission_money : 0;
$agentQseAmountMax = $productCommission->getQsecommissionmax();
$cruiserpercentage = ($infoQse) ? (float) $infoQse->commission_percentage : 0;
$cruiserpercentagemax = $productCommission->getPercentageCommissionMax();
$cruiserActive = ($infoQse) ? (int) $infoQse->active : 0;
$isAgent = true;
} else {
$session->set($transactionId.'_isActiveQse', false);
}
}
foreach ($response->Message->OTA_CruiseSailAvailRS->SailingOptions->SailingOption as $SailingOption) {
$cruisesValues = [];
$cruisesValues[0] = new \stdClass();
$cruisesValues[1] = new \stdClass();
$cruisesValues[2] = new \stdClass();
$cruisesValues[3] = new \stdClass();
$cruisesValues[0]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruiseinside'] = $SailingOption->TPA_Extensions->Cruise['cruiseinside'] * $finantial_rate;
$cruisesValues[1]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruiseoutside'] = $SailingOption->TPA_Extensions->Cruise['cruiseoutside'] * $finantial_rate;
$cruisesValues[2]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruisebalcony'] = $SailingOption->TPA_Extensions->Cruise['cruisebalcony'] * $finantial_rate;
$cruisesValues[3]->cruise['value'] = $SailingOption->TPA_Extensions->Cruise['cruisesuite'] = $SailingOption->TPA_Extensions->Cruise['cruisesuite'] * $finantial_rate;
usort($cruisesValues, fn ($a, $b) => $a->cruise['value'] - $b->cruise['value']);
if (0 != $cruisesValues[0]->cruise['value']) {
$SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[0]->cruise['value'];
} elseif (0 != $cruisesValues[1]->cruise['value']) {
$SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[1]->cruise['value'];
} elseif (0 != $cruisesValues[2]->cruise['value']) {
$SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[2]->cruise['value'];
} else {
$SailingOption->TPA_Extensions->Cruise['minPrice'] = $cruisesValues[3]->cruise['value'];
}
// Commission Agent QSE
if ($isAgent) {
$SailingOption->TPA_Extensions->Cruise['CommissionActive'] = $cruiserActive;
if ('0' == $cruiserActive) {
$SailingOption->TPA_Extensions->Cruise['CommissionAgent'] = $agentQseAmount;
} elseif ('1' == $cruiserActive) {
$totalValue = $SailingOption->TPA_Extensions->Cruise['minPrice'];
$SailingOption->TPA_Extensions->Cruise['CommissionAgent'] = round($totalValue * $cruiserpercentage);
}
$SailingOption->TPA_Extensions->Cruise['minPrice'] += round($SailingOption->TPA_Extensions->Cruise['CommissionAgent']);
}
$cruises[] = $SailingOption;
if (!in_array($SailingOption->SelectedSailing->CruiseLine['VendorName'], $vendorsName)) {
$vendorsName[(string) $SailingOption->SelectedSailing->CruiseLine['VendorCode']] = (string) $SailingOption->SelectedSailing->CruiseLine['VendorName'];
}
if (!in_array($SailingOption->SelectedSailing['Duration'], $durations)) {
$durations[(string) $SailingOption->SelectedSailing['Duration']] = (string) $SailingOption->SelectedSailing['Duration'];
}
$originNamePort = $SailingOption->TPA_Extensions->ports->port[0];
$cutPos = strpos((string) $originNamePort, '-') + 1;
$originNamePort = substr((string) $originNamePort, $cutPos);
if (!in_array($originNamePort, $originPortsName)) {
$originPortsName[$originNamePort] = $originNamePort;
}
$shipCode = (string) $SailingOption->SelectedSailing->CruiseLine['ShipCode'];
$shipName = (string) $SailingOption->SelectedSailing->CruiseLine['ShipName'];
// information for filter in availability
if (!in_array((string) $shipName, $shipsInAvail)) {
$shipsInAvail[(string) $shipName] = (string) $shipName;
}
// informatio for data base
if (!in_array($shipName, $shipArray) && !in_array($shipName, $cruise_ship)) {
$shipArray[] = $shipName;
$cruiseShipObj = new CruiseShip();
$cruiseShipObj->setShipcode((int) $shipCode);
$cruiseShipObj->setName($shipName);
$cruiseLine = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseLine::class)->findOneBy(['linecode' => $SailingOption->SelectedSailing->CruiseLine['VendorCode']]);
$cruiseShipObj->setCruiseline($cruiseLine);
$em->persist($cruiseShipObj);
$em->flush();
}
}
usort($cruises, fn ($a, $b) => $a->TPA_Extensions->Cruise['minPrice'] - $b->TPA_Extensions->Cruise['minPrice']);
$variables['TransactionIdentifier'] = (string) $response->Message->OTA_CruiseSailAvailRS['TransactionIdentifier'];
$variables['vendorsName'] = $vendorsName;
$variables['durations'] = $durations;
$variables['shipsList'] = $shipsInAvail;
$variables['portsOrigin'] = $originPortsName;
$variables['region'] = json_encode(['id' => $regionObj->getId(), 'regionCode' => $regionObj->getregionCode(), 'name' => $regionObj->getName()]);
if ($session->has('[cruise][quotation]')) {
$variables['quotation'] = $session->get('[cruise][quotation]');
$session->set($variables['TransactionIdentifier'].'[cruise][quotation]', $session->get('[cruise][quotation]'));
$session->remove('[cruise][quotation]');
}
$urlAvailability = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/AjaxAvailability.html.twig');
$CruiseBestPrice = (string) $cruises[0]->TPA_Extensions->Cruise['minPrice'];
$updateBestprices->Add($CruiseBestPrice, $requestUrl); // Always send array or object, as price list
return $this->render($urlAvailability, [
'Cruises' => $cruises,
'variables' => $variables,
'urlDescription' => $urlDescription,
]);
} else {
if ($configCruiseAgency) {
$provider_id = $configCruiseAgency[0]->getProvider()->getProvideridentifier();
} else {
$exceptionLog->log('Error Fatal', 'No se encontró la agencia segun el dominio: '.$domain, null, false);
return new Response('no se encontró agencias para consultar disponibilidad.');
}
$originPortByregion = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->getPortByRegion($region);
$cookieArray = [
'ProviderId' => $provider_id,
'region' => $region,
'dateIn' => $date1,
'dateReturn' => $date2,
'adults' => $adults,
'ageAdults' => explode(',', $ageAdults),
'children' => $children,
'ageChildren' => $ageChildren,
'ports' => $originPortByregion,
];
$urlAvailability = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/availability.html.twig');
$regions = $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->findAll();
$ships = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseShip::class)->findShipByCruiseLine();
$safeUrl = 'https://'.$agency->getDomainsecure();
$cookieLastSearch = $cruiseCookie->searchCruiseCookie(['cruise' => base64_encode(json_encode($cookieArray))]);
$pointRedemption = $em->getRepository(\Aviatur\GeneralBundle\Entity\PointRedemption::class)->findPointRedemptionWithAgency($agency);
if (null != $pointRedemption) {
$points = 0;
if ($fullRequest->request->has('pointRedemptionValue')) {
$points = $fullRequest->request->get('pointRedemptionValue');
$session->set('point_redemption_value', $points);
} elseif ($fullRequest->query->has('pointRedeem')) {
$points = $fullRequest->query->get('pointRedeem');
$session->set('point_redemption_value', $points);
} elseif ($session->has('point_redemption_value')) {
$points = $session->get('point_redemption_value');
}
$pointRedemption['Config']['Amount']['CurPoint'] = $points;
}
$availableArrayCruise = array_merge($cookieArray, ['regionName' => $regionObj->getName()]);
$response = $this->render($urlAvailability, [
'ajaxUrl' => $requestUrl,
'availableArrayCruise' => $availableArrayCruise,
'safeUrl' => $safeUrl,
'cookieLastSearch' => $cookieLastSearch,
'regions' => $regions,
'ships' => $ships,
'ports' => $originPortByregion,
'urlDescription' => $urlDescription,
'pointRedemption' => $pointRedemption,
]);
$response->headers->setCookie(new Cookie('_availability_array[cruise]', base64_encode(json_encode($cookieArray)), time() + 3600 * 24 * 7, '/'));
return $response;
}
}
public function availabilitySeoAction(Request $request, SessionInterface $session, RouterInterface $router, $url)
{
$em = $this->getDoctrine()->getManager();
$seoUrl = $em->getRepository(\Aviatur\GeneralBundle\Entity\SeoUrl::class)->findOneByUrl('cruceros/'.$url);
if (null != $seoUrl) {
$maskedUrl = $seoUrl->getMaskedurl();
$session->set('maxResults', $request->query->get('maxResults'));
if (false !== strpos($maskedUrl, '?')) {
$parameters = explode('&', substr($maskedUrl, strpos($maskedUrl, '?') + 1));
foreach ($parameters as $parameter) {
$sessionInfo = explode('=', $parameter);
if (2 == sizeof($sessionInfo)) {
$session->set($sessionInfo[0], $sessionInfo[1]);
}
}
$maskedUrl = substr($maskedUrl, 0, strpos($maskedUrl, '?'));
}
if (null != $seoUrl) {
$route = $router->match($maskedUrl);
$route['_route_params'] = [];
foreach ($route as $param => $val) {
// set route params without defaults
if ('_' !== \substr($param, 0, 1)) {
$route['_route_params'][$param] = $val;
}
}
return $this->forward($route['_controller'], $route);
} else {
throw $this->createNotFoundException('La página que solicitaste no existe o se ha movido permanentemente');
}
} else {
throw $this->createNotFoundException('La página que solicitaste no existe o se ha movido permanentemente');
}
}
public function detailAction(Request $request, SessionInterface $session, LoginManagerInterface $loginManager, TwigFolder $twigFolder, AviaturWebService $webService, AviaturErrorHandler $errorHandler, AuthorizationCheckerInterface $authorizationChecker, RouterInterface $router, ParameterBagInterface $parameterBag)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$transactionID = null;
$variables = [];
$isAgent = false;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$nameProduct = 'cruiser';
$productCommission = $em->getRepository(\Aviatur\AgentBundle\Entity\AgentQseProductCommission::class)->findOneByProductname($nameProduct);
$parameterTax = $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_payment_iva');
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
if (!empty($agent[0])) {
$idagent = $agent[0]->getid();
$nombreagente = $user->getFirstname().' '.$user->getLastname();
$agencyFolder = $twigFolder->twigFlux();
$agentCommission = $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($idagent);
$infoQse = json_decode($agentCommission->getQseproduct());
$infoQseNameProduct = empty($infoQse->$nameProduct) ? false : $infoQse->$nameProduct;
$infoQse = empty($infoQse) ? false : $infoQseNameProduct;
$agentQseAmount = ($infoQse) ? (int) $infoQse->commission_money : 0;
$agentQseAmountMax = $productCommission->getQsecommissionmax();
$cruiserpercentage = ($infoQse) ? (float) $infoQse->commission_percentage : 0;
$cruiserpercentagemax = $productCommission->getPercentageCommissionMax();
$qsePercentegeMax = $productCommission->getQsecommissionpercentage();
$taPercentagePay = $productCommission->getTacommissionpercentage();
$cruiserActive = ($infoQse) ? (int) $infoQse->active : 0;
$activeDetail = $agentCommission->getActivedetail();
$taxParameter = $parameterTax->getValue();
$isAgent = true;
}
}
$server = $request->server;
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$fullRequest = $request;
$request = $fullRequest->request;
$agencyFolder = $twigFolder->twigFlux();
$resultno = $request->get('resultno');
$startDate = $request->get('startDate');
$endDate = $request->get('endDate');
$nights = $request->get('nights');
$adults = $request->get('adults');
$children = $request->get('children');
$correlationId = $request->get('correlationID');
$cruiseImage = $request->get('cruiseImage');
$cruiseName = $request->get('cruiseName');
$shipName = $request->get('shipName');
$shipCode = $request->get('shipCode');
$vendorImage = $request->get('vendorImage');
$vendorName = $request->get('vendorName');
$finantial_rate = $request->get('convertRate');
$regionJson = $request->get('region');
if (true === $request->has('whitemarkDataInfo')) {
$session->set('whitemarkDataInfo', json_decode($request->get('whitemarkDataInfo'), true));
}
if (true === $request->has('userLogin') && '' != $request->get('userLogin') && null != $request->get('userLogin')) {
$user = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->findOneByEmail($request->get('userLogin'));
$this->authenticateUser($user, $loginManager);
}
if ('' != $request->get('operator_Id')) {
$session->set('officeId', $request->get('office_Id'));
$session->set('operatorId', $request->get('operator_Id'));
}
$isFront = $session->has('operatorId');
$ageChild = [];
for ($chd = 1; $chd <= $children; ++$chd) {
$ageChild[] = $request->get('ageChild'.$chd);
}
$session->set($correlationIdSessionName, $correlationId);
if (true === $request->has('transactionID')) {
$session->set($transactionIdSessionName, $request->get('transactionID'));
$transactionID = $request->get('transactionID');
} elseif (true === $session->has($transactionIdSessionName)) {
$transactionID = $session->get($transactionIdSessionName);
}
if (!$session->has($transactionID.'[cruise][quotation]') && $request->has('quotation')) {
$session->set($transactionID.'[cruise][quotation]', $request->get('quotation'));
}
if (true !== $session->has($transactionID.'[availability_url]')) {
$session->set($transactionID.'[availability_url]', $server->get('HTTP_REFERER'));
}
if ($session->has($transactionID.'[cruiser][provider]')) {
$provider = $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($session->get($transactionID.'[cruiser][provider]'));
$providerId = $session->get($transactionID.'[cruiser][provider]');
} elseif ($request->has('providerID')) {
$providerId = $request->get('providerID');
$provider = $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($request->get('providerID'));
$session->set($transactionID.'[cruiser][provider]', $provider->getProvideridentifier());
} else {
$response = 'error';
$responseCruiseDetail = $response;
}
$cruiseModel = new CruiseModel();
$templateXml = $cruiseModel->getXmlDetail();
$xmlRequest = $templateXml[0];
$xmlRequest .= $templateXml[1];
$xmlRequest .= $templateXml[2];
$variables['transactionId'] = $transactionID;
$variables['shipCode'] = $shipCode;
$variables['resultno'] = $resultno;
$variables['ProviderId'] = $providerId;
$variables['correlationId'] = $correlationId;
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseDetail', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, false, $variables['transactionId']);
if (isset($response['error'])) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), 'Error detalle de producto', $response['error']));
} elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), 'Error disponibilidad cruceros', $response->Message));
}
if (!isset($response->Message->OTACruiseCabinAvailRS->CabinOptions)) {
return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'La Url Ingresada no tiene resultados'));
} else {
$cabinOptions = [];
$currency = (string) $response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption[0]['GradeScurrency'];
$session->set('[cruiser][finantial_rate]', $finantial_rate);
foreach ($response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption as $cabinOption) {
if (isset($cabinOption['GradePrice'])) {
if (isset($cabinOption->Prices)) {
$Prices = $cabinOption->Prices;
foreach ($Prices->Price as $price) {
if ('supplier' == $price['Marker']) {
$cabinOption->PricingInfo['AmmountBase'] = $price['Value'];
}
if ('noncommadd' == $price['Marker']) {
$cabinOption->PricingInfo['AmmountNccf'] = $price['Value'];
}
if ('gratuities' == $price['Marker']) {
$cabinOption->PricingInfo['gratuities'] = $price['Value'];
$cabinOption->PricingInfo['gratuitiesCOP'] = round((float) $price['Value'] * $finantial_rate);
}
}
$cabinOption->PricingInfo['AmmountCop'] = round((float) $cabinOption['GradePrice'] * $finantial_rate);
/* * ************************ Commission Agent QSE or Percentage **************** */
if ($isAgent) {
$taxAgent = $taxParameter + 1;
$cabinOption->PricingInfo['CommissionActive'] = $cruiserActive;
if ('0' == $cruiserActive) {
$cabinOption->PricingInfo['CommissionAgentCop'] = $agentQseAmount;
$cabinOption->PricingInfo['CommissionPay'] = round(($agentQseAmount / $taxAgent) * $qsePercentegeMax);
} elseif ('1' == $cruiserActive) {
// $totalValue = $cabinOption->PricingInfo['AmmountCop'];
$totalValue = round($cabinOption->PricingInfo['AmmountBase'] * $finantial_rate);
$valueCommissionPercentage = round($totalValue * $cruiserpercentage);
$cabinOption->PricingInfo['CommissionAgentCop'] = $valueCommissionPercentage;
$cabinOption->PricingInfo['CommissionPay'] = round(($valueCommissionPercentage / $taxAgent) * $qsePercentegeMax);
}
$cabinOption->PricingInfo['taPercentage'] = $taPercentagePay;
$cabinOption->PricingInfo['activeDetail'] = $activeDetail;
$cabinOption->PricingInfo['paymentPercentage'] = $qsePercentegeMax;
$cabinOption->PricingInfo['CommissionAgent'] = round((float) $cabinOption->PricingInfo['CommissionAgentCop'] / $finantial_rate, 2);
$cabinOption['GradePrice'] = (float) $cabinOption['GradePrice'] + (float) $cabinOption->PricingInfo['CommissionAgent'];
$cabinOption->PricingInfo['AmmountCop'] += round($cabinOption->PricingInfo['CommissionAgentCop']);
}
$cabinOption->PricingInfo['AmmountTaxes'] = $cabinOption['GradeTaxes'];
$cabinOption->PricingInfo['AmmountTaxesCOP'] = round((float) $cabinOption['GradeTaxes'] * $finantial_rate);
$cabinOption->PricingInfo['AmmountFees'] = $cabinOption['GradeFees'];
$cabinOption->PricingInfo['AmmountFeesCOP'] = round((float) $cabinOption['GradeFees'] * $finantial_rate);
// $cabinOption->PricingInfo['TotalAmmount'] = $cabinOption->PricingInfo['AmmountBase'] + $cabinOption->PricingInfo['AmmountAddition'];
} else {
$cabinOption->PricingInfo['AmmountBase'] = $cabinOption['GradePrice'];
$cabinOption->PricingInfo['AmmountNccf'] = 0;
}
$cabinOption->PricingInfo['AmmountBaseCOP'] = round($cabinOption->PricingInfo['AmmountBase'] * $finantial_rate);
$cabinOption->PricingInfo['AmmountNccfCOP'] = round((float) $cabinOption->PricingInfo['AmmountNccf'] * $finantial_rate);
$cabinOption->PricingInfo['TotalAmmount'] = $cabinOption->PricingInfo['AmmountBase'] + $cabinOption->PricingInfo['AmmountNccf'];
$cabinOption['DeckNumber'] = isset($cabinOption['DeckNumber']) ? str_replace('Deck ', '', $cabinOption['DeckNumber']) : '';
$cabinOptions[] = $cabinOption;
}
}
if (0 == count($cabinOptions)) {
$referer = $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
if (true === $session->has($transactionID.'[availability_url]')) {
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'));
} elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '', 'Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
} else {
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'));
}
}
usort($cabinOptions, fn ($a, $b) => $a['GradePrice'] - $b['GradePrice']);
$groupCabins = [];
foreach ($cabinOptions as $cabin) {
$groupCabins[(string) $cabin['GradeDescription']][] = $cabin;
}
$salilingAtSea = ['Cruising', 'At Sea', 'En El Mar', 'Inside Passage (Cruising)'];
$itinerary_ports = [];
$region = $em->getRepository(\Aviatur\CruiserBundle\Entity\Region::class)->find(json_decode($regionJson, true)['id']);
$portsArray = [];
$is_origin = true;
$first_port = null;
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary->item as $port) {
if (!in_array($port['name'], $salilingAtSea)) {
if (isset($port['latitude']) && '' != $port['latitude'] && !$isFront) {
$countryPort = $this->get_location($port['latitude'], $port['longitude']);
} else {
$countryPort['error'] = 'No information';
}
if (!isset($countryPort['error'])) {
$country_name = $em->getRepository(\Aviatur\GeneralBundle\Entity\Country::class)->findOneBy(['iatacode' => $countryPort['country'], 'languagecode' => 'es-ES']);
$port_geolocal = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiserPortsGeolocalization::class)->findBy(['portName' => (string) $port['name']]);
if (null != $country_name && 0 == count($port_geolocal)) {
$portsArray[] = (string) $port['name'];
$cruiserPortsGeolocalization = new CruiserPortsGeolocalization();
$cruiserPortsGeolocalization->setPortname((string) $port['name']);
$cruiserPortsGeolocalization->setLongitude((string) $port['longitude']);
$cruiserPortsGeolocalization->setLatitude((string) $port['latitude']);
$cruiserPortsGeolocalization->setCountry($country_name);
$em->persist($cruiserPortsGeolocalization);
$em->flush();
if ($is_origin) {
$first_port = $cruiserPortsGeolocalization;
}
} elseif ($is_origin && 1 == count($port_geolocal)) {
$first_port = $port_geolocal[0];
}
if ($is_origin) {
$cruiserRegionPorts = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->findOnePortByRegion((string) $port['name'], $region->getregionCode());
if (null === $cruiserRegionPorts || (is_countable($cruiserRegionPorts) ? count($cruiserRegionPorts) : 0) == 0) {
$cruiseRegionPorts = new CruiseRegionPorts();
$cruiseRegionPorts->setCruiserPortsGeolocalization($first_port);
$cruiseRegionPorts->setRegion($region);
$em->persist($cruiseRegionPorts);
$em->flush();
}
}
}
$itinerary_ports[] = $port;
}
$is_origin = false;
}
$facilities = [];
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->facilities->facility)) {
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->facilities->facility as $facility) {
$facilities[] = $facility;
}
}
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->images->image as $image) {
$shipGalery[] = $image;
}
array_shift($shipGalery); // remove first element
$galeryResume = [];
if (count($shipGalery) > 3) {
$galeryResume = array_slice($shipGalery, 0, 3);
} elseif (count($shipGalery) > 0) {
$galeryResume = $shipGalery;
}
$safeUrl = 'https://'.$agency->getDomainsecure();
$startItinerary = $itinerary_ports[0];
$endItinerary = end($itinerary_ports);
$session->set($transactionID.'[cruiser][infoTravel]', [
'referer' => $session->get($transactionID.'[availability_url]'),
'adults' => $adults,
'children' => $children,
'ageChild' => $ageChild,
'region' => $regionJson,
'vendorName' => $vendorName,
'vendorCode' => $request->get('vendorCode'),
'vendorImage' => $vendorImage,
'cruiseName' => $cruiseName,
'cruiseImage' => $cruiseImage,
'shipName' => $shipName,
'shipCode' => $shipCode,
'nights' => $nights,
'startDate' => $startDate,
'endDate' => $endDate,
'description' => 'Crucero - '.$vendorName.' '.$cruiseName.' ('.$startDate.' al '.$endDate.')',
'currency' => $currency,
'cruiseDetailItinerary' => json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary),
'totalRawItinerary' => str_replace('<i class="icon icon_dart_right pb-2 pr-1 pl-1"></i>', '=>', $request->get('totalRawItinerary')),
'galeryResume' => json_encode($galeryResume),
]);
$pointRedemption = $em->getRepository(\Aviatur\GeneralBundle\Entity\PointRedemption::class)->findPointRedemptionWithAgency($agency);
if (null != $pointRedemption) {
$points = 0;
if ($fullRequest->request->has('pointRedemptionValue')) {
$points = $fullRequest->request->get('pointRedemptionValue');
$session->set('point_redemption_value', $points);
} elseif ($fullRequest->query->has('pointRedeem')) {
$points = $fullRequest->query->get('pointRedeem');
$session->set('point_redemption_value', $points);
} elseif ($session->has('point_redemption_value')) {
$points = $session->get('point_redemption_value');
}
$pointRedemption['Config']['Amount']['CurPoint'] = $points;
}
$urlDetail = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_detail.html.twig');
return $this->render(
$urlDetail,
[
'safeUrl' => $safeUrl,
'ProviderId' => $providerId,
'variables' => $variables,
'startDate' => $startDate,
'endDate' => $endDate,
'nights' => $nights,
'adults' => $adults,
'children' => $children,
'CabinOptions' => $response->Message->OTACruiseCabinAvailRS->CabinOptions,
'groupCabins' => $groupCabins,
'Itinerary' => $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->itinerary,
'startItinerary' => $startItinerary,
'endItinerary' => $endItinerary,
'vendorName' => $vendorName,
'cabinOptions' => $cabinOptions,
'cruiseImage' => $cruiseImage,
'cruiseName' => $cruiseName,
'shipName' => $shipName,
'vendorImage' => $vendorImage,
'sailingTravel' => $itinerary_ports,
'facilities' => $facilities,
'shipGalery' => $shipGalery,
'referer' => $session->get($transactionID.'[availability_url]'),
'pointRedemption' => $pointRedemption,
]
);
}
}
public function detailInvalidAction(Request $request, SessionInterface $session, TwigFolder $twigFolder, AviaturErrorHandler $errorHandler, RouterInterface $router, ParameterBagInterface $parameterBag)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$server = $request->server;
if (true === $session->has($transactionIdSessionName)) {
$transactionId = $session->get($transactionIdSessionName);
$referer = $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
if (true === $session->has($transactionId.'[availability_url]')) {
return $this->redirect($errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), 'Página no accesible', 'No puedes acceder al detalle sin disponibilidad'));
} elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '', 'Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Página no accesible', 'No puedes acceder al detalle sin disponibilidad'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Página no accesible', 'No puedes acceder al detalle sin disponibilidad'));
}
}
public function cabinsDetailAction(Request $request, SessionInterface $session, TwigFolder $twigFolder, AviaturWebService $webService, AviaturErrorHandler $errorHandler, AuthorizationCheckerInterface $authorizationChecker, ParameterBagInterface $parameterBag)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$transactionID = null;
$isAgent = false;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$idagent = $agent[0]->getid();
$nombreagente = $user->getFirstname().' '.$user->getLastname();
$agencyFolder = $twigFolder->twigFlux();
$isAgent = true;
}
}
$server = $request->server;
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$fullRequest = $request;
$request = $fullRequest->request;
$agencyFolder = $twigFolder->twigFlux();
if (true === $request->has('correlationID')) {
$correlationId = $request->get('correlationID');
} else {
$correlationId = $session->get($correlationIdSessionName);
}
if (true === $request->has('transactionID')) {
$transactionID = $request->get('transactionID');
} elseif (true === $session->has($transactionIdSessionName)) {
$transactionID = $session->get($transactionIdSessionName);
}
if ($session->has($transactionID.'[cruiser][provider]')) {
$providerId = $session->get($transactionID.'[cruiser][provider]');
} elseif ($request->has('providerID')) {
$providerId = $request->get('providerID');
$session->set($transactionID.'[cruiser][provider]', $providerId);
}
$url_availability = $session->get($transactionID.'[availability_url]');
$gradeNo = $request->get('gradeNo');
$gradeResultNo = $request->get('gradeResultNo');
// $totalRawItinerary = str_replace('<i class="icon icon_dart_right"></i>', "=>", $request->get('totalRawItinerary'));
$cruiseModel = new CruiseModel();
$templateXml = $cruiseModel->getXmlCabinsDetail();
$xmlRequest = $templateXml[0];
$variables = [];
$variables['transactionId'] = $transactionID;
$variables['ProviderId'] = $providerId;
$variables['correlationId'] = $correlationId;
$variables['groupCode'] = $gradeNo;
$variables['fareCode'] = $gradeResultNo;
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseCabin', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, false, $variables['transactionId']);
if (isset($response['error'])) {
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseCabin', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, true);
if (isset($response['error'])) {
return $this->redirect($errorHandler->errorRedirect($url_availability, '1-Error disponibilidad cabinas', $response['error']));
}
} elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
return $this->redirect($errorHandler->errorRedirect($url_availability, '2-Error disponibilidad cabinas', $response->Message));
}
$cabins = [];
$deckImages = [];
$highlightsList = [];
$sizedImages = [];
$indexList = 0;
foreach ($response->Message->OTACruiseCabinAvailRS->CabinOptions->CabinOption as $cabinOption) {
$cabins[] = $cabinOption;
if (isset($cabinOption->CabinDeck['Imageurl']) && isset($cabinOption->CabinDeck['Imageid']) && '' != $cabinOption->CabinDeck['Imageid']) {
// Images array
if (!in_array((string) $cabinOption->CabinDeck['Id'], $deckImages)) {
$deckImages[(string) $cabinOption->CabinDeck['Id']] = [
'Imageid' => (string) $cabinOption->CabinDeck['Imageid'],
'Deckid' => (string) $cabinOption->CabinDeck['Id'],
'Imageurl' => (string) $cabinOption->CabinDeck['Imageurl'],
'DeckNumber' => (string) $cabinOption['DeckNumber'],
];
}
if (!in_array((string) $cabinOption->CabinDeck['Imageurl'], $sizedImages)) {
[$width, $height] = getimagesize(str_replace('https', 'http', (string) $cabinOption->CabinDeck['Imageurl']));
$sizedImages[] = (string) $cabinOption->CabinDeck['Imageurl'];
$imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['width'] = $width;
$imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['height'] = $height;
} else {
$width = $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['width'];
$height = $imageSize[(string) $cabinOption->CabinDeck['Imageurl']]['height'];
}
$highlightsList[(string) $cabinOption->CabinDeck['Id']][$indexList] = [
'imageid' => (string) $cabinOption->CabinDeck['Imageid'],
'deckid' => (string) $cabinOption->CabinDeck['Id'],
'cabinno' => (string) $cabinOption['CabinNumber'],
'passengersCapacity' => (string) $cabinOption['ConfirmedOccupancy'],
'width' => $width,
'height' => $height,
'x1' => (int) $cabinOption['X1'],
'y1' => (int) $cabinOption['Y1'],
'x2' => (int) $cabinOption['X2'],
'y2' => (int) $cabinOption['Y2'],
];
}
++$indexList;
}
usort($cabins, function ($a, $b) {
if ((int) $a['DeckNumber'] == (int) $b['DeckNumber']) {
return (int) $a['CabinNumber'] <=> (int) $b['CabinNumber'];
} else {
return ((int) $a['DeckNumber'] > (int) $b['DeckNumber']) ? -1 : 1;
}
});
usort($deckImages, fn ($a, $b) => (int) $a['DeckNumber'] <=> (int) $b['DeckNumber']);
$highlightsList = \json_encode($highlightsList);
$cabinsData = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_cabin_options.html.twig');
$infoTravel = $session->get($transactionID.'[cruiser][infoTravel]');
$typePerson[1] = [
'ADT' => $infoTravel['adults'],
'CHD' => $infoTravel['children'],
'INF' => 0,
];
$infoTravel['cabinType'] = $request->get('cabinType');
$infoTravel['cabinName'] = $request->get('cabinName');
$infoTravel['cabinDescription'] = $request->get('cabinDescription');
$infoTravel['cabinTypePrice'] = $request->get('cabinPrice');
$infoTravel['cabinTypePriceCOP'] = $request->get('cabinPriceCOP');
$infoTravel['cabinGroupCode'] = $variables['groupCode'];
$infoTravel['cabinFareCode'] = $variables['fareCode'];
$infoTravel['cabinAmmountBase'] = $request->get('cabinAmmountBase');
$infoTravel['cabinAmmountFees'] = $request->get('cabinAmmountFees');
$infoTravel['cabinAmmountTaxes'] = $request->get('cabinAmmountTaxes');
$infoTravel['cabinAmmountNccf'] = $request->get('cabinAmmountNccf');
$infoTravel['cabinAmmountBaseCOP'] = $request->get('cabinAmmountBaseCOP');
$infoTravel['cabinAmmountFeesCOP'] = $request->get('cabinAmmountFeesCOP');
if ($isAgent) {
$infoTravel['cabincommissionCOP'] = $request->get('cabinCommissionCOP');
$infoTravel['cabinCommissionPay'] = $request->get('cabinCommissionPay');
$infoTravel['cabinCommission'] = $request->get('cabinCommission');
$infoTravel['cabinCommissionActive'] = $request->get('cabinCommissionActive');
$infoTravel['activeDetail'] = $request->get('activeDetail');
$infoTravel['cabinIsAgent'] = $isAgent;
$infoTravel['taPercentage'] = $request->get('taPercentage');
$infoTravel['paymentPercentage'] = $request->get('paymentPercentage');
} else {
$infoTravel['cabinIsAgent'] = $isAgent;
}
$infoTravel['cabinAmmountTaxesCOP'] = $request->get('cabinAmmountTaxesCOP');
$infoTravel['cabinAmmountNccfCOP'] = $request->get('cabinAmmountNccfCOP');
if ($request->has('cabinAmmountGratuities')) {
$infoTravel['cabinAmmountGratuities'] = $request->get('cabinAmmountGratuities');
$infoTravel['cabinAmmountGratuitiesCOP'] = $request->get('cabinAmmountGratuitiesCOP');
}
$session->set($transactionID.'[cruiser][infoTravel]', $infoTravel);
$safeUrl = 'https://'.$agency->getDomainsecure();
$cruiseDetailItinerary = json_decode($infoTravel['cruiseDetailItinerary'], true);
$startItinerary = $cruiseDetailItinerary['item'][0];
$endItinerary = end($cruiseDetailItinerary['item']);
return $this->render($cabinsData, [
'safeUrl' => $safeUrl,
'variables' => $variables,
'Cabins' => $cabins,
'services' => $typePerson,
'infoTravel' => $infoTravel,
'deckImages' => $deckImages,
'highlightsList' => $highlightsList,
'startItinerary' => $startItinerary,
'endItinerary' => $endItinerary,
]);
}
public function cabinReservationAction(Request $request, SessionInterface $session, AviaturWebService $webService, TokenStorageInterface $tokenStorage, ManagerRegistry $registry, ParameterBagInterface $parameterBag, TwigFolder $twigFolder, AviaturErrorHandler $errorHandler, PayoutExtraService $extraService, AuthorizationCheckerInterface $authorizationChecker, CustomerMethodPaymentService $methodPaymentService, RouterInterface $router, AviaturLogSave $logSave)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$transactionID = null;
$typePerson = [];
$providerId = null;
$isAgent = false;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$isAgent = true;
}
}
$server = $request->server;
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$fullRequest = $request;
$request = $fullRequest->request;
$agencyFolder = $twigFolder->twigFlux();
$typeGender = $em->getRepository(\Aviatur\CustomerBundle\Entity\Gender::class)->findAll();
$typeDocument = $em->getRepository(\Aviatur\CustomerBundle\Entity\DocumentType::class)->findAll();
$isFront = $session->has('operatorId');
$conditions = $em->getRepository(\Aviatur\GeneralBundle\Entity\HistoricalInfo::class)->findMessageByAgencyOrNull($agency, 'reservation_conditions_for_cruise');
// $paymentMethodAgency = $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findBy(array('paymentMethod' => array(1, 2, 4), 'agency' => $agency, 'isactive' => 1));
$paymentOptions = [];
$finantial_rate = $session->get('[cruiser][finantial_rate]');
if (true === $request->has('transactionID')) {
$transactionID = $request->get('transactionID');
} elseif (true === $session->has($transactionIdSessionName)) {
$transactionID = $session->get($transactionIdSessionName);
}
if ($session->has($transactionID.'[cruiser][provider]')) {
$providerId = $session->get($transactionID.'[cruiser][provider]');
} elseif ($request->has('providerID')) {
$providerId = $request->get('providerID');
$session->set($transactionID.'[cruiser][provider]', $providerId);
}
$infoTravel = $session->get($transactionID.'[cruiser][infoTravel]');
$typePerson[1] = [
'ADT' => $infoTravel['adults'],
'CHD' => $infoTravel['children'],
'INF' => 0,
];
// Travel date minor that 31 days or payment date is weekend only pay with credit card method
$segundos = strtotime($infoTravel['startDate']) - strtotime('now');
$diferencia_dias = intval($segundos / 60 / 60 / 24);
$restrictDays = []; // No se aplican restricciones por el momento.
if ($diferencia_dias < 31 || in_array(date('w'), $restrictDays)) {
$queryPaymentMethods = ['paymentMethod' => [1, 4], 'agency' => $agency, 'isactive' => 1];
} else {
$queryPaymentMethods = ['paymentMethod' => [1, 2, 4], 'agency' => $agency, 'isactive' => 1];
}
$paymentMethodAgency = $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findBy($queryPaymentMethods);
$routeName = $fullRequest->get('_route');
if ('aviatur_cruise_retry_secure' == $routeName) {
$detail_data_cruise = json_decode($session->get($transactionID.'[cruiser][detail_data_cruise]'));
$billingData = $detail_data_cruise->BD;
$passangerInfo = $detail_data_cruise->PI;
$contactData = $detail_data_cruise->CD;
$cruiseData = $detail_data_cruise->QD;
$paymentData = $detail_data_cruise->PD;
$retry = true;
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
if (false !== strpos($billingData->first_name, '***')) {
$billingData->first_name = $customer->getFirstname();
$billingData->last_name = $customer->getLastname();
$billingData->address = $customer->getAddress();
$billingData->phone = $customer->getPhone();
$billingData->email = $customer->getEmail();
}
if (false !== strpos($passangerInfo->first_name_1_1, '***')) {
$passangerInfo->first_name_1_1 = $customer->getFirstname();
$passangerInfo->last_name_1_1 = $customer->getLastname();
$passangerInfo->email_1_1 = $customer->getEmail();
$contactData->phone = $customer->getPhone();
}
if (isset($paymentData->cusPOptSelected)) {
$customerLogin = $tokenStorage->getToken()->getUser();
if (is_object($customerLogin)) {
$paymentsSaved = $methodPaymentService->getMethodsByCustomer($customerLogin, false);
}
}
$quotationMode = isset($cruiseData->quotationMode) ? true : false;
} else {
$session->set($transactionID.'[cruiser][detail]', $request);
$session->set($transactionID.'[cruiser][provider]', $providerId);
$infoTravel['cabinNumber'] = $request->get('cabinNumber');
$infoTravel['cabinCategoryCode'] = $request->get('cabinCategoryCode');
$session->set($transactionID.'[cruiser][infoTravel]', $infoTravel);
$retry = false;
$quotationMode = false;
if (!isset($infoTravel['basketCode'])) {
$request1 = new Request([], $request->all(), [], $request->all(), [], [], [], $request);
$response = $this->addCabinShoppingCart($request1, $session, $parameterBag, $webService, $errorHandler);
$infoTravel = $session->get($transactionID.'[cruiser][infoTravel]');
if (isset($response['error'])) {
$referer = $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
if (true === $session->has($transactionID.'[availability_url]')) {
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'));
} elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '', 'Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
} else {
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'));
}
}
$finantial_rate = $session->get('[cruiser][finantial_rate]');
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode']) && '' != $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode']) {
$infoTravel['basketCode'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['basketcode'];
$infoTravel['reservationKey'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem['itemkey'];
$infoTravel['commissionPercentage'] = (string) round($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['value']);
$infoTravel['commissionValue'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['amount'];
$infoTravel['commissionValueCOP'] = round((float) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->commission['amount'] * $finantial_rate);
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$infoTravel['commissionFareAgent'] = round($infoTravel['commissionValue'] * $infoTravel['taPercentage']);
$infoTravel['commissionFareAgentCOP'] = round($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']);
}
} else {
$referer = $router->match(parse_url($server->get('HTTP_REFERER'), PHP_URL_PATH));
if (true === $session->has($transactionID.'[availability_url]')) {
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'));
} elseif (false !== strpos($referer['_controller'], 'availabilityAction')) {
return $this->redirect($errorHandler->errorRedirect($server->get('HTTP_REFERER'), '', 'Error en la respuesta de nuestro proveedor de servicios, inténtalo nuevamente'));
} else {
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'));
}
}
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) && $diferencia_dias < (int) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) {
// if ($diferencia_dias < 1200) {
$quotationMode = true;
}
$cruiseFare = [];
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown->item)) {
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown->item as $item) {
$cruiseFare[(string) $item['category']][(string) $item['description']] = (string) $item['totalcost'];
}
}
$infoTravel['taxes'] = $cruiseFare;
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->optionalextras)) {
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->optionalextras->optionalextra as $extra) {
if ('grats' == $extra['code']) {
$infoTravel['gratuities'] = (string) $extra['sprice'];
$infoTravel['gratuitiesCOP'] = round((float) $infoTravel['gratuities'] * $finantial_rate);
}
}
}
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits)) {
$dueDate = $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['duedate'];
$newDueDate = strtotime('-30 day', strtotime($dueDate));
$newDueDate = date('Y-m-d', $newDueDate);
$response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['duedate'] = $newDueDate;
$response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['priceCOP'] = $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits['price'] * $finantial_rate;
$infoTravel['deposit'] = json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->deposits);
} else {
$infoTravel['deposit'] = null;
$infoTravel['deposit'] = null;
}
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->cardcharges)) {
$cardPermitted = [];
$cardPermitted['stringnames'] = '';
foreach ($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->cardcharges->cardcharge as $cardcharge) {
$cardPermitted['stringnames'] .= mb_strtolower($cardcharge['cardname']);
$cardPermitted[(string) $cardcharge['cardtype']]['name'] = (string) $cardcharge['cardname'];
if ('none' != $cardcharge['chargetype']) {
$cardPermitted[(string) $cardcharge['cardtype']]['chargeVal'] = (string) $cardcharge['chargevalue'];
}
}
$infoTravel['cardPermitted'] = $cardPermitted;
}
if (isset($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->dining)) {
$dinningOptions = json_encode($response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->dining);
$infoTravel['dinningOptions'] = $dinningOptions;
}
$infoTravel['service_quotation'] = $session->has($transactionID.'[cruise][quotation]') ? true : false;
$session->set($transactionID.'[cruiser][infoTravel]', $infoTravel);
} else {
$infoTravel = $session->get($transactionID.'[cruiser][infoTravel]');
$responseCabinAvail = simplexml_load_string($session->get($transactionID.'[cruiser][CabinAvailResponse]'));
$segundos = strtotime($infoTravel['startDate']) - strtotime('now');
$diferencia_dias = intval($segundos / 60 / 60 / 24);
if (isset($responseCabinAvail->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) && $diferencia_dias < (int) $responseCabinAvail->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['mindaystodeparture']) {
$quotationMode = true;
}
}
}
foreach ($paymentMethodAgency as $payMethod) {
$paymentCode = $payMethod->getPaymentMethod()->getCode();
if (!in_array($paymentCode, $paymentOptions)) {
$paymentOptions[] = $paymentCode;
}
}
$cybersource = [];
if (in_array('cybersource', $paymentOptions)) {
$cybersource['merchant_id'] = $paymentMethodAgency[array_search('cybersource', $paymentOptions)]->getSitecode();
$cybersource['org_id'] = $paymentMethodAgency[array_search('cybersource', $paymentOptions)]->getTrankey();
}
foreach ($paymentOptions as $key => $paymentOption) {
if ('cybersource' == $paymentOption) {
unset($paymentOptions[$key]); // strip from other renderizable payment methods
}
}
$banks = [];
if (in_array('pse', $paymentOptions)) {
$banks = $em->getRepository(\Aviatur\PaymentBundle\Entity\PseBank::class)->findAll();
}
$ageRuleByCruise = [
'22' => 21,
'3' => 21,
'66' => 21,
];
$cruisesInTravel = [
$infoTravel['vendorCode'] => $infoTravel['vendorName'],
];
$repositoryDocumentType = $registry->getRepository(\Aviatur\CustomerBundle\Entity\DocumentType::class);
$queryDocumentType = $repositoryDocumentType
->createQueryBuilder('p')
->where('p.paymentcode != :paymentcode')
->setParameter('paymentcode', '')
->getQuery();
$documentPaymentType = $queryDocumentType->getResult();
$provider = $em->getRepository(\Aviatur\MpaBundle\Entity\Provider::class)->findOneByProvideridentifier($providerId);
$payment_type_form_name = $provider->getPaymentType()->getTwig();
$formReservation = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cruise_formReservation.html.twig');
$cruiseDetailItinerary = json_decode($infoTravel['cruiseDetailItinerary'], true);
$startItinerary = $cruiseDetailItinerary['item'][0];
$endItinerary = end($cruiseDetailItinerary['item']);
$isNational = false;
$args = (object) [
'passangerTypes' => $typePerson,
'isNational' => $isNational,
];
$payoutExtras = null;
if (!$isFront) {
$payoutExtras = $extraService->loadPayoutExtras($agency, $transactionID, 'cruiser', $args);
}
if ($isAgent) {
$amountProduct = (float) $infoTravel['cabinAmmountBaseCOP'] - (float) $infoTravel['commissionValueCOP'];
$amountProduct += ((float) $infoTravel['cabinAmmountFeesCOP'] + (float) $infoTravel['cabinAmmountTaxesCOP']);
$info_product = ['amountQse' => (float) $infoTravel['cabincommissionCOP'],
'commissionQse' => (float) $infoTravel['cabinCommissionPay'],
'amountTa' => (float) $infoTravel['commissionValueCOP'],
'commissionTa' => (float) round($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']),
'amountProduct' => $amountProduct,
'percentageTa' => isset($infoTravel['commissionValue']) ? (float) $infoTravel['commissionValue'] : 0, ];
$session->set($transactionId.'_agentInfoTransaction', $info_product);
$infoTravel['commissionQSE'] = $infoTravel['cabinCommissionPay'];
$infoTravel['cabinCommissionPay'] += (float) ($infoTravel['commissionValueCOP'] * $infoTravel['taPercentage']);
}
$isFront = $session->has('operatorId');
$quotation_web = $session->has($transactionID.'[cruise][quotation]') ? true : false;
$cotizationWeb = false;
if (($quotation_web && !$isFront) || $request->has('makeCotization')) {
$cotizationWeb = true;
}
// dd($infoTravel);
/* Aplicando para vuelo, pero teniendo cuidado con los otros productos */
/* 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 */
$iinRecordsArray = $this->getIINRanges($em);
return $this->render($formReservation, [
'airline_miles' => null,
'banks' => $banks,
'cybersource' => $cybersource,
'cards' => $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findBy(['isactive' => 1]),
'inactiveCards' => $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findBy(['isactive' => 0]),
'twig_readonly' => $retry,
'cotization' => $cotizationWeb,
'paymentOptions' => $paymentOptions,
'payment_type_form_name' => $payment_type_form_name,
'payment_doc_type' => $documentPaymentType,
'doc_type' => $typeDocument,
'passengers' => $passangerInfo ?? null,
'billingData' => $billingData ?? null,
'contactData' => $contactData ?? null,
'cruiseData' => $cruiseData ?? null,
'services' => $typePerson,
'gender' => $typeGender,
'conditions' => $conditions,
'infoTravel' => $infoTravel,
'startItinerary' => $startItinerary,
'endItinerary' => $endItinerary,
'deposit' => null != $infoTravel['deposit'] ? json_decode($infoTravel['deposit'], true) : null,
'dinningOptions' => isset($infoTravel['dinningOptions']) ? json_decode($infoTravel['dinningOptions'], true) : null,
'ageRuleByCruise' => $ageRuleByCruise,
'cruisesInTravel' => $cruisesInTravel,
'payoutExtras' => $payoutExtras,
'service_quotation' => $infoTravel['service_quotation'],
'paymentsSaved' => isset($paymentsSaved) ? $paymentsSaved['info'] : null,
'quotationMode' => $quotationMode,
'vendorCode' => $infoTravel['vendorName'],
'pse' => true,
'ccranges' => $iinRecordsArray["ccranges"],
'ccfranchises' => $iinRecordsArray["ccfranchises"],
]);
}
public function prePaymentStep1Action(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailer, Pdf $pdf, TokenStorageInterface $tokenStorage, TokenizerService $tokenizerService, AviaturErrorHandler $errorHandler, CustomerMethodPaymentService $methodPaymentService, AviaturLogSave $logSave)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$aviaturPaymentRetryTimes = $parameterBag->get('aviatur_payment_retry_times');
if ($request->isXmlHttpRequest()) {
$transactionId = $session->get($transactionIdSessionName);
$billingData = $request->request->get('BD');
$em = $this->getDoctrine()->getManager();
$postData = $request->request->all();
$publicKey = $aviaturEncoder->aviaturRandomKey();
if (isset($postData['PD']['card_num'])) {
$postDataInfo = $postData;
if (isset($postDataInfo['PD']['cusPOptSelected'])) {
$customerLogin = $tokenStorage->getToken()->getUser();
$infoMethodPaymentByClient = $methodPaymentService->getMethodsByCustomer($customerLogin, true);
$cardToken = $infoMethodPaymentByClient['info'][$postDataInfo['PD']['cusPOptSelected']]['token'];
$postDataInfo['PD']['card_num'] = $cardToken;
} else {
$postDataInfo['PD']['card_num'] = $tokenizerService->getToken($postData['PD']['card_num']);
}
$postData['PD']['card_values'] = ['card_num_token' => $postDataInfo['PD']['card_num'], 'card_num' => $postData['PD']['card_num']];
}
$quotation_web = $session->has($transactionId.'[cruise][quotation]') ? true : false;
if ($session->has($transactionId.'[cruise][quotation]') || isset($postData['QD']['quotationMode'])) {
$session->set($transactionId.'[cruiser][detail_data_cruise]', json_encode($postData));
if (isset($postData['QD']['quotationMode']) || true == $quotation_web) {
$infoTravel = $session->get($transactionId.'[cruiser][infoTravel]');
$infoTravel['web_quotation'] = true;
$session->set($transactionId.'[cruiser][infoTravel]', $infoTravel);
}
$this->sendCruiseConfirmationAction($request, $parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler);
$response = new Response(json_encode(['url' => $this->generateUrl('aviatur_cruise_payment_success_secure')]));
$response->headers->set('Content-Type', 'application/json');
return $response;
} else {
$encodedInfo = $aviaturEncoder->AviaturEncode(json_encode($postDataInfo ?? $postData), $publicKey);
$formUserInfo = new FormUserInfo();
$formUserInfo->setInfo($encodedInfo);
$formUserInfo->setPublicKey($publicKey);
$em->persist($formUserInfo);
$em->flush();
$session->set($transactionId.'[cruiser][user_info]', $formUserInfo->getId());
if ((true !== $session->has($transactionId.'[cruiser][retry]')) || (true !== $session->has($transactionId.'[cruiser][prepayment_check]'))) {
if (true === $session->has($transactionId.'[cruiser][detail]')) {
// $postData = $request->all();
$session->set($transactionId.'[cruiser][detail_data_cruise]', json_encode($postData));
$passangersData = $request->request->get('PI');
$passangerNames = [];
for ($i = 1; $i <= $passangersData['person_count_1']; ++$i) {
$passangerNames[] = mb_strtolower($passangersData['first_name_1_'.$i]);
$passangerNames[] = mb_strtolower($passangersData['last_name_1_'.$i]);
}
$nameWhitelist = $em->getRepository(\Aviatur\GeneralBundle\Entity\NameWhitelist::class)->findLikeWhitelist($passangerNames);
if (0 == sizeof($nameWhitelist)) {
$nameBlacklist = $em->getRepository(\Aviatur\GeneralBundle\Entity\NameBlacklist::class)->findLikeBlacklist($passangerNames);
if ((sizeof(preg_grep("/^[a-z- *\.]+$/", $passangerNames)) != sizeof($passangerNames))
|| sizeof($nameBlacklist)
|| sizeof(preg_grep('/(([b-df-hj-np-tv-xz])(?!\2)){4}/', $passangerNames))) {
return $this->json(['error' => 'error', 'message' => 'nombre inválido']);
}
}
$isFront = $session->has('operatorId');
if ($isFront) {
$customer = null;
$ordersProduct = null;
} else {
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($billingData['id']);
$ordersProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->getOrderProductsPending($customer);
}
if (null == $ordersProduct) {
$session->set($transactionId.'[cruiser][retry]', $aviaturPaymentRetryTimes);
$detail = $session->get($transactionId.'[cruiser][detail]');
$session->set($transactionId.'[cruiser][prepayment]', $detail);
$ajaxUrl = $this->generateUrl('aviatur_cruise_prepayment_step_2_secure');
return $this->json(['ajax_url' => $ajaxUrl]);
} else {
$booking = [];
$cus = [];
foreach ($ordersProduct as $orderProduct) {
$productResponse = $aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey());
$paymentResponse = json_decode($productResponse);
array_push($booking, 'ON'.$orderProduct->getOrder()->getId().'-PN'.$orderProduct->getId());
if (isset($paymentResponse->x_approval_code)) {
array_push($cus, $paymentResponse->x_approval_code);
} elseif (isset($paymentResponse->createTransactionResult->trazabilityCode)) {
array_push($cus, $paymentResponse->createTransactionResult->trazabilityCode);
}
}
return $this->json([
'error' => 'pending payments',
'message' => 'pending_payments',
'booking' => $booking,
'cus' => $cus,
]);
}
} else {
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')]);
}
} else {
$paymentData = $request->request->get('PD');
$paymentData = json_decode(json_encode($paymentData));
$json = json_decode($session->get($transactionId.'[cruiser][order]'));
if (!is_null($json)) {
$json->ajax_url = $this->generateUrl('aviatur_cruise_prepayment_step_2_secure');
// reemplazar datos de pago por los nuevos.
$oldPostData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
if (isset($paymentData->cusPOptSelected) || isset($paymentData->card_num)) {
if (isset($paymentData->cusPOptSelected)) {
$customerLogin = $tokenStorage->getToken()->getUser();
$infoMethodPaymentByClient = $methodPaymentService->getMethodsByCustomer($customerLogin, true);
$card_num_token = $infoMethodPaymentByClient['info'][$paymentData->cusPOptSelected]['token'];
} else {
$card_num_token = $tokenizerService->getToken($paymentData->card_num);
}
$card_values = ['card_num_token' => $card_num_token, 'card_num' => $paymentData->card_num];
}
unset($oldPostData->PD);
$oldPostData->PD = $paymentData;
if (isset($card_num_token)) {
$oldPostData->PD->card_values = $card_values;
}
$session->set($transactionId.'[cruiser][detail_data_cruise]', json_encode($oldPostData));
$response = new Response(json_encode($json));
$response->headers->set('Content-Type', 'application/json');
return $response;
} else {
return $this->json(['error' => 'fatal', 'message' => $errorHandler->errorRedirect($session->get($transactionId.'[availability_url]'), '', 'No encontramos datos de tu orden, por favor vuelve a intentarlo')]);
}
}
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'Acceso no autorizado'));
}
}
public function prePaymentStep2Action(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, EmissionWebservice $emissionWebservice, OrderController $orderController, TwigFolder $twigFolder, AviaturErrorHandler $errorHandler, AuthorizationCheckerInterface $authorizationChecker)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$order = [];
if ($request->isXmlHttpRequest()) {
// $isAgent es una variable para identificar agentes de octopus
$isAgent = false;
// $request trae los datos de form data-formulario
$fullRequest = $request;
$request = $request->request;
$em = $this->getDoctrine()->getManager();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$billingData = $request->get('BD');
$transactionId = $session->get($transactionIdSessionName);
$session->set($transactionId.'[cruiser][prepayment_check]', true);
$infoTravel = $session->get($transactionId.'[cruiser][infoTravel]');
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$correlationId = $session->get($correlationIdSessionName);
if (true !== $session->has($transactionId.'[cruiser][order]')) {
if (true === $session->has($transactionId.'[cruiser][detail]')) {
if (isset($agency)) {
$customerData = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($billingData['id']);
$isFront = $session->has('operatorId');
if ($isFront) {
$customer = $billingData;
$customer['isFront'] = true;
$status = 'B2T';
} else {
$customer = $customerData;
$status = 'waiting';
}
$productType = $em->getRepository(\Aviatur\MpaBundle\Entity\ProductType::class)->findByCode('CRUISER');
$orderIdentifier = '{order_product_num}';
$order = $orderController->createAction($agency, $customer, $productType, $orderIdentifier, $status);
$orderId = str_replace('ON', '', $order['order']);
$orderEntity = $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderId);
$formUserInfo = $em->getRepository(\Aviatur\GeneralBundle\Entity\FormUserInfo::class)->find($session->get($transactionId.'[cruiser][user_info]'));
$formUserInfo->setOrder($orderEntity);
$em->persist($formUserInfo);
$productId = str_replace('PN', '', $order['products']);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$emissionData = $this->getEmissionData($session, $transactionIdSessionName, $postData, $correlationId, $customerData, $infoTravel, $fullRequest);
$orderProduct->setEmissiondata(json_encode($emissionData));
$em->persist($orderProduct);
$em->flush();
// Agent Transaction, Save commission QSE or Percentage
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR') && $session->get($transactionId.'_isActiveQse')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$commissionPay = round((float) $infoTravel['cabinCommissionPay'] + (float) ($infoTravel['commissionValueCOP'] * 0.7));
$agentId = $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
$agentCommission = $em->getRepository(\Aviatur\AgentBundle\Entity\AgentCommission::class)->findOneByAgent($agentId);
// return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', $idAgentCommision.' '.$agentId));
$agentTransaction = new AgentTransaction();
$arrayInfo = $session->get($transactionId.'_agentInfoTransaction');
$agentTransaction->setAgent($agentId);
$agentTransaction->setAgentCommission($agentCommission);
$agentTransaction->setOrderProduct($orderProduct);
$agentTransaction->setCommissionvalue(round((float) $commissionPay));
$agentTransaction->setAmountQse($arrayInfo['amountQse']);
$agentTransaction->setCommissionQse($arrayInfo['commissionQse']);
$agentTransaction->setPercentageTarifa($arrayInfo['percentageTa']);
$agentTransaction->setAmountTarifa($arrayInfo['amountTa']);
$agentTransaction->setCommissionTarifa($arrayInfo['commissionTa']);
$agentTransaction->setAmountProduct($arrayInfo['amountProduct']);
$em->persist($agentTransaction);
$em->flush();
}
}
$response = $emissionWebservice->callServiceEmission('emitir_tc', $emissionData, $productId);
if (!isset($response['error'])) {
$responseArray = json_decode(json_encode($response), true);
if ('' != $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation']) {
$infoTravel['bookReservation'] = $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation'];
$infoTravel['travelTekId'] = $responseArray['RESPUESTA']['results']['book']['@attributes']['reservation'];
$session->set($transactionId.'[cruiser][infoTravel]', $infoTravel);
$quotation_web = $session->has($transactionId.'[cruise][quotation]') ? true : false;
if ($isFront || (!$isFront && $quotation_web)) {
$orderProduct->setAddProductData(str_replace($order['products'], $infoTravel['bookReservation'], $orderProduct->getAddProductData()));
$em->persist($orderProduct);
$em->flush();
// $this->sendShoppingCartInfo($postData, $infoTravel, $order['products']);
$order['url'] = $this->generateUrl('aviatur_cruise_payment_success_secure');
return $this->json($order);
} else {
$order['url'] = $this->generateUrl('aviatur_cruise_payment_secure');
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No fue posible confirmar la reserva'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No fue posible confirmar la reserva'));
}
return $this->json($order);
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró la agencia con el dominio: '.$fullRequest->getHost()));
}
} else {
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')]);
}
} else {
$order['url'] = $this->generateUrl('aviatur_cruise_payment_secure');
return $this->json($order);
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'Acceso no autorizado'));
}
}
public function paymentAction(Request $request, SessionInterface $session, P2PController $p2PController, WorldPayController $worldPayController, PSEController $PSEController, TwigFolder $twigFolder, AviaturErrorHandler $errorHandler, PayoutExtraService $extraService, RouterInterface $router, ParameterBagInterface $parameterBag, CashController $cashController, SafetypayController $safetypayController, \Swift_Mailer $mailer , TokenizerService $tokenizerService , CustomerMethodPaymentService $methodPaymentService , AviaturLogSave $logSave, OrderController $aviaturOrderController)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$emailNotification = $parameterBag->get('email_notification');
$orderProduct = [];
$paymentResponse = null;
$return = null;
$safetyData = null;
$response = null;
$array = [];
$emissionData = [];
$retryCount = null;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$orderInfo = json_decode($session->get($transactionId.'[cruiser][order]'));
$infoDates = $session->get($transactionId.'[cruiser][infoTravel]');
$correlationId = $session->get($correlationIdSessionName);
$productId = str_replace('PN', '', $orderInfo->products);
$orderProduct[] = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$paymentData = $postData->PD;
$cruisedata = $postData->QD;
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($postData->BD->id);
$x_total_amount = (float) $postData->QD->cruiseTotalPaymentCOP;
$x_amount_base = 0;
$x_amount_iva = 0;
$payoutExtrasValues = null;
if (isset($postData->payoutExtrasSelection)) {
$payoutExtrasValues = $extraService->getPayoutExtrasValues($postData->payoutExtrasSelection, $transactionId);
}
$infoDates['cruisePaydetail'] = $cruisedata;
$orderProduct[0]->setEmail(json_encode($infoDates));
$orderProduct[0]->setEmissiondata(json_encode($this->getEmissionData($session, $transactionIdSessionName, $postData, $correlationId, $customer, $infoDates, $request)));
$em->persist($orderProduct[0]);
$em->flush();
if( $paymentData == null){
return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
}
if ('p2p' == $paymentData->type || 'world' == $paymentData->type) {
$array = [
'x_currency_code' => (string) 'COP',
'x_amount' => number_format(round((float) $x_total_amount), 0, '.', ''),
'x_tax' => number_format(round((float) $x_amount_iva), 2, '.', ''),
'x_amount_base' => number_format(round((float) $x_amount_base), 2, '.', ''),
'x_invoice_num' => $orderInfo->order.'-'.$orderInfo->products,
'x_first_name' => $customer->getFirstname(),
'x_last_name' => $customer->getLastname(),
'x_description' => $infoDates['description'],
'x_city' => $customer->getCity()->getIatacode(),
'x_country_id' => $customer->getCountry()->getIatacode(),
'x_cust_id' => $customer->getDocumentType()->getPaymentcode().' '.$customer->getDocumentnumber(),
'x_address' => $customer->getAddress(),
'x_phone' => $customer->getPhone(),
'x_email' => $customer->getEmail(),
'x_card_num' => $paymentData->card_num,
'x_exp_date' => $paymentData->exp_month.$paymentData->exp_year,
'x_card_code' => $paymentData->card_code,
'x_differed' => $paymentData->differed,
'x_client_id' => $postData->BD->id,
'product_type' => 'cruiser',
'franchise' => $paymentData->franquise,
'worldpay_validate' => true
];
if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
foreach ($payoutExtrasValues as $payoutExtraValues) {
$array['x_amount'] += round((float) $payoutExtraValues->values->fare->total);
$array['x_tax'] += round((float) $payoutExtraValues->values->fare->tax);
$array['x_amount_base'] += round((float) $payoutExtraValues->values->fare->base);
}
}
if (isset($paymentData->card_values)) {
$array['card_values'] = (array) $paymentData->card_values;
}
$payoutExtrasValues = $extraService->setPayoutExtrasAsProcessed($transactionId);
if (isset($paymentData->cusPOptSelected)) {
$array['isToken'] = (string) $paymentData->card_values->card_num_token;
}
if ('p2p' == $paymentData->type) {
if (isset($paymentData->savePaymProc)) {
$array['x_provider_id'] = 1;
} elseif (isset($paymentData->cusPOptSelected)) {
if (isset($paymentData->cusPOptSelectedStatus)) {
if ('NOTVERIFIED' == $paymentData->cusPOptSelectedStatus) {
$array['x_provider_id'] = 1;
} else {
$array['x_provider_id'] = 2;
}
} else {
$array['x_provider_id'] = 2;
}
}
$paymentResponse = $p2PController->placetopayAction($parameterBag , $tokenizerService , $methodPaymentService , $mailer, $logSave , $array , $combination = false,$segment = null,$orderId = false);
$return = $this->redirect($this->generateUrl('aviatur_cruise_payment_p2p_return_url_secure', [], true));
} elseif ('world' == $paymentData->type) {
$array['city'] = $customer->getCity()->getIatacode();
$array['countryCode'] = $customer->getCity()->getCountry()->getIatacode();
$paymentResponse = $worldPayController->worldAction($request, $mailer , $logSave, $methodPaymentService,$parameterBag, $array, $combination = false, $segment = null);
// $paymentResponse = $worldPayController->worldAction($array);
$return = $this->redirect($this->generateUrl('aviatur_cruise_payment_world_return_url_secure', [], true));
}
unset($array['x_client_id']);
if (null != $paymentResponse) {
return $return;
} else {
$orderProduct[0]->setStatus('pending');
$em->persist($orderProduct[0]);
$em->flush();
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'));
}
} elseif ('pse' == $paymentData->type) {
$array = ['x_doc_num' => $customer->getDocumentnumber(),
'x_doc_type' => $customer->getDocumentType()->getPaymentcode(),
'x_first_name' => $customer->getFirstname(),
'x_last_name' => $customer->getLastname(),
'x_company' => 'Aviatur',
'x_email' => $customer->getEmail(),
'x_address' => $customer->getAddress(),
'x_city' => $customer->getCity()->getDescription(),
'x_province' => $customer->getCity()->getDescription(),
'x_country' => $customer->getCountry()->getDescription(),
'x_phone' => $customer->getPhone(),
'x_mobile' => $customer->getCellphone(),
'x_bank' => $paymentData->pse_bank,
'x_type' => $paymentData->pse_type,
'x_reference' => $orderInfo->order.'-'.$orderInfo->products,
'x_description' => $infoDates['description'],
'x_currency' => (string) 'COP',
'x_total_amount' => number_format(round((float) $x_total_amount), 0, '.', ''),
'x_tax_amount' => number_format(round((float) $x_amount_iva), 2, '.', ''),
'x_devolution_base' => number_format(round((float) $x_amount_base), 2, '.', ''),
'x_tax' => number_format(round((float) 0), 2, '.', ''),
'x_tip_amount' => number_format(round((float) 0), 2, '.', ''),
'product_type' => 'cruiser',
];
if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
foreach ($payoutExtrasValues as $payoutExtraValues) {
$array['x_total_amount'] += round((float) $payoutExtraValues->values->fare->total);
$array['x_tax_amount'] += round((float) $payoutExtraValues->values->fare->tax);
$array['x_devolution_base'] += round((float) $payoutExtraValues->values->fare->base);
}
}
$payoutExtrasValues = $extraService->setPayoutExtrasAsProcessed($transactionId);
$route = $router->match(str_replace($request->getSchemeAndHttpHost(), '', $request->getUri()));
$isMulti = false !== strpos($route['_route'], 'multi') ? true : false;
if ($isMulti) {
return $this->json($array);
}
$paymentResponse = $PSEController->sendPaymentAction($request,$session,$router,$parameterBag,$mailer,$aviaturOrderController, $array, $orderProduct);
if (!isset($paymentResponse->error)) {
switch ($paymentResponse->createTransactionResult->returnCode) {
case 'SUCCESS':
return $this->redirect($paymentResponse->createTransactionResult->bankURL);
case 'FAIL_EXCEEDEDLIMIT':
return $this->redirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '');
case 'FAIL_BANKUNREACHEABLE':
return $this->redirect($this->generateUrl('aviatur_cruise_retry_secure'), '');
default:
return $this->redirect($this->generateUrl('aviatur_cruise_retry_secure'), '');
}
} else {
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));
}
} elseif ('safety' == $paymentData->type) {
$transactionUrl = $this->generateUrl('aviatur_payment_safetypay', [], true);
$array = ['x_doc_num' => $customer->getDocumentnumber(),
'x_doc_type' => $customer->getDocumentType()->getPaymentcode(),
'x_first_name' => $customer->getFirstname(),
'x_last_name' => $customer->getLastname(),
'x_company' => 'Aviatur',
'x_email' => $customer->getEmail(),
'x_address' => $customer->getAddress(),
'x_city' => $customer->getCity()->getDescription(),
'x_province' => $customer->getCity()->getDescription(),
'x_country' => $customer->getCountry()->getDescription(),
'x_phone' => $customer->getPhone(),
'x_mobile' => $customer->getCellphone(),
'x_reference' => $orderInfo->products,
'x_booking' => $infoDates['basketCode'],
'x_description' => $infoDates['description'],
'x_currency' => 'COP',
'x_total_amount' => number_format(round((float) $x_total_amount), 2, '.', ''),
'x_tax_amount' => number_format(round((float) 0), 2, '.', ''),
'x_devolution_base' => number_format(round((float) 0), 2, '.', ''),
'x_tip_amount' => number_format(round(0), 2, '.', ''),
'x_payment_data' => $paymentData->type,
'x_type_description' => 'cruise',
];
if ($payoutExtrasValues && !(bool) $session->get($transactionId.'[PayoutExtras][Processed]')) {
foreach ($payoutExtrasValues as $payoutExtraValues) {
$array['x_total_amount'] += round((float) $payoutExtraValues->values->fare->total);
$array['x_tax_amount'] += round((float) $payoutExtraValues->values->fare->tax);
$array['x_devolution_base'] += round((float) $payoutExtraValues->values->fare->base);
}
}
$payoutExtrasValues = $extraService->setPayoutExtrasAsProcessed($transactionId);
$parametMerchant = [
'MerchantSalesID' => $array['x_reference'],
'Amount' => $array['x_total_amount'],
'transactionUrl' => $transactionUrl,
'dataTrans' => $array,
];
$safeTyPay = $safetypayController->safetyAction($router, $parameterBag, $mailer, $parametMerchant, $array);
if ('ok' == $safeTyPay['status']) {
if ('baloto' == $paymentData->type) {
$cash = '&CountryId=COL&ChannelId=CASH';
$session->set($transactionId.'[cruiser][retry]', 0);
return $this->redirect($safeTyPay['response'].$cash);
} else {
return $this->redirect($safeTyPay['response']);
}
} else {
$safetyData->x_booking = $array['x_booking'];
$safetyData->x_first_name = $array['x_first_name'];
$safetyData->x_last_name = $array['x_last_name'];
$safetyData->x_doc_num = $array['x_doc_num'];
$safetyData->x_reference = $array['x_reference'];
$safetyData->x_description = $array['x_description'];
$safetyData->x_total_amount = $array['x_total_amount'];
$safetyData->x_email = $array['x_email'];
$safetyData->x_address = $array['x_address'];
$safetyData->x_phone = $array['x_phone'];
$safetyData->x_type_description = $array['x_type_description'];
$safetyData->x_resultSafetyPay = $safeTyPay;
$mailInfo = print_r($safetyData, true).'<br>'.print_r($response, true);
$message = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($emailNotification)
->setSubject('Error Creación Token SafetyPay Cruise'.$safetyData->x_reference)
->setBody($mailInfo);
$mailer->send($message);
return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
}
} elseif ('cash' == $paymentData->type) {
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$agencyName = $agency->getOfficeId();
$orderInfo = json_decode($session->get($transactionId.'[cruiser][order]'));
$array['x_officeId'] = $agencyName;
$array['x_doc_num'] = $customer->getDocumentnumber();
$array['x_doc_type'] = $customer->getDocumentType()->getPaymentcode();
$array['x_first_name'] = $this->unaccent($customer->getFirstname());
$array['x_last_name'] = $this->unaccent($customer->getLastname());
$array['x_company'] = 'Aviatur';
$array['x_email'] = $customer->getEmail();
$array['x_address'] = $customer->getAddress();
$array['x_city'] = $customer->getCity()->getDescription();
$array['x_province'] = $customer->getCity()->getDescription();
$array['x_country'] = $customer->getCountry()->getDescription();
$array['x_phone'] = $customer->getPhone();
$array['x_mobile'] = $customer->getCellphone();
$array['x_payment_data'] = $paymentData->type;
$array['x_reference'] = $orderInfo->products;
$array['x_description'] = $infoDates['description'];
$array['x_booking'] = $orderProduct[0]->getBooking();
$array['x_total_amount'] = number_format(round((float) $x_total_amount), 0, '.', '');
$array['x_tax_amount'] = number_format(round((float) 0), 2, '.', '');
$array['x_devolution_base'] = number_format(round((float) 0), 2, '.', '');
$array['x_tip_amount'] = number_format(round(0), 0, '.', '');
$array['x_currency'] = 'COP';
$array['x_type_description'] = $orderProduct[0]->getDescription();
$fecha = $orderProduct[0]->getCreationDate()->format('Y-m-d H:i:s');
$fechalimite = $orderProduct[0]->getCreationDate()->format('Y-m-d 23:40:00');
$nuevafecha = strtotime('+2 hour', strtotime($fecha));
$fechavigencia = date('Y-m-d H:i:s', $nuevafecha);
if (strcmp($fechavigencia, $fechalimite) > 0) {
$fechavigencia = $fechalimite;
}
$array['x_fechavigencia'] = $fechavigencia;
$cashPay = $cashController->cashAction($logSave, $array);
if ('ok' == $cashPay->status) {
$session->set($transactionId.'[cruiser][cash_result]', json_encode($cashPay));
return $this->redirect($this->generateUrl('aviatur_cruise_reservation_success_secure'));
} else {
$toEmails = ['soportepagoelectronico@aviatur.com.co', 'soptepagelectronic@aviatur.com', $emailNotification];
$emissionData['x_booking'] = $array['x_booking'];
$emissionData['x_first_name'] = $array['x_first_name'];
$emissionData['x_last_name'] = $array['x_last_name'];
$emissionData['x_doc_num'] = $array['x_doc_num'];
$emissionData['x_reference'] = $array['x_reference'];
$emissionData['x_description'] = $array['x_description'];
$emissionData['x_total_amount'] = $array['x_total_amount'];
$emissionData['x_email'] = $array['x_email'];
$emissionData['x_address'] = $array['x_address'];
$emissionData['x_phone'] = $array['x_phone'];
$emissionData['x_type_description'] = $array['x_type_description'];
$emissionData['x_error'] = $cashPay->status;
$mailInfo = print_r($emissionData, true).'<br>'.print_r($cashPay, true);
$message = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($toEmails)
->setSubject('Error Creación Transacción Baloto'.$emissionData['x_reference'].' - '.$orderProduct[0]->getOrder()->getAgency()->getName())
->setBody($mailInfo);
$mailer->send($message);
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '', 'El tipo de pago es invalido'));
}
}
public function getEmissionData(SessionInterface $session, $transactionIdSessionName, $postData, $correlationId, $customer, $infoDates, Request $request)
{
$transactionId = $session->get($transactionIdSessionName);
$billingData = $postData->BD;
$passengerData = $postData->PI;
$contactData = $postData->ED;
$cruisedata = $postData->QD;
if (isset($postData->PD)) {
$paymentData = $postData->PD;
} else {
$paymentData = new \stdClass();
$paymentData->type = 'front';
}
if (false !== strpos($billingData->first_name, '***')) {
$billingData->first_name = $customer->getFirstname();
$billingData->last_name = $customer->getLastname();
$billingData->address = $customer->getAddress();
$billingData->doc_num = $customer->getDocumentnumber();
$billingData->phone = $customer->getPhone();
$billingData->email = $customer->getEmail();
}
if ($session->has('officeId')) {
$userFront = simplexml_load_string($session->get('front_user'));
$mailFront = (string) $userFront->CORREO_ELECTRONICO;
} else {
$mailFront = $customer->getEmail();
}
$emissionData = new \stdClass();
$dataIssuance = new \stdClass();
$dataIssuance->Session = $correlationId;
$dataIssuance->Description['ShipCode'] = $infoDates['shipCode'];
$dataIssuance->Description['DepartureDate'] = $infoDates['startDate'];
$dataIssuance->Description['CruiseLength'] = $infoDates['cruiseDuration'];
$dataIssuance->Description['PackageId'] = $infoDates['cruisePackageId'];
$dataIssuance->Description['Category'] = $infoDates['cabinGradeCategory'];
$dataIssuance->Description['CabinNo'] = $infoDates['cabinNumber'];
$dataIssuance->Description['Guests'] = $passengerData->person_count_1;
$dataIssuance->Contact['title'] = (null != $customer) ? (('335' == $customer->getGenderAviatur()->getCode()) ? 'Mr' : 'Mrs') : 'Mr';
if (strlen($billingData->first_name) > 14 || strlen($billingData->last_name) > 14) {
if ($billingData->doc_type = 'NT') {
$first_name = trim(substr($billingData->first_name, 0, 14));
$dataIssuance->Contact['firstname'] = $first_name;
if ('' != $billingData->last_name) {
$dataIssuance->Contact['lastname'] = trim(substr($billingData->last_name, 0, 14));
} else {
$dataIssuance->Contact['lastname'] = $first_name;
}
} else {
$dataIssuance->Contact['firstname'] = explode(' ', $billingData->first_name)[0];
$dataIssuance->Contact['lastname'] = explode(' ', $billingData->last_name)[0];
}
} else {
$dataIssuance->Contact['firstname'] = $billingData->first_name;
$dataIssuance->Contact['lastname'] = $billingData->last_name;
}
$dataIssuance->Contact['address1'] = $billingData->address ?? 'Av. 19 No. 4-62';
$dataIssuance->Contact['city'] = 'Bogota';
$dataIssuance->Contact['postcode'] = '571';
$dataIssuance->Contact['county'] = 'Colombia';
$dataIssuance->Contact['country'] = 'CO';
$dataIssuance->Contact['telephone'] = $billingData->phone;
$dataIssuance->Contact['email'] = $billingData->email ?? $mailFront;
$assigned_adult = 1;
for ($pass = 1; $pass <= $infoDates['adults'] + $infoDates['children']; ++$pass) {
$first_name = 'first_name_1_'.$pass;
$last_name = 'last_name_1_'.$pass;
$birthday = 'birthday_1_'.$pass;
$passanger_type = 'passanger_type_1_'.$pass;
$nationality = 'nationality_1_'.$pass;
$gender = 'gender_1_'.$pass;
$type = 'passanger_type_1_'.$pass;
$documentNumber = 'doc_num_1_'.$pass;
// $document_Expire = '';
//var_dump($dataIssuance);
//var_dump($dataIssuance->Passengers);
//var_dump($dataIssuance->Passengers->passenger);
//die;
$dataIssuance->Passengers = new \stdClass();
$dataIssuance->Passengers->passenger = [];
$dataIssuance->Passengers->passenger[$pass - 1]['paxno'] = $pass;
$dataIssuance->Passengers->passenger[$pass - 1]['paxtype'] = ($passengerData->$type == 'ADT') ? 'adult' : 'child';
$dataIssuance->Passengers->passenger[$pass - 1]['title'] = ($passengerData->$gender == '335') ? (($passengerData->$type == 'ADT') ? 'Mr' : 'Mr') : (($passengerData->$type == 'ADT') ? 'Mrs' : 'Miss');
$dataIssuance->Passengers->passenger[$pass - 1]['firstname'] = $passengerData->$first_name;
$dataIssuance->Passengers->passenger[$pass - 1]['lastname'] = $passengerData->$last_name;
$dataIssuance->Passengers->passenger[$pass - 1]['dob'] = $passengerData->$birthday;
if ($passengerData->$passanger_type == 'CHD') {
$dataIssuance->Passengers->passenger[$pass - 1]['travelling'] = (string) $assigned_adult++; // asociar un niño por adulto
}
$dataIssuance->Passengers->passenger[$pass - 1]['nationality'] = $passengerData->$nationality;
$dataIssuance->Passengers->passenger[$pass - 1]['passport'] = $passengerData->$documentNumber;
$dataIssuance->Passengers->passenger[$pass - 1]['ExpireDate'] = ''; // $passengerData->$document_Expire;
}
if (isset($cruisedata->cruiseDinningType)) {
$diningData = explode('-', $cruisedata->cruiseDinningType);
$dataIssuance->Dining['basketcode'] = $infoDates['reservationKey'];
if (isset($cruisedata->tablesizes)) {
$dataIssuance->Dining['tablesize'] = $cruisedata->tablesizes;
}
$dataIssuance->Dining['seating'] = $diningData[0];
}
$dataIssuance->Adapter = $session->get($transactionId.'[cruiser][provider]');
$emissionData->dataIssuance = $dataIssuance;
return $emissionData;
}
public function p2pCallbackAction(Request $request, SessionInterface $session, TokenStorageInterface $tokenStorage, AviaturMailer $aviaturMailer, TwigFolder $twigFolder, AviaturWebService $webService, AuthorizationCheckerInterface $authorizationChecker, ParameterBagInterface $parameterBag, \Swift_Mailer $mailer, Pdf $pdf, ExceptionLog $exceptionLog, ValidateSanctionsRenewal $validateSanctions, AviaturEncoder $aviaturEncoder, OrderController $orderController, AviaturErrorHandler $errorHandler, AviaturLogSave $logSave, PayoutExtraService $extraService, CustomerMethodPaymentService $methodPaymentService)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$aviaturPaymentRetryTimes = $parameterBag->get('aviatur_payment_retry_times');
$projectDir = $parameterBag->get('kernel.project_dir');
$em = $this->getDoctrine()->getManager();
$fullRequest = $request;
$request = $fullRequest->request;
$transactionId = $session->get($transactionIdSessionName);
if (true === $request->has('correlationID')) {
$correlationId = $request->get('correlationID');
} else {
$correlationId = $session->get($correlationIdSessionName);
}
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$orderProductCode = $session->get($transactionId.'[cruiser][order]');
$productId = str_replace('PN', '', json_decode($orderProductCode)->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$decodedRequest = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
$decodedResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
$jsonSendEmail = $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('send_email');
if (isset(json_decode($jsonSendEmail->getDescription())->email)) {
$email = json_decode($jsonSendEmail->getDescription())->email->CallBack;
}
$reference = str_replace('{"order":"', '', $orderProductCode);
$reference = str_replace('","products":"', '-', $reference);
$reference = str_replace('"}', '', $reference);
$references = $reference;
$bookings = $orderProduct->getBooking();
if (null != $decodedResponse) {
// $agency = $orderProduct->getOrder()->getAgency();
$agency = $orderProduct->getOrder()->getAgency();
$twig = '';
$additionalQS = '';
$retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
switch ($decodedResponse->x_response_code) {
case isset($decodedResponse->x_response_code_cyber) && (2 == $decodedResponse->x_response_code_cyber):
// rechazado cybersource
$parameters = $em->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findOneByName('aviatur_switch_rechazada_cyber');
if ($parameters) {
if (1 == $parameters->getValue()) {
if (1 == $decodedResponse->x_response_code) {
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
if (isset($postData->PD->cusPOptSelected)) {
if (isset($postData->PD->cusPOptSelectedStatus)) {
if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
$postData->PD->cusPOptSelectedStatus = 'ACTIVE';
$customerLogin = $tokenStorage->getToken()->getUser();
$methodPaymentService->setMethodsByCustomer($customerLogin, json_decode(json_encode($postData), true));
}
}
}
if (isset($postData->PD->savePaymProc)) {
$customerLogin = $tokenStorage->getToken()->getUser();
$methodPaymentService->setMethodsByCustomer($customerLogin, json_decode(json_encode($postData), true));
}
}
}
}
$infoDates = $session->get($transactionId.'[cruiser][infoTravel]');
$infoDates['rejectCyber'] = true;
// $this->sendShoppingCartInfo($request, $session, $twigFolder, $webService, $mailer, $exceptionLog, $transactionIdSessionName, $postData, $infoDates, json_decode($orderProductCode)->products);
$this->sendShoppingCartInfo($fullRequest, $session, $parameterBag, $twigFolder, $webService, $mailer, $exceptionLog, $transactionIdSessionName, $postData, $infoDates, json_decode($orderProductCode)->products);
$twig = 'aviatur_cruise_payment_rejected_secure';
// no break
case 3:// pendiente p2p
$twig = '' != $twig ? $twig : 'aviatur_cruise_payment_pending_secure';
$updateOrder = $orderController->updatePaymentAction($orderProduct);
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$retryCount = 1;
break;
case 0:// error p2p
$twig = 'aviatur_cruise_payment_error_secure'; // no existe?
if (isset($email)) {
$from = 'noreply@aviatur.com';
$error = $twig;
$subject = $orderProduct->getDescription().':Error en el proceso de pago de Aviatur';
$body = '</br>El proceso de pago a retornado un error </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
$aviaturMailer->sendEmailGeneral($from, $email, $subject, $body);
}
// no break
case 2:// rechazada p2p
$twig = '' != $twig ? $twig : 'aviatur_cruise_payment_rejected_secure';
$orderProduct->setResume('No reservation');
if (isset($email)) {
$from = 'noreply@aviatur.com';
$error = $twig;
$subject = $orderProduct->getDescription().':Transacción rechazada';
$body = '</br>El pago fue rechazado </br>Referencia: '.$references.'</br>Reserva:'.$bookings;
$aviaturMailer->sendEmailGeneral($from, $email, $subject, $body);
}
break;
case 1:// aprobado p2p
$decodedRequest->product_type = 'cruiser';
$decodedResponse->product_type = 'cruiser';
$encodedRequest = $aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey());
$encodedResponse = $aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey());
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
if (isset($postData->PD->cusPOptSelected)) {
if (isset($postData->PD->cusPOptSelectedStatus)) {
if ('NOTVERIFIED' == $postData->PD->cusPOptSelectedStatus) {
$postData->PD->cusPOptSelectedStatus = 'ACTIVE';
$customerLogin = $tokenStorage->getToken()->getUser();
$methodPaymentService->setMethodsByCustomer($customerLogin, json_decode(json_encode($postData), true));
}
}
}
if (isset($postData->PD->savePaymProc)) {
$customerLogin = $tokenStorage->getToken()->getUser();
$methodPaymentService->setMethodsByCustomer($customerLogin, json_decode(json_encode($postData), true));
}
$orderProduct->setPayrequest($encodedRequest);
$orderProduct->setPayresponse($encodedResponse);
$updateOrder = $orderController->updatePaymentAction($orderProduct);
$twig = 'aviatur_cruise_payment_success_secure';
if ('rappi' == $orderProduct->getOrder()->getAgency()->getAssetsFolder()) {
$additionalQS = '?bookingid='.$orderProduct->getBooking().'&total='.$decodedRequest->x_amount;
}
$orderController->updatePaymentAction($orderProduct, false, null);
// $response = $this->sendCruiseConfirmationAction($request ,$parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler);
$response = $this->sendCruiseConfirmationAction($fullRequest , $parameterBag, $aviaturEncoder,$twigFolder,$exceptionLog, $webService, $authorizationChecker, $mailer, $pdf,$logSave,$errorHandler);
$session->set($transactionId.'[cruiser][retry]', $aviaturPaymentRetryTimes);
if (isset($response['error'])) {
$orderProduct->setResume('Book_in_basket');
}
$em->persist($orderProduct);
$em->flush();
break;
}
$extraService->payoutExtrasCallback($twig, $transactionId, 'cruiser', $agency);
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
$urlResume = $this->generateUrl($twig);
$urlResume .= $additionalQS;
// ////// se envia el correo del modulo anti fraude en caso de ser necesario//////////
/*
if ($session->has('Marked_name') && $session->has('Marked_document')) {
$product = 'Cruceros';
$validateSanctions->sendMarkedEmail($orderProductCode, $session, $agency, $orderProduct, $transactionId, $product);
}
*/
/* Pero solo si hay condicionados (no bloqueados) y que paguen con Tarjeta */
if ($session->has('Marked_users')) {
$product = 'Cruceros';
$validateSanctions->sendMarkedEmail($orderProductCode, $session, $agency, $orderProduct, $transactionId, $product);
}
// //////////////////////////////////////////////////////////////////////////////////
return $this->redirect($urlResume);
} else {
$orderProduct->setStatus('pending');
$em->persist($orderProduct);
$em->flush();
return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '', 'No hay respuesta por parte del servicio de pago'));
}
}
public function pseCallbackAction(Request $request, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailer, Pdf $pdf, SessionInterface $session, PSEController $PSEController, AviaturLogSave $logSave, OrderController $orderController, AviaturErrorHandler $errorHandler, PayoutExtraService $extraService, $transaction)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$aviaturPaymentRetryTimes = $parameterBag->get('aviatur_payment_retry_times');
$status = null;
$twig = null;
$em = $this->getDoctrine()->getManager();
if ($session->has('agencyId')) {
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
} else {
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find(1);
}
$paymentMethod = $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethod::class)->findOneByCode('pse');
$paymentMethodAgency = $em->getRepository(\Aviatur\GeneralBundle\Entity\PaymentMethodAgency::class)->findOneBy(['agency' => $agency, 'paymentMethod' => $paymentMethod]);
$tranKey = $paymentMethodAgency->getTrankey();
$decodedUrl = json_decode($aviaturEncoder->AviaturDecode(base64_decode($transaction), $tranKey), true);
$transactionId = ($session->has($transactionIdSessionName)) ? $session->get($transactionIdSessionName) : null;
$orders = $decodedUrl['x_orders'];
if (isset($orders['cruiser'])) {
$cruiseOrders = explode('+', $orders['cruiser']);
$orderProductCode = $cruiseOrders[0];
$productId = $cruiseOrders[0];
$retryCount = 1;
} else {
return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontro identificador de la transacción'));
}
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
if (empty($orderProduct)) {
return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró orden asociada a este pago'));
} else {
if ('approved' == $orderProduct->getStatus()) {
return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró información de la transacción'));
} else {
$agency = $orderProduct->getOrder()->getAgency();
$decodedResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
if (isset($decodedResponse->createTransactionResult)) {
$pseTransactionId = $decodedResponse->createTransactionResult->transactionID;
$agency = $orderProduct->getOrder()->getAgency();
$paymentResponse = $PSEController->pseCallbackAction($pseTransactionId);
if (!isset($paymentResponse->error)) {
if (!$session->has($transactionId.'[cruiser][infoTravel]')) {
$message = 'Una vez el pago sea confirmado recibirá su confirmación de reserva, de no ser así comuníquese con nuestra central de reservas.';
return $this->redirect($errorHandler->errorRedirectNoEmail($twigFolder->pathWithLocale('aviatur_general_homepage'), 'Gracias por su compra', $message));
}
$decodedResponse->getTransactionInformationResult = $paymentResponse->getTransactionInformationResult;
$orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
if ('SUCCESS' == (string) $paymentResponse->getTransactionInformationResult->returnCode) {
switch ((string) $paymentResponse->getTransactionInformationResult->transactionState) {
case 'OK':
$twig = 'aviatur_cruise_payment_success_secure';
$status = 'approved';
break;
case 'PENDING':
$twig = 'aviatur_cruise_payment_pending_secure';
$status = 'pending';
break;
case 'NOT_AUTHORIZED':
$twig = 'aviatur_cruise_payment_error_secure';
$status = 'rejected';
break;
case 'FAILED':
$twig = 'aviatur_cruise_payment_error_secure';
$status = 'failed';
break;
}
$orderProduct->setStatus($status);
$orderProduct->getOrder()->setStatus($status);
$orderProduct->setUpdatingdate(new \DateTime());
$orderProduct->getOrder()->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
if ('approved' == $status) {
$orderController->updatePaymentAction($orderProduct, false, null);
$response = $this->sendCruiseConfirmationAction($request, $parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler, $transactionIdSessionName);
$session->set($transactionId.'[cruiser][retry]', $aviaturPaymentRetryTimes);
if (isset($response['error'])) {
$orderProduct->setResume('Book_in_basket');
}
$em->persist($orderProduct);
$em->flush();
}
} elseif ('FAIL_INVALIDTRAZABILITYCODE' == (string) $paymentResponse->getTransactionInformationResult->returnCode || 'FAIL_ACCESSDENIED' == $paymentResponse->getTransactionInformationResult->returnCode || 'FAIL_TIMEOUT' == $paymentResponse->getTransactionInformationResult->returnCode) {
echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
transacción <#CUS> .';
$orderProduct->setEmissiondata('error');
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$twig = 'aviatur_cruise_payment_error_secure';
}
$extraService->payoutExtrasCallback($twig, $transactionId, 'cruiser', $agency);
if ($session->has($transactionId.'[cruiser][retry]')) {
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
}
return $this->redirect($this->generateUrl($twig));
} else {
$decodedResponse->getTransactionInformationResult = $paymentResponse;
$orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'Ocurrió un error al consultar el estado de la transacción'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró información de la transacción'));
}
}
}
}
public function safetyCallbackOkAction(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailer, Pdf $pdf, OrderController $orderController, AviaturErrorHandler $errorHandler, PayoutExtraService $extraService, SafetypayController $safetypayController, AviaturLogSave $logSave)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$aviaturPaymentRetryTimes = $parameterBag->get('aviatur_payment_retry_times');
$status = null;
$twig = null;
$em = $this->getDoctrine()->getManager();
$safeTyPay = $safetypayController->safetyok();
if (true === $session->has($transactionIdSessionName)) {
$transactionId = $session->get($transactionIdSessionName);
if (true === $session->has($transactionId.'[cruiser][order]')) {
$orderProductCode = $session->get($transactionId.'[cruiser][order]');
$productId = str_replace('PN', '', json_decode($orderProductCode)->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$decodedRequest = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
$decodedResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
$payError = $decodedResponse->payResponse->OperationResponse->ErrorManager->ErrorNumber->{'@content'};
$notifyError = $decodedResponse->notificationResponse->OperationActivityNotifiedResponse->ErrorManager->ErrorNumber->{'@content'};
if (isset($decodedResponse->payResponse->OperationResponse)) {
$agency = $orderProduct->getOrder()->getAgency();
if (0 == $payError) {
$retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
if (0 == $notifyError) {
switch ($payError) {
case 0:
$twig = 'aviatur_cruise_payment_success_secure';
$status = 'approved';
break;
case 2:
$twig = 'aviatur_cruise_payment_error_secure';
$status = 'failed';
break;
}
$orderProduct->setStatus($status);
$orderProduct->getOrder()->setStatus($status);
$orderProduct->setUpdatingdate(new \DateTime());
$orderProduct->getOrder()->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$orderController->updatePaymentAction($orderProduct);
if (0 == $payError) {
if ('approved' == $status) {
$response = $this->sendCruiseConfirmationAction($request, $parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler, $transactionIdSessionName);
$session->set($transactionId.'[cruiser][retry]', $aviaturPaymentRetryTimes);
if (isset($response['error'])) {
$orderProduct->setResume('Book_in_basket');
// 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'));
}
$em->persist($orderProduct);
$em->flush();
}
}
} else {
echo 'En este momento su #<referencia de factura> presenta un proceso de pago cuya transacción se encuentra
PENDIENTE de recibir información por parte de su entidad financiera, por favor espere
unos minutos y vuelva a consultar mas tarde para verificar sí su pago fue confirmado de
forma exitosa. Si desea mayor información sobre el estado actual de su operación puede
comunicarse a nuestras líneas de atención al cliente al teléfono XXXXXX o enviar
inquietudes al email mispagos@micomercio.com y pregunte por el estado de la
transacción <#CUS> .';
$orderProduct->setEmissiondata('error');
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$twig = 'aviatur_cruise_payment_error_secure';
}
$extraService->payoutExtrasCallback($twig, $transactionId, 'cruiser', $agency);
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
return $this->redirect($this->generateUrl($twig));
} else {
$decodedResponse->payResponse->OperationResponse->ListOfOperations = $paymentResponse;
$orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey()));
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'Ocurrió un error al consultar el estado de la transacción'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró información de la transacción, por favor comuniquese con nosotros'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró orden asociada a este pago'));
}
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró identificador de la transacción'));
}
}
public function safetyCallbackErrorAction(SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, AviaturErrorHandler $errorHandler, TwigFolder $twigFolder)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$status = null;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
$retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
$orderProductCode = json_decode($session->get($transactionId.'[cruiser][order]'));
$productId = str_replace('PN', '', $orderProductCode->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$payResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey()));
$payRequest = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayRequest(), $orderProduct->getPublicKey()));
$orderProduct->setPayresponse($aviaturEncoder->AviaturEncode(json_encode($payResponse), $orderProduct->getPublicKey()));
if ('baloto' == $payRequest->dataTransf->x_payment_data) {
$status = 'pending';
$payResponse->dataTransf->x_response_code = 100;
$payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Pending';
} elseif ('safety' == $payRequest->dataTransf->x_payment_data) {
$status = 'rejected';
$payResponse->dataTransf->x_response_code = 100;
$payResponse->dataTransf->x_response_reason_text = (string) 'Transaction Expired';
}
$orderProduct->setStatus($status);
$orderProduct->setUpdatingdate(new \DateTime());
$orderProduct->getOrder()->setUpdatingdate(new \DateTime());
$order = $em->getRepository(\Aviatur\GeneralBundle\Entity\Order::class)->find($orderProduct->getOrder()->getId());
$order->setStatus($status);
$em->persist($order);
$em->persist($orderProduct);
$em->flush();
if (true === $session->has($transactionId.'[cruiser][order]')) {
$orderProductCode = $session->get($transactionId.'[cruiser][order]');
} else {
return $this->redirect($errorHandler->errorRedirect($twigFolder->pathWithLocale('aviatur_general_homepage'), '', 'No se encontró orden asociada a este pago'));
}
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
return $this->redirect($this->generateUrl('aviatur_cruise_payment_rejected_secure'));
}
public function worldCallbackAction(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AviaturLogSave $logSave, AuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailer, Pdf $pdf, AviaturErrorHandler $errorHandler, OrderController $orderController)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
$aviaturPaymentRetryTimes = $parameterBag->get('aviatur_payment_retry_times');
$em = $this->getDoctrine()->getManager();
$fullRequest = $request;
$request = $fullRequest->request;
$transactionId = $session->get($transactionIdSessionName);
if (true === $request->has('correlationID')) {
$correlationId = $request->get('correlationID');
} else {
$correlationId = $session->get($correlationIdSessionName);
}
$postData = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$orderProductCode = $session->get($transactionId.'[cruiser][order]');
$productId = str_replace('PN', '', json_decode($orderProductCode)->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$decodedRequest = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
$decodedResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
if (null != $decodedResponse) {
// $agency = $orderProduct->getOrder()->getAgency();
$twig = 'aviatur_cruise_payment_rejected_secure';
$retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
if (isset($decodedResponse->x_response_code_cyber) && (2 == $decodedResponse->x_response_code_cyber)) {
$decodedResponse->x_response_code_case = 99;
} else {
if (isset($decodedResponse->resultado->reply->orderStatus->payment->lastEvent)) {
$decodedResponse->x_response_code_case = (string) $decodedResponse->resultado->reply->orderStatus->payment->lastEvent;
} elseif (isset($decodedResponse->resultado->reply->orderStatusEvent->payment->lastEvent)) {
$decodedResponse->x_response_code_case = 'REFUSED';
} elseif (isset($decodedResponse->resultado->reply->error)) {
$decodedResponse->x_response_code_case = 'REFUSED';
}
}
switch ($decodedResponse->x_response_code_case) {
case 99:
$twig = 'aviatur_cruise_payment_rejected_secure';
break;
case 'ERROR':
$twig = 'aviatur_cruise_payment_error_secure';
// no break
case 'REFUSED': // rechazada
$twig = '' != $twig ? $twig : 'aviatur_cruise_payment_rejected_secure';
$orderProduct->setResume('No reservation');
break;
case 'AUTHORISED':// aprobado
$decodedRequest->product_type = 'cruiser';
$decodedResponse->product_type = 'cruiser';
$encodedRequest = $aviaturEncoder->AviaturEncode(json_encode($decodedRequest), $orderProduct->getPublicKey());
$encodedResponse = $aviaturEncoder->AviaturEncode(json_encode($decodedResponse), $orderProduct->getPublicKey());
$orderProduct->setPayrequest($encodedRequest);
$orderProduct->setPayresponse($encodedResponse);
$updateOrder = $orderController->updatePaymentAction($orderProduct);
$twig = 'aviatur_cruise_payment_success_secure';
$orderController->updatePaymentAction($orderProduct, false, null);
$response = $this->sendCruiseConfirmationAction( $request, $parameterBag, $aviaturEncoder, $twigFolder, $exceptionLog, $webService, $authorizationChecker, $mailer, $pdf, $logSave, $errorHandler);
$session->set($transactionId.'[cruiser][retry]', $aviaturPaymentRetryTimes);
if (isset($response['error'])) {
$orderProduct->setResume('Book_in_basket');
}
$em->persist($orderProduct);
$em->flush();
break;
default:
$twig = '' != $twig ? $twig : 'aviatur_cruise_payment_pending_secure';
$updateOrder = $orderController->updatePaymentAction($orderProduct);
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$retryCount = 1;
break;
}
$session->set($transactionId.'[cruiser][retry]', $retryCount - 1);
return $this->redirect($this->generateUrl($twig));
} else {
$orderProduct->setStatus('pending');
$em->persist($orderProduct);
$em->flush();
return $this->redirect($errorHandler->errorRedirect($this->generateUrl('aviatur_cruise_retry_secure'), '', 'No hay respuesta por parte del servicio de pago'));
}
}
public function paymentOutputAction(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, AviaturWebService $webService, TwigFolder $twigFolder, ExceptionLog $exceptionLog, \Swift_Mailer $mailer, Pdf $pdf)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$emailNotification = $parameterBag->get('email_notification');
$orderProduct = null;
$clientFranquice = [];
$paymentData = null;
$orderProductCode = null;
$paymentResume = [];
$customer = null;
$agency = null;
$em = $this->getDoctrine()->getManager();
$transactionId = $session->get($transactionIdSessionName);
$infoDates = $session->get($transactionId.'[cruiser][infoTravel]');
$detail_data_cruise = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$agencyFolder = $twigFolder->twigFlux();
$isFront = $session->has('officeId');
$finantial_rate = $session->get('[cruiser][finantial_rate]');
if (true != $infoDates['service_quotation'] && !isset($infoDates['web_quotation'])) {
$orderProductCode = json_decode($session->get($transactionId.'[cruiser][order]'));
$paymentData = $detail_data_cruise->BD;
$productId = str_replace('PN', '', $orderProductCode->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$agency = $orderProduct->getOrder()->getAgency();
}
if (!$isFront && (true == $infoDates['service_quotation'])) {
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume_quotation.html.twig');
$renderResumeView = [];
$orderProductResume = $this->render($urlResume, $renderResumeView);
} else {
if (!$isFront && !isset($infoDates['web_quotation'])) {
$opRequestInitial = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
$opRequest = $opRequestInitial->multi_transaction_hotel ?? $opRequestInitial;
$opResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayResponse(), $orderProduct->getPublicKey()));
if (isset($opResponse->x_franchise) && ('' != $opResponse->x_franchise)) {
$franquiceCode = str_replace(['CR_', 'RM_', 'CDNSA'], ['', '', 'CS'], $opResponse->x_franchise);
$clientFranquice = $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findOneByPaymentgatewaycode($franquiceCode);
} else {
$clientFranquice['description'] = 'error';
if (isset($opRequest->paymentMethod) && 'world' == $opRequest->paymentMethod) {
$clientFranquice['description'] = 'World Pay';
}
}
// $emailData = json_decode($orderProduct->getEmail(), true);
if ((null != $opRequest) && (null != $opResponse)) {
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($paymentData->id);
if (isset($opResponse->x_description)) {
$paymentResume = [
'transaction_state' => $opResponse->x_response_code,
'ta_transaction_state' => $opResponse->x_ta_response_code,
'id' => $orderProduct->getBooking(),
'id_context' => $opRequest->x_invoice_num,
'total_amount' => $opResponse->x_amount,
'total_amount_usd' => round((float) $opResponse->x_amount / $finantial_rate, 2),
'currency' => $opResponse->x_bank_currency,
'amount' => 0 != $opRequest->x_amount_base ? $opRequest->x_amount_base : $opResponse->x_amount,
'amount_usd' => 0 != $opRequest->x_amount_base ? round((float) $opRequest->x_amount_base / $finantial_rate, 2) : round((float) $opResponse->x_amount / $finantial_rate, 2),
'iva' => $opRequest->x_tax,
'iva_usd' => round((float) $opRequest->x_tax / $finantial_rate, 2),
'ip_address' => $opRequest->x_customer_ip,
'bank_name' => $opResponse->x_bank_name,
'client_franquice' => ['description' => (is_object($clientFranquice) ? $clientFranquice->getDescription() : $clientFranquice['description'])],
'cuotas' => $opRequest->x_differed,
'card_num' => '************'.substr($opRequest->x_card_num, strlen($opRequest->x_card_num) - 4),
'reference' => $opResponse->x_transaction_id,
'auth' => $opResponse->x_approval_code,
'transaction_date' => $opResponse->x_transaction_date,
'description' => $opResponse->x_description,
'reason_code' => $opResponse->x_response_reason_code,
'reason_description' => $opResponse->x_response_reason_text,
'client_names' => $opResponse->x_first_name.' '.$opResponse->x_last_name,
'client_email' => $opResponse->x_email,
'cabin_description' => $infoDates['cabinDescription'],
];
} elseif (isset($opRequest->dataTransf)) {
if (isset($opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'})) {
$state = $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
if (102 == $state) {
$state = 1;
$reason_description = 'SafetyPay recibe la confirmación del pago de un Banco Asociado';
} elseif (101 == $state) {
$state = 2;
$reason_description = 'Transacción creada';
}
$paymentResume = [
'transaction_state' => $state,
'id' => $orderProduct->getBooking(),
'currency' => $opRequest->dataTransf->x_currency,
'total_amount' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'},
'total_amount_usd' => round((float) $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'} / $finantial_rate, 2),
'amount' => null,
'amount_usd' => 0,
'iva' => null,
'iva_usd' => null,
'ip_address' => $opRequest->dataTransf->dirIp,
'airport_tax' => null,
'reference' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:MerchantSalesID'},
'auth' => $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationID'},
'transaction_date' => $opResponse->payResponse->OperationResponse->ResponseDateTime,
'description' => $opRequest->dataTransf->x_description,
'reason_code' => $opRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'},
'reason_description' => $reason_description,
'client_names' => $opRequest->dataTransf->x_first_name.' '.$opRequest->dataTransf->x_last_name,
'client_email' => $opRequest->dataTransf->x_email,
'x_payment_data' => $opRequest->dataTransf->x_payment_data,
'client_franquice' => ['description' => 'SafetyPay'],
'id_context' => $orderProductCode->order.'-'.$orderProductCode->products,
'cabin_description' => $infoDates['cabinDescription'],
];
} else {
$paymentResume = [
'transaction_state' => 2,
'id' => $orderProduct->getBooking(),
'currency' => $opRequest->dataTransf->x_currency,
'total_amount' => $opRequest->dataTransf->x_total_amount,
'total_amount_usd' => round((float) $opRequest->dataTransf->x_total_amount / $finantial_rate, 2),
'amount' => null,
'amount_usd' => 0,
'iva' => null,
'iva_usd' => null,
'ip_address' => $opRequest->dataTransf->dirIp,
'airport_tax' => null,
'reference' => $opRequest->dataTransf->x_reference,
'auth' => null,
'transaction_date' => $opRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:RequestDateTime'},
'description' => $opRequest->dataTransf->x_description,
'reason_code' => 101,
'reason_description' => 'Transacción creada',
'x_payment_data' => $opRequest->dataTransf->x_payment_data,
'client_names' => $opRequest->dataTransf->x_first_name.' '.$opRequest->dataTransf->x_last_name,
'client_email' => $opRequest->dataTransf->x_email,
'cabin_description' => $infoDates['cabinDescription'],
];
}
if ('baloto' == $opRequest->dataTransf->x_payment_data) {
$paymentResume['transaction_state'] = 3;
}
} elseif (isset($opRequest->infoCash)) {
$paymentResume = [
'transaction_state' => 2,
'id' => $orderProduct->getBooking(),
'id_booking' => $opRequest->infoCash->x_booking,
'id_context' => $opRequest->infoCash->x_reference,
'currency' => $opRequest->infoCash->x_currency,
'total_amount' => $opRequest->infoCash->x_total_amount,
'total_amount_usd' => round((float) $opRequest->infoCash->x_total_amount / $finantial_rate, 2),
'client_franquice' => ['description' => 'Efectivo'],
'amount' => null,
'amount_usd' => 0,
'iva' => null,
'iva_usd' => null,
'ip_address' => $opRequest->infoCash->dirIp,
'airport_tax' => null,
'reference' => $opRequest->infoCash->x_reference,
'auth' => null,
'transaction_date' => $opRequest->infoCash->x_fechavigencia,
'description' => $opRequest->infoCash->x_description,
'reason_code' => 101,
'reason_description' => 'Transacción creada',
'client_names' => $opRequest->infoCash->x_first_name.' '.$opRequest->infoCash->x_last_name,
'client_email' => $opRequest->infoCash->x_email,
'fecha_vigencia' => $opRequest->infoCash->x_fechavigencia,
'cabin_description' => $infoDates['cabinDescription'],
];
$cash_result = json_decode($session->get($transactionId.'[cruiser][cash_result]'));
$paymentResume['transaction_state'] = 3;
if ('' == $cash_result) {
$paymentResume['transaction_state'] = 2;
}
} else {
$bank_info = $em->getRepository(\Aviatur\PaymentBundle\Entity\PseBank::class)->findOneByCode($opRequest->bankCode);
$bank_name = $bank_info->getName();
$clientFranquice['description'] = 'PSE';
$paymentResume = [
'transaction_state' => $opResponse->getTransactionInformationResult->responseCode,
'id' => $orderProduct->getBooking(),
'id_context' => $opRequest->reference,
'currency' => $opRequest->currency,
'total_amount' => $opRequest->totalAmount,
'total_amount_usd' => round((float) $opRequest->totalAmount / $finantial_rate, 2),
'amount' => 0 != $opRequest->devolutionBase ? $opRequest->devolutionBase : $opRequest->totalAmount,
'amount_usd' => 0 != $opRequest->devolutionBase ? round((float) $opRequest->devolutionBase / $finantial_rate, 2) : round((float) $opRequest->totalAmount / $finantial_rate, 2),
'iva' => $opRequest->taxAmount,
'iva_usd' => round((float) $opRequest->taxAmount / $finantial_rate, 2),
'ip_address' => $opRequest->ipAddress,
'bank_name' => $bank_name,
'client_franquice' => $clientFranquice,
'reference' => $opResponse->createTransactionResult->transactionID,
'auth' => $opResponse->getTransactionInformationResult->trazabilityCode,
'transaction_date' => $opResponse->getTransactionInformationResult->bankProcessDate,
'description' => $opRequest->description,
'reason_code' => $opResponse->getTransactionInformationResult->responseReasonCode,
'reason_description' => $opResponse->getTransactionInformationResult->responseReasonText,
'client_names' => $opRequest->payer->firstName.' '.$opRequest->payer->lastName,
'client_email' => $opRequest->payer->emailAddress,
'cabin_description' => $infoDates['cabinDescription'],
];
}
} else {
$customer = null;
$paymentResume['id'] = $orderProduct->getBooking();
}
$paymentResume['transaction_state_cyber'] = $opResponse->x_response_code_cyber ?? '1';
}
if (true != $infoDates['service_quotation'] && !isset($infoDates['web_quotation'])) {
if (false !== strpos($paymentData->first_name, '***')) {
$facturationResume = [
'customer_names' => $customer->getFirstname().' '.$customer->getLastname(),
'customer_address' => $customer->getAddress(),
'customer_doc_num' => $customer->getDocumentnumber(),
'customer_phone' => $customer->getPhone(),
'customer_email' => $customer->getEmail(),
];
} else {
$facturationResume = [
'customer_names' => $paymentData->first_name.' '.$paymentData->last_name,
'customer_address' => $paymentData->address ?? null,
'customer_doc_num' => $paymentData->doc_num,
'customer_phone' => $paymentData->phone,
'customer_email' => $paymentData->email ?? null,
];
}
if (false !== strpos($detail_data_cruise->PI->first_name_1_1, '***')) {
$detail_data_cruise->PI->first_name_1_1 = $customer->getFirstname();
$detail_data_cruise->PI->last_name_1_1 = $customer->getLastname();
$detail_data_cruise->PI->email_1_1 = $customer->getEmail();
$detail_data_cruise->PI->address_1_1 = $customer->getAddress();
$detail_data_cruise->CD->phone = $customer->getPhone();
}
$clientFranquice = '';
$retryCount = (int) $session->get($transactionId.'[cruiser][retry]');
$emailData = [
'retry_count' => $retryCount,
'product' => $infoDates['vendorName'].' - '.$infoDates['cruiseName'],
'barco' => $infoDates['shipName'],
'order' => $orderProductCode->order,
'products' => $orderProductCode->products,
'Name' => $infoDates['description'],
'info_travelers' => (array) $detail_data_cruise->PI,
'contact_phone' => $detail_data_cruise->CD->phone,
'transactionID' => $transactionId,
'infoClient' => $facturationResume,
'dateEntry' => $infoDates['startDate'],
'dateEnd' => $infoDates['endDate'],
'total_amount' => $infoDates['cabinTypePrice'],
];
if (isset($infoDates['bookReservation'])) {
$emailData['bookReservation'] = $infoDates['bookReservation'];
}
if ($session->has($transactionId.'[cruiser][cash_result]')) {
$emailData['cash_result'] = json_decode($session->get($transactionId.'[cruiser][cash_result]'), true);
}
$voucherFile = $projectDir.'/app/serviceLogs/CashTransaction/ON'.$emailData['products'].'_'.$transactionId.'.pdf';
if (file_exists($voucherFile)) {
$emailData['NameArchive'] = 'ON'.$emailData['products'].'_'.$transactionId.'.pdf';
}
if (!$isFront) {
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume.html.twig');
} else {
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume_front.html.twig');
}
$renderResumeView = $emailData;
if (isset($paymentResume)) {
$renderResumeView['infos'][0] = ['paymentResume' => $paymentResume];
} elseif ($isFront) {
$renderResumeView['infos'][0] = ['paymentResume' => ['total_amount' => $detail_data_cruise->QD->cruiseTotalPaymentCOP]];
}
$renderResumeView['infos'][0]['agencyData']['agency_phone'] = $orderProduct->getOrder()->getAgency()->getPhone();
$renderResumeView['infos'][0]['agencyData']['agency_email'] = $orderProduct->getOrder()->getAgency()->getMailContact();
if ($session->has($transactionId.'[cruiser][cash_result]') && !$session->has($transactionId.'[emission_baloto_email]')) {
$configCruiserAgency = $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
$toMails = explode(';', $configCruiserAgency->getMailsWeb());
$toMails[] = 'soportepagoelectronico@aviatur.com.co';
$toMails[] = 'soptepagelectronic@aviatur.com';
$toMails[] = $emailNotification;
$toMails[] = $agency->getMailContact();
$renderResumeView['exportPDF'] = true;
$ruta = '@AviaturTwig/'.$agencyFolder.'/General/Templates/email_cash.html.twig';
if (!file_exists($voucherFile)) {
$pdf->generateFromHtml($this->renderView($twigFolder->twigExists($ruta), $renderResumeView), $voucherFile);
$renderResumeView['NameArchive'] = 'ON'.$renderResumeView['products'].'_'.$transactionId.'.pdf';
}
$clientEmail = $renderResumeView['infos'][0]['paymentResume']['client_email'];
$renderResumeView['exportPDF'] = false;
$message = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($clientEmail)
->setBcc($toMails)
->setSubject('Transacción Efectivo Creada '.$renderResumeView['order'].' - '.$agency->getName())
->attach(\Swift_Attachment::fromPath($voucherFile))
->setBody(
$this->renderView($twigFolder->twigExists($ruta), $renderResumeView)
);
try {
$mailer->send($message);
$session->set($transactionId.'[emission_baloto_email]', 'emailed');
// send info to cruise departament
$this->sendShoppingCartInfo($request, $session, $parameterBag, $twigFolder, $webService, $mailer, $exceptionLog, $transactionIdSessionName, $detail_data_cruise, $infoDates, $orderProductCode->products);
} catch (Exception $ex) {
$exceptionLog->log(var_dump($message), $ex);
}
}
$orderProductResume = $this->render($urlResume, $renderResumeView);
if (isset($infoDates['bookReservation'])) {
$orderProduct->setResume($orderProductResume);
$em->persist($orderProduct);
$em->flush();
}
} else {
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/resume_quotation.html.twig');
$renderResumeView = [];
$orderProductResume = $this->render($urlResume, $renderResumeView);
}
}
return $orderProductResume;
}
public function addCabinShoppingCart(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, AviaturWebService $webService, AviaturErrorHandler $errorHandler)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$correlationIdSessionName = $parameterBag->get('correlation_id_session_name');
// $em = $this->getDoctrine()->getManager();
$fullRequest = $request;
$oldFullRequest = $this->get('request_stack')->getCurrentRequest();
// $fullRequest->attributes->get('_route') = aviatur_cruise_cabin_reservation_secure
$requestUrl = $this->generateUrl($oldFullRequest->attributes->get('_route'), $oldFullRequest->attributes->get('_route_params'));
$transactionId = $session->get($transactionIdSessionName);
$infoTravel = $session->get($transactionId.'[cruiser][infoTravel]');
$correlationId = $session->get($correlationIdSessionName);
if ($session->has($transactionId.'[cruiser][provider]')) {
$providerId = $session->get($transactionId.'[cruiser][provider]');
} elseif ($fullRequest->request->has('providerID')) {
$providerId = $fullRequest->request->get('providerID');
$session->set($transactionId.'[cruiser][provider]', $providerId);
}
$cruiseModel = new CruiseModel();
$templateXml = $cruiseModel->getXmlCabinShoppingCart();
$xmlRequest = $templateXml[0];
$variables = [];
$variables['transactionId'] = $transactionId;
$variables['ProviderId'] = $providerId;
$variables['correlationId'] = $correlationId;
$variables['cabinNumber'] = $variables['groupCode'] = $infoTravel['cabinGroupCode'];
$variables['fareCode'] = $infoTravel['cabinFareCode'];
$variables['cabinNumber'] = $infoTravel['cabinCategoryCode'];
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseReserve', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, false, $variables['transactionId']);
if (isset($response['error'])) {
$response = $webService->callWebServiceAmadeus('SERVICIO_MPT', 'CruiseReserve', 'dummy|http://www.aviatur.com.co/dummy/', $xmlRequest, $variables, false, $variables['transactionId']);
if (isset($response['error'])) {
$errorHandler->errorRedirect($requestUrl, 'Error reserva del crucero', $response['error']);
return $response;
}
} elseif (!isset($response->Message->OTACruiseCabinAvailRS)) {
$errorHandler->errorRedirect($requestUrl, 'Respuesta vacia del proveedor de servicios', $response->Message);
return ['error' => 'Respuesta vacia del proveedor de servicios'];
} else {
$session->set($transactionId.'[cruiser][CabinAvailResponse]', $response->asXML());
$breakdown = $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->breakdown; // Toca controlar por que a veces no llega
$detailBreakdown = [];
foreach ($breakdown->item as $item) {
$detailBreakdown[(string) $item['description']] = $item;
}
$discountTotalCost = isset($detailBreakdown['Discount']) ? (float) $detailBreakdown['Discount']['totalcost'] : '0';
$baseAmount = (float) $detailBreakdown['Cruise Fare']['totalcost'] + $discountTotalCost;
$discountMiscellaneous = '0';
if (isset($detailBreakdown['Non-Commissionable Fare Discount'])) {
$discountMiscellaneous = (float) $detailBreakdown['Non-Commissionable Fare Discount']['totalcost'];
}
$finantial_rate = $session->get('[cruiser][finantial_rate]');
$infoTravel['cabinAmmountBase'] = $baseAmount;
$infoTravel['cabinAmmountFees'] = (int) $infoTravel['cabinAmmountFees'] + $discountMiscellaneous;
$infoTravel['cabinAmmountNccf'] += $discountMiscellaneous;
$infoTravel['cabinAmmountBaseCOP'] = round((float) $baseAmount * $finantial_rate);
$infoTravel['cabinAmmountFeesCOP'] = round((float) $infoTravel['cabinAmmountFees'] * $finantial_rate);
$infoTravel['cabinAmmountNccfCOP'] = round((float) $infoTravel['cabinAmmountNccf'] * $finantial_rate);
$infoTravel['cabinGradeCategory'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail->cabin['cabingrade'];
$infoTravel['cruiseDuration'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['nights'];
$infoTravel['cruisePackageId'] = (string) $response->Message->OTACruiseCabinAvailRS->TPA_Extensions->basketitem->itemdetail['codetocruiseid'];
$session->set($transactionId.'[cruiser][infoTravel]', $infoTravel);
}
return $response;
}
public function sendShoppingCartInfo(Request $request, SessionInterface $session, ParameterBagInterface $parameterBag, TwigFolder $twigFolder, AviaturWebService $webService, \Swift_Mailer $mailer, ExceptionLog $exceptionLog, $detail_data_cruise, $infoDates, $productId)
{
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$fullRequest = $request;
$em = $this->getDoctrine()->getManager();
$transactionID = $session->get($transactionIdSessionName);
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$agencyFolder = $twigFolder->twigFlux();
$passengersDetail = $detail_data_cruise->PI;
$clientInformation = $detail_data_cruise->BD;
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
if (false !== strpos($clientInformation->first_name, '***')) {
$clientInformation->first_name = $customer->getFirstname();
$clientInformation->last_name = $customer->getLastname();
$clientInformation->address = $customer->getAddress();
$clientInformation->phone = $customer->getPhone();
$clientInformation->email = $customer->getEmail();
}
if (false !== strpos($passengersDetail->first_name_1_1, '***')) {
$passengersDetail->first_name_1_1 = $customer->getFirstname();
$passengersDetail->last_name_1_1 = $customer->getLastname();
$passengersDetail->email_1_1 = $customer->getEmail();
}
$passengersDetail = (array) $passengersDetail;
$clientInformation = (array) $clientInformation;
// $updatingdate = new \DateTime();
// $updatingdate->add(new \DateInterval('PT2H30M'));
// $timelimit = $updatingdate->format('Y-m-d H:i:s');
$dataRequested = [
'Reservation_code' => $infoDates['bookReservation'],
'Provider_code' => $infoDates['travelTekId'],
'Product' => $productId,
'Nombre_crucero' => $infoDates['cruiseName'],
'Naviera' => $infoDates['vendorName'],
'Nombre_barco' => $infoDates['shipName'],
'Fecha_embarque' => $infoDates['startDate'],
'Fecha_regreso' => $infoDates['endDate'],
'Numero_cabina' => $infoDates['cabinNumber'],
'Adultos' => $infoDates['adults'],
'Ninos' => $infoDates['children'],
'Pago_crucero' => $detail_data_cruise->QD,
'Cliente' => $clientInformation,
'Pasajeros' => $passengersDetail,
// 'time_limit' => $timelimit
];
$configCruiserAgency = $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
$toCruiserDep = explode(';', $configCruiserAgency->getMailsWeb());
$bccMails = ['andrei.sotelo@aviatur.com'];
if ($session->has('front_user')) {
$userFront = simplexml_load_string($session->get('front_user'));
$toMails = (string) $userFront->CORREO_ELECTRONICO;
$bccMails = array_merge($bccMails, $toCruiserDep);
$subject = 'Solicitud reserva de crucero - Front del Asesor';
} else {
$bccMails[] = 'soportepagoelectronico@aviatur.com.co';
$bccMails[] = 'soptepagelectronic@aviatur.com';
$bccMails[] = $agency->getMailContact();
$toMails = $toCruiserDep;
$subject = 'Solicitud Crucero Pago Baloto - Generado '.$agency->getName();
if (isset($infoDates['rejectCyber'])) {
$subject = 'Solicitud Crucero Pago TC Generado - Rechazo Cybersource '.$agency->getName();
$dataRequested['rejectCyber'] = true;
$bccMails[] = 'controlpagoelectronico@aviatur.com';
}
}
if ($session->has('front_user')) {
$productId = str_replace('PN', '', $productId);
$orderProductEntity = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$orderXml = $orderProductEntity->getAddProductData();
try {
$responseOrder = $webService->busWebServiceAmadeus(null, null, $orderXml);
} catch (\Exception $e) {
}
}
$mailCash = '@AviaturTwig/'.$agencyFolder.'/Cruise/Default/cash_generated_cruise.html.twig';
$message2 = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($toMails)
->setBcc($bccMails)
->setSubject($subject)
->setBody($this->renderView($twigFolder->twigExists($mailCash), $dataRequested));
try {
$mailer->send($message2);
} catch (Exception $ex) {
$exceptionLog->log(var_dump($message2), $ex);
}
}
public function sendCruiseConfirmationAction(Request $request, ParameterBagInterface $parameterBag, AviaturEncoder $aviaturEncoder, TwigFolder $twigFolder, ExceptionLog $exceptionLog, AviaturWebService $webService, AuthorizationCheckerInterface $authorizationChecker, \Swift_Mailer $mailer, Pdf $pdf, AviaturLogSave $logSave, AviaturErrorHandler $errorHandler)
{
$projectDir = $parameterBag->get('kernel.project_dir');
$transactionIdSessionName = $parameterBag->get('transaction_id_session_name');
$codImg = null;
$additionalUserFront = null;
$orderProduct = null;
$customer = null;
$urltmp = null;
$nameImg = null;
$fullRequest = $request;
$session = $fullRequest->getSession();
$em = $this->getDoctrine()->getManager();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
$transactionId = $session->get($transactionIdSessionName);
$agencyFolder = $twigFolder->twigFlux();
$infoTravel = $session->get($transactionId.'[cruiser][infoTravel]');
$detail_data_cruise = json_decode($session->get($transactionId.'[cruiser][detail_data_cruise]'));
$clientInformation = $detail_data_cruise->BD;
$infoTransaction = [];
$orderProductCode = $session->get($transactionId.'[cruiser][order]');
if ($session->has('front_user')) {
$additionalUserFront = simplexml_load_string($session->get('front_user_additionals'));
if ('N' == $additionalUserFront->INDICA_SUCURSAL_ADMINISTRADA) {
$codImg = $additionalUserFront->EMPRESA;
} elseif ('S' == $additionalUserFront->INDICA_SUCURSAL_ADMINISTRADA) {
$codImg = $additionalUserFront->CODIGO_SUCURSAL_SEVEN;
} else {
$codImg = 'noimg';
}
}
if (true == $infoTravel['service_quotation']) {
$infoAdults = $infoChildren = [];
} else {
if (!isset($infoTravel['web_quotation'])) {
$productId = str_replace('PN', '', json_decode($orderProductCode)->products);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$decodedRequest = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayrequest(), $orderProduct->getPublicKey()));
$decodedResponse = json_decode($aviaturEncoder->AviaturDecode($orderProduct->getPayresponse(), $orderProduct->getPublicKey()));
if (isset($decodedResponse->dataTransf)) {
if (isset($decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'})) {
$state = $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
$infoTransaction['x_invoice_num'] = $decodedRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:MerchantSalesID'};
$infoTransaction['x_approval_code'] = $decodedResponse->payResponse->OperationResponse->ListOfOperations->Operation->PaymentReferenceNo;
$infoTransaction['x_response_reason_code'] = $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationStatus'};
$infoTransaction['x_response_reason_text'] = 'Transacción creada';
$infoTransaction['x_transaction_id'] = $decodedRequest->notificationRequest->{'urn:OperationActivityNotifiedRequest'}->{'urn:ListOfOperationsActivityNotified'}->{'urn1:ConfirmOperation'}->{'urn1:OperationID'};
$infoTransaction['x_amount'] = $decodedRequest->tokenRequest->{'urn:ExpressTokenRequest'}->{'urn:Amount'};
} else {
$infoTransaction['x_invoice_num'] = $decodedRequest->dataTransf->x_reference;
$infoTransaction['x_approval_code'] = null;
$infoTransaction['x_response_reason_code'] = 101;
$infoTransaction['x_response_reason_text'] = 'Transacción creada*';
$infoTransaction['x_transaction_id'] = '';
$infoTransaction['x_amount'] = null;
}
} elseif (isset($decodedResponse->createTransactionResult)) {
$infoTransaction['x_invoice_num'] = $decodedRequest->reference;
$infoTransaction['x_approval_code'] = $decodedResponse->getTransactionInformationResult->trazabilityCode;
$infoTransaction['x_response_reason_code'] = $decodedResponse->getTransactionInformationResult->responseReasonCode;
$infoTransaction['x_response_reason_text'] = $decodedResponse->getTransactionInformationResult->responseReasonText;
$infoTransaction['x_transaction_id'] = $decodedResponse->createTransactionResult->transactionID;
$infoTransaction['x_amount'] = $decodedRequest->totalAmount;
} else {
$infoTransaction = $decodedResponse;
if (isset($decodedRequest->paymentMethod) && 'world' == $decodedRequest->paymentMethod) {
$infoTransaction->x_invoice_num = $decodedRequest->x_invoice_num ?? '';
}
}
}
$passengersDetail = $detail_data_cruise->PI;
$customer = $em->getRepository(\Aviatur\CustomerBundle\Entity\Customer::class)->find($detail_data_cruise->BD->id);
if (false !== strpos($clientInformation->first_name, '***')) {
$clientInformation->first_name = $customer->getFirstname();
$clientInformation->last_name = $customer->getLastname();
$clientInformation->address = $customer->getAddress();
$clientInformation->phone = $customer->getPhone();
$clientInformation->email = $customer->getEmail();
}
if (false !== strpos($passengersDetail->first_name_1_1, '***')) {
$passengersDetail->first_name_1_1 = $customer->getFirstname();
$passengersDetail->last_name_1_1 = $customer->getLastname();
$passengersDetail->email_1_1 = $customer->getEmail();
}
$passengersDetail = (array) $passengersDetail;
$TotalADT = $infoTravel['adults'];
$TotalCHD = $infoTravel['children'];
$infoAdults = [];
$infoChildren = [];
$indexADT = 0;
$indexCHD = 0;
for ($i = 1; $i <= ($TotalADT + $TotalCHD); ++$i) {
if (335 == $passengersDetail['gender_1_'.$i]) {
$type = 'M';
} else {
$type = 'F';
}
if ('ADT' == $passengersDetail['passanger_type_1_'.$i]) {
$infoAdults[$indexADT] = [
'Type' => $type,
'First_name' => $passengersDetail['first_name_1_'.$i],
'First_last_name' => $passengersDetail['last_name_1_'.$i],
'Document_type' => $passengersDetail['doc_type_1_'.$i],
'Document_id' => $passengersDetail['doc_type_1_'.$i],
'Document_number' => $passengersDetail['doc_num_1_'.$i],
'birthday' => $passengersDetail['birthday_1_'.$i],
];
++$indexADT;
} else {
$infoChildren[$indexCHD] = [
'Type' => $type,
'First_name' => $passengersDetail['first_name_1_'.$i],
'First_last_name' => $passengersDetail['last_name_1_'.$i],
'Document_type' => $passengersDetail['doc_type_1_'.$i],
'Document_id' => $passengersDetail['doc_type_1_'.$i],
'Document_number' => $passengersDetail['doc_num_1_'.$i],
'birthday' => $passengersDetail['birthday_1_'.$i],
];
++$indexCHD;
}
}
}
$template_pdf = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email_pdf.html.twig');
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email.html.twig');
$emailData = [
'infoTravel' => $infoTravel,
'cruisePayData' => $detail_data_cruise->QD,
'infoAdults' => $infoAdults,
'infoChildren' => $infoChildren,
'agencyData' => [
'agency_name' => $agency->getName(),
'agency_nit' => $agency->getNit(),
'agency_phone' => $agency->getPhone(),
'agency_email' => $agency->getMailContact(),
'agency_address' => $agency->getAddress(),
'agency_domain' => $agency->getDomain(),
],
'clientInformation' => $clientInformation,
'cruiseDetailItinerary' => json_decode($infoTravel['cruiseDetailItinerary'], true),
'galeryResume' => json_decode($infoTravel['galeryResume'], true),
'infoTransaction' => $infoTransaction,
];
if ($session->has('front_user')) {
if ('noimg' != $codImg) {
$imgAgency = 'assets/common_assets/img/offices/'.$codImg.'.png';
if (file_exists($imgAgency)) {
$emailData['codImg'] = $codImg;
}
}
} else {
$agencyName = ['aviatur', 'octopus', 'union_representaciones', 'mayatur_colombia'];
$codImg = (array_search((string) explode(':', $agencyFolder)[0], $agencyName)) ? (int) explode('-', (string) $agency->getOfficeid())[0] : explode('-', (string) $agency->getOfficeid())[1];
$imgAgency = 'assets/common_assets/img/offices/'.$codImg.'.png';
if (file_exists($imgAgency)) {
$emailData['codImg'] = $codImg;
}
}
$configCruiserAgency = $em->getRepository(\Aviatur\CruiserBundle\Entity\ConfigCruiserAgency::class)->findOneByAgency($agency);
$bccMails = explode(';', $configCruiserAgency->getMailsWeb());
if ($session->has('front_user')) {
$toMails = $additionalUserFront->CORREO_ELECTRONICO;
$subject = true != $infoTravel['service_quotation'] ? 'Solicitud reserva de crucero - Front del Asesor' : 'Cotización de Crucero - Front del Asesor';
$InfoAgentContact = [
'agentName' => $additionalUserFront->NOMBRE_USUARIO.' '.$additionalUserFront->APELLIDOS_USUARIO,
'agentMail' => $additionalUserFront->CORREO_ELECTRONICO,
'agentPhone' => $additionalUserFront->TELEFONO_SUCURSAL,
'agentAddress' => $additionalUserFront->DIRECCION_SUCURSAL,
];
} else {
$InfoAgentContact = [
'agentName' => $agency->getName(),
'agentMail' => $agency->getMailContact(),
'agentPhone' => $agency->getPhone(),
'agentAddress' => $agency->getAddress(),
];
$toMails = $clientInformation->email;
$bccMails[] = 'supervisorescallcenter@aviatur.com';
$intention = '';
if (true != $infoTravel['service_quotation'] && !isset($infoTravel['web_quotation'])) {
$intention = 'Reserva';
} elseif (isset($infoTravel['web_quotation']) || $infoTravel['service_quotation']) {
$intention = 'Solicitud';
}
if ($session->has('whitemark')) {
$subject = $intention.' de Crucero Creada - '.$session->get('whitemarkName');
} else {
$subject = $intention.' de Crucero Creada - '.$agency->getName();
}
}
$emailData['agentContact'] = $InfoAgentContact;
if (true != $infoTravel['service_quotation'] && !isset($infoTravel['web_quotation'])) {
if (isset($infoTravel['bookReservation'])) {
$orderProduct->setUpdatepaymentdata(str_replace('{cruise_book_id}', $infoTravel['bookReservation'], $orderProduct->getUpdatepaymentdata()));
$em->persist($orderProduct);
} else {
$infoTravel['bookReservation'] = 'PN'.$orderProduct->getId();
$orderProduct->setUpdatepaymentdata(str_replace('{cruise_book_id}', 'PN'.$orderProduct->getId(), $orderProduct->getUpdatepaymentdata()));
$em->persist($orderProduct);
}
$orderProduct->setEmail(json_encode($emailData));
$em->persist($orderProduct);
$em->flush();
if ($session->has('operatorId')) {
$orderXml = $orderProduct->getAddProductData();
try {
$responseOrder = $webService->busWebServiceAmadeus(null, null, $orderXml);
} catch (\Exception $e) {
}
}
/* * *
* Agente Octopus
* Cambiar logo Correo Gracias por tu compra.
*/
$isAgent = false;
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$isAgent = true;
$agent = $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
$idAgentLogo = $agent->getId();
$folderImg = 'assets/octopus_assets/img/custom/logoAgent/'.$idAgentLogo.'.png';
$domain = 'https://'.$agency->getDomain();
$folderLogoAgent = $domain.'/'.$folderImg;
if (file_exists($folderImg)) {
$emailData['imgLogoAgent'] = $folderLogoAgent;
}
}
}
/*
* Email de la reserva del agente hijo enviado al agente Padre Octopus.
*/
if ($authorizationChecker->isGranted('ROLE_AVIATUR_ADMIN_ADMIN_AGENT_OPERATOR')) {
$user = $this->getUser();
$emailuser = $user->getemail();
$agent = $user->getAgent();
$agency = $em->getRepository(\Aviatur\AgencyBundle\Entity\Agency::class)->find($session->get('agencyId'));
if (!empty($agent[0]) && $agent[0]->getAgency()->getId() === $agency->getId()) {
$agent = $em->getRepository(\Aviatur\AgentBundle\Entity\Agent::class)->findOneByCustomer($this->getUser());
$parent = $agent->getparentAgent();
if (0 != $parent) {
$myParent = $em->createQuery('SELECT a,b FROM AviaturAgentBundle:Agent a JOIN a.customer b WHERE a.id= :idAgent');
$myParent = $myParent->setParameter('idAgent', $parent);
$parentInfo = $myParent->getResult();
$emailParent = $parentInfo[0]->getCustomer()->getEmail();
$emailData['infoSubAgent'] = ['nameSubAgent' => strtoupper($agent->getCustomer()->__toString()), 'emailSubAgent' => strtoupper($agent->getCustomer()->getEmail())];
$messageAgent = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo([$agent->getCustomer()->getEmail(), $emailParent])
->setBcc($bccMails)
->setSubject($session->get('agencyShortName').' - '.$subject.' - '.$customer->getFirstname().' '.$customer->getLastname().' Vendedor - '.$agent->getCustomer()->getFirstName().' '.$agent->getCustomer()->getLastName())
->setBody($this->renderView($urlResume, $emailData));
$mailer->send($messageAgent);
} else {
$messageAgent = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($agent->getCustomer()->getEmail())
->setBcc($bccMails)
->setSubject($session->get('agencyShortName').' - '.$subject.' - '.$customer->getFirstname().' '.$customer->getLastname().' Vendedor - '.$agent->getCustomer()->getFirstName().' '.$agent->getCustomer()->getLastName())
->setBody($this->renderView($urlResume, $emailData));
$mailer->send($messageAgent);
}
}
}
if ($session->has('whitemark')) {
if ('' != $session->get('whitemarkMail')) {
$bccMails[] = $session->get('whitemarkMail');
$bccMails[] = 'sebastian.huertas@aviatur.com';
}
}
} else {
$emailData['isQuotation'] = true;
}
$message = 'Aviatur_cotizacion_Crucero_'.$transactionId;
$vouchersFiles = [];
$vouchersFiles[] = $voucherCruiseFile = $projectDir.'/app/quotationLogs/cruiseQuotation/'.$message.'.pdf';
$vouchersFiles[] = $politicsCruiseFile = $projectDir.'/app/quotationLogs/cruiseQuotation/Politicas_de_cancelacion_'.$emailData['infoTravel']['vendorCode'].'.pdf';
if ($session->has('operatorId')) {
$urlimg = str_replace('https', 'http', $infoTravel['cruiseImage']);
$nameImg = explode('/', $urlimg);
$urltmp = $projectDir.'/app/quotationLogs/cruiseQuotation/';
if (file_exists($urltmp.end($nameImg))) {
unlink($urltmp.end($nameImg));
}
if (@getimagesize($urlimg)) {
copy($urlimg, $urltmp.end($nameImg));
$emailData['infoTravel']['cruiseImage'] = $urltmp.end($nameImg);
} else {
$emailData['infoTravel']['cruiseImage'] = 'noimagen';
}
}
if (true == $infoTravel['service_quotation'] || isset($infoTravel['web_quotation'])) {
$urlResume = $twigFolder->twigExists('@AviaturTwig/'.$agencyFolder.'/Cruise/Default/email_quotation.html.twig');
}
$emailData['domain'] = $agency->getDomain();
$body = $this->renderView($urlResume, $emailData);
try {
if ($infoTransaction == null) {
if (!file_exists($voucherCruiseFile)) {
$pdf->setOption('page-size', 'LETTER');
$pdf->setOption('margin-top', 0);
$pdf->setOption('margin-right', 0);
$pdf->setOption('margin-bottom', 0);
$pdf->setOption('margin-left', 0);
$pdf->setOption('orientation', 'portrait');
$pdf->setOption('enable-javascript', true);
$pdf->setOption('no-stop-slow-scripts', true);
$pdf->setOption('no-background', false);
$pdf->setOption('lowquality', false);
$pdf->setOption('encoding', 'utf-8');
$pdf->setOption('images', true);
$pdf->setOption('dpi', 300);
$pdf->setOption('enable-external-links', true);
$pdf->setOption('enable-internal-links', true);
$pdf->generateFromHtml($this->renderView($template_pdf, $emailData), $voucherCruiseFile);
}
}
$messageEmail = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($toMails)
->setBcc($bccMails)
->setSubject($session->get('agencyShortName') . ' - ' . $subject)
->setBody(file_exists($voucherCruiseFile) ? $body : 'No se generó la cotización del crucero.');
if (isset($vouchersFiles) && count($vouchersFiles) > 0) {
foreach ($vouchersFiles as $file) {
if (file_exists($file)) {
$messageEmail->attach(\Swift_Attachment::fromPath($file));
}
}
}
$mailer->send($messageEmail);
} catch (\Exception $ex) {
$exceptionLog->log('Cotizacion cruceros' , $ex);
}
if ($infoTransaction != null) {
try {
$messageEmail = (new \Swift_Message())
->setContentType('text/html')
->setFrom($session->get('emailNoReply'))
->setTo($toMails)
->setBcc($bccMails)
->setSubject($session->get('agencyShortName') . ' - ' . $subject)
->setBody($this->renderView($urlResume, $emailData))
->attach(\Swift_Attachment::fromPath($politicsCruiseFile));
$mailer->send($messageEmail);
} catch (\Exception $ex) {
$exceptionLog->log('Cotizacion cruceros' , $ex);
}
}
if (file_exists($voucherCruiseFile)) {
unlink($voucherCruiseFile);
}
if ($session->has('operatorId') && file_exists($urltmp . end($nameImg))) {
unlink($urltmp . end($nameImg));
}
if ($session->has('front_user') && isset($emailData['isQuotation'])) {
$this->saveInformationCGS($logSave, $webService, $errorHandler, $emailData, $additionalUserFront, $agency);
}
return true;
}
public function saveInformationCGS(AviaturLogSave $logSave, AviaturWebService $webService, AviaturErrorHandler $errorHandler, $data, $customer, $agency)
{
$em = $this->getDoctrine()->getManager();
$parametersLogin = $this->getDoctrine()->getManager()->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findParameters($agency, 'aviatur_service_login_cgs');
$urlLoginCGS = $parametersLogin[0]['value'];
$parametersProduct = $this->getDoctrine()->getManager()->getRepository(\Aviatur\GeneralBundle\Entity\Parameter::class)->findParameters($agency, 'aviatur_service_cruise_cgs');
$urlAddProductCruise = $parametersProduct[0]['value'];
/*
* get token api autentication
* PENDIENTE: Validar si se puede obtener el token, si no entonces no hacer este proceso
*/
$userLoginCGS = $webService->encryptUser(trim(strtolower($customer->CODIGO_USUARIO)), 'AviaturCGSMTK');
$jsonReq = json_encode(['username' => $userLoginCGS]); // j_acosta (encriptado)
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $urlLoginCGS,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $jsonReq,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
],
]);
$response = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if (200 != $httpcode) {
$logSave->logSave('HTTPCODE: '.$httpcode.' Error usuario: '.strtolower($customer->CODIGO_USUARIO), 'CGS_LOGIN', 'CGSCRUISE_ERRORLOGIN');
$logSave->logSave(print_r($response, true), 'CGS_LOGIN', 'RSLoginCGS');
return $this->redirect($errorHandler->errorRedirectNoEmail('/buscar/cruceros', 'Error Login', 'Error Login'));
} else {
$tokenInfoApiQuotation = json_decode($response);
$tokenApiQuotation = $tokenInfoApiQuotation->TOKEN;
}
$destinations = [];
$cruiseItem = $data['cruiseDetailItinerary']['item'];
for ($i = 0; $i < (is_countable($cruiseItem) ? count($cruiseItem) : 0); ++$i) {
$destinations[$i] = [
'origin' => (string) $cruiseItem[$i]['@attributes']['name'],
'destination' => (string) (array_key_exists($i + 1, $cruiseItem)) ? $cruiseItem[$i + 1]['@attributes']['name'] : 'Fin',
'routes' => [[
'origin' => (string) $cruiseItem[$i]['@attributes']['name'],
'destination' => (string) (array_key_exists($i + 1, $cruiseItem)) ? $cruiseItem[$i + 1]['@attributes']['name'] : 'Fin',
'terminalOrigin' => (string) $cruiseItem[$i]['@attributes']['name'],
'terminalDestination' => (string) (array_key_exists($i + 1, $cruiseItem)) ? $cruiseItem[$i + 1]['@attributes']['name'] : 'Fin',
'departureDate' => (string) $cruiseItem[$i]['@attributes']['departdate'].'T'.$cruiseItem[$i]['@attributes']['departtime'].'.529Z',
'departureDateString' => (string) $cruiseItem[$i]['@attributes']['departdate'].'T'.$cruiseItem[$i]['@attributes']['departtime'].'.529Z',
'departureDescription' => (string) $cruiseItem[$i]['@attributes']['name'],
'arrivalDate' => (string) $cruiseItem[$i]['@attributes']['arrivedate'].'T'.$cruiseItem[$i]['@attributes']['arrivetime'].'.529Z',
'arrivalDateString' => (string) $cruiseItem[$i]['@attributes']['arrivedate'].'T'.$cruiseItem[$i]['@attributes']['arrivetime'].'.529Z',
'arrivalDescription' => (string) (array_key_exists($i + 1, $cruiseItem)) ? $cruiseItem[$i + 1]['@attributes']['name'] : 'Fin',
'cabinClass' => (string) $data['infoTravel']['cabinName'].' - '.$data['infoTravel']['cabinNumber'],
]],
];
}
$emails_arr = [
'active' => true,
'dateCreated' => '0001-01-01T00:00:00',
'emailAddress' => (string) $data['clientInformation']->email,
'id' => 0,
'lastUpdated' => '0001-01-01T00:00:00',
'version' => 0,
];
$phones_arr = [
'active' => true,
'dateCreated' => '0001-01-01T00:00:00',
'id' => 0,
'lastUpdated' => '0001-01-01T00:00:00',
'number' => (int) $data['clientInformation']->phone,
'type' => null,
'version' => 0,
];
$data_send = [
'customer' => [
'firstName' => (string) $data['clientInformation']->first_name,
'lastName' => (string) $data['clientInformation']->last_name,
'fullName' => (string) $data['clientInformation']->first_name.' '.$data['clientInformation']->last_name,
'emails' => [$emails_arr],
'phones' => [$phones_arr],
],
'quote' => [
'channel' => 'B2C WEB',
],
'selectedProduct' => [
'cabinCode' => (string) $data['infoTravel']['cabinGradeCategory'],
'cabinCount' => 0,
'cabinName' => (string) $data['infoTravel']['cabinName'],
'nameCruise' => (string) $data['infoTravel']['vendorName'].' '.ucfirst(strtolower($data['infoTravel']['cruiseName'])),
'shipName' => (string) ucfirst(strtolower($data['infoTravel']['shipName'])),
'complementProductList' => [[
'productType' => [
'description' => 'Cruceros',
'typeProduct' => 'Cruceros',
],
'segments' => $destinations,
]],
'description' => 'Cruceros',
'packageName' => 'Cruceros',
'emit' => false,
'fareData' => [
'aditionalFee' => 0.0,
'airpotService' => null,
'baseFare' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
'cO' => 0.0,
'commission' => 0.0,
'commissionPercentage' => 0.0,
'complements' => null,
'currency' => [
'type' => 'COP',
],
'equivFare' => 0.0,
'iva' => 0.0,
'otherDebit' => null,
'otherTax' => null,
'price' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
'providerPrice' => 0.0,
'qSe' => 0.0,
'qSeIva' => 0.0,
'qse' => null,
'revenue' => 0.0,
'serviceCharge' => 0.0,
'sureCancel' => null,
'tA' => 0.0,
'taIva' => 0.0,
'tax' => 0.0,
'total' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
'yQ' => 0.0,
'yQiva' => 0.0,
'originalNationalCurrencyTotal' => (int) $data['cruisePayData']->cruiseTotalPaymentCOP,
],
'passengerDataList' => [
[
'fareData' => null,
'gender' => '',
'id' => '',
'lastName' => (string) $data['clientInformation']->last_name,
'mail' => (string) $data['clientInformation']->email,
'mothersName' => '',
'name' => (string) $data['clientInformation']->first_name,
'passengerCode' => [
'accountCode' => '',
'promo' => false,
'realType' => 'ADT',
'type' => 'ADT',
],
'passengerContact' => null,
'passengerInsuranceInfo' => null,
'phone' => null,
'document' => null,
'typeDocument' => null,
],
],
'route' => [
'terminalOrigin' => (string) $cruiseItem[0]['@attributes']['name'],
'departureDate' => (string) $cruiseItem[0]['@attributes']['departdate'].'T'.$cruiseItem[0]['@attributes']['departtime'].'.529Z',
'departureDateString' => (string) $cruiseItem[0]['@attributes']['departdate'].'T'.$cruiseItem[0]['@attributes']['departtime'].'.529Z',
'departureDescription' => (string) $cruiseItem[0]['@attributes']['name'],
'arrivalDate' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivedate'].'T'.$cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivetime'].'.529Z',
'arrivalDateString' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivedate'].'T'.$cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['arrivetime'].'.529Z',
'arrivalDescription' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['name'],
'terminalDestination' => (string) $cruiseItem[sizeof($cruiseItem) - 1]['@attributes']['name'],
'cabinClass' => (string) $data['infoTravel']['cabinName'].' - '.$data['infoTravel']['cabinNumber'],
],
'productType' => [
'description' => 'Cruceros',
'typeProduct' => 'Cruceros',
],
],
];
$authorization = 'Authorization: Bearer '.$tokenApiQuotation;
// API URL
$url = $urlAddProductCruise;
// create a new cURL resource
$ch = curl_init($url);
// setup request to send json via POST
$payload = json_encode($data_send);
$logSave->logSave(print_r($payload, true), 'CGS_CRUISE', 'RQCruiseCGS');
// print_r($payload);die;
// attach encoded JSON string to the POST fields
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
// set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'accept: application/json',
'authorization: Bearer '.$tokenApiQuotation,
'content-type: application/json',
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// return response instead of outputting
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// execute the POST request
$result = curl_exec($ch);
$logSave->logSave(print_r($result, true), 'CGS_CRUISE', 'RSCruiseCGS');
// print_r($result);
// close CURL resource
curl_close($ch);
/*
* End API data send
*/
}
public function confirmBasketFrontAction(EmissionWebservice $emissionWebservice, \Swift_Mailer $mailer)
{
$tempRequest = explode('<avi:dataIssuanceRQ>', file_get_contents('php://input'));
$tempRequest = explode('</avi:dataIssuanceRQ>', $tempRequest[1]);
$request = '<avi:dataIssuanceRQ>'.$tempRequest[0].'</avi:dataIssuanceRQ>';
$xmlRequestObject = simplexml_load_string(str_replace('avi:', '', $request));
$em = $this->getDoctrine()->getManager();
$productId = str_replace('PN', '', (string) $xmlRequestObject->office['product']);
$orderProduct = $em->getRepository(\Aviatur\GeneralBundle\Entity\OrderProduct::class)->find($productId);
$cruiseModel = new CruiseModel();
$baseXml = new \SimpleXMLElement($cruiseModel->getResponseXml());
if (null == $orderProduct) {
$response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
$response->addChild('error', 'NOT FOUND');
$response->addChild('message', 'PRODUCT PN'.$productId.' NOT FOUND');
$metaResponse = str_replace('{responseBody}', str_replace('<?xml version="1.0"?>', '', $response->asXML()), $baseXml->asXML());
return new Response($metaResponse, Response::HTTP_OK, ['content-type' => 'text/xml']);
}
$agent_mail = (string) $xmlRequestObject->office['mail'];
$resume = $orderProduct->getResume();
if ('confirmation_error' == $resume || '' == $resume) {
$emissionData = json_decode($orderProduct->getEmissiondata());
$creditCard = new \stdClass();
$creditCard->title = (string) $xmlRequestObject->creditCard['title'];
$creditCard->firstname = (string) $xmlRequestObject->creditCard['firstname'];
$creditCard->lastname = (string) $xmlRequestObject->creditCard['lastname'];
$creditCard->address1 = (string) $xmlRequestObject->creditCard['address1'];
$creditCard->city = (string) $xmlRequestObject->creditCard['city'];
$creditCard->county = (string) $xmlRequestObject->creditCard['county'];
$creditCard->country = (string) $xmlRequestObject->creditCard['country'];
$creditCard->cardtype = (string) $xmlRequestObject->creditCard['cardtype'];
$creditCard->nameoncard = (string) $xmlRequestObject->creditCard['nameoncard'];
$creditCard->cardno = (string) $xmlRequestObject->creditCard['cardno'];
$creditCard->expirymonth = (string) $xmlRequestObject->creditCard['expirymonth'];
$creditCard->expiryyear = (string) $xmlRequestObject->creditCard['expiryyear'];
$emissionData->dataIssuance->Creditcard = $creditCard;
$transaction = $emissionData->dataIssuance->Transaction->transaction;
$transaction->authcode = (string) $xmlRequestObject->creditCard['authcode'];
$transaction->cardtype = (string) $xmlRequestObject->creditCard['cardtype'];
$emissionData->dataIssuance->Transaction->transaction = $transaction;
$response = $emissionWebservice->callServiceEmission('emitir_tc', $emissionData, $productId);
if (!isset($response['error'])) {
$responseArray = json_decode(json_encode($response), true);
$bookReservation = $responseArray['RESPUESTA']['results']['book']['bookingdetails']['items']['item']['@attributes']['reservation'];
$orderProduct->setResume($bookReservation);
$orderProduct->setEmissiondata(json_encode($emissionData));
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
// $messageEmail = (new \Swift_Message())
// ->setContentType("text/html")
// ->setFrom($session->get('emailNoReply'))
// // ->setTo('yared.toro@aviatur.com')//ENVIAR A DEPARTAMENTO DE CRUCEROS
// ->setTo($agent_mail)
// // ->setBcc($bccMails)
// ->setSubject('Reserva de Crucero confirmada PN' . $productId)
// ->setBody('La reserva de crucero con PN' . $productId . ' ha sido confirmada, el código de reserva es: ' . $bookReservation);
// $mailer->send($messageEmail);
// $orderProduct->setEmissiondata(json_encode($emissionData));
// $em->persist($orderProduct);
// $em->flush();
$response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
$response->addChild('message', 'SUCCESSFUL');
$response->addChild('confirmationId', $bookReservation);
$metaResponse = str_replace('{responseBody}', str_replace('<?xml version="1.0"?>', '', $response->asXML()), $baseXml->asXML());
return new Response($metaResponse, Response::HTTP_OK, ['content-type' => 'text/xml']);
} else {
$orderProduct->setResume('confirmation_error');
$orderProduct->setUpdatingdate(new \DateTime());
$em->persist($orderProduct);
$em->flush();
$response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
$response->addChild('error', 'CONFIRMATION ERROR');
$metaResponse = str_replace('{responseBody}', str_replace('<?xml version="1.0"?>', '', $response->asXML()), $baseXml->asXML());
return new Response($metaResponse, Response::HTTP_OK, ['content-type' => 'text/xml']);
}
} else {
$response = new \SimpleXMLElement('<dataIssuanceRS></dataIssuanceRS>');
$response->addChild('message', 'BOOKING ALREADY CONFIRMED');
$response->addChild('confirmationId', $orderProduct->getResume());
$metaResponse = str_replace('{responseBody}', str_replace('<?xml version="1.0"?>', '', $response->asXML()), $baseXml->asXML());
return new Response($metaResponse, Response::HTTP_OK, ['content-type' => 'text/xml']);
}
}
// function typeDevice() {
// $aMobileUA = array(
// '/iphone/i' => 'iPhone',
// '/ipod/i' => 'iPod',
// '/ipad/i' => 'iPad',
// '/android/i' => 'Android',
// '/blackberry/i' => 'BlackBerry',
// '/webos/i' => 'Mobile'
// );
//
// //Return mobile if Mobile User Agent is detected
// foreach ($aMobileUA as $sMobileKey => $sMobileOS) {
// if (preg_match($sMobileKey, $this->get('request_stack')->getCurrentRequest()->server->get('HTTP_USER_AGENT'))) {
// return 'mobile';
// }
// }
// return 'desktop';
// }
public function getPortByRegionAction(Request $request)
{
$regionCode = $request->query->get('region');
$em = $this->getDoctrine()->getManager();
$originPortByregion = $em->getRepository(\Aviatur\CruiserBundle\Entity\CruiseRegionPorts::class)->getPortByRegion($regionCode);
return $this->json($originPortByregion);
}
public function get_location($latitude = '', $longitude = '')
{
$geolocation = $latitude.','.$longitude;
$geolocation = $latitude.','.trim($longitude);
$request = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'&sensor=false';
$file_contents = file_get_contents($request);
$json_decode = json_decode($file_contents);
$loc = [];
if (isset($json_decode->results[0])) {
$response = [];
foreach ($json_decode->results[0]->address_components as $addressComponet) {
if (in_array('political', $addressComponet->types)) {
$response[] = $addressComponet->short_name;
}
}
$loc['country'] = '';
if (isset($response[4]) && isset($response[1])) {
$loc['city'] = $response[1];
$loc['country'] = $response[4];
} elseif (isset($response[3]) && isset($response[1])) {
$loc['city'] = $response[1];
$loc['country'] = $response[3];
} elseif (isset($response[2]) && isset($response[0])) {
$loc['city'] = $response[0];
$loc['country'] = $response[2];
} elseif (isset($response[1])) {
$loc['country'] = $response[1];
} elseif (isset($response[0])) {
$loc['country'] = $response[0];
}
} else {
$loc['error'] = 'error';
}
return $loc;
}
private function unaccent($string)
{
return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
protected function authenticateUser(UserInterface $user, LoginManagerInterface $loginManager)
{
try {
$loginManager->loginUser(
'main',
$user
);
} catch (AccountStatusException $ex) {
// We simply do not authenticate users which do not pass the user
// checker (not enabled, expired, etc.).
}
}
/**
* getIINRanges()
* Para obtener todos los rangos asociados a IIN de las franquicias activas, y estas se manejarán en variables globales con arrays de javascript
* Author: Ing. David Rincon
* Email: david.rincon@aviatur.com
* Date: 2025/03/06
* @param $em (Object of DB manager).
* @return array
*/
public function getIINRanges($em){
$iinRecords = $em->getRepository(\Aviatur\GeneralBundle\Entity\Card::class)->findByActiveFranchises();
$iinRecordsArray = [];
$ccranges = [];
$ccfranchises = [];
foreach ($iinRecords as $key => $iinRecord) {
$paymentGatewayCode = $iinRecord["paymentgatewaycode"];
$description = $iinRecord["description"];
$description = strtoupper(str_replace(' ', '', trim($description)));
$stringRanges = $iinRecord["ranges"];
$ranges = json_decode($stringRanges, true);
$stringLengths = $iinRecord["lengths"];
$lengths = json_decode($stringLengths, true);
$luhn = $iinRecord["luhn"];
$cvvDigits = $iinRecord["cvvdigits"];
$tempLengths = [];
foreach ($lengths["lengths"] as $length) {
$tempLengths[] = array(0 => $length[0], 1 => (isset($length[1]) ? $length[1] : $length[0]));
}
$tempRecordArrayFranchises = [];
$tempRecordArrayFranchises["code"] = $paymentGatewayCode;
$tempRecordArrayFranchises["codename"] = $description;
$tempRecordArrayFranchises["luhn"] = $luhn;
$tempRecordArrayFranchises["length"] = $tempLengths;
$tempRecordArrayFranchises["cvvd"] = $cvvDigits;
$ccfranchises[$paymentGatewayCode] = $tempRecordArrayFranchises;
foreach ($ranges["ranges"] as $range) {
$tempRecordArrayRanges = [];
$tempRecordArrayRanges["range"][0] = $range[0];
$tempRecordArrayRanges["range"][1] = (isset($range[1]) ? $range[1] : $range[0]);
$tempRecordArrayRanges["minimum"] = strlen($range[0]);
$tempRecordArrayRanges["code"] = $paymentGatewayCode;
$ccranges[] = $tempRecordArrayRanges;
}
}
$iinRecordsArray = array("ccranges" => $ccranges, "ccfranchises" => $ccfranchises);
return $iinRecordsArray;
}
}