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;
            }
        }
示例#2
0
        // [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));
            }
        }