Пример #1
0
        private IEnumerable <TransactionDetail> GetTransactionDetails(DateTime upToDate, Account acct)
        {
            var transactionDetailsForAccount = TransactionDetails.Where(t => t.AccountId == acct.Id).ToList();
            var transactionIds           = transactionDetailsForAccount.Select(t => t.TransactionId).Distinct();
            var transactionsForAccount   = Transactions.Where(t => transactionIds.Contains(t.Id));
            var priorDatesTransactionIds = transactionsForAccount.Where(t => t.Date <= upToDate).Select(t => t.Id);

            return(transactionDetailsForAccount.Where(t => priorDatesTransactionIds.Contains(t.TransactionId)).ToList());
        }
Пример #2
0
        public void Remove(ModelBase obj)
        {
            if (obj is Account)
            {
                Accounts.Remove(obj as Account);

                var transactionIds = Transactions.SelectMany(t => t.Details).Where(t => t.AccountId == ((Account)obj).Id).Select(t => t.TransactionId);

                foreach (var transId in transactionIds)
                {
                    Remove(Transactions.FirstOrDefault(t => t.Id == transId));
                }

                foreach (var schedTrans in ScheduledTransactions.Where(t => t.FromAccountId == ((Account)obj).Id || t.ToAccountId == ((Account)obj).Id).ToList())
                {
                    Remove(schedTrans);
                }
            }
            else if (obj is Transaction)
            {
                Transactions.Remove(obj as Transaction);

                foreach (var detail in TransactionDetails.Where(t => t.TransactionId == ((Transaction)obj).Id).ToList())
                {
                    Remove(detail);
                }
            }
            else if (obj is TransactionDetail)
            {
                TransactionDetails.Remove(obj as TransactionDetail);
            }
            else if (obj is Receipt)
            {
                Receipts.Remove(obj as Receipt);
            }
            else if (obj is ScheduledTransaction)
            {
                ScheduledTransactions.Remove(obj as ScheduledTransaction);

                foreach (var detail in ScheduledTransactionDetails.Where(t => t.ScheduledTransactionId == ((ScheduledTransaction)obj).Id).ToList())
                {
                    Remove(detail);
                }
            }
            else if (obj is ScheduledTransactionDetail)
            {
                ScheduledTransactionDetails.Remove(obj as ScheduledTransactionDetail);
            }
            else if (obj is Category)
            {
                Categories.Remove(obj as Category);
            }
            else if (obj is Product)
            {
                Products.Remove(obj as Product);
            }
        }
Пример #3
0
        public void UpdateTotalsAndDate(DateTime?until = null)
        {
            if (Card != null)
            {
                if (until == null)
                {
                    // todo find site transaction belongs to
                    var site    = Session.FindObject <Site>(null);
                    var siteNow = DateTime.UtcNow.AddHours(site.Timezone);
                    until = siteNow;
                }

                var oldBalance = Card.Transactions
                                 .Where(t => t != this)
                                 .SelectMany(tr => tr.TransactionDetails)
                                 .Where(td =>
                                        (td.ValidFrom == null || td.ValidFrom <= until) &&
                                        (td.ValidTo == null || td.ValidTo >= until))
                                 .Select(td => td.Total)
                                 .Sum();

                TotalCharges = TransactionDetails.Where(td => td.Item.Type == ETransactionType.Charge)
                               .Select(td => td.Total)
                               .Sum();

                TotalSales = TransactionDetails.Where(td => td.Item.Type == ETransactionType.Withdraw)
                             .Select(td => td.Total)
                             .Sum();

                var amount = TotalSales + TotalCharges;

                this.OldBalance = oldBalance;
                this.NewBalance = OldBalance + amount;
                this.Amount     = amount;
                this.Date       = (DateTime)until;
            }
        }