Esempio n. 1
0
        /// <summary>
        /// Alle mapninger sættes op i den statiske
        /// constructor af objektet.
        /// </summary>
        static ObjectMapper()
        {
            var mapperConfiguration = new MapperConfiguration(config =>
            {
                config.CreateMap <AdresseBase, TelefonlisteView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, TelefonlisteView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, TelefonlisteView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, TelefonlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil));

                config.CreateMap <Firma, TelefonlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2));

                config.CreateMap <AdresseBase, AdressekontolisteView>()
                .ConvertUsing(s =>
                {
                    if (s == null)
                    {
                        return(null);
                    }
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, AdressekontolisteView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, AdressekontolisteView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, AdressekontolisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, AdressekontolisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <AdresseBase, AdressekontoView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, AdressekontoView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, AdressekontoView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, AdressekontoView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, AdressekontoView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <AdresseBase, DebitorlisteView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, DebitorlisteView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, DebitorlisteView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, DebitorlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, DebitorlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <AdresseBase, DebitorView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, DebitorView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, DebitorView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, DebitorView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, DebitorView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <AdresseBase, KreditorlisteView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, KreditorlisteView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, KreditorlisteView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, KreditorlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, KreditorlisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <AdresseBase, KreditorView>()
                .ConvertUsing(s =>
                {
                    var mapper    = new ObjectMapper();
                    Person person = s as Person;
                    if (person != null)
                    {
                        return(mapper.Map <Person, KreditorView>(person));
                    }
                    Firma firma = s as Firma;
                    if (firma != null)
                    {
                        return(mapper.Map <Firma, KreditorView>(firma));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Person, KreditorView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Firma, KreditorView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato));

                config.CreateMap <Person, PersonView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? s.Mobil : s.Telefon))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon) ? null : s.Mobil))
                .ForMember(x => x.Fødselsdato, opt =>
                {
                    opt.Condition(s => s.Fødselsdato != null);
                    opt.MapFrom(s => s.Fødselsdato);
                })
                .ForMember(x => x.Adressegruppe, opt =>
                {
                    opt.Condition(s => s.Adressegruppe != null);
                    opt.MapFrom(s => s.Adressegruppe);
                })
                .ForMember(x => x.Bekendtskab, opt => opt.MapFrom(s => s.Bekendtskab))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Web, opt => opt.MapFrom(s => s.Webadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Udlånsfrist, opt => opt.MapFrom(s => s.Udlånsfrist))
                .ForMember(x => x.Firma, opt =>
                {
                    opt.Condition(s => s.Firma != null);
                    opt.MapFrom(s => s.Firma);
                });

                config.CreateMap <Firma, FirmaView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Adresse1, opt => opt.MapFrom(s => s.Adresse1))
                .ForMember(x => x.Adresse2, opt => opt.MapFrom(s => s.Adresse2))
                .ForMember(x => x.PostnummerBy, opt => opt.MapFrom(s => s.PostnrBy))
                .ForMember(x => x.PrimærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? s.Telefon2 : s.Telefon1))
                .ForMember(x => x.SekundærTelefon, opt => opt.MapFrom(s => string.IsNullOrEmpty(s.Telefon1) ? null : s.Telefon2))
                .ForMember(x => x.Telefax, opt => opt.MapFrom(s => s.Telefax))
                .ForMember(x => x.Adressegruppe, opt =>
                {
                    opt.Condition(s => s.Adressegruppe != null);
                    opt.MapFrom(s => s.Adressegruppe);
                })
                .ForMember(x => x.Bekendtskab, opt => opt.MapFrom(s => s.Bekendtskab))
                .ForMember(x => x.Mailadresse, opt => opt.MapFrom(s => s.Mailadresse))
                .ForMember(x => x.Web, opt => opt.MapFrom(s => s.Webadresse))
                .ForMember(x => x.Betalingsbetingelse, opt =>
                {
                    opt.Condition(s => s.Betalingsbetingelse != null);
                    opt.MapFrom(s => s.Betalingsbetingelse);
                })
                .ForMember(x => x.Udlånsfrist, opt => opt.MapFrom(s => s.Udlånsfrist))
                .ForMember(x => x.Personer, opt =>
                {
                    opt.Condition(s => s.Personer != null);
                    opt.MapFrom(s => s.Personer);
                });

                config.CreateMap <Postnummer, PostnummerView>()
                .ForMember(x => x.Landekode, opt => opt.MapFrom(s => s.Landekode))
                .ForMember(x => x.Postnummer, opt => opt.MapFrom(s => s.Postnr))
                .ForMember(x => x.Bynavn, opt => opt.MapFrom(s => s.By));

                config.CreateMap <Adressegruppe, AdressegruppeView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.AdressegruppeOswebdb, opt => opt.MapFrom(s => s.AdressegruppeOswebdb));

                config.CreateMap <Betalingsbetingelse, BetalingsbetingelseView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn));

                config.CreateMap <Regnskab, RegnskabslisteView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Brevhoved, opt => opt.MapFrom(s => s.Brevhoved));

                config.CreateMap <KontoBase, KontoBaseView>()
                .ConvertUsing(s =>
                {
                    var objectMapper = new ObjectMapper();
                    Konto konto      = s as Konto;
                    if (konto != null)
                    {
                        return(objectMapper.Map <Konto, KontoView>(konto));
                    }
                    Budgetkonto budgetkonto = s as Budgetkonto;
                    if (budgetkonto != null)
                    {
                        return(objectMapper.Map <Budgetkonto, BudgetkontoView>(budgetkonto));
                    }
                    throw new IntranetSystemException(Resource.GetExceptionMessage(ExceptionMessage.CantAutoMapType, s.GetType().Name));
                });

                config.CreateMap <Konto, KontoplanView>()
                .ForMember(x => x.Regnskab, opt => opt.MapFrom(s => s.Regnskab))
                .ForMember(x => x.Kontonummer, opt => opt.MapFrom(s => s.Kontonummer))
                .ForMember(x => x.Kontonavn, opt => opt.MapFrom(s => s.Kontonavn))
                .ForMember(x => x.Beskrivelse, opt => opt.MapFrom(s => s.Beskrivelse))
                .ForMember(x => x.Notat, opt => opt.MapFrom(s => s.Note))
                .ForMember(x => x.Kontogruppe, opt => opt.MapFrom(s => s.Kontogruppe))
                .ForMember(x => x.Kredit, opt => opt.MapFrom(s => s.KreditPrStatusdato))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato))
                .ForMember(x => x.Disponibel, opt => opt.MapFrom(s => s.DisponibelPrStatusdato));

                config.CreateMap <Konto, KontoView>()
                .ForMember(x => x.Regnskab, opt => opt.MapFrom(s => s.Regnskab))
                .ForMember(x => x.Kontonummer, opt => opt.MapFrom(s => s.Kontonummer))
                .ForMember(x => x.Kontonavn, opt => opt.MapFrom(s => s.Kontonavn))
                .ForMember(x => x.Beskrivelse, opt => opt.MapFrom(s => s.Beskrivelse))
                .ForMember(x => x.Notat, opt => opt.MapFrom(s => s.Note))
                .ForMember(x => x.Kontogruppe, opt => opt.MapFrom(s => s.Kontogruppe))
                .ForMember(x => x.Kredit, opt => opt.MapFrom(s => s.KreditPrStatusdato))
                .ForMember(x => x.Saldo, opt => opt.MapFrom(s => s.SaldoPrStatusdato))
                .ForMember(x => x.Disponibel, opt => opt.MapFrom(s => s.DisponibelPrStatusdato))
                .ForMember(x => x.Kreditoplysninger, opt => opt.MapFrom(s => s.Kreditoplysninger));

                config.CreateMap <Kreditoplysninger, KreditoplysningerView>()
                .ForMember(x => x.År, opt => opt.MapFrom(s => s.År))
                .ForMember(x => x.Måned, opt => opt.MapFrom(s => s.Måned))
                .ForMember(x => x.Kredit, opt => opt.MapFrom(s => s.Kredit));

                config.CreateMap <Budgetkonto, BudgetkontoplanView>()
                .ForMember(x => x.Regnskab, opt => opt.MapFrom(s => s.Regnskab))
                .ForMember(x => x.Kontonummer, opt => opt.MapFrom(s => s.Kontonummer))
                .ForMember(x => x.Kontonavn, opt => opt.MapFrom(s => s.Kontonavn))
                .ForMember(x => x.Beskrivelse, opt => opt.MapFrom(s => s.Beskrivelse))
                .ForMember(x => x.Notat, opt => opt.MapFrom(s => s.Note))
                .ForMember(x => x.Budgetkontogruppe, opt => opt.MapFrom(s => s.Budgetkontogruppe))
                .ForMember(x => x.Budget, opt => opt.MapFrom(s => s.BudgetPrStatusdato))
                .ForMember(x => x.BudgetSidsteMåned, opt => opt.MapFrom(s => s.BudgetSidsteMåned))
                .ForMember(x => x.BudgetÅrTilDato, opt => opt.MapFrom(s => s.BudgetÅrTilStatusdato))
                .ForMember(x => x.BudgetSidsteÅr, opt => opt.MapFrom(s => s.BudgetSidsteÅr))
                .ForMember(x => x.Bogført, opt => opt.MapFrom(s => s.BogførtPrStatusdato))
                .ForMember(x => x.BogførtSidsteMåned, opt => opt.MapFrom(s => s.BogførtSidsteMåned))
                .ForMember(x => x.BogførtÅrTilDato, opt => opt.MapFrom(s => s.BogførtÅrTilStatusdato))
                .ForMember(x => x.BogførtSidsteÅr, opt => opt.MapFrom(s => s.BogførtSidsteÅr))
                .ForMember(x => x.Disponibel, opt => opt.MapFrom(s => s.DisponibelPrStatusdato));

                config.CreateMap <Budgetkonto, BudgetkontoView>()
                .ForMember(x => x.Regnskab, opt => opt.MapFrom(s => s.Regnskab))
                .ForMember(x => x.Kontonummer, opt => opt.MapFrom(s => s.Kontonummer))
                .ForMember(x => x.Kontonavn, opt => opt.MapFrom(s => s.Kontonavn))
                .ForMember(x => x.Beskrivelse, opt => opt.MapFrom(s => s.Beskrivelse))
                .ForMember(x => x.Notat, opt => opt.MapFrom(s => s.Note))
                .ForMember(x => x.Budgetkontogruppe, opt => opt.MapFrom(s => s.Budgetkontogruppe))
                .ForMember(x => x.Budget, opt => opt.MapFrom(s => s.BudgetPrStatusdato))
                .ForMember(x => x.BudgetSidsteMåned, opt => opt.MapFrom(s => s.BudgetSidsteMåned))
                .ForMember(x => x.BudgetÅrTilDato, opt => opt.MapFrom(s => s.BudgetÅrTilStatusdato))
                .ForMember(x => x.BudgetSidsteÅr, opt => opt.MapFrom(s => s.BudgetSidsteÅr))
                .ForMember(x => x.Bogført, opt => opt.MapFrom(s => s.BogførtPrStatusdato))
                .ForMember(x => x.BogførtSidsteMåned, opt => opt.MapFrom(s => s.BogførtSidsteMåned))
                .ForMember(x => x.BogførtÅrTilDato, opt => opt.MapFrom(s => s.BogførtÅrTilStatusdato))
                .ForMember(x => x.BogførtSidsteÅr, opt => opt.MapFrom(s => s.BogførtSidsteÅr))
                .ForMember(x => x.Disponibel, opt => opt.MapFrom(s => s.DisponibelPrStatusdato))
                .ForMember(x => x.Budgetoplysninger, opt => opt.MapFrom(s => s.Budgetoplysninger));

                config.CreateMap <Budgetoplysninger, BudgetoplysningerView>()
                .ForMember(x => x.År, opt => opt.MapFrom(s => s.År))
                .ForMember(x => x.Måned, opt => opt.MapFrom(s => s.Måned))
                .ForMember(x => x.Budget, opt => opt.MapFrom(s => s.Budget))
                .ForMember(x => x.Bogført, opt => opt.MapFrom(s => s.BogførtPrStatusdato));

                config.CreateMap <Bogføringslinje, BogføringslinjeView>()
                .ForMember(x => x.Løbenr, opt => opt.MapFrom(s => s.Løbenummer))
                .ForMember(x => x.Konto, opt => opt.MapFrom(s => s.Konto))
                .ForMember(x => x.Budgetkonto, opt =>
                {
                    opt.Condition(s => s.Budgetkonto != null);
                    opt.MapFrom(s => s.Budgetkonto);
                })
                .ForMember(x => x.Adressekonto, opt =>
                {
                    opt.Condition(s => s.Adresse != null);
                    opt.MapFrom(s => s.Adresse);
                })
                .ForMember(x => x.Dato, opt => opt.MapFrom(s => s.Dato))
                .ForMember(x => x.Bilag, opt => opt.MapFrom(s => s.Bilag))
                .ForMember(x => x.Tekst, opt => opt.MapFrom(s => s.Tekst))
                .ForMember(x => x.Debit, opt => opt.MapFrom(s => s.Debit))
                .ForMember(x => x.Kredit, opt => opt.MapFrom(s => s.Kredit));

                config.CreateMap <IBogføringsresultat, BogføringslinjeOpretResponse>()
                .ForMember(x => x.Løbenr, opt => opt.MapFrom(s => s.Bogføringslinje.Løbenummer))
                .ForMember(x => x.Konto, opt => opt.MapFrom(s => s.Bogføringslinje.Konto))
                .ForMember(x => x.Budgetkonto, opt =>
                {
                    opt.Condition(s => s.Bogføringslinje.Budgetkonto != null);
                    opt.MapFrom(s => s.Bogføringslinje.Budgetkonto);
                })
                .ForMember(x => x.Adressekonto, opt =>
                {
                    opt.Condition(s => s.Bogføringslinje.Adresse != null);
                    opt.MapFrom(s => s.Bogføringslinje.Adresse);
                })
                .ForMember(x => x.Dato, opt => opt.MapFrom(s => s.Bogføringslinje.Dato))
                .ForMember(x => x.Bilag, opt => opt.MapFrom(s => s.Bogføringslinje.Bilag))
                .ForMember(x => x.Tekst, opt => opt.MapFrom(s => s.Bogføringslinje.Tekst))
                .ForMember(x => x.Debit, opt => opt.MapFrom(s => s.Bogføringslinje.Debit))
                .ForMember(x => x.Kredit, opt => opt.MapFrom(s => s.Bogføringslinje.Kredit))
                .ForMember(x => x.Advarsler, opt => opt.MapFrom(s => s.Advarsler));

                config.CreateMap <IBogføringsadvarsel, BogføringsadvarselResponse>()
                .ForMember(x => x.Advarsel, opt => opt.MapFrom(s => s.Advarsel))
                .ForMember(x => x.Konto, opt => opt.MapFrom(s => s.Konto))
                .ForMember(x => x.Beløb, opt => opt.MapFrom(s => s.Beløb));

                config.CreateMap <Kontogruppe, KontogruppeView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.ErAktiver, opt => opt.MapFrom(s => s.KontogruppeType == KontogruppeType.Aktiver))
                .ForMember(x => x.ErPassiver, opt => opt.MapFrom(s => s.KontogruppeType == KontogruppeType.Passiver));

                config.CreateMap <Budgetkontogruppe, BudgetkontogruppeView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn));

                config.CreateMap <IBrugeraftale, KalenderbrugerAftaleView>()
                .ForMember(x => x.System, opt => opt.MapFrom(s => s.Aftale.System))
                .ForMember(x => x.Id, opt => opt.MapFrom(s => s.Aftale.Id))
                .ForMember(x => x.FraTidspunkt, opt => opt.MapFrom(s => s.Aftale.FraTidspunkt))
                .ForMember(x => x.TilTidspunkt, opt => opt.MapFrom(s => s.Aftale.TilTidspunkt))
                .ForMember(x => x.Emne, opt => opt.MapFrom(s => s.Aftale.Emne))
                .ForMember(x => x.Notat, opt => opt.MapFrom(s => s.Aftale.Notat))
                .ForMember(x => x.Offentlig, opt => opt.MapFrom(s => s.Offentligtgørelse))
                .ForMember(x => x.Privat, opt => opt.MapFrom(s => s.Privat))
                .ForMember(x => x.Alarm, opt => opt.MapFrom(s => s.Alarm))
                .ForMember(x => x.Udført, opt => opt.MapFrom(s => s.Udført))
                .ForMember(x => x.Eksporteres, opt => opt.MapFrom(s => s.Eksporter))
                .ForMember(x => x.Eksporteret, opt => opt.MapFrom(s => s.Eksporteret))
                .ForMember(x => x.Deltagere, opt => opt.MapFrom(s => s.Aftale.Deltagere));

                config.CreateMap <IBrugeraftale, KalenderbrugerView>()
                .ForMember(x => x.System, opt => opt.MapFrom(s => s.Bruger.System))
                .ForMember(x => x.Id, opt => opt.MapFrom(s => s.Bruger.Id))
                .ForMember(x => x.Initialer, opt => opt.MapFrom(s => s.Bruger.Initialer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Bruger.Navn));

                config.CreateMap <IBruger, KalenderbrugerView>()
                .ForMember(x => x.System, opt => opt.MapFrom(s => s.System))
                .ForMember(x => x.Id, opt => opt.MapFrom(s => s.Id))
                .ForMember(x => x.Initialer, opt => opt.MapFrom(s => s.Initialer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn));

                config.CreateMap <Brevhoved, BrevhovedreferenceView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn));

                config.CreateMap <Brevhoved, BrevhovedView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Navn, opt => opt.MapFrom(s => s.Navn))
                .ForMember(x => x.Linje1, opt => opt.MapFrom(s => s.Linje1))
                .ForMember(x => x.Linje2, opt => opt.MapFrom(s => s.Linje2))
                .ForMember(x => x.Linje3, opt => opt.MapFrom(s => s.Linje3))
                .ForMember(x => x.Linje4, opt => opt.MapFrom(s => s.Linje4))
                .ForMember(x => x.Linje5, opt => opt.MapFrom(s => s.Linje5))
                .ForMember(x => x.Linje6, opt => opt.MapFrom(s => s.Linje6))
                .ForMember(x => x.Linje7, opt => opt.MapFrom(s => s.Linje7))
                .ForMember(x => x.CvrNr, opt => opt.MapFrom(s => s.CvrNr));

                config.CreateMap <ISystem, SystemView>()
                .ForMember(x => x.Nummer, opt => opt.MapFrom(s => s.Nummer))
                .ForMember(x => x.Titel, opt => opt.MapFrom(s => s.Titel))
                .ForMember(x => x.Kalender, opt => opt.MapFrom(s => s.Kalender));
            });

            mapperConfiguration.AssertConfigurationIsValid();

            Mapper = mapperConfiguration.CreateMapper();
        }
        /// <summary>
        /// Danner domæneobjekt bygger.
        /// </summary>
        public DomainObjectBuilder()
        {
            var mapperConfiguration = new MapperConfiguration(config =>
            {
                config.CreateMap <AdressereferenceView, AdresseBase>()
                .ConvertUsing(s => { throw new NotSupportedException(); });

                config.CreateMap <PersonView, AdresseBase>()
                .ConvertUsing(s =>
                {
                    Adressegruppe adressegruppe;
                    lock (SyncRoot)
                    {
                        if (GetAdressegruppeCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetAdressegruppeCallback"));
                        }
                        try
                        {
                            adressegruppe = GetAdressegruppeCallback(s.Adressegruppe.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Adressegruppe).Name, s.Adressegruppe.Nummer), ex);
                        }
                    }
                    var person = new Person(s.Nummer, s.Navn, adressegruppe);
                    person.SætAdresseoplysninger(s.Adresse1, s.Adresse2, s.PostnummerBy);
                    person.SætTelefon(s.Telefon, s.Mobil);
                    person.SætFødselsdato(s.Fødselsdato);
                    person.SætBekendtskab(s.Bekendtskab);
                    person.SætMailadresse(s.Mailadresse);
                    person.SætWebadresse(s.Webadresse);
                    if (s.Betalingsbetingelse != null)
                    {
                        Betalingsbetingelse betalingsbetingelse;
                        lock (SyncRoot)
                        {
                            if (GetBetalingsbetingelseCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetBetalingsbetingelseCallback"));
                            }
                            try
                            {
                                betalingsbetingelse = GetBetalingsbetingelseCallback(s.Betalingsbetingelse.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Betalingsbetingelse).Name, s.Betalingsbetingelse.Nummer), ex);
                            }
                        }
                        person.SætBetalingsbetingelse(betalingsbetingelse);
                    }
                    person.SætUdlånsfrist(s.Udlånsfrist);
                    person.SætFilofaxAdresselabel(s.FilofaxAdresselabel);
                    if (s.Firma != null)
                    {
                        Firma firma;
                        lock (SyncRoot)
                        {
                            if (GetAdresseBaseCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetAdresseBaseCallback"));
                            }
                            try
                            {
                                firma = (Firma)GetAdresseBaseCallback(s.Firma.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Firma).Name, s.Firma.Nummer), ex);
                            }
                        }
                        firma.TilføjPerson(person);
                    }
                    return(person);
                });

                config.CreateMap <FirmaView, AdresseBase>()
                .ConvertUsing(s =>
                {
                    Adressegruppe adressegruppe;
                    lock (SyncRoot)
                    {
                        if (GetAdressegruppeCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetAdressegruppeCallback"));
                        }
                        try
                        {
                            adressegruppe = GetAdressegruppeCallback(s.Adressegruppe.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Adressegruppe).Name, s.Adressegruppe.Nummer), ex);
                        }
                    }
                    var firma = new Firma(s.Nummer, s.Navn, adressegruppe);
                    firma.SætAdresseoplysninger(s.Adresse1, s.Adresse2, s.PostnummerBy);
                    firma.SætTelefon(s.Telefon1, s.Telefon2, s.Telefax);
                    firma.SætBekendtskab(s.Bekendtskab);
                    firma.SætMailadresse(s.Mailadresse);
                    firma.SætWebadresse(s.Webadresse);
                    if (s.Betalingsbetingelse != null)
                    {
                        Betalingsbetingelse betalingsbetingelse;
                        lock (SyncRoot)
                        {
                            if (GetBetalingsbetingelseCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetBetalingsbetingelseCallback"));
                            }
                            try
                            {
                                betalingsbetingelse = GetBetalingsbetingelseCallback(s.Betalingsbetingelse.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Betalingsbetingelse).Name, s.Betalingsbetingelse.Nummer), ex);
                            }
                        }
                        firma.SætBetalingsbetingelse(betalingsbetingelse);
                    }
                    firma.SætUdlånsfrist(s.Udlånsfrist);
                    firma.SætFilofaxAdresselabel(s.FilofaxAdresselabel);
                    return(firma);
                });

                config.CreateMap <PostnummerView, Postnummer>()
                .ConvertUsing(s => new Postnummer(s.Landekode, s.Postnummer, s.Bynavn));

                config.CreateMap <AdressegruppeView, Adressegruppe>()
                .ConvertUsing(s => new Adressegruppe(s.Nummer, s.Navn, s.AdressegruppeOswebdb));

                config.CreateMap <BetalingsbetingelseView, Betalingsbetingelse>()
                .ConvertUsing(s => new Betalingsbetingelse(s.Nummer, s.Navn));

                config.CreateMap <RegnskabListeView, Regnskab>()
                .ConvertUsing(s =>
                {
                    var regnskab = new Regnskab(s.Nummer, s.Navn);
                    if (s.Brevhoved != null && s.Brevhoved.Nummer != 0)
                    {
                        Brevhoved brevhoved;
                        lock (SyncRoot)
                        {
                            if (GetBrevhovedCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetBrevhovedCallback"));
                            }
                            try
                            {
                                brevhoved = GetBrevhovedCallback(s.Brevhoved.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Brevhoved).Name, s.Brevhoved.Nummer), ex);
                            }
                        }
                        regnskab.SætBrevhoved(brevhoved);
                    }
                    return(regnskab);
                });

                config.CreateMap <RegnskabView, Regnskab>()
                .ConvertUsing(s =>
                {
                    var regnskab = new Regnskab(s.Nummer, s.Navn);
                    if (s.Brevhoved != null && s.Brevhoved.Nummer != 0)
                    {
                        Brevhoved brevhoved;
                        lock (SyncRoot)
                        {
                            if (GetBrevhovedCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetBrevhovedCallback"));
                            }
                            try
                            {
                                brevhoved = GetBrevhovedCallback(s.Brevhoved.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Brevhoved).Name, s.Brevhoved.Nummer), ex);
                            }
                        }
                        regnskab.SætBrevhoved(brevhoved);
                    }
                    lock (SyncRoot)
                    {
                        var cached = _regnskaber.SingleOrDefault(m => m.Nummer == regnskab.Nummer);
                        if (cached != null)
                        {
                            _regnskaber.Remove(cached);
                        }
                        _regnskaber.Add(regnskab);
                        var regnskabslisteHelper = new RegnskabslisteHelper(_regnskaber);
                        GetRegnskabCallback      = regnskabslisteHelper.GetById;
                        foreach (var konto in BuildMany <KontoView, Konto>(s.Konti))
                        {
                            regnskab.TilføjKonto(konto);
                        }
                        foreach (var budgetkonto in BuildMany <BudgetkontoView, Budgetkonto>(s.Budgetkonti))
                        {
                            regnskab.TilføjKonto(budgetkonto);
                        }
                        BuildMany <BogføringslinjeView, Bogføringslinje>(s.Konti.SelectMany(m => m.Bogføringslinjer));
                    }
                    return(regnskab);
                });

                config.CreateMap <KontoListeView, Konto>()
                .ConvertUsing(s => { throw new NotSupportedException(); });

                config.CreateMap <KontoView, Konto>()
                .ConvertUsing(s =>
                {
                    Regnskab regnskab;
                    lock (SyncRoot)
                    {
                        if (GetRegnskabCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetRegnskabCallback"));
                        }
                        try
                        {
                            regnskab = GetRegnskabCallback(s.Regnskab.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Regnskab).Name, s.Regnskab.Nummer), ex);
                        }
                    }
                    Kontogruppe kontogruppe;
                    lock (SyncRoot)
                    {
                        if (GetKontogruppeCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetKontogruppeCallback"));
                        }
                        try
                        {
                            kontogruppe = GetKontogruppeCallback(s.Kontogruppe.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Kontogruppe).Name, s.Kontogruppe.Nummer), ex);
                        }
                    }
                    var konto = new Konto(regnskab, s.Kontonummer, s.Kontonavn, kontogruppe);
                    konto.SætBeskrivelse(s.Beskrivelse);
                    konto.SætNote(s.Note);
                    foreach (var kreditoplysninger in BuildMany <KreditoplysningerView, Kreditoplysninger>(s.Kreditoplysninger))
                    {
                        konto.TilføjKreditoplysninger(kreditoplysninger);
                    }
                    return(konto);
                });

                config.CreateMap <KreditoplysningerView, Kreditoplysninger>()
                .ConvertUsing(s => new Kreditoplysninger(s.År, s.Måned, s.Kredit));

                config.CreateMap <BudgetkontoListeView, Budgetkonto>()
                .ConvertUsing(s => { throw new NotSupportedException(); });

                config.CreateMap <BudgetkontoView, Budgetkonto>()
                .ConvertUsing(s =>
                {
                    Regnskab regnskab;
                    lock (SyncRoot)
                    {
                        if (GetRegnskabCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetRegnskabCallback"));
                        }
                        try
                        {
                            regnskab = GetRegnskabCallback(s.Regnskab.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Regnskab).Name, s.Regnskab.Nummer), ex);
                        }
                    }
                    Budgetkontogruppe budgetkontogruppe;
                    lock (SyncRoot)
                    {
                        if (GetBudgetkontogruppeCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetBudgetkontogruppeCallback"));
                        }
                        try
                        {
                            budgetkontogruppe = GetBudgetkontogruppeCallback(s.Budgetkontogruppe.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Budgetkontogruppe).Name, s.Budgetkontogruppe.Nummer), ex);
                        }
                    }
                    var budgetkonto = new Budgetkonto(regnskab, s.Kontonummer, s.Kontonavn, budgetkontogruppe);
                    budgetkonto.SætBeskrivelse(s.Beskrivelse);
                    budgetkonto.SætNote(s.Note);
                    foreach (var budgetoplysninger in BuildMany <BudgetoplysningerView, Budgetoplysninger>(s.Budgetoplysninger))
                    {
                        budgetkonto.TilføjBudgetoplysninger(budgetoplysninger);
                    }
                    return(budgetkonto);
                });

                config.CreateMap <BudgetoplysningerView, Budgetoplysninger>()
                .ConvertUsing(s => new Budgetoplysninger(s.År, s.Måned, s.Indtægter, s.Udgifter));

                config.CreateMap <BogføringslinjeView, Bogføringslinje>()
                .ConvertUsing(s =>
                {
                    Regnskab regnskab;
                    lock (SyncRoot)
                    {
                        if (GetRegnskabCallback == null)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetRegnskabCallback"));
                        }
                        try
                        {
                            regnskab = GetRegnskabCallback(s.Konto.Regnskab.Nummer);
                        }
                        catch (IntranetRepositoryException)
                        {
                            throw;
                        }
                        catch (Exception ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Regnskab).Name, s.Konto.Regnskab.Nummer), ex);
                        }
                    }
                    Konto konto;
                    try
                    {
                        konto = regnskab.Konti
                                .OfType <Konto>()
                                .Single(m => String.Compare(m.Kontonummer, s.Konto.Kontonummer, StringComparison.Ordinal) == 0);
                    }
                    catch (InvalidOperationException ex)
                    {
                        throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Konto).Name, s.Konto.Kontonummer), ex);
                    }
                    Budgetkonto budgetkonto = null;
                    if (s.Budgetkonto != null && string.IsNullOrEmpty(s.Budgetkonto.Kontonummer) == false)
                    {
                        try
                        {
                            budgetkonto = regnskab.Konti
                                          .OfType <Budgetkonto>()
                                          .Single(m => String.Compare(m.Kontonummer, s.Budgetkonto.Kontonummer, StringComparison.Ordinal) == 0);
                        }
                        catch (InvalidOperationException ex)
                        {
                            throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Budgetkonto).Name, s.Budgetkonto.Kontonummer), ex);
                        }
                    }
                    AdresseBase adresse = null;
                    if (s.Adresse != null && s.Adresse.Nummer != 0)
                    {
                        lock (SyncRoot)
                        {
                            if (GetAdresseBaseCallback == null)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.NoRegistrationForDelegate, "GetAdresseBaseCallback"));
                            }
                            try
                            {
                                adresse = GetAdresseBaseCallback(s.Adresse.Nummer);
                            }
                            catch (IntranetRepositoryException)
                            {
                                throw;
                            }
                            catch (Exception ex)
                            {
                                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(AdresseBase).Name, s.Adresse.Nummer), ex);
                            }
                        }
                    }
                    var bogføringslinje = new Bogføringslinje(s.Løbenummer, s.Dato, s.Bilag, s.Tekst, s.Debit, s.Kredit);
                    konto.TilføjBogføringslinje(bogføringslinje);
                    if (budgetkonto != null)
                    {
                        budgetkonto.TilføjBogføringslinje(bogføringslinje);
                    }
                    if (adresse != null)
                    {
                        adresse.TilføjBogføringslinje(bogføringslinje);
                    }
                    return(bogføringslinje);
                });

                config.CreateMap <KontogruppeView, Kontogruppe>()
                .ConvertUsing(s =>
                {
                    var kontogruppe = new Kontogruppe(s.Nummer, s.Navn, KontogruppeType.Aktiver);
                    switch (s.KontogruppeType)
                    {
                    case DataAccess.Contracts.Enums.KontogruppeType.Aktiver:
                        kontogruppe.SætKontogruppeType(KontogruppeType.Aktiver);
                        break;

                    case DataAccess.Contracts.Enums.KontogruppeType.Passiver:
                        kontogruppe.SætKontogruppeType(KontogruppeType.Passiver);
                        break;

                    default:
                        throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.UnhandledSwitchValue, s.KontogruppeType, "KontogruppeType", MethodBase.GetCurrentMethod().Name));
                    }
                    return(kontogruppe);
                });

                config.CreateMap <BudgetkontogruppeView, Budgetkontogruppe>()
                .ConvertUsing(s => new Budgetkontogruppe(s.Nummer, s.Navn));

                config.CreateMap <BrevhovedView, Brevhoved>()
                .ConvertUsing(s =>
                {
                    var brevhoved = new Brevhoved(s.Nummer, s.Navn);
                    brevhoved.SætLinje1(s.Linje1);
                    brevhoved.SætLinje2(s.Linje2);
                    brevhoved.SætLinje3(s.Linje3);
                    brevhoved.SætLinje4(s.Linje4);
                    brevhoved.SætLinje5(s.Linje5);
                    brevhoved.SætLinje6(s.Linje6);
                    brevhoved.SætLinje7(s.Linje7);
                    brevhoved.SætCvrNr(s.CvrNr);
                    return(brevhoved);
                });

                config.CreateMap <BrevhovedreferenceView, Brevhoved>()
                .ConvertUsing(s => new Brevhoved(s.Nummer, s.Navn));
            });

            mapperConfiguration.AssertConfigurationIsValid();

            _mapper = mapperConfiguration.CreateMapper();
        }
Esempio n. 3
0
        /// <summary>
        /// Evaluerer kommando til oprettelse af en bogføringslinje.
        /// </summary>
        /// <param name="command">Kommando til oprettelse af en bogføringslinje.</param>
        /// <param name="konto">Returnering af konto, hvorpå bogføringslinjen skal bogføres.</param>
        /// <param name="budgetkonto">Returnering af budgetkonto, hvorpå bogføringslinjen skal bogføres.</param>
        /// <param name="adressekonto">Returnering af adressekonto, hvorpå bogføringslinjen skal bogføres.</param>
        private void EvaluateCommand(BogføringslinjeOpretCommand command, out Konto konto, out Budgetkonto budgetkonto, out AdresseBase adressekonto)
        {
            var adresselisteHelper   = new AdresselisteHelper(AdresseRepository.AdresseGetAll());
            var brevhovedlisteHelper = new BrevhovedlisteHelper(FællesRepository.BrevhovedGetAll());
            var regnskab             = Repository.RegnskabGet(command.Regnskabsnummer, brevhovedlisteHelper.GetById, adresselisteHelper.GetById);

            var currentTime = DateTime.Now;

            if (command.Dato.Date < currentTime.AddDays(_konfigurationRepository.DageForBogføringsperiode * -1).Date)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineDateToOld, _konfigurationRepository.DageForBogføringsperiode));
            }
            if (command.Dato.Date > currentTime.Date)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineDateIsForwardInTime));
            }

            if (string.IsNullOrEmpty(command.Kontonummer))
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineAccountNumberMissing));
            }
            try
            {
                konto = regnskab.Konti.OfType <Konto>().Single(m => String.Compare(m.Kontonummer, command.Kontonummer, StringComparison.Ordinal) == 0);
            }
            catch (InvalidOperationException ex)
            {
                throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Konto).Name, command.Kontonummer), ex);
            }

            if (string.IsNullOrEmpty(command.Tekst))
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineTextMissing));
            }

            budgetkonto = null;
            if (!string.IsNullOrEmpty(command.Budgetkontonummer))
            {
                try
                {
                    budgetkonto = regnskab.Konti.OfType <Budgetkonto>().Single(m => String.Compare(m.Kontonummer, command.Budgetkontonummer, StringComparison.Ordinal) == 0);
                }
                catch (InvalidOperationException ex)
                {
                    throw new IntranetRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.CantFindObjectById, typeof(Budgetkonto).Name, command.Budgetkontonummer), ex);
                }
            }

            if (command.Debit < 0M)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineValueBelowZero));
            }
            if (command.Kredit < 0M)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineValueBelowZero));
            }
            if (command.Debit == 0M && command.Kredit == 0M)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.BalanceLineValueMissing));
            }

            adressekonto = null;
            if (command.Adressekonto == 0)
            {
                return;
            }
            adressekonto = adresselisteHelper.GetById(command.Adressekonto);
        }
Esempio n. 4
0
        /// <summary>
        /// Udførelse af kommandoen.
        /// </summary>
        /// <param name="command">Kommand til oprettelse af en bogføringslinje.</param>
        /// <returns>Oprettet bogføringslinje.</returns>
        public BogføringslinjeView Execute(BogføringslinjeAddCommand command)
        {
            if (command == null)
            {
                throw new ArgumentNullException("command");
            }

            Regnskab regnskab;

            try
            {
                var getBrevhoved = new Func <int, Brevhoved>(nummer => _fællesRepository.BrevhovedGetByNummer(nummer));
                regnskab = _finansstyringRepository.RegnskabGetAll(getBrevhoved)
                           .Single(m => m.Nummer == command.Regnskabsnummer);
            }
            catch (InvalidOperationException ex)
            {
                throw new DataAccessSystemException(
                          Resource.GetExceptionMessage(ExceptionMessage.CantFindUniqueRecordId, typeof(Regnskab),
                                                       command.Regnskabsnummer), ex);
            }
            Konto konto;

            try
            {
                konto = regnskab.Konti
                        .OfType <Konto>()
                        .Single(m => m.Kontonummer.CompareTo(command.Kontonummer) == 0);
            }
            catch (InvalidOperationException ex)
            {
                throw new DataAccessSystemException(
                          Resource.GetExceptionMessage(ExceptionMessage.CantFindUniqueRecordId, typeof(Konto),
                                                       command.Kontonummer), ex);
            }
            Budgetkonto budgetkonto = null;

            if (!string.IsNullOrEmpty(command.Budgetkontonummer))
            {
                try
                {
                    budgetkonto = regnskab.Konti
                                  .OfType <Budgetkonto>()
                                  .Single(m => m.Kontonummer.CompareTo(command.Budgetkontonummer) == 0);
                }
                catch (InvalidOperationException ex)
                {
                    throw new DataAccessSystemException(
                              Resource.GetExceptionMessage(ExceptionMessage.CantFindUniqueRecordId, typeof(Budgetkonto),
                                                           command.Budgetkontonummer), ex);
                }
            }
            AdresseBase adresse = null;

            if (command.AdresseId != 0)
            {
                try
                {
                    adresse = _adresseRepository.AdresseGetAll()
                              .Single(m => m.Nummer == command.AdresseId);
                }
                catch (InvalidOperationException ex)
                {
                    throw new DataAccessSystemException(
                              Resource.GetExceptionMessage(ExceptionMessage.CantFindUniqueRecordId, typeof(AdresseBase),
                                                           command.AdresseId), ex);
                }
            }

            var bogføringslinje = _finansstyringRepository.BogføringslinjeAdd(command.Bogføringsdato, command.Bilag,
                                                                              konto, command.Tekst, budgetkonto,
                                                                              command.Debit, command.Kredit, adresse);

            var oldValue = Bogføringslinje.AutoCalculate;

            try
            {
                Bogføringslinje.SætAutoCalculate(true);
                return(_objectMapper.Map <Bogføringslinje, BogføringslinjeView>(bogføringslinje));
            }
            finally
            {
                Bogføringslinje.SætAutoCalculate(oldValue);
            }
        }
        /// <summary>
        /// Tilføjer en bogføringslinje.
        /// </summary>
        /// <param name="bogføringstidspunkt">Bogføringstidspunkt.</param>
        /// <param name="bilag">Bilag.</param>
        /// <param name="konto">Konto.</param>
        /// <param name="tekst">Tekst.</param>
        /// <param name="budgetkonto">Budgetkonto.</param>
        /// <param name="debit">Debitbeløb.</param>
        /// <param name="kredit">Kreditbeløb.</param>
        /// <param name="adressekonto">Adressekonto.</param>
        /// <returns>Oprettet bogføringslinje.</returns>
        public Bogføringslinje BogføringslinjeAdd(DateTime bogføringstidspunkt, string bilag, Konto konto, string tekst, Budgetkonto budgetkonto, decimal debit, decimal kredit, AdresseBase adressekonto)
        {
            if (konto == null)
            {
                throw new ArgumentNullException("konto");
            }
            if (string.IsNullOrEmpty(tekst))
            {
                throw new ArgumentNullException("tekst");
            }
            var channel = _channelFactory.CreateChannel <IFinansstyringRepositoryService>(EndpointConfigurationName);

            try
            {
                // Udførelse af kommando.
                var command = new BogføringslinjeAddCommand
                {
                    Regnskabsnummer   = konto.Regnskab.Nummer,
                    Bogføringsdato    = bogføringstidspunkt,
                    Bilag             = bilag,
                    Kontonummer       = konto.Kontonummer,
                    Tekst             = tekst,
                    Budgetkontonummer = budgetkonto == null ? null : budgetkonto.Kontonummer,
                    Debit             = debit,
                    Kredit            = kredit,
                    AdresseId         = adressekonto == null ? 0 : adressekonto.Nummer
                };
                var result = channel.BogføringslinjeAdd(command);
                // Behandling af resultat.
                var bogføringslinje = new Bogføringslinje(result.Løbenummer, result.Dato, result.Bilag, result.Tekst,
                                                          result.Debit, result.Kredit);
                konto.TilføjBogføringslinje(bogføringslinje);
                if (budgetkonto != null)
                {
                    budgetkonto.TilføjBogføringslinje(bogføringslinje);
                }
                if (adressekonto != null)
                {
                    adressekonto.TilføjBogføringslinje(bogføringslinje);
                }
                return(bogføringslinje);
            }
            catch (IntranetRepositoryException)
            {
                throw;
            }
            catch (FaultException ex)
            {
                throw new IntranetRepositoryException(ex.Message);
            }
            catch (Exception ex)
            {
                throw new IntranetRepositoryException(
                          Resource.GetExceptionMessage(ExceptionMessage.RepositoryError, MethodBase.GetCurrentMethod().Name,
                                                       ex.Message), ex);
            }
            finally
            {
                ChannelTools.CloseChannel(channel);
            }
        }