private static RagBarData CalculatePercentages(IRagBarItem ragBarItem) { var ragBarData = new RagBarData(); ragBarData.RedCount = ragBarItem.RedCount; ragBarData.AmberCount = ragBarItem.AmberCount; ragBarData.GreenCount = ragBarItem.GreenCount; var sumOfCounts = ragBarItem.RedCount + ragBarItem.AmberCount + ragBarItem.GreenCount; if (sumOfCounts == 0) { //We have no values so show all green ragBarData.GreenPercent = 100; } else if (ragBarItem.RedCount == ragBarItem.AmberCount && ragBarItem.AmberCount == ragBarItem.GreenCount) { //We have all equal values so evenly distribute ragBarData.GreenPercent = 33; ragBarData.AmberPercent = 33; ragBarData.RedPercent = 33; } else { // we need to build up percentages in 10% increments starting from lowest first // we will then leave the last value to make up the remaining 100% var itemList = new List<RagOrderItem>(); itemList.Add(new RagOrderItem { ColorMarker = 'R', ItemCount = ragBarItem.RedCount }); itemList.Add(new RagOrderItem { ColorMarker = 'A', ItemCount = ragBarItem.AmberCount }); itemList.Add(new RagOrderItem { ColorMarker = 'G', ItemCount = ragBarItem.GreenCount }); var sortedList = itemList.OrderBy(x => x.ItemCount).ToList(); sortedList[0].ItemPercent = CalculatePercent(sortedList[0].ItemCount, sumOfCounts, 10); sortedList[1].ItemPercent = CalculatePercent(sortedList[1].ItemCount, sumOfCounts, 10); sortedList[2].ItemPercent = 100 - sortedList[0].ItemPercent - sortedList[1].ItemPercent; ragBarData.GreenPercent = sortedList.Where(x => x.ColorMarker == 'G').Select(x => x.ItemPercent).First(); ragBarData.AmberPercent = sortedList.Where(x => x.ColorMarker == 'A').Select(x => x.ItemPercent).First(); ragBarData.RedPercent = sortedList.Where(x => x.ColorMarker == 'R').Select(x => x.ItemPercent).First(); } return ragBarData; }
public static IHtmlString HubRagBar(this HtmlHelper htmlHelper, IRagBarItem ragBarItem) { var ragBarData = CalculatePercentages(ragBarItem); var sb = new StringBuilder(); sb.Append("<div class='ragbar'>"); if(ragBarData.RedPercent > 0) sb.AppendFormat("<span class=\"ragbar-item ragbar-item-red ragbar-item-{0}\">{1}</span>", ragBarData.RedPercent, ragBarData.RedCount); if (ragBarData.AmberPercent > 0) sb.AppendFormat("<span class=\"ragbar-item ragbar-item-amber ragbar-item-{0}\">{1}</span>", ragBarData.AmberPercent, ragBarData.AmberCount); if (ragBarData.GreenPercent > 0) sb.AppendFormat("<span class=\"ragbar-item ragbar-item-green ragbar-item-{0}\">{1}</span>", ragBarData.GreenPercent, ragBarData.GreenCount); sb.Append("</div>"); return MvcHtmlString.Create(sb.ToString()); }