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; }