/// <summary> /// Iteratively calculates the marginal factors for each attribute value. /// </summary> /// <param name="attributeValues">Attribute values the marginal factors are to be calculated for.</param> /// <param name="factors">Starting values for the iterative calculation of the marginal factors.</param> /// <returns>True if the threshold indicating a significant change in factors was undercut, false otherwise.</returns> private bool CalculateFactorsIteratively(IEnumerable <TariffAttributeValue> attributeValues, ref IDictionary <TariffAttributeValue, decimal> factors) { bool thresholdReached = true; foreach (TariffAttributeValue attributeValue in attributeValues) { IEnumerable <ITariffKey> keys = TariffData.TariffKeys.Where(x => x.Contains(attributeValue)); decimal aggregate = 0m; foreach (ITariffKey key in keys) { decimal partialFactor = 1m; foreach (TariffAttributeValue differentAttributeValue in key.Where(x => !x.Equals(attributeValue))) { partialFactor *= factors[differentAttributeValue]; } aggregate += partialFactor * TariffData[key].PolicyCount; } decimal totalClaimsAmount = TariffData[attributeValue].Select(x => x.ClaimsAmount).Sum(); decimal factorAfterIteration = totalClaimsAmount / (TariffData.ExpectedClaimsExpenditure() * aggregate); thresholdReached = thresholdReached && (Math.Abs(factorAfterIteration - factors[attributeValue]) < _deltaThreshold); factors[attributeValue] = factorAfterIteration; } return(thresholdReached); }
/// <summary> /// Calculates the marginal factors according to the marginal average tariff rating method. /// </summary> /// <returns>The mapping of each of the model's tariff attribute values to their marginal factors.</returns> protected override IReadOnlyDictionary <TariffAttributeValue, decimal> CalculateFactors() { IDictionary <TariffAttributeValue, decimal> factors = new Dictionary <TariffAttributeValue, decimal>(); foreach (TariffAttributeValue tariffAttributeValue in TariffData.TariffKeys.SelectMany(x => x).Distinct()) { decimal totalAmount = 0m; int totalCount = 0; foreach (TariffCell cell in TariffData[tariffAttributeValue]) { totalAmount += cell.ClaimsAmount; totalCount += cell.PolicyCount; } if (totalCount > 0) { factors[tariffAttributeValue] = (totalAmount / totalCount) / TariffData.ExpectedClaimsExpenditure(); } else { factors[tariffAttributeValue] = 0m; } } return(new ReadOnlyDictionary <TariffAttributeValue, decimal>(factors)); }
// GET: Tariff/ public ActionResult Tariff() { TariffData tariffData = new TariffData(); tariffData.CompaniesList = db.Companies.ToList(); tariffData.Tariffs = db.Tariffs.ToList(); return(View(tariffData)); }
// GET: Tariffs/Create public ActionResult Create() { //ViewBag.CompanyId = new SelectList(db.Companies, "Id", "CompanyName"); TariffData tariffData = new TariffData(); tariffData.Tariffs = db.Tariffs.ToList(); tariffData.CompaniesList = db.Companies.ToList(); return(View(tariffData)); }
// GET: ServicesPrices/Create public ActionResult Create() { ViewBag.ServiceId = new SelectList(db.Services, "Id", "ServiceName"); ViewBag.TariffId = new SelectList(db.Tariffs, "Id", "TariffName"); TariffData tariffData = new TariffData(); tariffData.Services = db.Services.ToList(); tariffData.Tariffs = db.Tariffs.ToList(); tariffData.CompaniesList = db.Companies.ToList(); tariffData.DepartmentsList = db.Departments.Where(e => e.DepartmentType1.DepartmnetType.ToLower().Trim().Equals("revenue")).ToList(); tariffData.ServicePrices = db.ServicesPrices.ToList(); return(View(tariffData)); }
public ActionResult ReloadPriceList(PriceListFilterData priceListFilterData) { if (priceListFilterData.DepartmentId < 1) { return(Content("Missing Parameters")); } var dept = db.Departments.Find(priceListFilterData.DepartmentId); TariffData tariffData = new TariffData(); tariffData.Tariff = db.Tariffs.Find(priceListFilterData.TariffId); tariffData.Services = db.Services.Where(e => e.DepartmentId == priceListFilterData.DepartmentId).ToList(); tariffData.ServicePrices = db.ServicesPrices.Where(e => e.TariffId == priceListFilterData.TariffId).ToList(); return(PartialView("_PriceList", tariffData)); }
private void InitTariffRates() { tariffRates = new Dictionary <string, TariffData>(); TariffData amiga = new TariffData("AMIGA", "AMIGA Standard"); amiga.SetRate("NAH", 0.046, 0.021); amiga.SetRate("FERN", 0.046, 0.021); amiga.SetRate("A1", 0.217, 0.217); amiga.SetRate("TMOB", 0.217, 0.217); tariffRates.Add(amiga.Id, amiga); TariffData tickTack = new TariffData("TK-TT", "Telekom TikTak Privat"); tickTack.SetRate("NAH", 0.049, 0.0135); tickTack.SetRate("FERN", 0.059, 0.0260); tickTack.SetRate("A1", 0.1636, 0.132); tickTack.SetRate("TMOB", 0.1984, 0.160); tariffRates.Add(tickTack.Id, tickTack); TariffData tkStd = new TariffData("TK-Std", "Telekom Standard"); tkStd.SetRate("NAH", 0.063, 0.025); tkStd.SetRate("FERN", 0.077, 0.063); tkStd.SetRate("A1", 0.177, 0.143); tkStd.SetRate("TMOB", 0.198, 0.191); tariffRates.Add(tkStd.Id, tkStd); TariffData tele2 = new TariffData("Tele2", "Tele2UTA Classic"); tele2.SetRate("NAH", 0.049, 0.019); tele2.SetRate("FERN", 0.049, 0.019); tele2.SetRate("A1", 0.199, 0.199); tele2.SetRate("TMOB", 0.193, 0.193); tariffRates.Add(tele2.Id, tele2); TariffData lw24 = new TariffData("LW-24", "LIWEST 24phone Classic"); lw24.SetRate("NAH", 0.049, 0.019); lw24.SetRate("FERN", 0.049, 0.019); lw24.SetRate("A1", 0.300, 0.300); lw24.SetRate("TMOB", 0.300, 0.300); tariffRates.Add(lw24.Id, lw24); }
private void InitTariffs() { tariffs = new Dictionary <string, TariffData>(); TariffData amiga = new TariffData("Amiga", "Amiga.Privat"); amiga.SetRate("A1", 0.15, 0.14); amiga.SetRate("DREI", 0.18, 0.15); amiga.SetRate("FERN", 0.04, 0.02); amiga.SetRate("NAH", 0.04, 0.02); tariffs.Add(amiga.Id, amiga); TariffData avocalis = new TariffData("Avocalis", "Avocalis Festnetz Privat"); avocalis.SetRate("A1", 0.19, 0.18); avocalis.SetRate("DREI", 0.28, 0.24); avocalis.SetRate("FERN", 0.05, 0.03); avocalis.SetRate("NAH", 0.05, 0.03); tariffs.Add(avocalis.Id, avocalis); TariffData tele2Direkt = new TariffData("Tele2-Direkt", "Tele2 Telefonie direkt"); tele2Direkt.SetRate("A1", 0.21, 0.21); tele2Direkt.SetRate("DREI", 0.21, 0.21); tele2Direkt.SetRate("FERN", 0.05, 0.02); tele2Direkt.SetRate("NAH", 0.05, 0.02); tariffs.Add(tele2Direkt.Id, tele2Direkt); TariffData tele2Freizeit = new TariffData("Tele2-Freizeit", "Tele2 Telefonie direkt Freizeit"); tele2Freizeit.SetRate("A1", 0.21, 0.21); tele2Freizeit.SetRate("DREI", 0.21, 0.21); tele2Freizeit.SetRate("FERN", 0.05, 0); tele2Freizeit.SetRate("NAH", 0.05, 0); tariffs.Add(tele2Freizeit.Id, tele2Freizeit); TariffData iTCE = new TariffData("i-TC-E", "i-TC-E Special"); iTCE.SetRate("A1", 0.1, 0.1); iTCE.SetRate("DREI", 0.1, 0.1); iTCE.SetRate("FERN", 0.03, 0.02); iTCE.SetRate("NAH", 0.03, 0.01); tariffs.Add(iTCE.Id, iTCE); TariffData redTelecom = new TariffData("Red-Telecom-1", "Red Telecom 1025"); redTelecom.SetRate("A1", 0.15, 0.14); redTelecom.SetRate("DREI", 0.16, 0.14); redTelecom.SetRate("FERN", 0.04, 0.02); redTelecom.SetRate("NAH", 0.04, 0.02); tariffs.Add(redTelecom.Id, redTelecom); TariffData drei = new TariffData("drei", "3 Festnetz"); drei.SetRate("A1", 0.15, 0.15); drei.SetRate("DREI", 0.05, 0.05); drei.SetRate("FERN", 0.035, 0.025); drei.SetRate("NAH", 0.035, 0.015); tariffs.Add(drei.Id, drei); }