public IEnumerable <IIncomingPayment> GetIncomingPayments(IIncomingPaymentFilter incomingPaymentFilter)
        {
            Expression <Func <IIncomingPayment, bool> > predicate =
                payment => IsAccountMatch(incomingPaymentFilter, payment) &&
                IsTypeMatch(incomingPaymentFilter, payment) &&
                IsFromDateMatch(incomingPaymentFilter, payment) &&
                IsToDateMatch(incomingPaymentFilter, payment);

            return(dataStore.IncomingPayments.AsQueryable().Where(predicate.Compile()));
        }
 private IObservable <IncomingPaymentsResult> CreateIncomingPaymentsObservable()
 {
     return(Observable.Return(GetSelectedAccountIds())
            .Select(accountIds =>
     {
         IIncomingPaymentFilter incomingPaymentFilter = CreateIncomingPaymentFilter(accountIds);
         IReadOnlyCollection <IIncomingPayment> incomingPayments = incomingPaymentRepository.GetIncomingPayments(incomingPaymentFilter).ToList();
         return new IncomingPaymentsResult(incomingPaymentFilter, incomingPayments);
     }));
 }
 private static bool IsTypeMatch(IIncomingPaymentFilter paymentFilter, IIncomingPayment payment)
 {
     return(paymentFilter.Types.Contains(payment.Type));
 }
 public IncomingPaymentsResult(IIncomingPaymentFilter incomingPaymentFilter, IReadOnlyCollection <IIncomingPayment> incomingPayments)
 {
     IncomingPaymentFilter = incomingPaymentFilter;
     IncomingPayments      = incomingPayments;
 }
        private static IDictionary <string, float> GetAmountPercentData(IReadOnlyCollection <IIncomingPayment> incomingPayments, IIncomingPaymentFilter incomingPaymentFilter)
        {
            Dictionary <string, List <IIncomingPayment> > incomingPaymentWithType = incomingPaymentFilter.Types.ToDictionary(type => type.ToString(), type => incomingPayments.Where(payment => payment.Type == type).ToList());
            float totalAmount = incomingPaymentWithType.Sum(paymentGroup => paymentGroup.Value.Sum(payment => payment.Amount));

            return(incomingPaymentWithType.ToDictionary(paymentGroup => paymentGroup.Key, paymentGroup => paymentGroup.Value.Sum(payment => payment.Amount) * 100 / totalAmount));
        }
 public IChartPairData GetChartData(IReadOnlyCollection <IIncomingPayment> incomingPayments, IIncomingPaymentFilter incomingPaymentFilter)
 {
     return(new ChartPairData
     {
         Ids = incomingPayments.Select(payment => payment.Id).ToList(),
         AmountPercentData = GetAmountPercentData(incomingPayments, incomingPaymentFilter),
         AmountDateData = GetAmountTimeData(incomingPayments, incomingPaymentFilter)
     });
 }