public override bool AppliesTo(Transaction transaction, BankOperation operation) { if (transaction.Type == TransactionType.Deposit) { return(false); } var cardTransaction = transaction as CardTransaction; if (cardTransaction == null) { return(false); } var userCard = _userCardRepository.Find(cardTransaction.Card.Id); if (userCard == null) { return(false); } var query = DbQuery.For <CardTransaction>() .FilterBy(Specs.ForCardTransaction.Withdrawals && !Specs.ForCardTransaction.Failed && Specs.ForCardTransaction.ForToday(userCard.Id, _schedule.TimeZone)); var transactionsForToday = _cardTransactionRepository.Query(query); var countForToday = transactionsForToday.Count; var amountForToday = transactionsForToday .Sum(x => - x.AccountAmount); var countLimit = _settings.IsLocalLocation(transaction.Location) ? userCard.Settings.Limits.OperationsPerDayLocal : userCard.Settings.Limits.OperationsPerDayAbroad; var amountLimit = _settings.IsLocalLocation(transaction.Location) ? userCard.Settings.Limits.AmountPerDayLocal : userCard.Settings.Limits.AmountPerDayAbroad; return(countForToday > countLimit || amountForToday > amountLimit); }