Пример #1
0
            /// <summary>
            /// Validate date against validation period.
            /// </summary>
            /// <param name="validationType">Validation type.</param>
            /// <param name="validationPeriod">Validation period.</param>
            /// <param name="startDate">Pricing start date.</param>
            /// <param name="endDate">Pricing end date.</param>
            /// <param name="dateToCheck">Date to check.</param>
            /// <returns>True if it's valid.</returns>
            public static bool ValidateDateAgainstValidationPeriod(DateValidationType validationType, ValidationPeriod validationPeriod, DateTimeOffset startDate, DateTimeOffset endDate, DateTimeOffset dateToCheck)
            {
                InternalValidationPeriod validation;
                bool promoPeriodValid = false;

                switch (validationType)
                {
                case DateValidationType.Advanced:
                    validation       = InternalValidationPeriod.CreateAdvanced(validationPeriod);
                    promoPeriodValid = validation.IsActive(dateToCheck);
                    break;

                case DateValidationType.Standard:
                    validation       = InternalValidationPeriod.CreateStandard(startDate: startDate, endDate: endDate);
                    promoPeriodValid = validation.IsActive(dateToCheck);
                    break;

                default:
                    throw new ArgumentOutOfRangeException("validationType", "Invalid Discount Validation Type: " + validationType);
                }

                return(promoPeriodValid);
            }
            private Boolean CanAddElement(CompensationProvision element, DateValidationType dateValidationType)
            {
                Boolean isValid = false;
                switch (dateValidationType)
                {
                    case DateValidationType.ALL:
                        isValid = true;
                        break;
                    case DateValidationType.HISTORICAL:
                        if (DateTime.Compare(element.ValidTo, DateTime.Now) < 0)
                        {
                            isValid = true;
                        }
                        break;
                    case DateValidationType.ACTIVE:
                        if (!element.IsClosed &&
                            DateTime.Compare(element.ValidFrom, DateTime.Now) < 0 &&
                            DateTime.Compare(element.ValidTo, DateTime.Now) > 0)
                        {
                            isValid = true;
                        }
                        break;
                    case DateValidationType.ACTIVE_AND_FUTURE:
                        if (!element.IsClosed)
                        {
                            if (DateTime.Compare(element.ValidFrom, DateTime.Now) < 0 &&
                                DateTime.Compare(element.ValidTo, DateTime.Now) > 0) //Active
                            {
                                isValid = true;
                            }
                            if (DateTime.Compare(element.ValidFrom, DateTime.Now) > 0) //Future
                            {
                                isValid = true;
                            }
                        }
                        break;
                    case DateValidationType.FUTURE:
                        if (!element.IsClosed &&
                            DateTime.Compare(element.ValidFrom, DateTime.Now) > 0)
                        {
                            isValid = true;
                        }
                        break;
                    default:
                        isValid = false;
                        break;
                }

                return isValid;
            }
            public IEnumerable<CompensationProvision> MatchingOffers(Somebody offeror,
                Something persistentObject,
                DateValidationType dateValidationType)
            {
                if (offeror == null || persistentObject == null)
                {
                    throw new ArgumentException("Missing offeror or object in price evaluation.");
                }

                List<CompensationProvision> validElements = new List<CompensationProvision>();
                IEnumerable<CompensationProvision> offerCandidates = GetOffers(persistentObject);

                foreach (CompensationProvision cod in offerCandidates)
                {
                    //Validate participating parts
                    if (!cod.AgreedCompensation.IsSomebodyAValidOfferor(offeror))
                    {
                        continue; //No match, check next offer.
                    }
                    if (CanAddElement(cod, dateValidationType))
                    {
                        validElements.Add(cod);
                    }
                }
                return validElements;
            }