private bool IsPropertyTitleIdsAssociatedwithAiringTitleIds(Airing.Model.Airing airing, Property property) { var titleIds = airing.Title.TitleIds.Where(t => t.Authority == "Turner").Select(t => int.Parse(t.Value)).ToList(); if (airing.Title.Series != null && airing.Title.Series.Id.HasValue) { titleIds.Add(airing.Title.Series.Id.Value); } if (airing.Title.RelatedTitleIds != null && airing.Title.RelatedTitleIds.Any()) { titleIds.AddRange(airing.Title.RelatedTitleIds.Where(t => t.Authority == "Turner").Select(t => int.Parse(t.Value))); } if (titleIds.Any()) { if (!property.TitleIds.Any(titleIds.Contains)) { return(false); } } else { return(false); } return(true); }
/// <summary> /// Get Destination properties,categories and deliverables to airing /// </summary> /// <param name="airing">airing</param> public void GetAiringDestinationRelatedData(ref Airing.Model.Airing airing) { foreach (var flight in airing.Flights) { var destinationNames = flight.Destinations.Select(d => d.Name).Distinct().ToList(); var dbDestinations = (destinationHelper.GetByDestinationNames(destinationNames) .Distinct(new DestinationDataModelComparer()).ToList(). ToViewModel <List <DLModel.Destination>, List <BLModel.Destination> >()); foreach (Airing.Model.Destination des in flight.Destinations) { foreach (BLModel.Destination dbDes in dbDestinations) { if (dbDes.Name == des.Name) { des.Properties = dbDes.Properties.ToBusinessModel <List <BLModel.Property>, List <Property> >(); if (dbDes.Categories.Any()) // Adding Categories into properties list. To save both categories and properties in a single list { des.Properties.AddRange(dbDes.Categories.ToBusinessModel <List <BLModel.Category>, List <Property> >()); } des.Deliverables = dbDes.Deliverables.ToBusinessModel <List <BLModel.Deliverable>, List <Deliverable> >(); } } } } }
private void GetFlowValuesforAiring(ref Airing.Model.Airing airing) { List <int> titleIds = airing.Title.TitleIds .Where(t => t.Authority == "Turner" && t.Value != null) .Select(t => int.Parse(t.Value)).ToList(); titleIds.AddRange(airing.Title.RelatedTitleIds.Where(t => t.Authority == "Turner").Select(t => int.Parse(t.Value)).ToList()); List <Airing.Model.Alternate.Title.Title> titles = new List <Airing.Model.Alternate.Title.Title>(); if (!airing.FlowTitleData.Any()) // Fetch when flowData is not available { titles = GetFlowTitlesFor(titleIds); airing.FlowTitleData = titles; } }
public void ProductDestinationConverter(ref Airing.Model.Airing airing) { foreach (var flight in airing.Flights) { var products = productHelper.GetByProductIds(flight.Products.Select(p => p.ExternalId).ToList()); var destinationMapping = products.SelectMany(product => product.Destinations, (product, destination) => new { DestinationName = destination, AuthorizationRequired = flight.Products.Where(p => p.ExternalId.Equals(product.ExternalId)).FirstOrDefault().IsAuth }); var destinationData = destionationQueryHelper .GetByDestinationNames(destinationMapping.Select(d => d.DestinationName).ToList()) .Distinct(new DestinationDataModelComparer()) .ToList(); AddCategoriesToDestinationProperties(destinationData); AddContentTierToDestinationProperties(destinationData, products); var destinations = destinationData.ToDataModel <List <DLDestinationModel.Destination>, List <DLAiringModel.Destination> >(); foreach (var destination in destinations) { //if there are multiple destinations with the same name, the least restrictive (isAuth=false) will win if (destinationMapping.Where(dm => dm.DestinationName.Equals(destination.Name)).Count() > 1 && destinationMapping.Any(dm => dm.DestinationName.Equals(destination.Name) && !dm.AuthorizationRequired)) { destination.AuthenticationRequired = false; } else { destination.AuthenticationRequired = destinationMapping.Where(dm => dm.DestinationName.Equals(destination.Name)).FirstOrDefault().AuthorizationRequired; } } flight.Destinations = destinations.ToBusinessModel <List <DLAiringModel.Destination>, List <BLAiringModel.Destination> >(); } }
/// <summary> /// Fliter Destination properties, deliverables and categories.Then transform the tokens. /// Finally, append results to the provided airing /// </summary> /// <param name="airing">airing</param> public void FilterDestinationPropertiesDeliverablesAndCategoriesAndTransformTokens(ref Airing.Model.Airing airing) { foreach (var flight in airing.Flights) { foreach (var destination in flight.Destinations) { // Filter out the properties based on selected brand(s) and title(s) var propertiesToRemove = new List <Property>(); foreach (var property in destination.Properties) { if (property.Brands.Any() && !property.Brands.Contains(airing.Network)) //airing and property brand should be same { propertiesToRemove.Add(property); continue; } if (property.TitleIds.Any()) { if (!IsPropertyTitleIdsAssociatedwithAiringTitleIds(airing, property)) // Any one of the title Id should match { propertiesToRemove.Add(property); } } } destination.Properties = destination.Properties.Where(p => !propertiesToRemove.Contains(p)).ToList(); //remove unmatched properties // Check if the tokens identified in deliverables or properties require flow data bool isFlowDataRequired = CheckDelvierablesandPropertiesRequiresFlowTitle(destination); if (isFlowDataRequired) { GetFlowValuesforAiring(ref airing); } // Now transform/subsitute tokens identified in properties & deliverables with actual values new DeliverableFormatter(airing).Format(destination); // destinations passed by reference for formatting to transform Deliverable tokens new PropertyFormatter(airing).Format(destination); // destinations passed by reference for formatting to transform property tokens destination.Deliverables = destination.Deliverables.Where(x => x.Value != string.Empty).ToList(); // remove the empty tokens } } }