Files
kreta/Kreta.WebApi/Ellenorzo/Kreta.Ellenorzo.BL/VN/Logic/AtlagLogic.cs
T
2024-03-13 00:33:46 +01:00

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