using System; using System.Collections.Generic; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.Ellenorzo.Domain.VN.Ertekeles; namespace Kreta.Ellenorzo.BL.VN.Logic { public static class AtlagLogic { public static decimal? GetSubListAtlag(List ertekelesek) => (decimal?)ertekelesek.WeightedAverage(x => x.SzamErtek.Value, x => x.SulySzazalekErteke.Value, 2); // TODO ne legyen nullable public static decimal GetSimpleAtlag(IEnumerable ertekelesek) => Math.Round(ertekelesek.Average(), 2); public static (decimal? SulyozottOsztalyzatOsszege, decimal? SulyozottOsztalyzatSzama, decimal? SulyozottAtlag) GetAtlagTuple(List ertekelesek) => GetSubListAtlagTuple(ErtekelesLogic.ListAtlagbaSzamitoErtekelesek(ertekelesek).ToList()); public static (decimal? SulyozottOsztalyzatOsszege, decimal? SulyozottOsztalyzatSzama, decimal? SulyozottAtlag) GetSubListAtlagTuple(List atlagbaSzamitoErtekelesek) => ((decimal? SulyozottOsztalyzatOsszege, decimal? SulyozottOsztalyzatSzama, decimal? SulyozottAtlag))atlagbaSzamitoErtekelesek.WeightedAverageTuple(x => x.SzamErtek.Value, x => x.SulySzazalekErteke.Value, 2); private static (double? weightedValueSum, double? weightSum, double? weightAverage) WeightedAverageTuple(this IEnumerable recordEnumeration, Func value, Func weight, int? round = null) { if (!recordEnumeration.Any()) { return (null, null, null); } var weightedValueSum = recordEnumeration.Sum(x => value(x) * weight(x)); var weightSum = recordEnumeration.Sum(weight); var weightAverage = round.HasValue && round > 0 ? Math.Round(weightedValueSum / weightSum, round.Value) : weightedValueSum / weightSum; return (weightedValueSum, weightSum, weightAverage); } } }