Example #1
0
        private static object ResolveIncludeRightSizer(ICampaignCreatedOrUpdated source)
        {
            if (!source.IncludeRightSizer.TryGetValueFromDescription <IncludeRightSizer>(out var value))
            {
                return(false);
            }

            switch (value)
            {
            case IncludeRightSizer.No:
                return(false);

            case IncludeRightSizer.CampaignLevel:
            case IncludeRightSizer.DetailLevel:
                return(true);

            default:
                return(false);
            }
        }
Example #2
0
        public static void ValidateCampaign(ICampaignCreatedOrUpdated campaign, ValidateContext context)
        {
            var isValidIncludeRightRizer = EnumUtilities.ToDescriptionList <IncludeRightSizer>()
                                           .Select(value => value.ToUpperInvariant())
                                           .Contains(campaign.IncludeRightSizer.ToUpperInvariant());

            if (!isValidIncludeRightRizer)
            {
                throw new DataSyncException(DataSyncErrorCode.InvalidRightSizer, $"Invalid right sizer value: ${campaign.IncludeRightSizer}");
            }

            ValidateCampaignPassPriority(campaign.IncludeOptimisation, campaign.CampaignPassPriority);

            if (!context.ExistingDemographics.Contains(campaign.DemoGraphic))
            {
                throw new DataSyncException(DataSyncErrorCode.DemographicNotFound, $"Invalid Demographic in Campaign: {campaign.DemoGraphic}");
            }

            if (!context.Products.Contains(campaign.Product))
            {
                throw new DataSyncException(DataSyncErrorCode.ProductNotFound, $"Invalid Product in Campaign: {campaign.Product}");
            }

            if (campaign.BreakType?.Any() == true)
            {
                CommonValidations.ValidateBreakType(context.BreakTypes, campaign.BreakType);
            }

            if (campaign.SalesAreaCampaignTarget != null && campaign.SalesAreaCampaignTarget.Any())
            {
                var salesAreas = campaign.SalesAreaCampaignTarget
                                 .Where(s => s.SalesAreaGroup?.SalesAreas != null && s.SalesAreaGroup.SalesAreas.Any())
                                 .SelectMany(s => s.SalesAreaGroup.SalesAreas)
                                 .ToArray();

                if (salesAreas.Any())
                {
                    CommonValidations.ValidateSalesArea(context.ExistingSalesAreas, salesAreas);
                }
            }

            if (campaign.ProgrammeRestrictions != null && campaign.ProgrammeRestrictions.Any())
            {
                var salesAreas = campaign.ProgrammeRestrictions.Where(p => p.SalesAreas != null && p.SalesAreas.Any())
                                 .SelectMany(p => p.SalesAreas)
                                 .ToArray();

                if (salesAreas.Any())
                {
                    CommonValidations.ValidateSalesArea(context.ExistingSalesAreas, salesAreas);
                }

                var categoryNames = campaign.ProgrammeRestrictions
                                    .Where(p => p.IsCategoryOrProgramme.Equals(CategoryOrProgramme.C.ToString(), StringComparison.OrdinalIgnoreCase))
                                    .SelectMany(p => p.CategoryOrProgramme)
                                    .ToArray();

                if (categoryNames.Any())
                {
                    CommonValidations.ValidateProgrammeCategory(context.ProgrammeCategories, categoryNames);
                }
            }

            if (campaign.TimeRestrictions != null && campaign.TimeRestrictions.Any())
            {
                var salesAreas = campaign.TimeRestrictions
                                 .Where(p => p.SalesAreas != null && p.SalesAreas.Any())
                                 .SelectMany(p => p.SalesAreas)
                                 .ToArray();

                if (salesAreas.Any())
                {
                    CommonValidations.ValidateSalesArea(context.ExistingSalesAreas, salesAreas);
                }
            }

            if (campaign.BookingPositionGroups?.Any() == true)
            {
                ValidateBookingPositionGroups(campaign.BookingPositionGroups, context);

                var salesAreas = campaign.BookingPositionGroups
                                 .Where(p => p.SalesAreas != null && p.SalesAreas.Any())
                                 .SelectMany(p => p.SalesAreas)
                                 .ToArray();

                if (salesAreas.Any())
                {
                    CommonValidations.ValidateSalesArea(context.ExistingSalesAreas, salesAreas);
                }
            }
        }