public override IAddressSource GetCurrentAddressSource(IAddressSource populationAddress, IAddressSource departure, PersonCivilRegistrationStatusCode civilRegistrationStatus)
        {
            var ret = new LogicalAddressStrategy().GetCurrentAddressSource(populationAddress, departure, civilRegistrationStatus);

            if (ret == null || ret is DummyAddressSource)
            {
                ret = new AvailableAddressSrategy().GetCurrentAddressSource(populationAddress, departure, civilRegistrationStatus);
            }
            return(ret);
        }
        public override IAddressSource GetCurrentAddressSource(IAddressSource populationAddress, IAddressSource departure, PersonCivilRegistrationStatusCode civilRegistrationStatus)
        {
            var addresses = new IAddressSource[] { populationAddress, departure };
            var all       = addresses.Where(adr => adr != null).ToArray();
            var active    = all.Where(adr => !adr.ToEndTS().HasValue).FirstOrDefault();

            if (active != null)
            {
                return(active);
            }

            var latest = all.OrderByDescending(adr => adr.ToStartTS()).FirstOrDefault();

            if (latest != null)
            {
                return(latest);
            }

            return(new DummyAddressSource());
        }
        public override IAddressSource GetCurrentAddressSource(IAddressSource populationAddress, IAddressSource departure, PersonCivilRegistrationStatusCode civilRegistrationStatus)
        {
            // 1,3,5,7
            var cprAddressStates = new PersonCivilRegistrationStatusCode[] {
                PersonCivilRegistrationStatusCode.RegisteredWithResidenceInDanishPopulationRegister,
                PersonCivilRegistrationStatusCode.RegisteredWithHighStreetcodeInDanishPopulationRegister,
                PersonCivilRegistrationStatusCode.RegisteredWithResidenceInGreenlandicPopulationRegister,
                PersonCivilRegistrationStatusCode.RegisteredWithHighStreetcodeIn_GreenlandicPopulationRegister
            };

            if (cprAddressStates.Contains(civilRegistrationStatus))
            {
                return(populationAddress);
            }
            // 80
            if (civilRegistrationStatus == PersonCivilRegistrationStatusCode.Emigrated)
            {
                return(departure);
            }
            return(new DummyAddressSource());
        }
 public abstract IAddressSource GetCurrentAddressSource(IAddressSource populationAddress, IAddressSource departure, PersonCivilRegistrationStatusCode civilRegistrationStatus);