/// <summary> /// Danner queryhandler til håndtering af forespørgelsen: BudgetkontoGetByRegnskabQuery. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="adresseRepository">Implementering af repository til adressekartotek.</param> /// <param name="fællesRepository">Implementering af repository til fælles elementer.</param> /// <param name="objectMapper">Implementering af objektmapper.</param> public BudgetkontoGetByRegnskabQueryHandler(IFinansstyringRepository finansstyringRepository, IAdresseRepository adresseRepository, IFællesRepository fællesRepository, IObjectMapper objectMapper) { if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (adresseRepository == null) { throw new ArgumentNullException("adresseRepository"); } if (fællesRepository == null) { throw new ArgumentNullException("fællesRepository"); } if (objectMapper == null) { throw new ArgumentNullException("objectMapper"); } _finansstyringRepository = finansstyringRepository; _adresseRepository = adresseRepository; _fællesRepository = fællesRepository; _objectMapper = objectMapper; }
/// <summary> /// Danner queryhandler til håndtering af forespørgelsen: AdresselisteGetAllQuery. /// </summary> /// <param name="adresseRepository">Implementering af repository til adressekartoteket.</param> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="fællesRepository">Implementering af repository til fælles elementer.</param> /// <param name="objectMapper">Implementering af objektmapper.</param> public AdresselisteGetAllQueryHandler(IAdresseRepository adresseRepository, IFinansstyringRepository finansstyringRepository, IObjectMapper objectMapper, IFællesRepository fællesRepository) { if (adresseRepository == null) { throw new ArgumentNullException("adresseRepository"); } if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (objectMapper == null) { throw new ArgumentNullException("objectMapper"); } if (fællesRepository == null) { throw new ArgumentNullException("fællesRepository"); } _adresseRepository = adresseRepository; _finansstyringRepository = finansstyringRepository; _objectMapper = objectMapper; _fællesRepository = fællesRepository; }
/// <summary> /// Danner commandhandler til håndtering af kommandoen: BogføringslinjeAddCommand. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="adresseRepository">Implementering af repository til adressekartotek.</param> /// <param name="fællesRepository">Implementering af repository til fælles elementer.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> public BogføringslinjeAddCommandHandler(IFinansstyringRepository finansstyringRepository, IAdresseRepository adresseRepository, IFællesRepository fællesRepository, IObjectMapper objectMapper) { if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (adresseRepository == null) { throw new ArgumentNullException("adresseRepository"); } if (fællesRepository == null) { throw new ArgumentNullException("fællesRepository"); } if (objectMapper == null) { throw new ArgumentNullException("objectMapper"); } _finansstyringRepository = finansstyringRepository; _adresseRepository = adresseRepository; _fællesRepository = fællesRepository; _objectMapper = objectMapper; }
/// <summary> /// Henter alle nyheder til finansstyring. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <returns>Nyheder til finansstyring.</returns> private static async Task <IEnumerable <INyhedModel> > FinansstyringsnyhederGetAsync(IFinansstyringRepository finansstyringRepository) { if (finansstyringRepository == null) { throw new ArgumentNullException(nameof(finansstyringRepository)); } List <INyhedModel> nyheder = new List <INyhedModel>(); try { DateTime statusDato = DateTime.Now; IFinansstyringKonfigurationRepository konfiguration = finansstyringRepository.Konfiguration; DateTime nyhederFromDate = statusDato.AddDays(konfiguration.DageForNyheder * -1); DateTime nyhederToDate = statusDato; foreach (IRegnskabModel regnskab in await finansstyringRepository.RegnskabslisteGetAsync()) { nyheder.AddRange((await finansstyringRepository.BogføringslinjerGetAsync(regnskab.Nummer, statusDato, konfiguration.AntalBogføringslinjer)).Where(m => m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederFromDate.Date) >= 0 && m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederToDate.Date) <= 0).ToList()); nyheder.AddRange((await finansstyringRepository.DebitorlisteGetAsync(regnskab.Nummer, statusDato)).Where(m => m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederFromDate.Date) >= 0 && m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederToDate.Date) <= 0).ToList()); nyheder.AddRange((await finansstyringRepository.KreditorlisteGetAsync(regnskab.Nummer, statusDato)).Where(m => m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederFromDate.Date) >= 0 && m.Nyhedsudgivelsestidspunkt.Date.CompareTo(nyhederToDate.Date) <= 0).ToList()); } return(nyheder); } catch (IntranetGuiOfflineRepositoryException) { throw; } catch (IntranetGuiRepositoryException) { return(nyheder); } }
/// <summary> /// Danner QueryHandler til håndtering af forespørgelsen: KreditorGetQuery. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="adresseRepository">Implementering af repository til adresser.</param> /// <param name="fællesRepository">Implementering af repository til fælles elementer i domænet.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> public KreditorGetQueryHandler(IFinansstyringRepository finansstyringRepository, IAdresseRepository adresseRepository, IFællesRepository fællesRepository, IObjectMapper objectMapper) : base(finansstyringRepository, adresseRepository, fællesRepository, objectMapper) { }
/// <summary> /// Danner egen klasse til test af basisklasse for en QueryHandler til finansstyring. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> public MyFinansstyringQueryHandler(IFinansstyringRepository finansstyringRepository, IObjectMapper objectMapper) : base(finansstyringRepository, objectMapper) { }
/// <summary> /// Danner egen klasse til test af basisklasse for en CommandHandler til regnskaber. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="adresseRepository">Implementering af repository til adresser.</param> /// <param name="fællesRepository">Implementering af repository til fælles elementer i domænet.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> /// <param name="exceptionBuilder">Implementering af builderen, der kan bygge exceptions.</param> public MyCommandHandler(IFinansstyringRepository finansstyringRepository, IAdresseRepository adresseRepository, IFællesRepository fællesRepository, IObjectMapper objectMapper, IExceptionBuilder exceptionBuilder) : base(finansstyringRepository, adresseRepository, fællesRepository, objectMapper, exceptionBuilder) { }
/// <summary> /// Synchronize the locale accounting data for a given <see cref="IRegnskabModel"/> to the online accounting repository. /// </summary> /// <param name="accountingRepository">The <see cref="IFinansstyringRepository"/> for the online accounting repository.</param> /// <param name="localeDataStorage">The <see cref="ILocaleDataStorage"/> for storing locale data.</param>> /// <param name="syncDataDocument">The <see cref="XDocument"/> containing the locale accounting data.</param> /// <param name="accountingModel">The given <see cref="IRegnskabModel"/> on which to synchronize locale accounting data to the online repository.</param> /// <exception cref="ArgumentNullException">Thrown when <paramref name="accountingRepository"/>, <paramref name="localeDataStorage"/>, <paramref name="syncDataDocument"/> or <paramref name="accountingModel"/> is null.</exception> private static async Task SyncLocaleData(IFinansstyringRepository accountingRepository, ILocaleDataStorage localeDataStorage, XDocument syncDataDocument, IRegnskabModel accountingModel) { if (accountingRepository == null) { throw new ArgumentNullException(nameof(accountingRepository)); } if (localeDataStorage == null) { throw new ArgumentNullException(nameof(localeDataStorage)); } if (syncDataDocument == null) { throw new ArgumentNullException(nameof(syncDataDocument)); } if (accountingModel == null) { throw new ArgumentNullException(nameof(accountingModel)); } try { XElement rootElement = syncDataDocument.Root; XElement accountingElement = rootElement?.Elements(XName.Get("Regnskab", rootElement.Name.NamespaceName)).SingleOrDefault(element => GetAttributeValue(element, "nummer") != null && string.Compare(GetAttributeValue(element, "nummer"), accountingModel.Nummer.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal) == 0); if (accountingElement == null) { return; } XElement postingLineToSync; lock (SyncRoot) { postingLineToSync = GetPostingLineToSync(rootElement, accountingElement); if (postingLineToSync != null && _cancelRequested == false) { postingLineToSync.StorePendingPostingLineInDocument(); localeDataStorage.StoreSyncDocument(syncDataDocument); } } while (postingLineToSync != null && _cancelRequested == false) { DateTime postingDate = DateTime.ParseExact(GetAttributeValue(postingLineToSync, "dato"), "yyyyMMdd", CultureInfo.InvariantCulture); string voucherNo = GetAttributeValue(postingLineToSync, "bilag"); string accountNumber = GetAttributeValue(postingLineToSync, "kontonummer"); string text = GetAttributeValue(postingLineToSync, "tekst"); string budgetAccountNumber = GetAttributeValue(postingLineToSync, "budgetkontonummer"); decimal debit = GetAttributeValue(postingLineToSync, "debit") == null ? 0M : decimal.Parse(GetAttributeValue(postingLineToSync, "debit"), NumberStyles.Any, CultureInfo.InvariantCulture); decimal credit = GetAttributeValue(postingLineToSync, "kredit") == null ? 0M : decimal.Parse(GetAttributeValue(postingLineToSync, "kredit"), NumberStyles.Any, CultureInfo.InvariantCulture); int addressAccountNumber = GetAttributeValue(postingLineToSync, "adressekonto") == null ? 0 : int.Parse(GetAttributeValue(postingLineToSync, "adressekonto"), NumberStyles.Integer, CultureInfo.InvariantCulture); await accountingRepository.BogførAsync(accountingModel.Nummer, postingDate, voucherNo, accountNumber, text, budgetAccountNumber, debit, credit, addressAccountNumber); lock (SyncRoot) { postingLineToSync.Remove(); localeDataStorage.StoreSyncDocument(syncDataDocument); postingLineToSync = GetPostingLineToSync(rootElement, accountingElement); if (postingLineToSync != null && _cancelRequested == false) { postingLineToSync.StorePendingPostingLineInDocument(); localeDataStorage.StoreSyncDocument(syncDataDocument); } } } } catch (IntranetGuiOfflineRepositoryException) { // We are currently offline. // Don't rethrow the exception. } }
/// <summary> /// Danner QueryHandler til håndtering af forespørgelsen: BudgetkontogrupperGetQuery. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> public BudgetkontogrupperGetQueryHandler(IFinansstyringRepository finansstyringRepository, IObjectMapper objectMapper) : base(finansstyringRepository, objectMapper) { }
/// <summary> /// Dannere egen klasse til test af basisklasse for en CommandHandler til finansstyring. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="objectMapper">Implementering af objectmapper.</param> /// <param name="exceptionBuilder">Implementering af builderen, der kan bygge exceptions.</param> public MyCommandHandler(IFinansstyringRepository finansstyringRepository, IObjectMapper objectMapper, IExceptionBuilder exceptionBuilder) : base(finansstyringRepository, objectMapper, exceptionBuilder) { }
/// <summary> /// Danner en ViewModel indeholdende grundlæggende kontooplysninger. /// </summary> /// <param name="regnskabViewModel">ViewModel for regnskabet, som kontoen er tilknyttet.</param> /// <param name="kontoModel">Model indeholdende grundlæggende kontooplysninger.</param> /// <param name="kontogruppeViewModel">ViewModel for kontogruppen.</param> /// <param name="displayName">Navn for ViewModel, som kan benyttes til visning i brugergrænsefladen.</param> /// <param name="image">Billede, der illustrerer en kontoen.</param> /// <param name="finansstyringRepository">Implementering af repositoryet til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af ViewModel for exceptionhandleren.</param> protected KontoViewModelBase(IRegnskabViewModel regnskabViewModel, TKontoModel kontoModel, TKontogruppeViewModel kontogruppeViewModel, string displayName, byte[] image, IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) { if (regnskabViewModel == null) { throw new ArgumentNullException("regnskabViewModel"); } if (Equals(kontoModel, null)) { throw new ArgumentNullException("kontoModel"); } if (Equals(kontogruppeViewModel, null)) { throw new ArgumentNullException("kontogruppeViewModel"); } if (string.IsNullOrEmpty(displayName)) { throw new ArgumentNullException("displayName"); } if (image == null) { throw new ArgumentNullException("image"); } if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (exceptionHandlerViewModel == null) { throw new ArgumentNullException("exceptionHandlerViewModel"); } _regnskabViewModel = regnskabViewModel; _kontoModel = kontoModel; _kontoModel.PropertyChanged += PropertyChangedOnKontoModelEventHandler; _kontogruppeViewModel = kontogruppeViewModel; _displayName = displayName; _image = image; _erRegistreret = false; _finansstyringRepository = finansstyringRepository; _exceptionHandlerViewModel = exceptionHandlerViewModel; }
/// <summary> /// Danner ViewModel for en adressekonto. /// </summary> /// <param name="regnskabViewModel">ViewModel for regnskabet, som adressekontoen skal være tilknyttet.</param> /// <param name="adressekontoModel">Model for adressekontoen.</param> /// <param name="displayName">Navn for ViewModel, som kan benyttes til visning i brugergrænsefladen.</param> /// <param name="image">Billede, der illustrerer en adressekontoen.</param> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af ViewModel for en exceptionhandler.</param> public AdressekontoViewModel(IRegnskabViewModel regnskabViewModel, IAdressekontoModel adressekontoModel, string displayName, byte[] image, IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) { if (regnskabViewModel == null) { throw new ArgumentNullException("regnskabViewModel"); } if (adressekontoModel == null) { throw new ArgumentNullException("adressekontoModel"); } if (string.IsNullOrEmpty(displayName)) { throw new ArgumentNullException("displayName"); } if (image == null) { throw new ArgumentNullException("image"); } if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (exceptionHandlerViewModel == null) { throw new ArgumentNullException("exceptionHandlerViewModel"); } _regnskabViewModel = regnskabViewModel; _adressekontoModel = adressekontoModel; _adressekontoModel.PropertyChanged += PropertyChangedOnAdressekontoModelEventHandler; _displayName = displayName; _image = image; _finansstyringRepository = finansstyringRepository; _exceptionHandlerViewModel = exceptionHandlerViewModel; }
/// <summary> /// Danner en kommando, der på et regnskab kan initerer en ny ViewModel til bogføring. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af ViewModel til exceptionhandleren.</param> public BogføringSetCommand(IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) : this(finansstyringRepository, exceptionHandlerViewModel, 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> /// <param name="syncDataDocument">XML dokument indeholdende de synkroniserede data.</param> /// <param name="regnskabModel">Model for regnskabet, hvor data skal synkroniseres til og fra.</param> /// <param name="makeFullSync">Angivelse af, om der skal foretages en fuld synkronisering.</param> private static async Task SyncData(IFinansstyringRepository finansstyringRepository, IFinansstyringKonfigurationRepository finansstyringKonfigurationRepository, ILocaleDataStorage localeDataStorage, XDocument syncDataDocument, IRegnskabModel regnskabModel, bool makeFullSync) { if (finansstyringRepository == null) { throw new ArgumentNullException(nameof(finansstyringRepository)); } if (finansstyringKonfigurationRepository == null) { throw new ArgumentNullException(nameof(finansstyringKonfigurationRepository)); } if (localeDataStorage == null) { throw new ArgumentNullException(nameof(localeDataStorage)); } if (syncDataDocument == null) { throw new ArgumentNullException(nameof(syncDataDocument)); } if (regnskabModel == null) { throw new ArgumentNullException(nameof(regnskabModel)); } try { // Synkronisér regnskabsdata fra det online finansstyringsrepository til det lokale datalager. DateTime currentDate = DateTime.Now; foreach (IKontoModel kontoModel in await finansstyringRepository.KontoplanGetAsync(regnskabModel.Nummer, currentDate)) { lock (SyncRoot) { kontoModel.StoreInDocument(syncDataDocument); } } foreach (IBudgetkontoModel budgetkontoModel in await finansstyringRepository.BudgetkontoplanGetAsync(regnskabModel.Nummer, currentDate)) { lock (SyncRoot) { budgetkontoModel.StoreInDocument(syncDataDocument); } } if (makeFullSync) { DateTime historicStatusDate = currentDate.AddMonths(-2); while (historicStatusDate.Year >= currentDate.AddYears(-1).Year) { historicStatusDate = new DateTime(historicStatusDate.Year, historicStatusDate.Month, DateTime.DaysInMonth(historicStatusDate.Year, historicStatusDate.Month), 23, 59, 59); foreach (IBudgetkontoModel budgetkontoModel in await finansstyringRepository.BudgetkontoplanGetAsync(regnskabModel.Nummer, historicStatusDate)) { lock (SyncRoot) { budgetkontoModel.StoreInDocument(syncDataDocument); } } historicStatusDate = historicStatusDate.AddMonths(-2); } } foreach (IAdressekontoModel adressekontoModel in await finansstyringRepository.AdressekontolisteGetAsync(regnskabModel.Nummer, currentDate)) { lock (SyncRoot) { adressekontoModel.StoreInDocument(syncDataDocument); } } foreach (IBogføringslinjeModel bogføringslinjeModel in await finansstyringRepository.BogføringslinjerGetAsync(regnskabModel.Nummer, currentDate, finansstyringKonfigurationRepository.AntalBogføringslinjer)) { lock (SyncRoot) { bogføringslinjeModel.StoreInDocument(syncDataDocument, true); } } lock (SyncRoot) { localeDataStorage.StoreSyncDocument(syncDataDocument); } } catch (IntranetGuiOfflineRepositoryException) { // We are currently offline. // Don't rethrow the exception. } }
/// <summary> /// Danner kommando til genindlæsning af regnskabslisten. /// </summary> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af en ViewModel til en exceptionhandler.</param> public RegnskabslisteRefreshCommand(IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) : this(finansstyringRepository, exceptionHandlerViewModel, null) { }
/// <summary> /// Danner en ViewModel til en budgetkonto. /// </summary> /// <param name="regnskabViewModel">ViewModel for regnskabet, som budgetkontoen er tilknyttet.</param> /// <param name="budgetkontoModel">Model for budgetkontoen.</param> /// <param name="budgetkontogruppeViewModel">ViewModel for kontogruppen til budgetkontoen.</param> /// <param name="finansstyringRepository">Implementering af repositoryet til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af ViewModel for exceptionhandleren.</param> public BudgetkontoViewModel(IRegnskabViewModel regnskabViewModel, IBudgetkontoModel budgetkontoModel, IBudgetkontogruppeViewModel budgetkontogruppeViewModel, IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) : base(regnskabViewModel, budgetkontoModel, budgetkontogruppeViewModel, Resource.GetText(Text.BudgetAccount), Resource.GetEmbeddedResource("Images.Budgetkonto.png"), finansstyringRepository, exceptionHandlerViewModel) { }
/// <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. } }