public async Task <Unit> Handle(CreatePaymentCommand request, CancellationToken cancellationToken) { var paymentId = await _paymentService.MakePayment(new PaymentDto { Description = request.Description, Currency = request.Currency, Email = request.Email, Amount = request.Amount, Token = request.Token }, _paymentService.SecretKey); var entity = new Domain.Entities.Payment { Description = request.Description, Amount = request.Amount, Currency = request.Currency, ExternalPaymentId = paymentId }; await _context.Payment.AddAsync(entity, cancellationToken); await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
private ActionResult SavePayment(PaymentViewModel paymentViewModel) { var ct = new Domain.Entities.Payment(); ct.Value = Convert.ToDecimal(paymentViewModel.total); ct.Type = paymentViewModel.paymentType; ct.Date = DateTime.Now; ct.Discipline_Id = paymentViewModel.subjectId; ct.Student_PIN = paymentViewModel.studentPin; ct.StudentID = repository.Students.FirstOrDefault(x => x.PIN == paymentViewModel.studentPin).StudentID; db.Payments.Add(ct); db.SaveChanges(); return(null); }
public async Task <Entities.Payment> CreateAsync(decimal value, int installments, int debitAccountNumber, int creditAccountNumber) { #region Verifica se as contas existem var debitAccount = (await _unitOfWork .CheckingAccountRepository .ListAsync(new CheckingAccountFilterSpecification(debitAccountNumber))) .FirstOrDefault(); if (debitAccount == null) { _notifications.Handle(new DomainNotification(string.Empty, "Debit Account not found")); } var creditAccount = (await _unitOfWork .CheckingAccountRepository .ListAsync(new CheckingAccountFilterSpecification(creditAccountNumber))) .FirstOrDefault(); if (debitAccount == null) { _notifications.Handle(new DomainNotification(string.Empty, "Credit Account not found")); } if (_notifications.HasNotifications()) { return(await Task.FromResult <Entities.Payment>(null)); } #endregion #region Calculas as taxas var netValue = CalculateTax(value, installments); #endregion #region Verifica o saldo da conta de débito if (debitAccount.Balance < netValue) { _notifications.Handle(new DomainNotification(string.Empty, "The debit account is not enough")); } #endregion #region Insere os lançamentos var debitEntry = new Entry { CheckingAccountNumber = debitAccount.Number, Type = "D", Value = netValue }; var creditEntry = new Entry { CheckingAccountNumber = creditAccount.Number, Type = "C", Value = netValue }; #endregion #region Criação do pagamento var payment = new Domain.Entities.Payment { GrossValue = value, NetValue = netValue, Installments = installments, CreditAccountNumber = creditAccount.Number, DebitAccountNumber = debitAccount.Number }; #endregion #region Atualiza o saldo das contas debitAccount.Balance -= netValue; creditAccount.Balance += netValue; #endregion #region Commit _unitOfWork.EntryRepository.Add(debitEntry); _unitOfWork.EntryRepository.Add(creditEntry); _unitOfWork.PaymentRepository.Add(payment); _unitOfWork.CheckingAccountRepository.Update(debitAccount); _unitOfWork.CheckingAccountRepository.Update(creditAccount); if (!(await _unitOfWork.CommitAsync())) { return(await Task.FromResult <Entities.Payment>(null)); } #endregion return(payment); }