/// <summary> /// Build the ReferralType from the ReferralTypeDataContract. /// </summary> /// <returns> /// The result of the operation. /// </returns> protected virtual ResultCode BuildReferralType() { ResultCode result = ResultCode.Success; string passedRewardRecipient = ((int)Context[Key.RewardRecipient]).ToString(); string rewardRecipient = ((RewardRecipient)Context[Key.RewardRecipient]).ToString(); if (passedRewardRecipient != rewardRecipient) { ReferralEventRewardDataContract signupReward = new ReferralEventRewardDataContract { ReferralEvent = ReferralEvent.Signup.ToString(), RewardId = CommerceServiceConfig.Instance.UserSignupReferralRewardId, PerUserLimit = 0 // No limit }; List <ReferralEventRewardDataContract> referalEventRewards = new List <ReferralEventRewardDataContract> { signupReward }; ReferralTypeDataContract referralTypeDataContract = new ReferralTypeDataContract { ReferralVector = ReferralVector.Unknown.ToString(), RewardRecipient = rewardRecipient, ReferralEventRewards = referalEventRewards }; ReferralType referralType = new ReferralType() { ReferrerId = (Guid)Context[Key.GlobalUserId], ReferrerType = ReferrerType.User }; result = BuildReferralType(referralTypeDataContract, referralType); } else { result = ResultCode.InvalidParameter; } 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); }