public ActionResult Index(TaxCalculateViewModel model)
        {
            if (ModelState.IsValid)
            {
                var taxRate = DocumentSession.Load <TaxRate>(model.SelectedYear);
                model.Result = _calculateService.Calculate(taxRate, model.TaxableIncome.Value);
            }
            else
            {
                ShowErrorMessage("Please input valid data");
            }

            var list = DocumentSession.Query <TaxRate>()
                       .OrderByDescending(r => r.Year)
                       .ToArray()
                       .Select(r => new SelectListItem
            {
                Text  = r.Description,
                Value = r.Id.ToString(),
            });

            ViewBag.TaxRatesList = list;

            return(View(model));
        }
        public IActionResult Index(TaxCalculateViewModel lendViewModel)
        {
            // update the database
            var postalCode = _postalCodeRepository.GetById(lendViewModel.SelectedPostalCodeId);

            var incomeTax = _incomeTaxRepository.GetFullIncomeTax(postalCode.IncomeTaxId);

            var result = TaxCalculatorServiceFactory.GetTaxCalculatorService(
                (DataContracts.TaxType)Enum.Parse(typeof(DataContracts.TaxType),
                                                  incomeTax.IncomeTaxType)).Calculate(incomeTax, lendViewModel.TaxableIncome);

            TaxResultViewModel taxResultViewModel = new TaxResultViewModel()
            {
                TaxableIncome = lendViewModel.TaxableIncome,
                TaxAmount     = result.TotalAmount,
                TaxType       = incomeTax.IncomeTaxType
            };

            var log = new TaxQueryLog()
            {
                DateQueried   = DateTime.Now,
                PostCode      = postalCode.PostCode,
                TaxableIncome = lendViewModel.TaxableIncome,
                TaxAmount     = result.TotalAmount
            };

            _taxQueryLogRepository.Create(log);

            return(RedirectToAction("TaxResult", taxResultViewModel));
        }
        public void calculate_should_call_calculator_service()
        {
            //arrange
            var result = new Result();

            var calculateService = Substitute.For <ICalculateService>();

            calculateService.Calculate(null, 0).ReturnsForAnyArgs(c => result);

            var documentSession = Substitute.For <IDocumentSession>();

            documentSession.Query <TaxRate>().Returns(new FakeRavenQueryable <TaxRate>(Enumerable.Empty <TaxRate>().AsQueryable()));

            var controller = new CalculatorController(calculateService)
            {
                DocumentSession = documentSession
            };

            var model = new TaxCalculateViewModel
            {
                SelectedYear  = 1,
                TaxableIncome = 1,
            };

            //act
            controller.Index(model);

            //assert
            calculateService.ReceivedWithAnyArgs().Calculate(null, 0);
            Assert.AreEqual(result, model.Result);
        }
        public IActionResult Index()
        {
            var taxClaculationView = new TaxCalculateViewModel()
            {
                PostalCodes = _postalCodeRepository.GetAll()
            };

            return(View(taxClaculationView));
        }