예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #6
0
        /// <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));
 }