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