public virtual APIResult <FidelityReward> GiveReward(string rewardId, string campaignId, string customerId) { APIResult <FidelityReward> res = new APIResult <FidelityReward>(); FidelityCustomer customer; if (customerId == null) { customer = GetCustomerFromAuthenticatedUser(); } else { customer = GetCustomerFromIdOrEmail(customerId); } if (customer != null) { FidelityReward reward = new FidelityReward(); reward.Id = rewardId; FidelityCampaign campaign = new FidelityCampaign(); campaign.Id = campaignId; APIResult <bool> resGive = _sendService.SendGiveReward(settingsPart, customer, reward, campaign); if (!resGive.success) { res = new APIResult <FidelityReward> { success = false, data = null, message = resGive.message }; } else { APIResult <FidelityCampaign> resCamp = _sendService.SendCampaignData(settingsPart, campaign); if (!resCamp.success) { res = new APIResult <FidelityReward> { success = false, data = null, message = resCamp.message }; } else { res.message = resGive.message; res.success = resGive.success; res.data = resCamp.data.Rewards.Where(r => r.Id.Equals(rewardId)).First(); } } } else { res = new APIResult <FidelityReward> { success = false, data = null, message = "The user is not configured to use " + GetProviderName() }; } _workflowManager.TriggerEvent("RedeemFidelityReward", null, () => new Dictionary <string, object> { { "result", res } }); return(res); }