/// <summary> /// /// </summary> /// <param name="promotionRequest"></param> /// <returns></returns> public virtual IRegisterPromotion CreateRegisterPromotion(MemberPromotion promotionRequest) { IRegisterPromotion promotion = null; switch (promotionRequest.PromoType) { case PromotionType.CSTORE: promotion = new RegisterCStorePromotion(); break; case PromotionType.ONLINE: promotion = new RegisterOnlinePromotion(); break; } return(promotion); }
/// <summary> /// /// </summary> /// <param name="registerPromotionRequest"></param> /// <returns></returns> public MemberPromotion RegisterPromotion(MemberPromotion registerPromotionRequest) { try { RegisterPromotion registerPromoBS = new RegisterPromotion(); this.iRegisterPromotion = registerPromoBS.CreateRegisterPromotion(registerPromotionRequest); var memberPromotion = this.iRegisterPromotion.RegisterPromotion(registerPromotionRequest); return(memberPromotion); } catch (Exception ex) { DBLogging.Error("Register Promotion", ex); throw; } }
public async Task <IBusinessResultValue <MemberPromotion> > LoadMemberPromotionAsync(int memberId, int month, int year, ReviewPromotionStepEnum stepPromotionTypeId) { var result = new BusinessResultValue <MemberPromotion>(); try { result.ResultValue = await unitOfWork.MemberPromotionDataService.FirstOrDefaultAsync(x => x.MemberId == memberId && x.BranchPromotion.Month == month && x.BranchPromotion.Year == year && x.Details.Any(y => y.ReviewPromotionStepId == stepPromotionTypeId) , includes : x => new { x.BranchPromotion, x.Details }); if (result.ResultValue == null && stepPromotionTypeId == ReviewPromotionStepEnum.Manager) { var sellerTotalPromtion = await(from mep in unitOfWork.SellerPromotionDataService.GetQuery() join brp in unitOfWork.BranchPromotionDataService.GetQuery() on mep.BranchPromotionId equals brp.Id where mep.MemberId == memberId && brp.Month == month && brp.Year == year && mep.Deleted == false group mep by mep.MemberId into grp_memp select grp_memp.Sum(x => x.Promotion)).FirstOrDefaultAsync(); MemberPromotion memberPromotion = new MemberPromotion { MemberId = memberId }; memberPromotion.Details.Add(new MemberPromotionDetail { CompensatoryPromotion = sellerTotalPromtion }); result.ResultValue = memberPromotion; } else { result.ResultValue = new MemberPromotion { MemberId = memberId }; } } catch (Exception ex) { CatchException(ex, result, ""); } return(result); }
public async Task <IBusinessResultValue <List <MemberPromotion> > > LoadMemberPromotionListAsync(int branchId, int month, int year, params ReviewPromotionStepEnum[] sharePromotionTypeId) { var result = new BusinessResultValue <List <MemberPromotion> >(); try { var branchPromotion = await unitOfWork.BranchPromotionDataService.FirstOrDefaultAsync(x => x.Month == month && x.Year == year && x.BranchId == branchId); int branchPromotionId = branchPromotion.Id; if (sharePromotionTypeId.Length == 0) { sharePromotionTypeId = new[] { ReviewPromotionStepEnum.Initial } } ; var query = await(from me in unitOfWork.MemberDataService.GetQuery() join mep in unitOfWork.MemberPromotionDataService.GetQuery() on me.Id equals mep.MemberId into left_join_me_mep from join_me_mep in left_join_me_mep .Where(x => x.Deleted == false && x.BranchPromotionId == branchPromotionId).DefaultIfEmpty() join mepde in unitOfWork.MemberPromotionDetailDataService.GetQuery() on join_me_mep.Id equals mepde.MemberPromotionId into left_join_mep_mepde from join_mep_mepde in left_join_mep_mepde .Where(c => c.Deleted == false && sharePromotionTypeId.Contains(c.ReviewPromotionStepId)).DefaultIfEmpty() join post in unitOfWork.PositionTypeDataService.GetQuery() on me.PositionTypeId equals post.eId into left_join_position from join_me_pos in left_join_position.DefaultIfEmpty() where me.BranchId == branchId && me.Deleted == false select new { MemberId = me.Id, Member = me, join_me_pos, join_me_mep, join_mep_mepde }).ToListAsync(); result.ResultValue = query.Select(x => { if (x.join_me_mep != null) { return(x.join_me_mep); } MemberPromotion memberSharePromotion = new MemberPromotion { MemberId = x.MemberId, Member = x.Member, BranchPromotionId = branchPromotionId }; //if (x.sellerTotalPromtion.HasValue) // memberSharePromotion.Details.Add(new MemberSharePromotionDetail { MemberId = x.MemberId, CompensatoryPromotion = x.sellerTotalPromtion.Value, SharePromotionTypeId = sharePromotionTypeId }); return(memberSharePromotion); }).ToList(); } catch (Exception ex) { CatchException(ex, result, ""); } return(result); }
/// <summary> /// /// </summary> /// <param name="registerPromotionRequest"></param> /// <returns></returns> public MemberPromotion RegisterPromotion(MemberPromotion registerPromotionRequest) { List <int> segmentList = null; string promotionID = registerPromotionRequest.PromotionID; string loyaltyCardNumber = registerPromotionRequest.LoyaltyCardNumber; iRetalixServices = new CallRetalixServices(); // Get the Segment list for the given Promotion segmentList = GetSegmentsForPromotion(promotionID); // Continue only if there is a segment found for the given promotion if (segmentList?.Count > 0) { // Verify the segment is found at member or household segment level bool isMemberAuthorized = VerifyMemberIsAuthorized(loyaltyCardNumber, segmentList); // if found, then register the promotion in LMS if (isMemberAuthorized) { var registerResult = iRetalixServices.RegisterPromotion(loyaltyCardNumber, promotionID); // if failed to register promotion, check if promotion is already registered or Activated by calling GetMemberPromotion if (!registerResult.IsSuccess) { int promoCheck = CheckPromotionActivated(loyaltyCardNumber, promotionID); // TODO : Assign the Actual Error codes instead of 0,1,2 for the below conditions if (promoCheck == -1) { // Failed registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = "Promotion Registration Failed"; } else if (promoCheck == 0) { // Registered Successfully , Promotion Not Activated or Not Used registerPromotionRequest.IsSuccess = true; registerPromotionRequest.RegistrationResult = "Registered Successfully , Promotion Not Activated or Not Used"; } else if (promoCheck > 0) { // Already Registered Successfully and Promotion Activate / Used registerPromotionRequest.IsSuccess = true; registerPromotionRequest.RegistrationResult = "Already Registered Successfully and Promotion Activate"; } } else { // Registered Successfully registerPromotionRequest.IsSuccess = true; registerPromotionRequest.RegistrationResult = "Promotion Registeration Successfull"; } } else { registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = AppConstants.DisplayMessages.MemberNotAuthorizedForPromotion; } } else { registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = AppConstants.DisplayMessages.SegmentNotFound; } return(registerPromotionRequest); }
/// <summary> /// Method to Register Promotion /// </summary> /// <param name="registerPromotionRequest"></param> /// <returns></returns> public MemberPromotion RegisterPromotion(MemberPromotion registerPromotionRequest) { _logMsg.MethodName = MethodBase.GetCurrentMethod().Name; ProcessEmailCampaignManager processEmailCampaignManager = new ProcessEmailCampaignManager(); // Set the registration flag to default as failed int registrationStatusCode = 0; List <int> segmentList = null; string promotionID = registerPromotionRequest.PromotionID; string loyaltyCardNumber = registerPromotionRequest.LoyaltyCardNumber; string houseHoldId = loyaltyCardNumber.Substring(4, 9); string individualId = loyaltyCardNumber.Substring(13, 2); iRetalixServices = new CallRetalixServices(); //Check if promotion is found in OPE bool checkpromotionInOPE = CheckPromotionInOPE(promotionID); if (checkpromotionInOPE) { //Get Segments configured for the promotion segmentList = GetSegmentsForPromotion(promotionID); if (segmentList?.Count > 0) { // Verify the segment is found at member or household segment level bool isMemberAuthorized = VerifyMemberIsAuthorized(loyaltyCardNumber, segmentList); if (isMemberAuthorized) { //Register promotion in LMS var registerResult = iRetalixServices.RegisterPromotion(loyaltyCardNumber, promotionID); if (!registerResult.IsSuccess) { DBLogging.Warn(_logMsg, "Register Promotion Failed", "Loyalty Card Number :" + loyaltyCardNumber + ", Promotion Id :" + promotionID, registerResult.ResDescription); processEmailCampaignManager.LogLoyaltyTransaction("Promotion Registration in Retalix Failed for the given Member", individualId, loyaltyCardNumber, houseHoldId); registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = registerResult.ResDescription; } else { var synchHouseholdBonus = processEmailCampaignManager.SyncHouseholdBonus(AppConstants.ConstantValues.ActionCodeA, individualId, houseHoldId, loyaltyCardNumber, promotionID); if (synchHouseholdBonus < 1) { DBLogging.Warn(_logMsg, "Sync Household Bonuses Failed", "Action Code : R" + ", Household Id :" + houseHoldId + ", Individual Id :" + individualId + ", Loyalty Card Number :" + loyaltyCardNumber + ", MOD Promotion Id :" + promotionID, AppConstants.DisplayMessages.SyncToMobillaFailed); registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = AppConstants.DisplayMessages.SyncToMobillaFailed; } registerPromotionRequest.IsSuccess = true; registerPromotionRequest.RegistrationResult = "Promotion Registeration Successfull"; } } else { registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = AppConstants.DisplayMessages.MemberNotAuthorizedForPromotion; } } else { registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = AppConstants.DisplayMessages.SegmentNotFound; } } else { registerPromotionRequest.IsSuccess = false; registerPromotionRequest.RegistrationResult = "Promotion Not Found in OPE"; } registerPromotionRequest.RegistrationResult = registrationStatusCode.ToString(); return(registerPromotionRequest); }
private decimal getTotalPromotion(MemberPromotion memberPromotion, ReviewPromotionStepEnum reviewPromotionStepId) { return(memberPromotion.Details.Where(c => c.ReviewPromotionStepId == reviewPromotionStepId).Sum(c => c.BranchSalesPromotion + c.CompensatoryPromotion + c.ReceiptPromotion + c.SupplierPromotion)); }