예제 #1
0
        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);
        }
예제 #2
0
        /// <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> >();
                        }
                    }
                }
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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> >();
            }
        }
예제 #5
0
        /// <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
                }
            }
        }