Esempio n. 1
0
 private void AddReminders(BudgetWeek week, SortedDictionary <PEOrderKey, PEBudgetRow> dataSource, DayRowRank dayRowRank, IEnumerable <CashStatement> transfers, IBudget budget, Action <CashStatement> delete, Action <CashStatement> edit, Week currentWeek, Color currentWeekColor)
 {
     foreach (var transfer in transfers)
     {
         dataSource.Add(
             new PEOrderKey(week.FirstDay, WeekRowRank.Other, transfer.Date, dayRowRank, transfer.Description),
             CreatePEBudgetRow(transfer, "Остаток", delete, edit, ExplainReminder(budget, week), currentWeek, currentWeekColor));
     }
 }
Esempio n. 2
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);
        }
Esempio n. 3
0
        private void SelectLastRemainderOf(IBudget budget, BudgetWeek currentWeek)
        {
            if (view.CalculationResults.IsScrolledDown)
            {
                return;
            }

            var lastRemainder = budget.Remainders
                                .OrderBy(r => r.Date)
                                .LastOrDefault();

            if (lastRemainder != null)
            {
                view.CalculationResults.SelectedItem = CreatePEBudgetRow(lastRemainder, "Остаток", r => { }, r => { }, ExplainReminder(budget, currentWeek), currentWeek, PEBudgetRow.Default);
            }
        }
Esempio n. 4
0
 private void AddExpenses(BudgetWeek week, SortedDictionary <PEOrderKey, PEBudgetRow> dataSource, DayRowRank dayRowRank, IEnumerable <MonthlyCashStatement> expenses, Week currentWeek, Color currentWeekColor)
 {
     foreach (var expense in expenses)
     {
         var theExpense = expense;
         dataSource.Add(
             new PEOrderKey(week.FirstDay, WeekRowRank.Other, expense.Date, dayRowRank),
             new PEBudgetRow {
             OnEdit          = () => OnEditMonthlyExpense(theExpense),
             OnConfigure     = () => OnEditExpenseItem(theExpense),
             OnDelete        = () => deletionService.DeleteMonthlyCashMovement(theExpense),
             Event           = DescriptionOf(expense),
             Date            = expense.Date.ToString("d"),
             Amount          = expense.Amount.ToString(),
             BackgroundColor = currentWeek != null && currentWeek.Contains(expense.Date) ? currentWeekColor : PEBudgetRow.Default,
         });
     }
 }
Esempio n. 5
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)));
 }