/// <summary>
        /// Henter og opdaterer regnskabet med kontogrupper.
        /// </summary>
        /// <param name="regnskabViewModel">ViewModel for regnskabet, hvorpå kontogrupper skal opdateres.</param>
        protected override void Execute(IRegnskabViewModel regnskabViewModel)
        {
            var kontogrupperViewModels = new List <IKontogruppeViewModel>(regnskabViewModel.Kontogrupper);

            if (kontogrupperViewModels.Any())
            {
                return;
            }
            _isBusy = true;
            var task = _finansstyringRepository.KontogruppelisteGetAsync();

            ExecuteTask = task.ContinueWith(t =>
            {
                try
                {
                    HandleResultFromTask(t, regnskabViewModel, new object(), HandleResult);
                }
                finally
                {
                    _isBusy = false;
                }
            });
        }
Exemple #2
0
        /// <summary>
        /// Synkroniserer finansstyringsdata til og fra det lokale datalager.
        /// </summary>
        /// <param name="finansstyringRepository">Implementering af finansstyringsrepositoryet, hvorfra data skal synkroniseres til og fra det lokale datalager.</param>
        /// <param name="finansstyringKonfigurationRepository">Implementering af konfiguration til finansstyringsrepositoryet.</param>
        /// <param name="localeDataStorage">Implementering af det lokale datalager.</param>
        private static async Task SyncData(IFinansstyringRepository finansstyringRepository, IFinansstyringKonfigurationRepository finansstyringKonfigurationRepository, ILocaleDataStorage localeDataStorage)
        {
            if (finansstyringRepository == null)
            {
                throw new ArgumentNullException(nameof(finansstyringRepository));
            }
            if (finansstyringKonfigurationRepository == null)
            {
                throw new ArgumentNullException(nameof(finansstyringKonfigurationRepository));
            }
            if (localeDataStorage == null)
            {
                throw new ArgumentNullException(nameof(localeDataStorage));
            }

            try
            {
                XDocument syncDataDocument = null;

                IEnumerable <IKontogruppeModel> kontogruppeliste = await finansstyringRepository.KontogruppelisteGetAsync();

                foreach (IKontogruppeModel kontogruppe in kontogruppeliste)
                {
                    lock (SyncRoot)
                    {
                        if (syncDataDocument == null)
                        {
                            localeDataStorage.StoreSyncData(kontogruppe);
                            syncDataDocument = localeDataStorage.GetLocaleData();
                        }
                        else
                        {
                            kontogruppe.StoreInDocument(syncDataDocument);
                        }
                    }
                }

                IEnumerable <IBudgetkontogruppeModel> budgetkontogruppeliste = await finansstyringRepository.BudgetkontogruppelisteGetAsync();

                foreach (IBudgetkontogruppeModel budgetkontogruppe in budgetkontogruppeliste)
                {
                    lock (SyncRoot)
                    {
                        if (syncDataDocument == null)
                        {
                            localeDataStorage.StoreSyncData(budgetkontogruppe);
                            syncDataDocument = localeDataStorage.GetLocaleData();
                        }
                        else
                        {
                            budgetkontogruppe.StoreInDocument(syncDataDocument);
                        }
                    }
                }

                bool makeFullSync = true;
                lock (SyncRoot)
                {
                    if (syncDataDocument != null)
                    {
                        DateTime?lastFullSync = syncDataDocument.GetSidsteFuldeSynkronisering();
                        makeFullSync = lastFullSync.HasValue == false || lastFullSync.Value.Date < DateTime.Now.AddDays(-30).Date;
                    }
                }

                IRegnskabModel[] regnskabsliste = (await finansstyringRepository.RegnskabslisteGetAsync()).ToArray();
                await SyncLocaleData(finansstyringRepository, localeDataStorage, syncDataDocument, regnskabsliste);

                if (_cancelRequested)
                {
                    return;
                }

                IList <Task> regnskabSyncTasks = new List <Task>();
                foreach (IRegnskabModel regnskab in regnskabsliste)
                {
                    lock (SyncRoot)
                    {
                        if (syncDataDocument == null)
                        {
                            localeDataStorage.StoreSyncData(regnskab);
                            syncDataDocument = localeDataStorage.GetLocaleData();
                        }
                        else
                        {
                            regnskab.StoreInDocument(syncDataDocument);
                        }
                    }
                    regnskabSyncTasks.Add(SyncData(finansstyringRepository, finansstyringKonfigurationRepository, localeDataStorage, syncDataDocument, regnskab, makeFullSync));
                }
                Task.WaitAll(regnskabSyncTasks.ToArray());

                lock (SyncRoot)
                {
                    if (syncDataDocument == null)
                    {
                        return;
                    }
                    if (makeFullSync)
                    {
                        syncDataDocument.StoreSidsteFuldeSynkroniseringInDocument(DateTime.Now);
                    }
                    localeDataStorage.StoreSyncDocument(syncDataDocument);
                }
            }
            catch (IntranetGuiOfflineRepositoryException)
            {
                // We are currently offline.
                // Don't rethrow the exception.
            }
        }