39 lines
2.0 KiB
C#
39 lines
2.0 KiB
C#
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<ErtekelesListResponse> ertekelesek)
|
|
=> (decimal?)ertekelesek.WeightedAverage(x => x.SzamErtek.Value, x => x.SulySzazalekErteke.Value, 2); // TODO ne legyen nullable
|
|
|
|
public static decimal GetSimpleAtlag(IEnumerable<decimal> ertekelesek)
|
|
=> Math.Round(ertekelesek.Average(), 2);
|
|
|
|
public static (decimal? SulyozottOsztalyzatOsszege, decimal? SulyozottOsztalyzatSzama, decimal? SulyozottAtlag) GetAtlagTuple(List<ErtekelesListResponse> ertekelesek)
|
|
=> GetSubListAtlagTuple(ErtekelesLogic.ListAtlagbaSzamitoErtekelesek(ertekelesek).ToList());
|
|
|
|
public static (decimal? SulyozottOsztalyzatOsszege, decimal? SulyozottOsztalyzatSzama, decimal? SulyozottAtlag) GetSubListAtlagTuple(List<ErtekelesListResponse> 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<T>(this IEnumerable<T> recordEnumeration, Func<T, double> value, Func<T, double> 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);
|
|
}
|
|
|
|
}
|
|
}
|