public async Task <TransferListDTO> PerformTransfer(string phone, TransferDTO transferDTO)
        {
            var originCard = (await _cardRepository.FilterAsync(filter: c => c.Id == transferDTO.OriginCardId && c.Contact.Phone == phone, includeProperties: "Contact.Client,CardBatches.Batch,CardType")).FirstOrDefault();

            if (originCard == null)
            {
                throw new InvalidOperationException(_resources.GetStringResource(LocalizationKeys.Application.exception_CardNotFound));
            }
            var destinyContact = (await _contactRepository.FilterAsync(filter: (c) => c.Id == transferDTO.DestinyCard.ContactId, includeProperties: "Cards.CardBatches.Batch")).FirstOrDefault();
            var destinyCard    = destinyContact.Cards.FirstOrDefault((c) => c.CardTypeId == originCard.CardTypeId);

            if (destinyCard == null)
            {
                destinyCard = new Card(destinyContact, originCard.CardType.Currency, originCard.CardTypeId);
            }
            var transfer = new Transfer(originCard, destinyCard, new Money(transferDTO.Amount.Currency, transferDTO.Amount.Value), _resources.GetStringResource(LocalizationKeys.Application.messages_CreateTransferDisplayName));

            destinyCard.DestinyTransfers.Add(transfer);
            _transferService.PerformTransfer(transfer);
            if (destinyCard.Id == 0)
            {
                _cardRepository.Add(destinyCard);
            }
            else
            {
                _cardRepository.Modify(destinyCard);
            }
            await _cardRepository.UnitOfWork.CommitAsync();

            return(transfer.ProjectedAs <TransferListDTO>());
        }
Beispiel #2
0
        public async Task <CardDTO> GetCardByPhone(string phone, int id)
        {
            var cards = await _cardRepository.FilterAsync(filter : c => c.Id == id && c.Contact.Phone == phone,
                                                          includeProperties : "CardType,Movements.Charge,Movements.Transfer,CardBatches.Batch,Contact");

            if (cards != null && cards.Any())
            {
                var card    = cards.FirstOrDefault();
                var cardDTO = card.ProjectedAs <CardDTO>();
                return(cardDTO);
            }
            else
            {
                throw new InvalidOperationException(_resources.GetStringResource(LocalizationKeys.Application.exception_CardNotFound));
            }
        }