/// <summary> /// Create new transaction with validation /// </summary> /// <param name="sum">Sum of the transaction</param> /// <param name="from">Link card from</param> /// <param name="to">Link card to</param> public Transaction(decimal sum, Card from, Card to) { if (from == null) { throw new BusinessLogicException(TypeBusinessException.TRANSACTION, "From card is null", "Не найдена карта с которой совершается перевод"); } if (to == null) { throw new BusinessLogicException(TypeBusinessException.TRANSACTION, "To card is null", "Не найдена карта на которую совершается перевод"); } if (from.CardNumber == to.CardNumber) { throw new BusinessLogicException(TypeBusinessException.TRANSACTION, "From card and to card is Equal", "Нельзя перевести на туже карту"); } if (sum <= 0) { throw new UserDataException("Transaction need more then 0", $"from {from.CardName} to {to.CardName}"); } if (!blService.CheckCardActivity(from)) { throw new BusinessLogicException(TypeBusinessException.CARD, "Card is expired", $"Карта {from.CardNumber } просрочена"); } if (!blService.CheckCardActivity(to)) { throw new BusinessLogicException(TypeBusinessException.CARD, "Card is expired", $"Карта {to.CardNumber } просрочена"); } if (blService.GetBalanceOfCard(from) < sum) { throw new BusinessLogicException(TypeBusinessException.CARD, "No money", $" Недостаточно средств на карте {from.CardNumber }"); } CardFromNumber = from.CardNumber; CardToNumber = to.CardNumber; FromSum = sum; ToSum = blService.GetConvertSum(sum, from.Currency, to.Currency); }
public Transaction TransferMoney(decimal sum, string from, string to) { var cardFrom = GetCard(from); var cardTo = GetCard(to); _businessLogicService.ValidateTransfer(cardFrom, cardTo, sum); var fromTransaction = new Transaction { Card = cardFrom, CardFromNumber = cardFrom.CardNumber, CardToNumber = cardTo.CardNumber, Sum = sum }; var toTransaction = new Transaction { Card = cardTo, DateTime = fromTransaction.DateTime, CardFromNumber = cardFrom.CardNumber, CardToNumber = cardTo.CardNumber, Sum = _businessLogicService.GetConvertSum(sum, cardFrom.Currency, cardTo.Currency) }; _transactionRepository.Add(fromTransaction); _transactionRepository.Add(toTransaction); _transactionRepository.Save(); return(fromTransaction); }
public void GetConvertSumPassed(Currency from, Currency to, decimal valueIn, string valueOut) { var decimalValueOut = Convert.ToDecimal(valueOut); Assert.Equal(decimalValueOut, blservice.GetConvertSum(valueIn, from, to)); }