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>()); }
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)); } }