/// <summary> /// Henter og opdaterer regnskabet med kontogrupper til budgetkonti. /// </summary> /// <param name="regnskabViewModel">ViewModel for regnskabet, hvorpå kontogrupper til budgetkonti skal opdateres.</param> protected override void Execute(IRegnskabViewModel regnskabViewModel) { var budgetkontogrupperViewModels = new List <IBudgetkontogruppeViewModel>(regnskabViewModel.Budgetkontogrupper); if (budgetkontogrupperViewModels.Any()) { return; } _isBusy = true; var task = _finansstyringRepository.BudgetkontogruppelisteGetAsync(); ExecuteTask = task.ContinueWith(t => { try { HandleResultFromTask(t, regnskabViewModel, new object(), HandleResult); } finally { _isBusy = false; } }); }
/// <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. } }