예제 #1
0
        private BudgetWeek BindDataOf(IBudget budget)
        {
            var dataSource = new SortedDictionary <PEOrderKey, PEBudgetRow>();

            var currentWeekMarker = CurrentWeekMarker(budget);

            BudgetWeek currentWeek   = null;
            var        lastWeekMonth = 0;

            foreach (var week in budget.Weeks)
            {
                if (week.Contains(currentWeekMarker))
                {
                    currentWeek = week;
                }

                if (week.Month != lastWeekMonth)
                {
                    dataSource.Add(
                        new PEOrderKey(week.FirstDay.MonthFirstDay(), WeekRowRank.MonthTitle),
                        new PEBudgetRow {
                        Date = week.FirstDay.ToString("MMMM")
                    });
                }

                dataSource.Add(
                    new PEOrderKey(week.FirstDay, WeekRowRank.WeekTitle),
                    new PEBudgetRow {
                    Date   = string.Format("Неделя {0:d} - {1:d}", week.FirstDay, week.LastDay),
                    Amount = string.Format("Свободные {0}", budget.GetFreeMoney(week.FirstDay).ToString("D")),
                });

                // todo : performance
                var monthlyCashStatements = budget.MonthlyCashMovements.Within(week).ToList();
                AddExpenses(week, dataSource, DayRowRank.MonthlyIncome, monthlyCashStatements.Where(_ => _.Amount > 0), currentWeek, PEBudgetRow.CurrentWeekMonthlyIncome);
                AddExpenses(week, dataSource, DayRowRank.MonthlyExpense, monthlyCashStatements.Where(_ => _.Amount <= 0), currentWeek, PEBudgetRow.CurrentWeekMonthlyOutcome);
                AddTransfers(week, dataSource, DayRowRank.Income, budget.Investments.Within(week), deletionService.DeleteCashMovement, OnEditCashMovement, currentWeek, PEBudgetRow.CurrentWeekIncome);
                AddTransfers(week, dataSource, DayRowRank.Expense, budget.Expenses.Within(week), deletionService.DeleteCashMovement, OnEditCashMovement, currentWeek, PEBudgetRow.CurrentWeekOutcome);
                AddReminders(week, dataSource, DayRowRank.Remainer, budget.Remainders.Within(week), budget, deletionService.DeleteRemainder, OnEditRemainder, currentWeek, PEBudgetRow.Default);

                lastWeekMonth = week.Month;
            }

            view.CalculationResults.DataSource = new List <PEBudgetRow>(dataSource.Values);

            var monthToBalance   = budget.Remainders.LastOrDefault()?.Date ?? DateTimeService.Now();
            var balance          = budget.MonthlyActualBalances.GetFor(monthToBalance);
            var nextMonth        = monthToBalance.AddMonths(1);
            var nextMonthBalance = budget.MonthlyActualBalances.GetFor(nextMonth);

            view.MonthlyBalance = $"{monthToBalance:MMM}: {balance:+#;-#}, {nextMonth:MMM}: {nextMonthBalance:+#;-#}";

            return(currentWeek);
        }
예제 #2
0
 private Func <CashStatement, string> ExplainReminder(IBudget budget, BudgetWeek week)
 {
     return(statement => string.Format("Конверт {0}, Остатки {1}, Свободные {2}", week != null ? week.Remainder.ToString() : "?", statement.Amount, budget.GetFreeMoney(statement.Date)));
 }