/// <summary>
 /// Returnerer angivelse af, om kommandoen kan udføres på den givne ViewModel.
 /// </summary>
 /// <param name="viewModel">ViewModel, hvorpå kommandoen skal udføres.</param>
 /// <returns>Angivelse af, om kommandoen kan udføres på den givne ViewModel.</returns>
 protected override bool CanExecute(IBogføringViewModel viewModel)
 {
     try
     {
         if (BogføringViewModel.ValidateDatoAsText(viewModel.DatoAsText) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateBilag(viewModel.Bilag) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateKontonummer(viewModel.Kontonummer) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateTekst(viewModel.Tekst) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateBudgetkontonummer(viewModel.Budgetkontonummer) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateCurrency(viewModel.DebitAsText) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateCurrency(viewModel.KreditAsText) != ValidationResult.Success)
         {
             return(false);
         }
         if (BogføringViewModel.ValidateAdressekonto(viewModel.Adressekonto) != ValidationResult.Success)
         {
             return(false);
         }
         if (Math.Abs(viewModel.Debit) + Math.Abs(viewModel.Kredit) <= 0M)
         {
             return(false);
         }
         if (viewModel.IsWorking)
         {
             return(false);
         }
         return(_isBusy == false);
     }
     catch
     {
         return(false);
     }
 }
        /// <summary>
        /// Tilføjer en bogføringslinje til regnskabet på baggrund af ViewModel til bogføring.
        /// </summary>
        /// <param name="bogføringViewModel">ViewModel, som er grundlaget for bogføringslinjen, der skal tilføjes.</param>
        /// <param name="bogføringsresultatModel">Model indeholdende resultatet af endt bogføring.</param>
        /// <param name="arguments">Argument til tilføjelse af en bogføringslinjen til regnskabet.</param>
        private void HandleResult(IBogføringViewModel bogføringViewModel, IBogføringsresultatModel bogføringsresultatModel, object arguments)
        {
            if (bogføringViewModel == null)
            {
                throw new ArgumentNullException("bogføringViewModel");
            }
            if (bogføringsresultatModel == null)
            {
                throw new ArgumentNullException("bogføringsresultatModel");
            }
            if (arguments == null)
            {
                throw new ArgumentNullException("arguments");
            }
            var regnskabViewModel = bogføringViewModel.Regnskab;

            if (regnskabViewModel == null)
            {
                return;
            }
            try
            {
                var bogføringslinjeViewModel = new BogføringViewModel(regnskabViewModel, bogføringsresultatModel.Bogføringslinje, _finansstyringRepository, ExceptionHandler);
                regnskabViewModel.BogføringslinjeAdd(bogføringslinjeViewModel);
                regnskabViewModel.NyhedAdd(new NyhedViewModel(bogføringsresultatModel.Bogføringslinje, bogføringslinjeViewModel.Image));
                foreach (var bogføringsadvarselModel in bogføringsresultatModel.Bogføringsadvarsler)
                {
                    regnskabViewModel.BogføringsadvarselAdd(new BogføringsadvarselViewModel(regnskabViewModel, bogføringslinjeViewModel, bogføringsadvarselModel, DateTime.Now));
                }
                if (string.IsNullOrEmpty(bogføringViewModel.Kontonummer) == false)
                {
                    var kontoViewModel = regnskabViewModel.Konti.FirstOrDefault(m => string.Compare(m.Kontonummer, bogføringViewModel.Kontonummer, StringComparison.Ordinal) == 0);
                    if (kontoViewModel != null)
                    {
                        var refreshCommand = kontoViewModel.RefreshCommand;
                        if (refreshCommand.CanExecute(kontoViewModel))
                        {
                            refreshCommand.Execute(kontoViewModel);
                        }
                    }
                }
                if (string.IsNullOrEmpty(bogføringViewModel.Budgetkontonummer) == false)
                {
                    var budgetkontoViewModel = regnskabViewModel.Budgetkonti.FirstOrDefault(m => string.Compare(m.Kontonummer, bogføringViewModel.Budgetkontonummer, StringComparison.Ordinal) == 0);
                    if (budgetkontoViewModel != null)
                    {
                        var refreshCommand = budgetkontoViewModel.RefreshCommand;
                        if (refreshCommand.CanExecute(budgetkontoViewModel))
                        {
                            refreshCommand.Execute(budgetkontoViewModel);
                        }
                    }
                }
                if (bogføringViewModel.Adressekonto != 0)
                {
                    var adressekontoViewModelCollection = regnskabViewModel.Debitorer.Where(m => m.Nummer == bogføringViewModel.Adressekonto).ToList();
                    adressekontoViewModelCollection.AddRange(regnskabViewModel.Kreditorer.Where(m => m.Nummer == bogføringViewModel.Adressekonto).ToList());
                    foreach (var adressekontoViewModel in adressekontoViewModelCollection)
                    {
                        var refreshCommand = adressekontoViewModel.RefreshCommand;
                        if (refreshCommand.CanExecute(adressekontoViewModel))
                        {
                            refreshCommand.Execute(adressekontoViewModel);
                        }
                    }
                }
                if (OnBogført != null)
                {
                    OnBogført.Invoke(this, new EmptyEventArgs());
                }
            }
            catch (Exception ex)
            {
                throw new IntranetGuiSystemException(Resource.GetExceptionMessage(ExceptionMessage.CommandError, "BogføringAddCommand", ex.Message), ex);
            }
            finally
            {
                var bogføringSetCommand = regnskabViewModel.BogføringSetCommand;
                if (bogføringSetCommand != null && bogføringSetCommand.CanExecute(regnskabViewModel))
                {
                    bogføringSetCommand.Execute(regnskabViewModel);
                }
            }
        }