0% found this document useful (0 votes)
8 views29 pages

Iryo Connector MGR

.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views29 pages

Iryo Connector MGR

.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)

Enric Jimenez <[email protected]>

(sin asunto)
Enric Jimenez <[email protected]> 24 de octubre de 2024, 10:14
Borrador

using HappyTren.Core.Model.Train;
using HappyTren.Core.Model.Train.BusinessObjects;
using HappyTren.Core.Model.Train.BusinessObjects.Enum;
using HappyTren.Core.Multilingual;
using HappyTren.Train.Data;
using HappyTren.Train.Data.CacheManagers;
using HappyTren.Train.iryoConnector.Internals;
using HappyTren.Train.IryoConnector.Internals.Builders;
using HappyTren.Train.IryoConnector.Internals.Connector;
using HappyTren.Train.IryoConnector.Internals.Extensions;
using HappyTren.Train.IryoConnector.Internals.Helpers;
using HappyTren.Train.IryoConnector.Internals.Model.Request;
using HappyTren.Train.IryoConnector.Internals.Model.Response;
using HappyTren.Train.IryoConnector.IryoObjects;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Xml;
using HappyTren.Train.IryoConnector.Internals.Model;
using HappyTren.Train.RenfeConnector.Internals.Connector;
using HappyTren.Train.IryoConnector.Internals.Model.Entitys;
using System.Runtime.CompilerServices;
using HappyTren.Train.IryoConnector.Internals.Builders.CustomCache;
using AppConfig;

namespace HappyTren.Train.IryoConnector.Internals
{
public class _IryoConnectorMgr
{

private readonly CacheEngine _cacheEngine;


private readonly _IryoGetTrainConn _iryoGetTrainConn;
private readonly _IryoBookSeatsConn _iryoBookSeatsConn;
private readonly _IryoBuyTicketsConn _iryoBuyTicketsConn;
private readonly _IryoCancelBookConn _iryoCancelBookConn;
private readonly _IryoCancelTicketsConn _iryoCancelTicketsConn;
private readonly _IryoConfirmTicketsConn _iryoConfirmTicketsConn;
private readonly _IryoGetAgencyTicketsSalesConn _iryoGetAgencyTicketsSalesConn;
private readonly _IryoPrintTicketsConn _iryoPrintTicketsConn;
private readonly _IryoGetRoutesConn _iryoGetRoutesConn;
private readonly AppSettings _appSettings;

public _IryoConnectorMgr(CacheEngine cacheEngine,


_IryoGetTrainConn iryoGetTrainConn,
_IryoBookSeatsConn iryoBookSeatsConn,
_IryoBuyTicketsConn iryoBuyTicketsConn,
_IryoCancelBookConn iryoCancelBookConn,
_IryoCancelTicketsConn iryoCancelTicketsConn,
_IryoConfirmTicketsConn iryoConfirmTicketsConn,
_IryoGetAgencyTicketsSalesConn iryoGetAgencyTicketsSalesConn,
_IryoPrintTicketsConn iryoPrintTicketsConn,
_IryoGetRoutesConn iryoGetRoutesConn,
AppSettings appSettings
)
{

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 1/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
_cacheEngine = cacheEngine;
_iryoGetTrainConn = iryoGetTrainConn;
_iryoBookSeatsConn = iryoBookSeatsConn;
_iryoBuyTicketsConn = iryoBuyTicketsConn;
_iryoCancelBookConn = iryoCancelBookConn;
_iryoCancelTicketsConn = iryoCancelTicketsConn;
_iryoConfirmTicketsConn = iryoConfirmTicketsConn;
_iryoGetAgencyTicketsSalesConn = iryoGetAgencyTicketsSalesConn;
_iryoPrintTicketsConn = iryoPrintTicketsConn;
_iryoGetRoutesConn = iryoGetRoutesConn;
_appSettings = appSettings;
}

private bool _StartedApp = false;

public string AppPath { get; set; }

/// <summary>
/// Starts the internal caches, ...
/// </summary>
public void StartApp()
{
// Start the caches
_cacheEngine.InitCaches();
_StartedApp = true;
}

/// <summary>
/// Get the trains
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public GetTrainsRs GetTrains(GetTrainsRq pRequest, bool AppliesBusinessRule)
{
return GetTrains(pRequest, true, AppliesBusinessRule);
}

public static bool IsDayOrderOutwardArrival(DayOfWeek dayOrderOutwardArrival)


{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday,
DayOfWeek.Thursday, DayOfWeek.Saturday, DayOfWeek.Sunday };

foreach (var day in dayBusiness)


{
if (day == dayOrderOutwardArrival)
{
retorno = true;
break;
};
}
return retorno;
}

public static bool IsDayOrderOutwardDeparture(DayOfWeek dayOrderOutwardDeparture)


{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Friday };

foreach (var day in dayBusiness)


{
if (day == dayOrderOutwardDeparture)
{
retorno = true;
break;
};
};
return retorno;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 2/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
}

public static bool IsDayBusinessDeparture(DayOfWeek dayOutwardDate)


{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday };

foreach (var day in dayBusiness)


{
if (day == dayOutwardDate)
{
retorno = true;
break;
};
};
return retorno;
}
public static bool IsHourBusinessDepartureArrival(DateTime arrivalTime)
{
bool retorno = false;

DateTime hoursBefore = DateTime.ParseExact("07:00", "HH:mm", CultureInfo.InvariantCulture);


DateTime hoursLater = DateTime.ParseExact("11:00", "HH:mm", CultureInfo.InvariantCulture);

if (arrivalTime.Hour >= hoursBefore.Hour && arrivalTime.Hour <= hoursLater.Hour)


{
retorno = true;
};

return retorno;
}
public static bool IsHourBusinessReturnArrival(DateTime arrivalTime)
{
bool retorno = false;

DateTime hoursBefore = DateTime.ParseExact("19:00", "HH:mm", CultureInfo.InvariantCulture);


DateTime hoursLater = DateTime.ParseExact("23:00", "HH:mm", CultureInfo.InvariantCulture);

if (arrivalTime.Hour >= hoursBefore.Hour && arrivalTime.Hour <= hoursLater.Hour)


{
retorno = true;
}

return retorno;
}

public static bool IsHourWeekendDeparture(DateTime departureTime)


{
bool retorno = false;

DateTime hoursBefore = DateTime.ParseExact("14:00", "HH:mm", CultureInfo.InvariantCulture);


DateTime hoursLater = DateTime.ParseExact("18:00", "HH:mm", CultureInfo.InvariantCulture);

if (departureTime.Hour >= hoursBefore.Hour && departureTime.Hour <= hoursLater.Hour)


{
retorno = true;
};
return retorno;
}

public static bool IsHourWeekendReturn(DateTime arrivalTime)


{
bool retorno = false;

DateTime hoursBefore = DateTime.ParseExact("19:00", "HH:mm", CultureInfo.InvariantCulture);

DateTime hoursLater = DateTime.ParseExact("23:00", "HH:mm", CultureInfo.InvariantCulture);

if (arrivalTime.Hour >= hoursBefore.Hour && arrivalTime.Hour <= hoursLater.Hour)

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 3/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
{
retorno = true;
};
return retorno;
}

public static bool IsDayWeekendDeparture(DayOfWeek dayOutwardDate)


{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Friday };

foreach (var day in dayBusiness)


{
if (day == dayOutwardDate)
{
retorno = true;
break;
};
};
return retorno;
}
public static bool IsDayBusinessReturn(DayOfWeek dayReturnDate)
{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday,
DayOfWeek.Friday };

foreach (var day in dayBusiness)


{
if (day == dayReturnDate)
{
retorno = true;
break;
};
};
return retorno;
}

public static bool IsDayWeekendArrival(DayOfWeek dayOutwardDate)


{
bool retorno = false;
DayOfWeek[] dayBusiness = { DayOfWeek.Sunday };

foreach (var day in dayBusiness)


{
if (day == dayOutwardDate)
{
retorno = true;
break;
};
};
return retorno;
}

/// <summary>
/// Just for testing purposes. Don't use.
/// </summary>
/// <param name="pRequest"></param>
/// <param name="pProcessRenfeResponse"></param>
/// <param name="renfeResponse"></param>
/// <returns></returns>
public GetTrainsRs GetTrains(GetTrainsRq pRequest, bool pProcessRenfeResponse, bool AppliesBusinessRule
= false)
{
return GetTrains(pRequest, pProcessRenfeResponse, null, AppliesBusinessRule);
}

/// <summary>
/// Just for testing purposes. Don't use.

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 4/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
/// </summary>
/// <param name="pRequest"></param>
/// <param name="pProcessRenfeResponse"></param>
/// <param name="iryoResponse"></param>
/// <returns></returns>
public GetTrainsRs GetTrains(GetTrainsRq pRequest, bool pProcessRenfeResponse, XmlDocument
iryoResponse, bool AppliesBusinessRule = false)
{
GetTrainsRs response = new GetTrainsRs();

// Control de nulos
if (pRequest == null)
{
response.AddError("RQ is null");
return response;
}
if (pRequest.Paxes == null || pRequest.Paxes.Count() == 0)
{
response.AddError("RQ.Paxes is null");
return response;
}

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
// _IryoGetTrainConn connector = new _IryoGetTrainConn();

if (AppPath == null)
{
AppPath = _appSettings.AppPath;
};

_iryoGetTrainConn.ApplicationPhysicalPath = AppPath;

if (pRequest.DepartureStation == "MADRI")
pRequest.DepartureStation = "60000";

if (pRequest.ArrivalStation == "MADRI")
pRequest.ArrivalStation = "60000";

if (pRequest.DepartureStation == "BARCE")
pRequest.DepartureStation = "71801";

if (pRequest.ArrivalStation == "BARCE")
pRequest.ArrivalStation = "71801";

// Obtener las estaciones


StationCls departureST = _StationMgr.Get(pRequest.DepartureStation, pRequest.DeparturePlaceId,
pRequest.DeparturePOI, pRequest.LanguageID);
StationCls arrivalST = _StationMgr.Get(pRequest.ArrivalStation, pRequest.ArrivalPlaceId,
pRequest.ArrivalPOI, pRequest.LanguageID);

// Si las estaciones no se han encontrado, devolver null


if (departureST == null || arrivalST == null)
{
response.AddError("departureST is null || arrivalST == null");
return response;
}

// 1. Obtener los códigos de las estaciones


string arrival = arrivalST.StationCode;
string departure = departureST.StationCode;

// List<ClaimCls> trainClaims = null;


ClaimCls trainClaims = new ClaimCls();

pRequest.DepartureStation = departure;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 5/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
pRequest.ArrivalStation = arrival;

_iryoGetTrainConn.Connect();

// 3. Conectar con Iryo


JourneySearchRS infoTren = _iryoGetTrainConn.GetTrains(pRequest);

if (infoTren == null)
{
return null;
// response.AddError("No existen trenes ");
}
else
{
response = ConvertToDomain(infoTren, pRequest, arrivalST, departureST, pProcessRenfeResponse,
AppliesBusinessRule);
response.AddInfo(departure + "-" + arrival);
}

return response;
}

private GetTrainsRs ConvertToDomain(JourneySearchRS infoTren, GetTrainsRq pRequest, StationCls arrivalST,


StationCls departureST, bool pProcessRenfeResponse, bool AppliesBusinessRule)
{
var response = new GetTrainsRs() { OutwardTrains = new List<TrainCls>(), ReturnTrains = new
List<TrainCls>(), Filters = new TrainFilterCls() };

response.RenfeResponse = infoTren.ToJson();

response.DestinationStation = arrivalST;
response.Filters = new TrainFilterCls();
bool theSameDay = IrYoExtension.TheSameDay(pRequest.OutwardDate, pRequest.ReturnDate);
// 1. Obtener los códigos de las estaciones
string arrival = arrivalST.StationCode;
string departure = departureST.StationCode;

if (pProcessRenfeResponse)
{
// Si está establecido la estación principal, usar esa
AvailabilityTypeEnum aType = AvailabilityTypeEnum.NORMAL;
if (!string.IsNullOrEmpty(arrivalST.MainStationCode))
{
arrival = arrivalST.MainStationCode;
aType = AvailabilityTypeEnum.MAINSTATION;
}

if (!string.IsNullOrEmpty(departureST.MainStationCode))
{
departure = departureST.MainStationCode;
aType = AvailabilityTypeEnum.MAINSTATION;
}
// Se inicializa el seleccionador de tipos de pasajero
// (será general para todo el proceso para optimizar el uso de su caché interna)

List<SalesGroupCls> salesGroups = _IryoSalesGroupBldr.GetSalesGroupTemplate();


// Se traducen los grupos de venta
salesGroups.ForEach(sg => sg.SalesGroupName = MultilingualModule.GetSalesGroupName(sg.
SalesGroupCode, sg.SalesGroupName, pRequest.LanguageID));
//TODO:Ahi qeu ver que es esto
ClaimCls trainClaims = new ClaimCls();
_IryoPaxTypeFareFilter paxFareFilter = new _IryoPaxTypeFareFilter();

IryoBuilderRq builderRequest = new IryoBuilderRq();


builderRequest.PaxFareFilter = paxFareFilter; //TODO check this
builderRequest.SalesGroupTemplate = salesGroups;
builderRequest.RequestedPaxes = pRequest.Paxes;
builderRequest.LanguageID = pRequest.LanguageID;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 6/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
var viajeIda = infoTren.data.offer.travels.First(x => x.direction == "outbound");
var viajeVuelta = infoTren.data.offer.travels.FirstOrDefault(x => x.direction == "inbound");
// Ida
if (viajeIda != null)
{
var addOns = viajeIda.addons;

//cada leg es un tren


foreach (var route in viajeIda.routes)
{
if (route.bundles != null && route.bundles.Length > 0)
{
var leg = route.legs[0];
_IryoTrainBldr trainBuilder = new _IryoTrainBldr(builderRequest, _appSettings);
TrainCls tren = trainBuilder.GetTrain(route, leg, infoTren, pRequest.TravelAgencyId,
pRequest.CommisionGroupId, pRequest.ProductID, pRequest.getTravelNights(), pRequest.OutwardDate,
pRequest.ReturnDate, addOns);
tren.TrainDirection = TrainDirection.OutwardTrain;
tren.TravelDate = pRequest.OutwardDate;
// tren.TrainTypeDescription = MultilingualModule.GetTrainDescription(leg.service_name,
leg.service_identifier, pRequest.LanguageID);
//Si las estaciones estan vacias
if (string.IsNullOrEmpty(tren.ArrivalStationName))
tren.ArrivalStationName = MultilingualModule.GetStationName(arrivalST.StationName,
arrivalST.StationName, pRequest.LanguageID);
if (string.IsNullOrEmpty(tren.DepartureStationName))
tren.DepartureStationName = MultilingualModule.GetStationName(departureST.StationName,
departureST.StationName, pRequest.LanguageID);

tren.Claims = new List<ClaimCls>();


if (tren.IsAVE && (trainClaims != null)) tren.Claims.Add(trainClaims);

// Establecer el tipo de disponibilidad


tren.AvailabilityType = aType;
if (trainBuilder.IsOk)
{
if (tren.IsLongDistanceTrain)
{
DateTime arrivalTime = DateTime.ParseExact(tren.ArrivalTime, "HH:mm",
CultureInfo.InvariantCulture);
DateTime DepartureTime = DateTime.ParseExact(tren.DepartureTime, "HH:mm",
CultureInfo.InvariantCulture);
DayOfWeek dayOutwardDate = DateTime.ParseExact(pRequest.OutwardDate, "yyyyMMdd",
CultureInfo.InvariantCulture).DayOfWeek;

if (theSameDay && IsHourBusinessDepartureArrival(arrivalTime))


{
tren.Claims.Add(new ClaimCls() { Text = "Negocio y Turismo", Type =
ClaimTypeEnum.SMART_TRAIN });
}
else
{
if (IsDayBusinessDeparture(dayOutwardDate) && IsHourBusinessDepartureArrival
(arrivalTime) && !theSameDay)
{
//trainClaims.Add(new ClaimCls() { Text = "Business", Type =
ClaimTypeEnum.SMART_TRAIN });
tren.Claims.Add(new ClaimCls() { Text = "Negocio y Turismo", Type =
ClaimTypeEnum.SMART_TRAIN });
}

if (IsDayWeekendDeparture(dayOutwardDate) && IsHourWeekendDeparture(


DepartureTime) && !theSameDay)
{
tren.Claims.Add(new ClaimCls() { Text = "Fin de semana", Type =
ClaimTypeEnum.SMART_TRAIN });
}
}

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 7/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
}
}
response.OutwardTrains.Add(tren);
// Se actualizan los filtros
response.Filters.AddTrainType(tren.TrainTypeDescription, tren.TrainTypeDescription);
string timeTableDescription = MultilingualModule.GetTimeTableDescription(tren.
TimeTableType.ToString(), tren.TimeTableType.ToString(), pRequest.LanguageID);
response.Filters.AddOutwardTimeTable(tren.TimeTableType, timeTableDescription);

response.Filters.AddOutwardStations(tren.ArrivalStation, tren.ArrivalStationName);
response.Filters.AddOutwardStations(tren.DepartureStation, tren.DepartureStationName);
tren.Classes.ForEach(clase => response.Filters.AddClass(clase.ClassCode, clase.ClassName,
"IRYO"));
}
}
}

if (viajeVuelta != null)
{
var addOns = viajeVuelta.addons;

foreach (var route in viajeVuelta.routes)


{
if (route.bundles != null && route.bundles.Length > 0)
{
//cada leg es un tren
foreach (var leg in route.legs)
{
_IryoTrainBldr trainBuilder = new _IryoTrainBldr(builderRequest, _appSettings);
TrainCls tren = trainBuilder.GetTrain(route, leg, infoTren, pRequest.TravelAgencyId,
pRequest.CommisionGroupId, pRequest.ProductID, pRequest.getTravelNights(), pRequest.OutwardDate,
pRequest.ReturnDate, addOns);
tren.TrainDirection = TrainDirection.ReturnTrain;
tren.TravelDate = pRequest.ReturnDate;

//Si las estaciones estan vacias


if (string.IsNullOrEmpty(tren.ArrivalStationName))
tren.ArrivalStationName = MultilingualModule.GetStationName(departureST.StationName,
departureST.StationName, pRequest.LanguageID);
if (string.IsNullOrEmpty(tren.DepartureStationName))
tren.DepartureStationName = MultilingualModule.GetStationName(arrivalST.StationName,
arrivalST.StationName, pRequest.LanguageID);

tren.Claims = new List<ClaimCls>();


if (tren.IsAVE && (trainClaims != null)) tren.Claims.Add(trainClaims);

// Establecer el tipo de disponibilidad


tren.AvailabilityType = aType;
if (trainBuilder.IsOk)
{
if (tren.IsLongDistanceTrain)
{
DateTime arrivalTime = DateTime.ParseExact(tren.ArrivalTime, "HH:mm",
CultureInfo.InvariantCulture);
DateTime DepartureTime = DateTime.ParseExact(tren.DepartureTime, "HH:mm",
CultureInfo.InvariantCulture);
DayOfWeek dayOutwardDate = DateTime.ParseExact(pRequest.OutwardDate, "yyyyMMdd",
CultureInfo.InvariantCulture).DayOfWeek;

if (theSameDay && IsHourBusinessDepartureArrival(arrivalTime))


{
tren.Claims.Add(new ClaimCls() { Text = "Negocio y Turismo", Type =
ClaimTypeEnum.SMART_TRAIN });
}
else
{
if (IsDayBusinessDeparture(dayOutwardDate) && IsHourBusinessDepartureArrival
(arrivalTime) && !theSameDay)
{

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 8/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
//trainClaims.Add(new ClaimCls() { Text = "Business", Type =
ClaimTypeEnum.SMART_TRAIN });
tren.Claims.Add(new ClaimCls() { Text = "Negocio y Turismo", Type =
ClaimTypeEnum.SMART_TRAIN });
}

if (IsDayWeekendDeparture(dayOutwardDate) && IsHourWeekendDeparture(


DepartureTime) && !theSameDay)
{
tren.Claims.Add(new ClaimCls() { Text = "Fin de semana", Type =
ClaimTypeEnum.SMART_TRAIN });

}
}
}
}
response.ReturnTrains.Add(tren);
// Se actualizan los filtros
response.Filters.AddTrainType(tren.TrainTypeDescription, tren.TrainTypeDescription);
string timeTableDescription = MultilingualModule.GetTimeTableDescription(tren.
TimeTableType.ToString(), tren.TimeTableType.ToString(), pRequest.LanguageID);
response.Filters.AddReturnTimeTables(tren.TimeTableType, timeTableDescription);

response.Filters.AddReturnStations(tren.ArrivalStation, tren.ArrivalStationName);
response.Filters.AddReturnStations(tren.DepartureStation, tren.DepartureStationName);
tren.Classes.ForEach(clase => response.Filters.AddClass(clase.ClassCode, clase.ClassName));
}
}
}
}
};

return response;
}

public GetTrainComplementsRS GetTrainComplements(GetTrainComplementsRq pRequest)


{
GetTrainComplementsRS response = new GetTrainComplementsRS()
{
ComplmentosIda = new List<ComplementsLeg>(),
ComplmentosVuelta = new List<ComplementsLeg>()
};

foreach (var leg in pRequest.ida)


{
var oneTimeCompDict = new Dictionary<string, bool>();

foreach (var px in leg.paxs)


{
var splitted = px.train_fare.Split(new Char[] { '^' });
var iryoAddOns = SerializeExtension.DeserializeJson<Addon[]>(splitted[5]);
var addOnsReq = SerializeExtension.DeserializeJson<Addon[]>(splitted[7]);

var compLeg = new ComplementsLeg()


{
pax_fare = splitted[1],
pax_type = px.pax_type,
complements = new List<Complements>()
};

foreach (var comp in iryoAddOns)


{
if (comp.passenger_fares != null && comp.passenger_fares.Length > 0) //si hay tarifas para este pax
{
var product = _IryoTrainBldr._IryoProductCache.InternalCache.FirstOrDefault(x => x.Key ==
comp.product_code).Value as Products;
var productType = _IryoTrainBldr._IryoProductTypesCache.InternalCache.FirstOrDefault(x => x.Key

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23msg… 9/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
== product.productType).Value as ProducTypes;

var compl = new Complements()


{
code = comp.passenger_fares[0].tariff_code,

description = product != null ? product.description : "-----",


name = product != null ? product.name : "-----",

price = comp.passenger_fares[0].price,
isRequired = false,
typeDescription = productType != null ? (!string.IsNullOrEmpty(productType.name) ?
productType.name : productType.description) : ""
};

//Hay complementos opcionales como ACERCA (AAyuda a discapacitados, que traen opciones)

if (product.allowedSpecialRequests != null && product.allowedSpecialRequests.Count() > 0)


{
//Recuperar los datos del complemento por su fare_id
var specialRequests = comp.GetSpecialRequests();
compl.allowedSpecialRequests = new List<AllowedSpecialRequests>();

var allowedSpecialRequests = new AllowedSpecialRequests()


{
specialRequests = specialRequests
};

compl.allowedSpecialRequests.Add(allowedSpecialRequests);
}

if (comp.sales_presentation == "OS" || comp.sales_presentation == "OD" || comp.sales_presentation


== "OB" || comp.sales_presentation == "OT") //si la presentación no es por pax
{
if (comp.sales_quantity_option != "SD") // si se toma una vez por grupo o por presentación (no es
seleccionable)
{
if (!oneTimeCompDict.ContainsKey(compl.code)) //si no está en el diccionario es que no se ha
tomado
{
//agregar el complemento al pax
compl.max_to_select = 1;
compLeg.complements.Add(compl);
//agregar el elemento al diccionario
oneTimeCompDict.Add(compl.code, true);

}
else //si ya está en diccionario es porque se tomó: no se debe hacer nada
{
}
}
else // si se puede seleccionar la cantidad
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = comp.max_quantity_option == "UN" ? 999 : comp.max_quantity;
compLeg.complements.Add(compl);

}
}
else
{
if (comp.sales_quantity_option != "SD")
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = 1;
//agregar el complemento al pax
compLeg.complements.Add(compl);

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 10/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
}
else
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = comp.max_quantity_option == "UN" ? 999 : comp.max_quantity;
//agregar el complemento al pax
compLeg.complements.Add(compl);
}
};

};

};

//Ordenar por typeDescription sólo los opcionales, dejamos para el final los requeridos
compLeg.complements = compLeg.complements.OrderBy(x => x.typeDescription).ToList();

var reqComplements = GetReqAddons(addOnsReq);


compLeg.complements.AddRange(reqComplements);
response.ComplmentosIda.Add(compLeg);
}
};

if (pRequest.vuelta != null && pRequest.vuelta.Count() > 0)


{
foreach (var leg in pRequest.vuelta)
{
var oneTimeCompDict = new Dictionary<string, bool>();

foreach (var px in leg.paxs)


{
var splitted = px.train_fare.Split(new Char[] { '^' });
var iryoAddOns = SerializeExtension.DeserializeJson<Addon[]>(splitted[5]);
var addOnsReq = SerializeExtension.DeserializeJson<Addon[]>(splitted[7]);

var compLeg = new ComplementsLeg()


{
pax_fare = splitted[1],
pax_type = px.pax_type,
complements = new List<Complements>()
};

foreach (var comp in iryoAddOns)


{
if (comp.passenger_fares != null && comp.passenger_fares.Length > 0) //si hay tarifas para este
pax
{
var product = _IryoTrainBldr._IryoProductCache.InternalCache.FirstOrDefault(x => x.Key ==
comp.product_code).Value as Products;
var productType = _IryoTrainBldr._IryoProductTypesCache.InternalCache.FirstOrDefault(x =>
x.Key == product.productType).Value as ProducTypes;

var compl = new Complements()


{
code = comp.passenger_fares[0].tariff_code,

description = product != null ? product.description : "-----",


name = product != null ? product.name : "-----",

price = comp.passenger_fares[0].price,
isRequired = false,
typeDescription = productType != null ? (!string.IsNullOrEmpty(productType.name) ?
productType.name : productType.description) : ""
};

//Hay complementos opcionales como ACERCA (AAyuda a discapacitados, que traen opciones)
if (product.allowedSpecialRequests != null && product.allowedSpecialRequests.Count() > 0)
{

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 11/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
//Recuperar los datos del complemento por su fare_id
var specialRequests = comp.GetSpecialRequests();
compl.allowedSpecialRequests = new List<AllowedSpecialRequests>();

var allowedSpecialRequests = new AllowedSpecialRequests()


{
specialRequests = specialRequests
};

compl.allowedSpecialRequests.Add(allowedSpecialRequests);
}

if (comp.sales_presentation == "OS" || comp.sales_presentation == "OD" ||


comp.sales_presentation == "OB" || comp.sales_presentation == "OT") //si la presentación no es por pax
{
if (comp.sales_quantity_option != "SD") // si se toma una vez por grupo o por presentación (no
es seleccionable)
{
if (!oneTimeCompDict.ContainsKey(compl.code)) //si no está en el diccionario es que no se
ha tomado
{
//agregar el complemento al pax
compl.max_to_select = 1;
compLeg.complements.Add(compl);
//agregar el elemento al diccionario
oneTimeCompDict.Add(compl.code, true);

}
else //si ya está en diccionario es porque se tomó: no se debe hacer nada
{
}
}
else // si se puede seleccionar la cantidad
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = comp.max_quantity_option == "UN" ? 999 : comp.max_quantity;
compLeg.complements.Add(compl);

}
}
else
{
if (comp.sales_quantity_option != "SD")
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = 1;
//agregar el complemento al pax
compLeg.complements.Add(compl);

}
else
{
//ponerle la cantidad máxima a tomar
compl.max_to_select = comp.max_quantity_option == "UN" ? 999 : comp.max_quantity;
//agregar el complemento al pax
compLeg.complements.Add(compl);
}
};

};

};

//Ordenar por typeDescription sólo los opcionales, dejamos para el final los requeridos
compLeg.complements = compLeg.complements.OrderBy(x => x.typeDescription).ToList();

var reqComplements = GetReqAddons(addOnsReq);

compLeg.complements.AddRange(reqComplements);

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 12/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
response.ComplmentosVuelta.Add(compLeg);
}
};
};

return response;

private List<Complements> GetReqAddons(Addon[] addOnsReq)


{
var result = new List<Complements>();

var oneTimeCompDict = new Dictionary<string, bool>();

// Aqui falta hacer los mismo con el salespresentation y quantities que se hizo para los opcionales
foreach (var add in addOnsReq)
{
bool agregar = false;
if (add.passenger_fares != null && add.passenger_fares.Length > 0)
{

var product = _IryoTrainBldr._IryoProductCache.InternalCache.FirstOrDefault(x => x.Key ==


add.product_code).Value as Products;
var productType = _IryoTrainBldr._IryoProductTypesCache.InternalCache.FirstOrDefault(x => x.Key ==
product.productType).Value as ProducTypes;

var comp = new Complements()


{
code = add.passenger_fares[0].tariff_code,
description = product != null ? product.description : "-----",
name = product != null ? product.name : "-----",
max_to_select = add.max_quantity_option == "UN" ? 999 : add.max_quantity,
price = add.passenger_fares[0].price,
isRequired = true,
typeDescription = productType != null ? (!string.IsNullOrEmpty(productType.name) ?
productType.name : productType.description) : ""
};

if (add.sales_presentation == "OS" || add.sales_presentation == "OD" || add.sales_presentation == "OB"


|| add.sales_presentation == "OT") //si la presentación no es por pax
{
if (add.sales_quantity_option != "SD") // si se toma una vez por grupo o por presentación (no es
seleccionable)
{
if (!oneTimeCompDict.ContainsKey(comp.code)) //si no está en el diccionario es que no se ha
tomado
{
agregar = true;
//agregar el complemento al pax
comp.max_to_select = 1;
//agregar el elemento al diccionario
oneTimeCompDict.Add(comp.code, true);

}
else //si ya está en diccionario es porque se tomó: no se debe hacer nada
{
}
}
else // si se puede seleccionar la cantidad
{
//ponerle la cantidad máxima a tomar
comp.max_to_select = add.max_quantity_option == "UN" ? 999 : add.max_quantity;
agregar = true;
//compLeg.complements.Add(compl);

}
}

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 13/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
else
{
if (add.sales_quantity_option != "SD")
{
//ponerle la cantidad máxima a tomar
comp.max_to_select = 1;
//agregar el complemento al pax
agregar = true;
//compLeg.complements.Add(compl);

}
else
{
//ponerle la cantidad máxima a tomar
comp.max_to_select = add.max_quantity_option == "UN" ? 999 : add.max_quantity;
//agregar el complemento al pax
agregar = true;
//compLeg.complements.Add(compl);
}
};

if (agregar)
{
//Recuperar los datos del complemento por su fare_id
var specialRequests = add.GetSpecialRequests();
comp.allowedSpecialRequests = new List<AllowedSpecialRequests>();

var allowedSpecialRequests = new AllowedSpecialRequests()


{
specialRequests = specialRequests
};

comp.allowedSpecialRequests.Add(allowedSpecialRequests);
}

result.Add(comp);
};

}
return result;
}

/// <summary>
/// Check the train prices/ Este metododo no tiene sentido en IRyo, se devuelve lo mismo
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public static CheckPriceRs CheckPrices(CheckPriceRq pRequest)
{
CheckPriceRs response = new CheckPriceRs();
response.Trains = pRequest.Trains;

return response;
}

/// <summary>
/// Book seats
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public CreateBookingRS BookSeats(CreateBookingRQ pRequest)
{

CreateBookingRS response;
// Si no está inicializada la app, inicializarla
if (!_StartedApp) StartApp();

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 14/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)

// 0. Iniciamos el conector
// _IryoBookSeatsConn connector = new _IryoBookSeatsConn();

if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};

_iryoBookSeatsConn.ApplicationPhysicalPath = AppPath;

_iryoBookSeatsConn.Connect();

// 2. Llamar al metodo
response = _iryoBookSeatsConn.BookSeats(pRequest);

return response;

public static List<TrainCls> ClaimMinPrice(List<TrainCls> Trains)


{

List<TrainCls> retorno = null;

retorno = Trains.OrderBy(x => x.MinPrice).ToList();

return retorno;
}

public static bool SelectReturnTrainWithValidCampatibilidadMinPrice(List<PaxesCls> PaxesOutward,


List<PaxesCls> PaxesReturn)
{

bool retorno = true;

foreach (var paxesO in PaxesOutward)


{

foreach (var paxesR in PaxesReturn)


{
if (paxesO.PaxType == paxesR.PaxType && paxesO.Fares.First().FareCombinationId !=
paxesR.Fares.First().FareCombinationId)
{
retorno = false;
break;

}
}

if (!retorno) break;
}

return retorno;
}

public static string SelectReturnTrainWithValidCampatibilidad(List<PaxesCls> PaxesOutward,


List<SalesGroupCls> SalesGroupReturn)
{

string retorno = string.Empty;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 15/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
foreach (var paxesO in PaxesOutward)
{
foreach (var sgroup in SalesGroupReturn)
{
foreach (var paxesR in sgroup.Paxes)
{

if (paxesO.PaxType == paxesR.PaxType && paxesO.Fares.First().FareCombinationId ==


paxesR.Fares.First().FareCombinationId)
{
retorno = sgroup.SalesGroupCode;
break;
}
}

if (!string.IsNullOrEmpty(retorno)) break;
}

if (!string.IsNullOrEmpty(retorno)) break;
}

return retorno;
}

/// <summary>
/// Get the nearest station
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public GetStationRs GetStationByPDI(GetStationRq pRequest)
{

GetStationRs rs = new GetStationRs();

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

POICls poi = new POICls();

if (pRequest.PDI != null) poi = pRequest.PDI;


else
{
poi.X = pRequest.X;
poi.Y = pRequest.Y;
poi.Radius = pRequest.Km;

rs.Station = GetStation(string.Empty, string.Empty, poi, pRequest.LanguageID);


return rs;
}
public GetStationRs GetStationByStationCode(GetStationRq pRequest)
{

GetStationRs rs = new GetStationRs();

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

POICls poi = new POICls();

if (pRequest.PDI != null) poi = pRequest.PDI;


else
{
poi.X = pRequest.X;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 16/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
poi.Y = pRequest.Y;
poi.Radius = pRequest.Km;

rs.Station = _StationMgr.Get(pRequest.stationCode, string.Empty, poi, pRequest.LanguageID);


return rs;
}

/// <summary>
/// Just for testing purposes. Don't use.
/// </summary>
/// <param name="pRequest"></param>
/// <param name="pProcessRenfeResponse"></param>
/// <param name="renfeResponse"></param>
/// <returns></returns>
public StationCls GetStation(string pStationCode, string pPlaceId, POICls pPOI, string pLanguageID)
{
return _StationMgr.Get(pStationCode, pPlaceId, pPOI, pLanguageID);
}

public List<StationCls> GetAllStations()


{
if (!_StartedApp) StartApp();

return _StationMgr.GetAll();
}

/// <summary>
/// Check the train prices
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public void CheckPrices(object pRequestObject)
{
/*

CheckPriceConnRs response = new CheckPriceConnRs();

// Control de nulos
if (pRequestObject == null) return;
if (!(pRequestObject is CheckPriceConnRq)) return;
CheckPriceConnRq pRequest = (pRequestObject as CheckPriceConnRq);
CheckPriceConnRq pRequest2 = new CheckPriceConnRq();
//pRequest2 = (CheckPriceConnRq)pRequest.Clone();

if (pRequest.Train == null) return;


if (pRequest.TrainVuelta == null)
{
pRequest2 = null;
}
else
{
pRequest2.Train = pRequest.TrainVuelta;
pRequest2.ClassCode = pRequest.ClassCodeVuelta;
pRequest2.Fare = pRequest.FareVuelta;
}

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_CheckPriceConn connector = new _CheckPriceConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 17/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)

// 2. Llamar al metodo
response = connector.CheckPrices(pRequest, pRequest2);

// Si hubo cambio de precio


if (response.NewPrice.HasValue)
{
decimal rsPrice = Convert.ToDecimal(response.NewPrice.Value);

// Si el cambio de precio es real


if (rsPrice != pRequest.Fare.CurFareProvider)
{
pRequest.Fare.CurFareProvider = rsPrice;
pRequest.Fare.CurBaseMarkUp = rsPrice;
pRequest.Fare.CurBaseComissionable = rsPrice;

}
else
{
// Si no hubo cambio de precio
response.NewPrice = null;
}

// En caso de que haya vuelta hago la compromación del cambio de precios.


if (pRequest2 != null && response.NewPriceVuelta.HasValue)
{
decimal rsPrice = Convert.ToDecimal(response.NewPriceVuelta.Value);

// Si el cambio de precio es real


if (rsPrice != pRequest2.Fare.CurFareProvider)
{
pRequest.FareVuelta.CurFareProvider = rsPrice;
pRequest.FareVuelta.CurBaseMarkUp = rsPrice;
pRequest.FareVuelta.CurBaseComissionable = rsPrice;

}
else
{
// Si no hubo cambio de precio
response.NewPriceVuelta = null;
}

// Si hubo cambio de tarifa


if (!string.IsNullOrEmpty(response.NewFare))
{
// Si el cambio de tarifa es real
if (pRequest.Fare.FareCode != response.NewFare)
{

// Obtenemos la configuración de la tarifa


string fareCode = response.NewFare.Split('|').First();
_FareCfg fareCfg = _FareMgr.Get(fareCode);

// Si la nueva tarifa no pertenece a un grupo baneado


if (pRequest.FareSuperGroupsBanned.Contains(fareCfg.SuperGroupCode))
{
response.NoCouponsFinallyFound = true;
}
else
{
pRequest.Fare.FareCode = response.NewFare;
pRequest.Fare.FareId = fareCfg.FareID;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 18/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
pRequest.Fare.FareName = MultilingualModule.GetFareName(pRequest.Fare.FareCode,
pRequest.Fare.FareName, pRequest.LanguageID);

// Si hubo cambio de tarifa, aplicar el Pricing


RulesMgr.Instance.ApplyPricing(pRequest.Train, pRequest.ClassCode, pRequest.Fare, fareCfg,
pRequest.TravelAgencyId, pRequest.CommisionGroupId, pRequest.ProductId, pRequest.TravelNigths);

}
else
{
response.NewFare = string.Empty;
}

// Proceso el cambio de tarifas para la vuelta.


if (!string.IsNullOrEmpty(response.NewFareVuelta))
{
// Si el cambio de tarifa es real
if (pRequest.FareVuelta.FareCode != response.NewFareVuelta)
{

// Obtenemos la configuración de la tarifa


string fareCode = response.NewFare.Split('|').First();
_FareCfg fareCfg = _FareMgr.Get(fareCode);

// Si la nueva tarifa no pertenece a un grupo baneado


if (pRequest.FareSuperGroupsBanned.Contains(fareCfg.SuperGroupCode))
{
response.NoCouponsFinallyFound = true;
}
else
{
pRequest.FareVuelta.FareCode = response.NewFare;
pRequest.FareVuelta.FareId = fareCfg.FareID;
pRequest.FareVuelta.FareName = MultilingualModule.GetFareName(pRequest.FareVuelta.FareCode,
pRequest.FareVuelta.FareName, pRequest.LanguageID);

// Si hubo cambio de tarifa, aplicar el Pricing


RulesMgr.Instance.ApplyPricing(pRequest.TrainVuelta, pRequest.ClassCodeVuelta,
pRequest.FareVuelta, fareCfg, pRequest.TravelAgencyId, pRequest.CommisionGroupId, pRequest.ProductId,
pRequest.TravelNigths);
}
}
else
{
response.NewFareVuelta = string.Empty;
}

pRequest.Response = response;

*/
}

/*
/// <summary>
/// Book seats
/// </summary>
/// <param name="pRequest"></param>

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 19/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
/// <returns></returns>
public static BookSeatsConnRs BookSeats(BookSeatsConnRq pRequest)
{

BookSeatsConnRs response = new BookSeatsConnRs();

// Control de nulos
if (pRequest == null) return response;
if (pRequest.Trains == null || pRequest.Trains.Count < 1) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_BookSeatsConn connector = new _BookSeatsConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.BookSeats(pRequest);

return response;
}
*/

/// <summary>
/// Book seats
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///
/*
public static ConfirmBookConnRs ConfirmBook(ConfirmBookConnRq pRequest)
{

ConfirmBookConnRs response = new ConfirmBookConnRs();

// Control de nulos
if (pRequest == null) return response;

if (string.IsNullOrEmpty(pRequest.SeatBookingID)) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_ConfirmBookConn connector = new _ConfirmBookConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.ConfirmBook(pRequest);

return response;
}
*/

/// <summary>
/// Cancel book
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 20/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
///

public CancelBookingRS CancelBook(string pRequest, bool twoStep)


{

CancelBookingRS response = new CancelBookingRS();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
//_IryoCancelBookConn connector = new _IryoCancelBookConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoCancelBookConn.ApplicationPhysicalPath = AppPath;

_iryoCancelBookConn.Connect();

// 2. Llamar al metodo
response = _iryoCancelBookConn.CancelTickets(pRequest, twoStep);

return response;

/// <summary>
/// Buy tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public Tuple<UpdatePassengerRS, PaymentMethodsRS, PaymentAccountRS> BuyTickets(Tuple<


UpdatePassengersRQ, string, PaymentAccountRQ> pRequest, string voucher)
{

// Control de nulos

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
// _IryoBuyTicketsConn connector = new _IryoBuyTicketsConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoBuyTicketsConn.ApplicationPhysicalPath = AppPath;

// 1. Conectar
_iryoBuyTicketsConn.Connect();

// 2. Llamar al metodo

pRequest.Item1.BookingNumber = pRequest.Item2;
pRequest.Item3.bookingNumber = pRequest.Item2;

var updatePsRs = _iryoBuyTicketsConn.UpdatePassangers(pRequest.Item1);

VoucherPaymentRS voucherPayment = null;

if (voucher != null) // si viene un voucher, primero hay que pagar con el voucher
{

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 21/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
var query = new VoucherPaymentRQ
{
bookingNumber = pRequest.Item3.bookingNumber,
voucherCode = voucher
};
voucherPayment = _iryoBuyTicketsConn.VoucherPayment(query);
};

Tuple<UpdatePassengerRS, PaymentMethodsRS, PaymentAccountRS> response = null;

if (voucherPayment == null || voucherPayment.data.totalPriceToBePaid > 0)


{
var paymentRS = _iryoBuyTicketsConn.PaymentMethods(pRequest.Item1.BookingNumber);
var payacoRs = _iryoBuyTicketsConn.PaymentAccount(pRequest.Item3);
response = new Tuple<UpdatePassengerRS, PaymentMethodsRS, PaymentAccountRS>(updatePsRs,
paymentRS, payacoRs);
}
else
{
response = new Tuple<UpdatePassengerRS, PaymentMethodsRS, PaymentAccountRS>(updatePsRs, null,
null);
};

return response;
}

/// <summary>
/// Buy tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public Tuple<UpdatePassengerRS, Card3DsPaymentRS, ProcessPaymentRS> BuyTickets(Tuple<


UpdatePassengersRQ, Card3DsPaymentRQ, ProcessPaymentRQ> pRequest, string voucher)
{

// Control de nulos

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
// _IryoBuyTicketsConn connector = new _IryoBuyTicketsConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};

_iryoBuyTicketsConn.ApplicationPhysicalPath = AppPath;

_iryoBuyTicketsConn.Connect();

// 2. Llamar al metodo

var updatePsRs = _iryoBuyTicketsConn.UpdatePassangers(pRequest.Item1);

VoucherPaymentRS voucherPayment = null;

if (voucher != null) // si viene un voucher, primero hay que pagar con el voucher
{
var query = new VoucherPaymentRQ
{
bookingNumber = pRequest.Item3.bookingNumber,
voucherCode = voucher
};
voucherPayment = _iryoBuyTicketsConn.VoucherPayment(query);
};

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 22/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)

Tuple<UpdatePassengerRS, Card3DsPaymentRS, ProcessPaymentRS> response = null;

if (voucherPayment == null || voucherPayment.data.totalPriceToBePaid > 0)


{
var paymentRS = _iryoBuyTicketsConn.Card3DSPayment(pRequest.Item2);
pRequest.Item3.paymentReference = paymentRS.data.paymentResult.reference;
var payacoRs = _iryoBuyTicketsConn.ProcessPayment(pRequest.Item3);

response = new Tuple<UpdatePassengerRS, Card3DsPaymentRS, ProcessPaymentRS>(updatePsRs,


paymentRS, payacoRs);
}
else
{
response = new Tuple<UpdatePassengerRS, Card3DsPaymentRS, ProcessPaymentRS>(updatePsRs,
null, null);
};

return response;
}

/// <summary>
/// Confirm tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public ConfirmBookingRS ConfirmTickets(string bookId)


{
ConfirmBookingRS response = new ConfirmBookingRS();

// 0. Iniciamos el conector
// _IryoConfirmTicketsConn connector = new _IryoConfirmTicketsConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoConfirmTicketsConn.ApplicationPhysicalPath = AppPath;

// 1. Conectar
_iryoConfirmTicketsConn.Connect();

// 2. Llamar al metodo
response = _iryoConfirmTicketsConn.ConfirmBooking(bookId);

return response;

/// <summary>
/// Print tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public RetrieveBookingRS PrintTickets(string pRequest)


{
RetrieveBookingRS response = new RetrieveBookingRS();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 23/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
// 0. Iniciamos el conector
//_IryoPrintTicketsConn connector = new _IryoPrintTicketsConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoPrintTicketsConn.ApplicationPhysicalPath = AppPath;

_iryoPrintTicketsConn.Connect();

// 2. Llamar al metodo
response = _iryoPrintTicketsConn.PrintTickets(pRequest);

return response;
}

/// <summary>
/// Cancel tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public CancelBookingRS CancelTickets(string pRequest)


{
CancelBookingRS response = null;

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
//_IryoCancelTicketsConn connector = new _IryoCancelTicketsConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoCancelTicketsConn.ApplicationPhysicalPath = AppPath;

// 2. Llamar al metodo
response = _iryoCancelTicketsConn.CancelTickets(pRequest);

return response;
}

/// <summary>
/// Partial cancel tickets
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public object PartialCancelTickets(object pRequest)


{

object response = null;

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_IryoPartialCancelTicketsConn connector = new _IryoPartialCancelTicketsConn();

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 24/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
connector.ApplicationPhysicalPath = AppPath;

// 2. Llamar al metodo
response = connector.PartialCancelTickets(pRequest);

return response;

/// <summary>
/// Get cancel tickets price
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public object GetCancelTicketsPrice(object pRequest)


{

object response = null;

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_GetCancelTicketsPriceConn connector = new _GetCancelTicketsPriceConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
connector.ApplicationPhysicalPath = AppPath;

// 2. Llamar al metodo
response = connector.GetCancelTicketsPrice(pRequest);

return response;

// <summary>
/// Get ticket info
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>.
///
/*
public static GetTicketInfoConnRs GetTicketInfo(GetTicketInfoConnRq pRequest)
{

GetTicketInfoConnRs response = new GetTicketInfoConnRs();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_GetTicketInfoConn connector = new _GetTicketInfoConn();

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 25/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.GetTicketInfo(pRequest);

return response;

}
*/

// <summary>
/// Get Graph info to Select Seats
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
public GetGraphRs GetGraph(GetGraphRq pRequest)
{

GetGraphRs response = new GetGraphRs();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

/*
// 0. Iniciamos el conector
_GetGraphConn connector = new _GetGraphConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.GetGraph(pRequest);

*/

return response;

/// <summary>
/// Check purchase
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///
/*
public static CheckPurchaseConnRs CheckPurchase(CheckPurchaseConnRq pRequest)
{

CheckPurchaseConnRs response = new CheckPurchaseConnRs();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_CheckPurchaseConn connector = new _CheckPurchaseConn();
connector.ApplicationPhysicalPath = AppPath;

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 26/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.CheckPurchase(pRequest);

return response;
}
*/

/// <summary>
/// Check purchase
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///

public SearchBookingsRS GetAgencyTicketsSales(string pRequest)


{

SearchBookingsRS response = new SearchBookingsRS();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
//_IryoGetAgencyTicketsSalesConn connector = new _IryoGetAgencyTicketsSalesConn();
if (AppPath == null)
{
AppPath = ConfigurationManager.AppSettings["AppPath"];
};
_iryoGetAgencyTicketsSalesConn.ApplicationPhysicalPath = AppPath;

// 1. Conectar
_iryoGetAgencyTicketsSalesConn.Connect();

// 2. Llamar al metodo
response = _iryoGetAgencyTicketsSalesConn.GetAgencyTicketsSales(pRequest);

return response;
}

public GetRoutesRs GetRoutes(GetRoutesRq pRequest)


{
if (pRequest.DepartureStation == "MADRI")
pRequest.DepartureStation = "60000";

if (pRequest.ArrivalStation == "MADRI")
pRequest.ArrivalStation = "60000";

if (pRequest.DepartureStation == "BARCE")
pRequest.DepartureStation = "71801";

if (pRequest.ArrivalStation == "BARCE")
pRequest.ArrivalStation = "71801";
//_IryoGetRoutesConn connector = new _IryoGetRoutesConn();
_iryoGetRoutesConn.Connect();
var internalResult = _iryoGetRoutesConn.GetRoutes(pRequest.DepartureStation, pRequest.ArrivalStation);

return RoutesBuilder.ConvertToDomain(internalResult);
}

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 27/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
/// <summary>
/// Check purchase
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///
/*
public static GetTrainComplementsConnRS GetTrainComplements(GetTrainComplementsConnRq pRequest)
{

GetTrainComplementsConnRS response = new GetTrainComplementsConnRS();

// Control de nulos
if (pRequest == null) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_GetTrainComplementsConn connector = new _GetTrainComplementsConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.GetTrainComplements(pRequest);

return response;

}
*/

/// <summary>
/// Book seats
/// </summary>
/// <param name="pRequest"></param>
/// <returns></returns>
///
/*
public static BookSeatsGraphConnRs BookSeatsGraph(BookSeatsGraphConnRq pRequest)
{

BookSeatsGraphConnRs response = new BookSeatsGraphConnRs();

// Control de nulos
if (pRequest == null) return response;
if (pRequest.Trains == null || pRequest.Trains.Count < 1) return response;

// Si no está inicializada la app, inicializarla


if (!_StartedApp) StartApp();

// 0. Iniciamos el conector
_BookSeatsGraphConn connector = new _BookSeatsGraphConn();
connector.ApplicationPhysicalPath = AppPath;

// 1. Conectar
connector.Connect(pRequest.Credentials);

// 2. Llamar al metodo
response = connector.BookSeatsGraph(pRequest);

return response;

}
*/

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 28/29
24/10/24, 10:16 Correo de EMOVEERE CONSULTING - (sin asunto)
}
}

https://mail.google.com/mail/u/0/?ik=008608e040&view=pt&search=drafts&permmsgid=msg-a:r7863908847553903134&dsqt=1&simpl=%23ms… 29/29

You might also like