private void SwitchScreen(IMenuInfo menuInfo)
        {
            IScreen screen;

            if (menuInfo == null)
            {
                return;
            }

            if (!_userSession.IsLoggedIn)
            {
                return;
            }

            //If screen already exists, activate it
            if (_screenDictionary.ContainsKey(menuInfo.ScreenGuid))
            {
                screen = _screenDictionary[menuInfo.ScreenGuid];

                if (screen.IsActive)
                {
                    return;
                }

                if (screen is IDialogScreen)
                {
                    ((IDialogScreen)screen).Open();
                    return;
                }

                var mainRegion = _regionManager.Regions[_appSettings.RegionNames.MainRegion];
                RemoveActiveScreen();
                var view = mainRegion.GetView(screen.Guid.ToString());
                mainRegion.Activate(view);
                _screenDictionary[menuInfo.ScreenGuid].IsActive = true;
            }
            else
            {
                var factory    = _factoryRegistry.GetFactory(menuInfo.ScreenGuid);
                var mainRegion = _regionManager.Regions[_appSettings.RegionNames.MainRegion];

                screen = factory.CreateScreen(mainRegion, menuInfo.ScreenGuid);
                var screenAttribute = screen.GetScreenAttribute();
                if (screen is IDialogScreen)
                {
                    ((IDialogScreen)screen).Open();
                    _busyService.HideBusy("SwitchScreen");
                    _screenDictionary.Add(menuInfo.ScreenGuid, screen);
                    return;
                }

                RemoveActiveScreen();
                mainRegion.Activate(screen.MasterView);

                screen.IsActive = true;
                _screenDictionary.Add(menuInfo.ScreenGuid, screen);
            }
            //_busyService.HideBusy("SwitchScreen");
            _transitionService.EnterViewAnimation(screen.MasterView);
        }
        private void SaveCommandExecute(object item)
        {
            _busyService.ShowBusy(_reportscreenKey);

            var list = new List <TimeEntry>();

            foreach (var gridRowItemViewModel in GridRows.Where(x => x.HasChanges))
            {
                var timeEntry = gridRowItemViewModel.TimeEntry;

                timeEntry.IsSynced = false;

                timeEntry.Billable      = gridRowItemViewModel.EditableBillable;
                timeEntry.TimeEntryType = gridRowItemViewModel.EditableType;

                list.Add(timeEntry);
                TaskCommands.SaveTaskCompleted.Execute(timeEntry);
            }

            _timeEntryRepository.AddOrUpdateRange(list);
            ApplicationCommands.StartSync.Execute(null);

            _busyService.HideBusy(_reportscreenKey);
        }
        private async void LoadTimeEntries()
        {
            // Is being invoked twice when date is selected in bound datepicker
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;
            _busyService.ShowBusy(_dayoverviewKey);

            IEnumerable <DataOverviewItemViewModel> timeEntries = new List <DataOverviewItemViewModel>();

            try
            {
                //enddate tasks are also included
                var timeEntriesDtos = await _timeEntryService.GetTimeEntriesByDateIgnoreEmptyTimeEntries(StartDate, StartDate);

                timeEntries = timeEntriesDtos.Select(timeEntry => new DataOverviewItemViewModel(timeEntry));
            }
            catch (Exception ex)
            {
                if (!_isShowingTextbox)
                {
                    _isShowingTextbox = true;
                    var result = MessageBox.Show("Error loading timeentries", "Error", MessageBoxButton.OK);
                    _isShowingTextbox = result == MessageBoxResult.None;
                }
                Logger.Error(ex);
            }
            TimeEntries = timeEntries.OrderBy(x => x.TimeEntry.Guid).ToList();
            await Task.Run(() => ThreadUtils.WaitForUIRendering());

            IsBusy = false;
            _busyService.HideBusy(_dayoverviewKey);
        }
Exemple #4
0
        private async void DoSync()
        {
            if (!_connectivityService.IsOnline)
            {
                ApplicationCommands.SyncCompleted.Execute(null);
                return;
            }

            if (SyncInProgress || !_connectivityService.IsOnline)
            {
                return;
            }

            SyncInProgress = true;

            ApplicationCommands.SyncStarted.Execute(ShouldDisplayProgress);

            try
            {
                if (ForceResync)
                {
                    _busyService.ShowBusy(_syncKey);

                    await Task.Run(() =>
                    {
                        SyncProgressChanged(20, "Synchronizing companies");
                        SynchronizeCompanies().Wait();
                        SyncProgressChanged(30, "Synchronizing projects");
                        SynchronizeProjects().Wait();
                        SyncProgressChanged(20, "Synchronizing tasks");
                        SynchronizeTasks().Wait();
                        SyncProgressChanged(5, "Synchronizing time entry types");
                        SynchronizeTimeEntryTypes().Wait();
                        SyncProgressChanged(10, "Synchronizing local time entries");
                        SynchronizeTimeEntries().Wait();
                        SyncProgressChanged(20, "Synchronizing user statistics");
                        UserSession.UserStatistics   = UserService.GetPerformanceInfo(UserSession);
                        AppSettings.MinTimeEntryDate = UserService.GetTimeEntryMinStartDate(UserSession);
                    });
                }
                else
                {
                    SyncProgressChanged(20, "Synchronizing companies");
                    await SynchronizeCompanies();

                    SyncProgressChanged(30, "Synchronizing projects");
                    await SynchronizeProjects();

                    SyncProgressChanged(20, "Synchronizing tasks");
                    await SynchronizeTasks();

                    SyncProgressChanged(5, "Synchronizing time entry types");
                    await SynchronizeTimeEntryTypes();

                    SyncProgressChanged(10, "Synchronizing local time entries");
                    await SynchronizeTimeEntries();

                    SyncProgressChanged(20, "Synchronizing user statistics");
                    UserSession.UserStatistics   = UserService.GetPerformanceInfo(UserSession);
                    AppSettings.MinTimeEntryDate = UserService.GetTimeEntryMinStartDate(UserSession);
                }


                SyncProgressChanged(10, "Synchronizing history list");
                var numOfDaysBack        = UserSession.UserPreferences.StatisticsNumOfDaysBack;
                var startTime            = DateTime.Now.Date.AddDays(-numOfDaysBack);
                var endTime              = DateTime.Now;
                var lastXDaysTimeEntries = await TimeEntryService.GetTimeEntriesByDate(startTime, endTime);

                var unsyncedTimeEntries = _timeEntryRepository.GetUnsyncedTimeEntries();
                lastXDaysTimeEntries.AddRange(unsyncedTimeEntries.Where(x => !x.HasSyncError));
                UserSession.UserStatistics.LastXDaysTimeEntries = lastXDaysTimeEntries;

                AppSettings.LastSyncDate = DateTime.Now;
                AppSettings.Save();
                SyncProgressChanged(0, "Synchronization complete");
                SyncInProgress = false;
                ForceResync    = false;
                ApplicationCommands.SyncCompleted.Execute(null);
            }
            catch (NotFoundByGuidException notFoundByGuidException)
            {
                Logger.Error(notFoundByGuidException);
                SyncInProgress = false;
                _resyncCommand.Execute(null);
            }
            catch (MissingHieracleDataException missingHieracleDataException)
            {
                Logger.Error(missingHieracleDataException);
                if (!ForceResync)
                {
                    SyncInProgress = false;
                    _resyncCommand.Execute(null);
                }
                else
                {
                    OnSyncFailed("Unknown Synchronization failure. Contact support");
                }
            }
            catch (Exception ex)
            {
                if (ex is AggregateException)
                {
                    var aggregateException = ex as AggregateException;
                    foreach (var e in aggregateException.Flatten().InnerExceptions)
                    {
                        HandleSyncError(e);
                    }
                }
                else
                {
                    HandleSyncError(ex);
                }
                OnSyncFailed("Synchronization failed due to a connectivity error. The application will retry in " +
                             AppSettings.SyncInterval.Minutes + " minutes.");
            }
            _busyService.HideBusy(_syncKey);
        }
        private void LoginSucceeded(object obj)
        {
            _busyService.HideBusy("Login");

            ApplicationCommands.ChangeScreenCommand.Execute(_menuRegistry.GetStartPage);
        }