Exemplo n.º 1
0
        private EffectiveRecipientSettings GetEffectiveSettings(Guid recipientId, Definition definition, Category category)
        {
            var settings          = _settingsQuery.GetSettings(recipientId, definition.Id, category == null ? (Guid?)null : category.Id);
            var effectiveSettings = new EffectiveRecipientSettings();

            // Category.

            if (settings != null && settings.CategorySettings.Count > 0)
            {
                var categorySettings = settings.CategorySettings[0];
                effectiveSettings.Timing    = category != null ? category.Timing : Timing.Notification;
                effectiveSettings.Frequency = categorySettings.Frequency ?? (category != null ? category.DefaultFrequency : Frequency.Immediately);
            }
            else
            {
                effectiveSettings.Timing    = category != null ? category.Timing : Timing.Notification;
                effectiveSettings.Frequency = category != null ? category.DefaultFrequency : Frequency.Immediately;
            }

            // Definition.

            if (settings != null && settings.DefinitionSettings.Count > 0)
            {
                effectiveSettings.LastSentTime = settings.DefinitionSettings[0].LastSentTime;
            }

            return(effectiveSettings);
        }
Exemplo n.º 2
0
        private static bool DefinitionCheck(EffectiveRecipientSettings settings, DateTime?notIfLastSentLaterThanThis)
        {
            // If the user has received a communication of this type recently then don't send.

            if (settings.LastSentTime != null && notIfLastSentLaterThanThis != null)
            {
                if (settings.LastSentTime.Value > notIfLastSentLaterThanThis.Value)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 3
0
        private static bool ShouldSend(EffectiveRecipientSettings settings, DateTime?notIfLastSentLaterThanThis)
        {
            // Check the category settings.

            if (!CategoryCheck(settings))
            {
                return(false);
            }

            // Check the definition settings.

            if (!DefinitionCheck(settings, notIfLastSentLaterThanThis))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 4
0
        private static bool CategoryCheck(EffectiveRecipientSettings settings)
        {
            switch (settings.Timing)
            {
            case Timing.Notification:

                // If the user has explicitly set a notification to never then don't send it.

                if (settings.Frequency == Frequency.Never)
                {
                    return(false);
                }
                break;

            case Timing.Periodic:

                // Never means don't send.

                if (settings.Frequency == Frequency.Never)
                {
                    return(false);
                }

                // If it is to be sent immediately then send it.

                if (settings.Frequency == Frequency.Immediately)
                {
                    return(true);
                }

                // If it hasn't been sent then send now.

                if (settings.LastSentTime == null)
                {
                    return(true);
                }

                // If it was last sent within the period then don't send now.

                var lastSentDate = settings.LastSentTime.Value.Date;
                int days;
                switch (settings.Frequency)
                {
                case Frequency.Monthly:
                    days = 30;
                    break;

                case Frequency.Weekly:
                    days = 7;
                    break;

                default:
                    days = 1;
                    break;
                }

                if (DateTime.Now.Date.AddDays(-1 * days) < lastSentDate)
                {
                    return(false);
                }
                break;
            }

            return(true);
        }