Example #1
0
        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));
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        private void onTimeEntryRemoved(long id)
        {
            var index = TimeEntries.IndexOf(id);

            if (index.HasValue)
            {
                TimeEntries.RemoveItemAt(index.Value.Section, index.Value.Row);
            }
        }
Example #5
0
        private void cancelDeleteTimeEntry()
        {
            if (!TimeEntries.IndexOf(timeEntryToDelete.Id).HasValue)
            {
                TimeEntries.InsertItem(timeEntryToDelete);
            }

            timeEntryToDelete = null;
            delayedDeletionDisposable.Dispose();
            showUndoSubject.OnNext(false);
        }
Example #6
0
        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));
        }
Example #7
0
        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));
        }
Example #9
0
        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));
        }