コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }
コード例 #4
0
        // 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));
        }
コード例 #5
0
        // 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));
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }