public static BudgetDistributionViewModel Create(Ledger managerBudget, User employee, Ledger employeePoints)
        {
            var last = managerBudget.Debits
                .Where(x => x.Credit == employeePoints.Account.Document.Id)
                .OrderBy(x => x.Date)
                .Select(x => (DateTime?)x.Date)
                .LastOrDefault();

            return new BudgetDistributionViewModel
            {
                Id = employee.Document.Id,
                DisplayName = employee.DisplayName,
                Balance = employeePoints.Balance,
                LastBudgetDistribution = last,
                LastBudgetDistributionText = last.HasValue ? last.Value.ToShortDateString() : "Never",
                Wishlist = employee.Wishlist,
            };
        }
 public void AddBudgets(User u, IAccountingService accounting)
 {
     PointsLedger = accounting.GetPointsLedger(u);
     BudgetLedger = accounting.GetBudgetLedger(u);
 }
        public Ledger GetLedger(Account account)
        {
            if (null == account) return null; 
            
            var key = "ledger-" + account.Document.Id;
            if (Cache.ContainsKey(key))
            {
                return Cache.Get<Ledger>(key);
            }

            var l = new Ledger
            {
                Account = account,
                Transactions = TransactionRepository.GetTransactionsForAccount(account.Document.Id),
            };

            // cache user account for 30 minutes, cache the general control and
            // expense accounts for longer
            var ts = (account.Type == AccountType.Control)
                         ? TimeSpan.FromHours(12)
                         : TimeSpan.FromMinutes(30);

            Cache.Put(key, l, ts);
            return l;
        }
 public ProgramLiabilityLedger(
     Ledger control,
     Ledger expense)
 {
     _control = control;
     _expense = expense;
 }