Example #1
0
        /// <summary>
        /// Gets the hash code for this object.
        /// </summary>
        /// <returns>
        /// The hash code for this object.
        /// </returns>
        /// <remarks>
        /// * CA2218:
        ///   * If two objects are equal in value based on the Equals override, they must both return the same value for calls
        ///     to GetHashCode.
        ///   * GetHashCode must be overridden whenever Equals is overridden.
        /// * It is fine if the value overflows.
        /// </remarks>
        public override int GetHashCode()
        {
            int result = Id.GetHashCode() +
                         ReferrerId.GetHashCode() +
                         ReferrerType.GetHashCode() +
                         ReferralVector.GetHashCode() +
                         RewardRecipient.GetHashCode() +
                         Code.GetHashCode();

            foreach (ReferralEventReward referralEventReward in ReferralEventRewards)
            {
                result += referralEventReward.GetHashCode();
            }

            return(result);
        }
        /// <summary>
        /// Populate the specified ReferralType from the specified ReferralTypeDataContract.
        /// </summary>
        /// <param name="referralTypeDataContract">
        /// The ReferralTypeDataContract to use to populate the ReferralType.
        /// </param>
        /// <param name="referralType">
        /// The ReferralType to populate.
        /// </param>
        /// <returns>
        /// The result of the operation.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// * Parameter referralTypeDataContract cannot be null.
        /// -OR-
        /// * Parameter referralType cannot be null.
        /// </exception>
        protected internal ResultCode BuildReferralType(ReferralTypeDataContract referralTypeDataContract,
                                                        ReferralType referralType)
        {
            if (referralTypeDataContract == null)
            {
                throw new ArgumentNullException("referralTypeDataContract", "Parameter referralTypeDataContract cannot be null.");
            }

            if (referralType == null)
            {
                throw new ArgumentNullException("referralType", "Parameter referralType cannot be null.");
            }

            ResultCode result = ResultCode.Success;

            ReferralVector  referralVector  = ReferralVector.Twitter;
            RewardRecipient rewardRecipient = RewardRecipient.Referrer;
            ReferralEvent   referralEvent   = ReferralEvent.Signup;
            bool            stepResult      = true;

            stepResult = Enum.TryParse <ReferralVector>(referralTypeDataContract.ReferralVector, true, out referralVector);
            if (stepResult == true)
            {
                referralType.ReferralVector = referralVector;

                stepResult = Enum.TryParse <RewardRecipient>(referralTypeDataContract.RewardRecipient, true, out rewardRecipient);
            }
            if (stepResult == true)
            {
                referralType.RewardRecipient = rewardRecipient;

                stepResult = referralTypeDataContract.ReferralEventRewards != null;
            }
            if (stepResult == true)
            {
                Dictionary <ReferralEvent, bool> registeredEvents = new Dictionary <ReferralEvent, bool>();

                foreach (ReferralEventRewardDataContract referralEventRewardDataContract
                         in referralTypeDataContract.ReferralEventRewards)
                {
                    ReferralEventReward referralEventReward = new ReferralEventReward();

                    stepResult = Enum.TryParse <ReferralEvent>(referralEventRewardDataContract.ReferralEvent, true,
                                                               out referralEvent);
                    if (stepResult == true)
                    {
                        if (registeredEvents.ContainsKey(referralEvent) == false)
                        {
                            registeredEvents[referralEvent] = true;
                        }
                        else
                        {
                            stepResult = false;
                        }
                    }
                    if (stepResult == true)
                    {
                        referralEventReward.ReferralEvent = referralEvent;

                        stepResult = referralEventRewardDataContract.RewardId != Guid.Empty;
                    }
                    if (stepResult == true)
                    {
                        referralEventReward.RewardId = referralEventRewardDataContract.RewardId;

                        stepResult = referralEventRewardDataContract.PerUserLimit >= 0;
                    }
                    if (stepResult == true)
                    {
                        referralEventReward.PerUserLimit = referralEventRewardDataContract.PerUserLimit;

                        referralType.ReferralEventRewards.Add(referralEventReward);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if (stepResult == true)
            {
                stepResult = referralType.ReferralEventRewards.Count > 0;
            }
            if (stepResult == true)
            {
                Context[Key.ReferralType] = referralType;
                ReferralType = referralType;
            }
            else
            {
                result = ResultCode.InvalidParameter;
            }

            return(result);
        }