Exemplo n.º 1
0
        public void ConfirmCredit(int userId)
        {
            var credit = _creditRepository.GetAll().SingleOrDefault(c => c.BankAccountId == userId && c.Confirmed == false && c.PaidInFull == false);

            if (credit == null)
            {
                return;
            }

            credit.Confirmed           = true;
            credit.ConfirmationDate    = DateTime.Now;
            credit.NextInstallmentDate = (DateTime.Now + TimeSpan.FromDays(1)).Date;

            var firstInstallment = new CreditInstallment()
            {
                CreditId          = credit.Id,
                InstallmentAmount = credit.InstallmentAmount,
                PaymentDeadline   = credit.NextInstallmentDate.Value
            };

            _creditInstallmentsRepository.Create(firstInstallment);
            _creditRepository.Update(credit);

            _bankAccountService.GiveCash(credit.CreditAmount, userId);
        }
Exemplo n.º 2
0
        public ResultDto PayInstallment(int userId, CreditInstallmentDto installmentDto)
        {
            var credit = _creditRepository.GetSingle(installmentDto.CreditId, c => c.Installments);

            if (credit == null || credit.BankAccountId != userId)
            {
                return new ResultDto()
                       {
                           Success = false, Message = "The credit does not exist or you don't have access to it"
                       }
            }
            ;

            var installment = credit.Installments.SingleOrDefault(ci => ci.Id == installmentDto.Id);

            if (installment == null)
            {
                return new ResultDto()
                       {
                           Success = false, Message = "Cannot find the installment"
                       }
            }
            ;

            var penaltyPercentage = CalculatePenalty(installment.PaymentDeadline);

            installment.InstallmentAmount += installment.InstallmentAmount * (penaltyPercentage / 100m);

            var result = _bankAccountService.TakeCash(installment.InstallmentAmount, userId);

            if (!result)
            {
                return new ResultDto()
                       {
                           Success = false, Message = "Cannot finish transaction"
                       }
            }
            ;

            credit.InstallmentsAlreadyPaid++;

            installment.PaidOn = DateTime.Now;
            _creditInstallmentsRepository.Update(installment);

            if (credit.InstallmentsAlreadyPaid == credit.TotalInstallments)
            {
                credit.PaidInFull = true;
            }
            else
            {
                credit.NextInstallmentDate += TimeSpan.FromDays(1);
                var nextInstallment = new CreditInstallment()
                {
                    CreditId          = credit.Id,
                    InstallmentAmount = credit.InstallmentAmount,
                    PaymentDeadline   = credit.NextInstallmentDate.Value
                };
                _creditInstallmentsRepository.Create(nextInstallment);
            }

            _creditRepository.Update(credit);
            return(new ResultDto()
            {
                Success = true, Message = "You have successfully paid an installment"
            });
        }