Esempio n. 1
0
        public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
        {
            var debt = await _debtReadRepository.GetAsync(request.Id);

            debt.FinalizeDebt();

            var value = CalculatePaschoalottoValue(debt);

            debt.UpdatePaschoalottoValue(value);

            _debtWriteRepository.Update(debt);

            await _uow.CommitAsync();

            return(new Response(debt));
        }
Esempio n. 2
0
        public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
        {
            var debt = await _debtReadRepository.GetAsync(request.Id);

            if (debt == null)
            {
                return(new Response().AddError("Debt not found"));
            }

            debt.UpdateConfig(request.MaxSplit, request.InterestType, request.Interest, request.PaschoalottoPercentage);

            _debtWriteRepository.Update(debt);

            await _uow.CommitAsync();

            return(new Response(debt));
        }
Esempio n. 3
0
        public async Task <Response> Handle(Request request, CancellationToken cancellationToken)
        {
            var debt = await _debtReadRepository.GetAsync(request.Id);

            var   dateFin           = debt.Finalized ? debt.FinalizedDate.Value : DateTime.UtcNow;
            var   dateDiff          = dateFin.Date - debt.DueDate.Date;
            float interestValue     = 0;
            float paschoallotoValue = 0;
            float finalValue        = 0;

            if (debt.InterestType.Equals((int)InterestType.Simple))
            {
                var m    = debt.Value;
                var perc = debt.Interest / 100;
                var j    = m * perc;
                j         *= dateDiff.Days;
                finalValue = (m + j);
                var pascPerc = debt.PaschoalottoPercentage / 100;
                paschoallotoValue = finalValue * pascPerc;
                interestValue     = finalValue - m;
            }
            else
            {
                var m    = debt.Value;
                var perc = debt.Interest / 100;
                var j    = 1 + perc;
                var x    = Math.Pow((double)j, (double)dateDiff.Days);
                finalValue = (float)(m * x);
                var pascPerc = debt.PaschoalottoPercentage / 100;
                paschoallotoValue = finalValue * pascPerc;
                interestValue     = finalValue - m;
            }
            var splits     = new List <dynamic>();
            var splitValue = finalValue / debt.MaxSplit;

            for (var x = 1; x <= debt.MaxSplit; x++)
            {
                splits.Add(new
                {
                    Value   = splitValue,
                    DueDate = DateTime.UtcNow.AddMonths(x).Date
                });
            }
            if (!debt.Finalized)
            {
                debt.PaschoalottoValue = paschoallotoValue;
                _debtWriteRepository.Update(debt);
                await _uow.CommitAsync();
            }

            return(new Response(new
            {
                DueDate = debt.DueDate,
                DaysLate = dateDiff.Days,
                OriginalValue = debt.Value,
                InterestValue = interestValue,
                FinalValue = finalValue,
                PlotsValue = splits,
                ContactPhone = debt.ContactPhone
            }));
        }