Example #1
0
        public static GetCustomerRankQualificationsResponse GetCustomerRankQualifications(GetCustomerRankQualificationsRequest request)
        {
            // Get the rank qualifications from the API
            var apiResponse = new GetRankQualificationsResponse();

            try
            {
                var apiRequest = new GetRankQualificationsRequest
                {
                    CustomerID = request.CustomerID,
                    PeriodType = request.PeriodTypeID
                };
                if (request.RankID != null)
                {
                    apiRequest.RankID = (int)request.RankID;
                }

                apiResponse = Exigo.WebService().GetRankQualifications(apiRequest);
            }
            catch (Exception ex)
            {
                return(new GetCustomerRankQualificationsResponse()
                {
                    IsUnavailable = ex.Message.ToUpper() == "UNAVAILABLE",
                    ErrorMessage = ex.Message
                });
            }


            // Create the response
            var response = new GetCustomerRankQualificationsResponse()
            {
                TotalPercentComplete = apiResponse.Score,
                IsQualified          = (apiResponse.Qualifies || (apiResponse.QualifiesOverride != null && ((bool)apiResponse.QualifiesOverride) == true)),
                Rank = new Rank()
                {
                    RankID          = apiResponse.RankID,
                    RankDescription = apiResponse.RankDescription
                }
            };

            if (apiResponse.BackRankID != null)
            {
                response.PreviousRank = new Rank()
                {
                    RankID          = (int)apiResponse.BackRankID,
                    RankDescription = apiResponse.BackRankDescription
                };
            }
            if (apiResponse.NextRankID != null)
            {
                response.NextRank = new Rank()
                {
                    RankID          = (int)apiResponse.NextRankID,
                    RankDescription = apiResponse.NextRankDescription
                };
            }


            // Loop through each leg and create our responses
            var legs = new List <RankQualificationLeg>();

            foreach (var qualificationLeg in apiResponse.PayeeQualificationLegs)
            {
                var leg = new RankQualificationLeg();


                // Assemble the requirements
                var results = new List <RankRequirement>();
                foreach (var definition in Definitions)
                {
                    var requirement = GetRequirement(qualificationLeg, definition);
                    if (requirement != null)
                    {
                        requirement.RequirementDescription  = GlobalUtilities.MergeFields(requirement.RequirementDescription, requirement, "UNABLE TO MERGE FIELDS");
                        requirement.QualifiedDescription    = GlobalUtilities.MergeFields(requirement.QualifiedDescription, requirement, "UNABLE TO MERGE FIELDS");
                        requirement.NotQualifiedDescription = GlobalUtilities.MergeFields(requirement.NotQualifiedDescription, requirement, "UNABLE TO MERGE FIELDS");

                        results.Add(requirement);
                    }
                }

                // Clean up nulls
                results.RemoveAll(c => string.IsNullOrEmpty(c.RequiredValue));
                leg.Requirements = results;


                legs.Add(leg);
            }
            response.QualificationLegs = legs;


            return(response);
        }
        public GetRankGoalificationGoalsResponse GetRankQualificationGoals(int customerID, int rankID)
        {
            // Get the rank qualifications from the API
            var apiResponse = new GetRankQualificationsResponse();
            var qualificationResponses = new QualificationResponse[0];
            var result = new GetRankGoalificationGoalsResponse();

            try
            {
                apiResponse = ExigoApiContext.CreateWebServiceContext().GetRankQualifications(new GetRankQualificationsRequest
                {
                    CustomerID = customerID,
                    PeriodType = (int)PeriodTypes.Default,
                    RankID = rankID
                });
                qualificationResponses = apiResponse.PayeeQualificationLegs[0];
            }
            catch
            {
                qualificationResponses = new QualificationResponse[0];
            }


            result.TotalPercentComplete = qualificationResponses.GetPercentComplete();
            result.RankID = apiResponse.RankID;
            result.RankDescription = apiResponse.RankDescription;
            result.PreviousRankID = apiResponse.BackRankID;
            result.PreviousRankDescription = apiResponse.BackRankDescription;
            result.NextRankID = apiResponse.NextRankID;
            result.NextRankDescription = apiResponse.NextRankDescription;


            // Assemble the rank qualifications
            var expression          = string.Empty;
            var qualification       = new RankQualification();
            var results             = new List<RankQualification>();


            // Customer Type
            expression                                          = @"^MUST BE A VALID DISTRIBUTOR TYPE";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Customer type";
            qualification.IsBoolean                             = true;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = "You must be a distributor in order to qualify for the next rank.";
            results.Add(qualification);


            // Customer Status
            expression                                          = @"CUSTOMER STATUS IS ACTIVE";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Active status";
            qualification.IsBoolean                             = true;                
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = "You must have an Active status in order to qualify for the next rank.";
            results.Add(qualification);


            // Active
            expression                                          = @"^ACTIVE$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Active";
            qualification.IsBoolean                             = true;                
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = "You must be Active in order to qualify for the next rank.";
            results.Add(qualification);


            // Qualified
            expression                                          = @"^MUST BE QUALIFIED$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Qualified";
            qualification.IsBoolean                             = true;                
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = "You must be qualified for commissions in order to advance to the next rank.";
            results.Add(qualification);


            // Enroller Tree
            expression                                          = @"^DISTRIBUTOR MUST BE IN ENROLLER TREE$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Enroller Tree";
            qualification.IsBoolean                             = true;  
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = "You must have a current position in the enroller tree in order to advance to the next rank.";
            results.Add(qualification);


            // Lesser Leg Volume
            expression                                          = @"^\d+ LESSER LEG VOLUME$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Lesser Leg Volume";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("You need at least <strong>{0:N0}</strong> more volume in your lesser leg.", qualification.AmountNeededToQualify);
            results.Add(qualification);
            

            // C500 Legs
            expression                                          = @"^\d+ C500 LEGS ENROLLER TREE$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "C500 Legs in Enroller Tree";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("You need <strong>{0:N0} more C500 distributor(s) in your enroller tree</strong> to advance to the next rank.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // PV
            expression                                          = @"^\d+ PV$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "PV";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("You need <strong>{0:0} more PV</strong> to advance.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // PV 1 Period Ago
            expression                                          = @"^\d+ PV 1 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "PV Last Period";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your last period didn't have enough PV to advance you.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // PV 2 Period Ago
            expression                                          = @"^\d+ PV 2 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "PV 2 Periods Ago";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your PV from two periods ago didn't have enough PV to advance you.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // PV 3 Period Ago
            expression                                          = @"^\d+ PV 3 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "PV 3 Periods Ago";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your PV from three periods ago didn't have enough PV to advance you.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // Capped Enrollment Group PV at 50% Per Leg
            expression                                          = @"^\d+ CAPPED ENROLLMENT GROUP PV AT 50% PER LEG$";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Capped Enrollment GPV at 50% per leg";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your current capped enrollment GPV at 50% per leg is insufficient. You need <strong>{0:N0} more</strong> to advance.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // Capped Enrollment Group PV at 50% Per Leg 1 Period Ago
            expression                                          = @"^\d+ CAPPED ENROLLMENT GROUP PV AT 50% PER LEG 1 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Capped Enrollment GPV at 50% per leg last period";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your current capped enrollment GPV at 50% per leg last period was insufficient. You needed <strong>{0:N0} more</strong> to advance.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // Capped Enrollment Group PV at 50% Per Leg 2 Periods Ago
            expression                                          = @"^\d+ CAPPED ENROLLMENT GROUP PV AT 50% PER LEG 2 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Capped Enrollment GPV at 50% per leg two periods ago";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your current capped enrollment GPV at 50% per leg two periods ago was insufficient. You needed <strong>{0:N0} more</strong> to advance.", qualification.AmountNeededToQualify);
            results.Add(qualification);


            // Capped Enrollment Group PV at 50% Per Leg 3 Periods Ago
            expression                                          = @"^\d+ CAPPED ENROLLMENT GROUP PV AT 50% PER LEG 3 PERIOD";
            qualification                                       = new RankQualification(qualificationResponses, expression);
            qualification.Label                                 = "Capped Enrollment GPV at 50% per leg three periods ago";
            qualification.IsBoolean                             = false;
            qualification.QualifiedDescription                  = "";
            qualification.NotQualifiedDescription               = string.Format("Your current capped enrollment GPV at 50% per leg three periods ago was insufficient. You needed <strong>{0:N0} more</strong> to advance.", qualification.AmountNeededToQualify);
            results.Add(qualification);

           


            // Clean up nulls
            results.RemoveAll(c => string.IsNullOrEmpty(c.RequiredValue));
            result.RankQualifications = results;


            return result;
        }