public ValidationResult NewValidationResultFromRepo(val_validationresult result)
 {
     return(new ValidationResult
     {
         Id = result.Id,
         ProductId = result.ProductId,
         EventId = result.EventId,
         EventName = result.EventName,
         ValidationSettingId = result.ValidationSettingId,
         LeagueName = result.LeagueName,
         LeagueId = result.LeagueId,
         LocationName = result.LocationName,
         LocationId = result.LocationId,
         Market = result.Market,
         Provider = result.Provider,
         SportName = result.SportName,
         SportId = result.SportId,
         Status = result.Status,
         LastUpdate = result.LastUpdate,
         UpdatedOn = result.UpdatedOn,
         XmlMessage = "",
         PointsToHighline = result.PointsToHighline,
         Counter = result.Counter,
         IsActive = result.IsActive,
         CreatedOn = result.CreatedOn
     });
 }
        public ValidationResultsHashModel NewRepositoryValidationResultFrom(ArrayList results, ValidationSetting setting, Event @event, string market, string provider)
        {
            var ruleResults = results.Cast <RuleResultDTO>().ToArray();

            ruleResults = ruleResults.DistinctBy(x => x.PointToHighline).ToArray();

            var pointToHighline = "";

            if (setting.IsContainsRuleForAllNodes)
            {
                pointToHighline = string.Join("|",
                                              ruleResults.Where(x => x.IsIssue && x.Rule.IsForAllNodes == false).Select(x => x.PointToHighline.ToString()).Distinct());

                var groupsByNodeName = ruleResults.Where(x => x.IsIssue && x.Rule.IsForAllNodes).GroupBy(x => x.ParentNodeName);

                foreach (var groupByNodeName in groupsByNodeName)
                {
                    var groupsByRuleId = groupByNodeName.GroupBy(x => x.Rule.Id).ToArray();

                    var maxCount = groupsByRuleId.Max(x => x.Count());

                    foreach (var grouping in groupsByRuleId)
                    {
                        if (grouping.Count() == maxCount)
                        {
                            foreach (var ruleResultDto in grouping)
                            {
                                pointToHighline += "|" + ruleResultDto.PointToHighline.ToString();
                            }
                        }
                    }
                }
            }
            else
            {
                pointToHighline = string.Join("|",
                                              ruleResults.Where(x => x.IsIssue).Select(x => x.PointToHighline.ToString()).Distinct());
            }

            string markets   = "";
            string providers = "";

            bool isContainsSingleProvider = true;
            bool isContainsSingleMarket   = true;

            var resultWithMarket = ruleResults.FirstOrDefault(x => x.IsMarket || x.Market != "");

            if (resultWithMarket != null)
            {
                var resultWithProvider = ruleResults.FirstOrDefault(x => x.IsProvider || x.Provider != "");
                if (resultWithProvider != null)
                {
                    markets   = market;
                    providers = provider;
                }
                else
                {
                    isContainsSingleProvider = false;

                    markets = market;

                    // select all providers
                    var bookmakers     = resultWithMarket.ParentXElement.XPathSelectElements(BookmakerName);
                    var withAttributes = bookmakers.Where(x => x.HasAttributes);

                    List <string> names = new List <string>();

                    foreach (var withAttribute in withAttributes)
                    {
                        var nameAttr = withAttribute.Attribute("name");
                        if (nameAttr != null)
                        {
                            names.Add(nameAttr.Value);
                        }
                    }

                    if (names.Count > 0)
                    {
                        providers = string.Join(", ", names);
                    }
                }
            }
            else
            {
                isContainsSingleMarket = false;

                /*
                 * // select all markets and providers
                 * if (@event.MarketNames != null)
                 * {
                 *  markets = string.Join(",", @event.MarketNames.Distinct());
                 * }
                 * if (@event.ProviderNames != null)
                 * {
                 *  providers = string.Join(",", @event.ProviderNames.Distinct());
                 * }
                 */
            }

            var result = new val_validationresult
            {
                EventId             = (long)@event.EventId,
                Status              = @event.Status,
                LeagueName          = @event.LeagueName,
                EventName           = @event.BuildEventName(),
                LastUpdate          = @event.LastUpdate,
                LocationName        = @event.LocationName,
                SportName           = @event.SportName,
                CreatedBy           = "Admin",
                UpdatedBy           = "Admin",
                CreatedOn           = DateTime.UtcNow,
                UpdatedOn           = DateTime.UtcNow,
                ProductId           = (int)setting.ProductId,
                Market              = markets,
                Provider            = providers,
                ValidationSettingId = setting.Id,
                PointsToHighline    = pointToHighline,
                IsActive            = true
            };

            // XmlMessage = string.Join("|", resultsWithoutMarketAndProviderDTO.Select(x => x.OuterXml)),

            if (@event.LeagueId != null)
            {
                result.LeagueId = (long)@event.LeagueId;
            }
            if (@event.SportId != null)
            {
                result.SportId = (long)@event.SportId;
            }
            if (@event.LocationId != null)
            {
                result.LocationId = (long)@event.LocationId;
            }

            return(new ValidationResultsHashModel
            {
                ContainsSingleMarket = isContainsSingleMarket,
                ContainsSingleProvider = isContainsSingleProvider,
                Result = result
            });
        }