コード例 #1
0
        /// <summary>
        /// Gemmer data for et regnskab i det lokale datalager.
        /// </summary>
        /// <param name="regnskabModel">Model for et regnskab.</param>
        /// <param name="localeDataDocument">XML dokument, hvori data skal gemmes.</param>
        public static void StoreInDocument(this IRegnskabModel regnskabModel, XDocument localeDataDocument)
        {
            if (regnskabModel == null)
            {
                throw new ArgumentNullException("regnskabModel");
            }
            if (localeDataDocument == null)
            {
                throw new ArgumentNullException("localeDataDocument");
            }
            var regnskabElement = localeDataDocument.GetRegnskabElement(regnskabModel.Nummer);

            if (regnskabElement == null)
            {
                var rootElement = localeDataDocument.Root;
                regnskabElement = new XElement(XName.Get("Regnskab", rootElement.Name.NamespaceName));
                regnskabElement.UpdateAttribute(XName.Get("nummer", string.Empty), regnskabModel.Nummer.ToString(CultureInfo.InvariantCulture));
                regnskabElement.UpdateAttribute(XName.Get("navn", string.Empty), regnskabModel.Navn);
                rootElement.Add(regnskabElement);
                return;
            }
            regnskabElement.UpdateAttribute(XName.Get("navn", string.Empty), regnskabModel.Navn);
        }
コード例 #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>
        /// <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.
            }
        }
コード例 #3
0
        /// <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.
            }
        }