private void onTimeEntryDeleted(long id) { var viewModel = TimeEntries.Select(c => c.SingleOrDefault(vm => vm.Id == id)).SingleOrDefault(vm => vm != null); if (viewModel == null) { return; } var collection = TimeEntries.SingleOrDefault(c => c.Date == viewModel.Start.Date); if (collection == null) { return; } collection.Remove(viewModel); var indexToInsert = TimeEntries.IndexOf(collection); TimeEntries.Remove(collection); if (collection.Count > 0) { var newCollection = new TimeEntryViewModelCollection(collection.Date.DateTime, collection); TimeEntries.Insert(indexToInsert, newCollection); } RaisePropertyChanged(nameof(IsEmpty)); }
private void onTimeEntryUpdated(EntityUpdate <IThreadSafeTimeEntry> update) { var timeEntry = update.Entity; var shouldBeAdded = timeEntry != null && !timeEntry.IsRunning() && !timeEntry.IsDeleted; var oldCollectionIndex = TimeEntries.IndexOf(c => c.Any(vm => vm.Id == update.Id)); var collectionIndex = TimeEntries.IndexOf(vm => vm.Date == timeEntry.Start.LocalDateTime.Date); var wasMovedIntoDifferentCollection = oldCollectionIndex >= 0 && oldCollectionIndex != collectionIndex; var shouldBeRemoved = shouldBeAdded == false || wasMovedIntoDifferentCollection; if (shouldBeRemoved) { safeRemoveTimeEntry(update.Id); } if (shouldBeAdded) { var timeEntryIndex = collectionIndex < 0 ? -1 : TimeEntries[collectionIndex].IndexOf(vm => vm.Id == update.Id); var timeEntryExistsInTheCollection = timeEntryIndex >= 0; if (timeEntryExistsInTheCollection) { var timeEntryViewModel = new TimeEntryViewModel(timeEntry, durationFormat); TimeEntries.ReplaceInChildCollection(collectionIndex, timeEntryIndex, timeEntryViewModel); return; } safeInsertTimeEntry(timeEntry); } }
private void insertNewTimeEntryGroup(IThreadSafeTimeEntry timeEntry, DateTime indexDate) { var timeEntryToAdd = new TimeEntryViewModel(timeEntry, durationFormat); var newCollection = new TimeEntryViewModelCollection(indexDate, new[] { timeEntryToAdd }, durationFormat); var foundIndex = TimeEntries.IndexOf(TimeEntries.FirstOrDefault(x => x.Date < indexDate)); var indexToInsert = foundIndex == -1 ? TimeEntries.Count : foundIndex; TimeEntries.Insert(indexToInsert, newCollection); }
private void onTimeEntryRemoved(long id) { var index = TimeEntries.IndexOf(id); if (index.HasValue) { TimeEntries.RemoveItemAt(index.Value.Section, index.Value.Row); } }
private void cancelDeleteTimeEntry() { if (!TimeEntries.IndexOf(timeEntryToDelete.Id).HasValue) { TimeEntries.InsertItem(timeEntryToDelete); } timeEntryToDelete = null; delayedDeletionDisposable.Dispose(); showUndoSubject.OnNext(false); }
private IObservable <Unit> cancelDeleteTimeEntry() { if (!TimeEntries.IndexOf(timeEntryToDelete.Id).HasValue) { TimeEntries.InsertItem(timeEntryToDelete); } timeEntryToDelete = null; delayedDeletionDisposable.Dispose(); showUndoSubject.OnNext(false); return(Observable.Return(Unit.Default)); }
private void safeRemoveTimeEntry(long id) { var collectionIndex = TimeEntries.IndexOf(c => c.Any(vm => vm.Id == id)); if (collectionIndex < 0) { return; } var item = TimeEntries[collectionIndex].First(vm => vm.Id == id); TimeEntries.RemoveFromChildCollection(collectionIndex, item); RaisePropertyChanged(nameof(IsEmpty)); }
private void safeInsertTimeEntry(IThreadSafeTimeEntry timeEntry) { var indexDate = timeEntry.Start.LocalDateTime.Date; var collectionIndex = TimeEntries.IndexOf(x => x.Date.LocalDateTime == indexDate); var groupExists = collectionIndex >= 0; if (groupExists) { insertTimeEntryInGroup(timeEntry, collectionIndex); } else { insertNewTimeEntryGroup(timeEntry, indexDate); } RaisePropertyChanged(nameof(IsEmpty)); }
private void onTimeEntryCreated(IDatabaseTimeEntry timeEntry) { var indexDate = timeEntry.Start.Date; var timeEntriesInDay = new List <TimeEntryViewModel> { new TimeEntryViewModel(timeEntry) }; var collection = TimeEntries.FirstOrDefault(x => x.Date == indexDate); if (collection != null) { timeEntriesInDay.AddRange(collection); TimeEntries.Remove(collection); } var newCollection = new TimeEntryViewModelCollection(indexDate, timeEntriesInDay.OrderByDescending(te => te.Start)); var foundIndex = TimeEntries.IndexOf(TimeEntries.FirstOrDefault(x => x.Date < indexDate)); var indexToInsert = foundIndex == -1 ? TimeEntries.Count : foundIndex; TimeEntries.Insert(indexToInsert, newCollection); RaisePropertyChanged(nameof(IsEmpty)); }