Ejemplo n.º 1
0
        public ActionResult Uod(UodModel model)
        {
            if (ModelState.IsValid)
            {
                UodSummary uodSummary = _calcService.CalculateIncome(model.BruttoAmountPerMonth, model.Limit);

                model.CurrentSummary = _mapper.Map <UodSummaryModel>(uodSummary);

                var summariesFromSession = _sessionService.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod);

                if (summariesFromSession == null)
                {
                    summariesFromSession = new List <UodSummaryModel>()
                    {
                        model.CurrentSummary
                    };
                    _sessionService.AddToSession(SessionItem.Uod, summariesFromSession);
                }
                else if (!summariesFromSession.Exists(x => Convert.ToDecimal(x.Brutto) == model.BruttoAmountPerMonth))
                {
                    summariesFromSession.Add(model.CurrentSummary);
                }

                model.SavedSummaries = summariesFromSession;

                return(View(model));
            }
            else
            {
                return(RedirectToAction(nameof(Uod)));
            }
        }
Ejemplo n.º 2
0
        public void UodHttpPost()
        {
            // Arrange
            UodModel inputModel = new UodModel()
            {
                BruttoAmountPerMonth = 10000, Limit = 42764
            };
            UodSummary expectedSummary = new UodSummary()
            {
                Brutto       = inputModel.BruttoAmountPerMonth,
                NettoAmounts = new Dictionary <string, decimal>()
                {
                    { "styczeń", 4000 }
                }
            };
            UodSummaryModel expectedSummaryModel = new UodSummaryModel()
            {
                Brutto = expectedSummary.Brutto.ToString()
            };
            List <UodSummaryModel> expectedSummaries = new List <UodSummaryModel>()
            {
                new UodSummaryModel()
                {
                    Average = "1000", Brutto = "15000"
                }
            };

            _calcMock.Setup(x => x.CalculateIncome(inputModel.BruttoAmountPerMonth, inputModel.Limit))
            .Returns(expectedSummary);

            _mapperMock.Setup(x => x.Map <UodSummaryModel>(expectedSummary))
            .Returns(expectedSummaryModel);

            _sessionMock.Setup(x => x.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod))
            .Returns(expectedSummaries);

            // Act
            ActionResult result = _controller.Uod(inputModel);

            // Assert
            _calcMock.Verify(x => x.CalculateIncome(inputModel.BruttoAmountPerMonth, inputModel.Limit), Times.Once);
            _sessionMock.Verify(x => x.GetFromSession <List <UodSummaryModel> >(SessionItem.Uod), Times.Once);
            _mapperMock.Verify(x => x.Map <UodSummaryModel>(expectedSummary), Times.Once);
            result.Should().NotBeNull().And.BeOfType <ViewResult>();
            ViewResult viewResult = result as ViewResult;

            viewResult.Model.Should().NotBeNull().And.BeOfType <UodModel>();
            var model = viewResult.Model as UodModel;

            model.BruttoAmountPerMonth.Should().BeGreaterThan(0);
            model.Limit.Should().BeGreaterThan(0);
            model.SavedSummaries.Should().Equal(expectedSummaries);
            model.CurrentSummary.Should().NotBeNull().And.Be(expectedSummaryModel);
        }
Ejemplo n.º 3
0
        public UodSummary CalculateIncome(decimal bruttoPerMonth, decimal limit)
        {
            UodSummary summary = new UodSummary();

            _log.Debug($"[{nameof(CalculateIncome)}] Calculating for brutto = '{bruttoPerMonth}' and limit = '{limit}'");

            decimal sumBrutto     = 0;
            decimal nettoPerMonth = 0;
            decimal multiplier    = 0;
            bool    isLower       = false;
            Dictionary <string, decimal> amounts = new Dictionary <string, decimal>();

            for (int i = 1; i <= 12; i++)
            {
                sumBrutto = sumBrutto + bruttoPerMonth;
                if (sumBrutto > limit * 2 && isLower == false)
                {
                    decimal newPartialBrutto = sumBrutto - limit * 2; // 90000 - 85528 = 4472
                    decimal newPartialNetto  = newPartialBrutto * 0.82M;

                    decimal oldPartialBrutto = bruttoPerMonth - newPartialBrutto;
                    decimal oldPartialNetto  = oldPartialBrutto * 0.91M;

                    nettoPerMonth = Math.Round(newPartialNetto + oldPartialNetto);
                    isLower       = true;
                }
                else
                {
                    multiplier    = isLower ? 0.82M : 0.91M;
                    nettoPerMonth = bruttoPerMonth * multiplier;
                }

                amounts.Add(i.GetMonthName(), nettoPerMonth);
            }

            summary.NettoAmounts = amounts;
            summary.Brutto       = bruttoPerMonth;

            return(summary);
        }