public async Task <int> AddUserLoyaltyPointsHistory(UserLoyaltyPointsHistoryViewModel model) { try { var userloyalityInfo = await FindAsync(new { id = model.id }); if (userloyalityInfo == null) { userloyalityInfo = new UserLoyaltyPointsHistory(); } userloyalityInfo.transactionId = model.transactionId; userloyalityInfo.transactionAmount = model.transactionAmount; userloyalityInfo.transactionDate = DateTime.Now; userloyalityInfo.rewardAmount = model.rewardAmount; userloyalityInfo.pointsEarned = model.pointsEarned; userloyalityInfo.totalPoints = model.totalPoints; userloyalityInfo.leftOverPoints = model.leftOverPoints; userloyalityInfo.createdDate = DateTime.Now; userloyalityInfo.isThresholdReached = model.isThresholdReached; userloyalityInfo.userId = model.userId; var Id = await InsertOrUpdateAsync(userloyalityInfo, new { id = model.id > 0 ? model.id : 0 }); return(Id); } catch (Exception) { throw; } }
// [Authorize] public async Task <IActionResult> AddUserLoyaltyPoints(UserLoyaltyPointsHistoryViewModel model) { try { var usertype = await _userRepository.GetUserType(Convert.ToInt32(model.userId)); decimal firsttransactionbonus = 0; var setting = (await _generalSettingService.GetGeneralSettingValueByKeyName(Constants.GeneralSettingsConstants.UserFirstTransactionBonus)).FirstOrDefault(); firsttransactionbonus = Convert.ToDecimal(setting.Value); var organisationId = Convert.ToInt32(_configuration["SodexhoOrgId"]); //get loyaltysettings var getGlobalSettings = (await _loyalityGlobalSetting.GetOrgLoyalityGlobalSettings(organisationId)).ToList().FirstOrDefault(); var getsitelevelsettingsinfo = (await _siteLevelOverrideSetting.GetSiteLevelOverrideSettingsByUserProgId(Convert.ToInt32(model.userId))).ToList().FirstOrDefault(); var getuserLoyaltypointsinfo = (await _userLoyaltyPointsHistoryInfo.GetUserLoyaltyPointsHistory(Convert.ToInt32(model.userId))).ToList(); //points calculation if (usertype == "vip") { if (getuserLoyaltypointsinfo.Count() > 0) { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusVipRatio * getsitelevelsettingsinfo.siteLevelBitePayRatio * model.transactionAmount); } else { model.pointsEarned = (getGlobalSettings.userStatusVipRatio * getGlobalSettings.bitePayRatio * model.transactionAmount); } } else { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusVipRatio * getsitelevelsettingsinfo.siteLevelBitePayRatio * model.transactionAmount) + firsttransactionbonus; } else { model.pointsEarned = (getGlobalSettings.userStatusVipRatio * getGlobalSettings.bitePayRatio * model.transactionAmount) + firsttransactionbonus; } } } else if (usertype == "bite pay") { if (getuserLoyaltypointsinfo.Count() > 0) { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusRegularRatio * getsitelevelsettingsinfo.siteLevelBitePayRatio * model.transactionAmount); } else { model.pointsEarned = (getGlobalSettings.userStatusRegularRatio * getGlobalSettings.bitePayRatio * model.transactionAmount); } } else { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusRegularRatio * getsitelevelsettingsinfo.siteLevelBitePayRatio * model.transactionAmount) + firsttransactionbonus; } else { model.pointsEarned = (getGlobalSettings.userStatusRegularRatio * getGlobalSettings.bitePayRatio * model.transactionAmount) + firsttransactionbonus; } } } else { if (getuserLoyaltypointsinfo.Count() > 0) { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusRegularRatio * getsitelevelsettingsinfo.siteLevelDcbFlexRatio * model.transactionAmount); } else { model.pointsEarned = (getGlobalSettings.userStatusRegularRatio * getGlobalSettings.dcbFlexRatio * model.transactionAmount); } } else { if (getsitelevelsettingsinfo != null) { model.pointsEarned = (getsitelevelsettingsinfo.siteLevelUserStatusRegularRatio * getsitelevelsettingsinfo.siteLevelDcbFlexRatio * model.transactionAmount) + firsttransactionbonus; } else { model.pointsEarned = (getGlobalSettings.userStatusRegularRatio * getGlobalSettings.dcbFlexRatio * model.transactionAmount) + firsttransactionbonus; } } } if (getuserLoyaltypointsinfo.Count > 0) { foreach (var obj in getuserLoyaltypointsinfo) { if (obj.leftOverPoints == 0) { model.totalPoints = model.pointsEarned + obj.totalPoints; } else { model.totalPoints = model.pointsEarned + obj.leftOverPoints; model.isThresholdReached = false; } } } else { model.totalPoints = model.pointsEarned; model.isThresholdReached = false; model.leftOverPoints = 0; } // check total loyalty points with threshold value if (model.totalPoints >= getGlobalSettings.loyalityThreshhold) { model.isThresholdReached = true; model.leftOverPoints = model.totalPoints - getGlobalSettings.loyalityThreshhold; model.rewardAmount = (model.totalPoints / getGlobalSettings.loyalityThreshhold) * getGlobalSettings.globalReward < getGlobalSettings.globalReward ? 0 : (model.totalPoints / getGlobalSettings.loyalityThreshhold) * getGlobalSettings.globalReward; } var Id = await _userLoyaltyPointsHistoryInfo.AddUserLoyaltyPointsHistory(model); if (Id <= 0) { return(Ok(new ApiResponse(Microsoft.AspNetCore.Http.StatusCodes.Status200OK, false, MessagesConstants.UserLoyaltyPointshistorySuccessful, "0"))); } return(Ok(new ApiResponse(Microsoft.AspNetCore.Http.StatusCodes.Status200OK, true, MessagesConstants.UserLoyaltyPointshistorySuccessful, Id))); } catch (Exception ex) { HttpContext.RiseError(new Exception(string.Concat("API := (Loyalty := AddUserLoyaltyPoints)", ex.Message, " Stack Trace : ", ex.StackTrace, " Inner Exception : ", ex.InnerException))); return(Ok(someIssueInProcessing)); } }