public void GeneratingBankSlips() { List <int> installments = new List <int>(); BCrediTest.Viewmodels.ContractDetailViewModel contractDetail = _bLContract.GetContractDetail("123"); installments = contractDetail.DelayedInstallments.Select(x => x.InstallmentId).ToList(); BCrediTest.Viewmodels.BankSlipScheduleViewModel detailsToSchedule = _bLContract.GetDetailsToSchedule(installments); detailsToSchedule.FeeValue = 5; detailsToSchedule.InterestValue = 1; detailsToSchedule.DueDate = DateTime.Now.AddDays(2); BankSlip bankSlip = _bLContract.CreateBankSlip(detailsToSchedule, "123"); if (bankSlip != null) { Assert.Pass(); } else { Assert.Fail(); } }
private async void SendEmailWithBankslip(BankSlip bankSlip, string contractId) { string message = string.Format("Id: {0}\nDue Date: {1}\nValue: {2}\nStatus: {3}", bankSlip.BankslipId, bankSlip.DueDate, string.Format("{0:C}", bankSlip.Value), bankSlip.Status); string subject = string.Format("Bank slip for contract #{0}", contractId); Contract contract = _contractRepository.GetContract(contractId); await _emailSender.SendEmailAsync(contract.CustomerEmail, subject, message); }
public IActionResult Post([FromBody] OrderInputModel inputModel) { var paymentMethod = _paymentMethodService.GetById(inputModel.PaymentMethodId); var payment = _mapper.Map <CreditCard>(inputModel.CreditCard) ?? BankSlip.Create() as Payment; var address = _addressService.GetById(inputModel.AddressId); _orderService.ProcessOrder(User.Identity.Name, paymentMethod, payment, address, inputModel.CouponCode); return(Ok()); }
public void ShouldProcessOneBankSlipPayment() { var bankSlipProcessor = new BankSlipProcessor(); var invoice = new Invoice("Aurore", 200m); var bankslip = new BankSlip(200m); var bankslips = new List <BankSlip> { bankslip }; bankSlipProcessor.Process(bankslips, invoice); Assert.AreEqual(1, invoice.Payments.Count); Assert.AreEqual(200m, invoice.Payments.Sum(p => p.Value)); }
public IActionResult CreateSlip(BankSlipScheduleViewModel bankslipSchedule) { string currentId = (TempData["currentId"]).ToString(); var data = _blContract.GetContractDetail(currentId); if (bankslipSchedule.DueDate.Date < DateTime.Now.Date) { return(RedirectToAction("Details", new { id = currentId, success = false })); } BankSlip bl = _blContract.CreateBankSlip(bankslipSchedule, currentId); if (bl == null) { return(RedirectToAction("Details", new { id = currentId, success = false })); } return(RedirectToAction("Details", new { id = currentId })); }
/// <summary> /// Creates a bank slip for the given delayed installments and contract and send it by email /// </summary> /// <param name="bankslipSchedule">Viewmodel containing all the data for generating the bank slip</param> /// <param name="contractId">Id of the related contract</param> public BankSlip CreateBankSlip(BankSlipScheduleViewModel bankslipSchedule, string contractId) { if (bankslipSchedule.DueDate < DateTime.Now) { return(null); } BankSlip bankSlip = new BankSlip(); decimal baseValue = bankslipSchedule.Installments.Sum(x => x.Value); bankSlip.DueDate = bankslipSchedule.DueDate; bankSlip.Value += baseValue * (1 + (bankslipSchedule.FeeValue / 100)); bankSlip.BankSlipInstallment = new List <BankSlipInstallment>(); bankslipSchedule.Installments.ForEach(x => { bankSlip.Value += x.Value * (decimal)Math.Pow((double)(bankslipSchedule.InterestValue / 100), x.DaysInDelay); bankSlip.BankSlipInstallment.Add(new BankSlipInstallment { InstallmentId = x.InstallmentId }); }); bankSlip.Status = BankSlipStatus.Pending; bankSlip = _contractRepository.PersistBankSlip(bankSlip); if (bankSlip.BankslipId != 0) { try { SendEmailWithBankslip(bankSlip, contractId); } catch (Exception e) { Debug.WriteLine(e.Message); } return(bankSlip); } return(null); }
public BankSlip PersistBankSlip(BankSlip bankSlip) { _context.BankSlips.Add(bankSlip); _context.SaveChanges(); return(bankSlip); }