private DiagrammUnitModel GetDiagrammViewModel(ABCGroupModel groupModel, DiagrammViewModel diagrammViewModel) => new DiagrammUnitModel() { V = diagrammViewModel.IncludeV ? groupModel.ABCModels.Where(x => x.VEN == "V").Sum(x => x.SumPercentage):0, E = diagrammViewModel.IncludeE ? groupModel.ABCModels.Where(x => x.VEN == "E").Sum(x => x.SumPercentage):0, N = diagrammViewModel.IncludeN ? groupModel.ABCModels.Where(x => x.VEN == "N").Sum(x => x.SumPercentage):0 };
public (ABCGroupModel, ABCGroupModel, ABCGroupModel) GetABC(FilterView filter) { double GetPercentageOfTotal(List <ABCUnitModel> models, List <SalesViewModel> sales) => models.Count() != 0 ? (double)(sales.Count()) / models.Count : 0; var medicineSales = GetSalesViewModels(filter) .OrderByDescending(x => x.SalesSum).ToList(); var salesSum = medicineSales.Sum(x => x.SalesSum); var abcModels = new List <ABCUnitModel>(); var increaseSumPercentage = 0.0; foreach (var medicine in medicineSales) { var percentage = (double)medicine.SalesSum / salesSum; increaseSumPercentage += percentage; abcModels.Add(new ABCUnitModel() { MedicineName = medicine.MedicineName, SumPercentage = percentage, IncreaseSumPercentage = increaseSumPercentage, VEN = medicine.VEN }); } var A = new ABCGroupModel() { ABCModels = abcModels.Where(x => x.IncreaseSumPercentage <= 0.8).ToList() }; A.PercentageOfTotalCount = GetPercentageOfTotal(A.ABCModels, medicineSales); var B = new ABCGroupModel() { ABCModels = abcModels.Where(x => x.IncreaseSumPercentage > 0.8 && x.IncreaseSumPercentage <= 0.95).ToList() }; B.PercentageOfTotalCount = GetPercentageOfTotal(B.ABCModels, medicineSales); var C = new ABCGroupModel() { ABCModels = abcModels.Where(x => x.IncreaseSumPercentage > 0.95).ToList() }; C.PercentageOfTotalCount = GetPercentageOfTotal(C.ABCModels, medicineSales); return(A, B, C); }