public IPaymentProcessor Get(IPaymentMethod paymentMethod) { #region Preconditions if (paymentMethod == null) throw new ArgumentNullException("paymentMethod"); #endregion var processor = processors.FirstOrDefault(p => p.Accepts(paymentMethod)); if (processor == null) { throw new Exception("No registered processors accept '{0}'.".FormatWith(paymentMethod.GetType().ToString())); } return processor; }
public bool PayTransaction(PaymentDTO paymentMethodDTO, int transactionId) { if (ExistsTransaction(transactionId)) { Transaction transaction = unitOfWork.TransactionRepository.GetByID(transactionId); if (!transaction.Pay) { validateSupplierHasFieldsToCompleteTransaction(transaction); if (transaction.TotalAmount > 0) { validateBillHasSpecificValues(transaction); ConvertPaymentMethod convert = new ConvertPaymentMethod(); IPaymentMethod paymentMethod = convert.convertPaymentDTO(paymentMethodDTO); if (paymentMethod.PayTransaction(paymentMethodDTO.AmountGiven, transaction.TotalAmount)) { transaction.PayMethod = paymentMethod.GetType().Name; transaction.Pay = true; setPointsToClient(transaction); unitOfWork.TransactionRepository.Update(transaction); unitOfWork.Save(); return(true); } return(false); } else { throw new NonExistingPaymentException("La transaccion no tiene facturas asociadas por lo que no hay nada para pagar"); } } else { throw new TransactionAlreadyPayException("La transaccion ya fue pagada"); } } else { throw new NotFoundException("No existe la transaccion especificada"); } }
public IPaymentProcessor Get(IPaymentMethod paymentMethod) { #region Preconditions if (paymentMethod == null) { throw new ArgumentNullException("paymentMethod"); } #endregion var processor = processors.FirstOrDefault(p => p.Accepts(paymentMethod)); if (processor == null) { throw new Exception("No registered processors accept '{0}'.".FormatWith(paymentMethod.GetType().ToString())); } return(processor); }