示例#1
0
        private CalendarDayData CreateCalendarDayData(DateTime date, List <ITransaction> transactions, List <LimitModel> limits)
        {
            // create calendar day data object
            var calendarDayData = new CalendarDayData(date)
            {
                CalendarData = _data
            };

            // fill existing records and money transfers in this day
            calendarDayData.Transactions = transactions.Where(x => x.TransactionDate.Day == calendarDayData.DayOfMonth &&
                                                              x.TransactionDate.Month == calendarDayData.Month && x.TransactionDate.Year == calendarDayData.Year).ToList();
            calendarDayData.FilteredTransactions = calendarDayData.Transactions;

            // populate initial limit state in this day
            calendarDayData.Limits = limits.Where(x => x.DateFrom <= calendarDayData.Date && calendarDayData.Date <= x.DateUntil)
                                     .Select(x => new Model.Calendar.LimitState()
            {
                Limit      = x,
                SpentValue = x.SpentValue,
                Categories = _data.Categories.Where(e => x.CategoryIds.Contains(e.Id)).ToList()
            }).ToList();
            calendarDayData.FilteredLimits = calendarDayData.Limits;

            // populate storage initial state
            calendarDayData.Storages = _data.Storages.Select(x => new StorageState()
            {
                Storage = x,
                Amount  = x.Value
            }).ToList();
            calendarDayData.FilteredStorages = calendarDayData.Storages;

            return(calendarDayData);
        }
示例#2
0
        private void UpdateLimitState(CalendarDayData calendarDay, List <ITransaction> transactions, bool isPast)
        {
            // for past days remove from spent value, for future - add
            var sign = isPast ? -1 : 1;

            foreach (var limitState in calendarDay.Limits)
            {
                // update limit state (Note: Transaction amount is negative for expense)
                limitState.SpentValue += sign * (-transactions
                                                 .Where(x => limitState.Limit.DateFrom <= x.TransactionDate && x.TransactionDate <= limitState.Limit.DateUntil &&
                                                        (limitState.Limit.CategoryIds.Count == 0 || limitState.Limit.CategoryIds.Contains(x.TransactionCategory?.Id ?? -1)) &&
                                                        x.IsExpense)
                                                 .Sum(x => x.TransactionAmount));
            }
        }
 public CalendarCellsViewModel()
 {
     DateTitle = $"{CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(DateTime.Today.Month)} {DateTime.Today.Year}";
     Days      = new ObservableCollection <CalendarDayData>();
     for (int i = 1; i <= 31; i++)
     {
         var day = new CalendarDayData {
             DayNumber = i, Message = "Test"
         };
         if (i == DateTime.Today.Day)
         {
             SelectedDay = day;
         }
         Days.Add(day);
     }
 }
示例#4
0
        private void UpdateFutureDateStorageState(CalendarDayData calendarDay, List <ITransaction> transactions)
        {
            foreach (var storageState in calendarDay.Storages)
            {
                // update storage state by records
                storageState.Amount += transactions
                                       .Where(x => (x.TransactionType == TransactionType.Expense || x.TransactionType == TransactionType.Income) &&
                                              x.TransactionStorage.Id == storageState.Storage.Id).Sum(x => x.TransactionAmount);

                // get related money transfers
                var moneyTransfers = transactions
                                     .Where(x => x.TransactionStorageIds.Contains(storageState.Storage.Id) &&
                                            x.TransactionType == TransactionType.MoneyTransfer)
                                     .Select(x => (x as PlannedTransactionModel <EventModel>).Event as MoneyTransferEventModel)
                                     .ToList();

                // apply money transfers
                storageState.Amount -= moneyTransfers.Where(x => x.StorageFromId == storageState.Storage.Id).Sum(x => x.StorageFromValue);
                storageState.Amount += moneyTransfers.Where(x => x.StorageToId == storageState.Storage.Id).Sum(x => x.StorageToValue);
            }
        }
示例#5
0
        private void SetDay(int iCol, int iRow, CalendarDayData data)
        {
            var cellMap = _cellMapping.FirstOrDefault(x => x.ICol == iCol && x.IRow == iRow);

            if (cellMap == null)
            {
                // create new
                cellMap = new CellMapping()
                {
                    ICol    = iCol,
                    IRow    = iRow,
                    Control = new CalendarDayControl()
                };
                // add to the list
                _cellMapping.Add(cellMap);

                // fill cell in grid
                Grid.SetColumn(cellMap.Control, cellMap.ICol);
                Grid.SetRow(cellMap.Control, cellMap.IRow);
                daysGrid.Children.Add(cellMap.Control);
            }

            // make sure grid contains correspond row
            if (daysGrid.Rows < iRow + 1)
            {
                daysGrid.Rows = iRow + 1;
            }

            if (cellMap.Control.Parent == null)
            {
                daysGrid.Children.Add(cellMap.Control);
            }

            cellMap.Control.Visibility = Visibility.Visible;
            cellMap.Control.Data       = data;
        }