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