/// <summary>
        /// Verhuist een persoon van oudAdres naar nieuwAdres.  Persisteert niet.
        /// </summary>
        /// <param name="verhuizers">
        /// Te verhuizen personen
        /// </param>
        /// <param name="oudAdres">
        /// Oud adres, met personen gekoppeld
        /// </param>
        /// <param name="nieuwAdres">
        /// Nieuw adres, met personen gekoppeld
        /// </param>
        /// <param name="adresType">
        /// Adrestype voor de nieuwe koppeling persoon-adres
        /// </param>
        /// <returns>
        /// De koppelingen tussen de <paramref name="verhuizers"/> en hun <paramref name="nieuwAdres"/>.
        /// </returns>
        /// <remarks>
        /// Als de persoon niet gekoppeld is aan het oude adres,
        /// zal hij of zij ook niet verhuizen
        /// </remarks>
        public List <PersoonsAdres> Verhuizen(IList <Persoon> verhuizers, Adres oudAdres, Adres nieuwAdres, AdresTypeEnum adresType)
        {
            // Vind personen waarvan het adres al gekoppeld is.
            var bestaand =
                verhuizers.SelectMany(p => p.PersoonsAdres.Where(pa => pa.Adres.ID == nieuwAdres.ID)).ToList();

            if (bestaand.FirstOrDefault() != null)
            {
                // Geef een exception met daarin de persoonsadresobjecten die al bestaan
                throw new BlokkerendeObjectenException <PersoonsAdres>(
                          bestaand,
                          bestaand.Count(),
                          Resources.WonenDaarAl);
            }

            var persoonsAdressen =
                verhuizers.SelectMany(p => p.PersoonsAdres.Where(pa => pa.Adres.ID == oudAdres.ID)).ToList();

            foreach (var pa in persoonsAdressen)
            {
                // verwijder koppeling oud adres->persoonsadres
                pa.Adres.PersoonsAdres.Remove(pa);

                // adrestype
                pa.AdresType = adresType;

                // koppel persoonsadres aan nieuw adres
                pa.Adres = nieuwAdres;

                nieuwAdres.PersoonsAdres.Add(pa);
            }

            return(persoonsAdressen);
        }
Beispiel #2
0
        /// <summary>
        /// Koppelt het gegeven Adres via nieuwe PersoonsAdresObjecten
        /// aan de Personen gekoppeld aan de gelieerde personen <paramref name="gelieerdePersonen"/>.
        /// Persisteert niet.
        /// </summary>
        /// <param name="gelieerdePersonen">
        ///     Gelieerde  die er een adres bij krijgen, met daaraan gekoppeld hun huidige
        ///     adressen, en de gelieerde personen waarop de gebruiker GAV-rechten heeft.
        /// </param>
        /// <param name="adres">
        ///     Toe te voegen adres
        /// </param>
        /// <param name="adrestype">
        ///     Het adrestype (thuis, kot, enz.)
        /// </param>
        /// <param name="voorkeur">
        ///     Indien true, wordt het nieuwe adres voorkeursadres van de gegeven gelieerde personen
        /// </param>
        /// <returns>
        /// De nieuwe koppelingen tussen de <paramref name="gelieerdePersonen"/> en
        /// <paramref name="adres"/>.
        /// </returns>
        public List <PersoonsAdres> AdresToevoegen(IList <GelieerdePersoon> gelieerdePersonen, Adres adres, AdresTypeEnum adrestype, bool voorkeur)
        {
            var resultaat = new List <PersoonsAdres>();
            // Vind personen waaraan het adres al gekoppeld is.

            var bestaand =
                gelieerdePersonen.Select(gp => gp.Persoon).SelectMany(
                    p => p.PersoonsAdres.Where(pa => pa.Adres.ID == adres.ID)).ToList();

            if (bestaand.FirstOrDefault() != null)
            {
                // Sommige personen hebben het adres al.  Geef een exception met daarin de
                // betreffende persoonsadres-objecten.
                throw new BlokkerendeObjectenException <PersoonsAdres>(
                          bestaand,
                          bestaand.Count(),
                          Resources.WonenDaarAl);
            }

            // En dan nu het echte werk:
            foreach (var gelieerdePersoon in gelieerdePersonen)
            {
                // Maak PersoonsAdres dat het adres aan de persoon koppelt.
                var pa = new PersoonsAdres {
                    Adres = adres, Persoon = gelieerdePersoon.Persoon, AdresType = adrestype
                };
                gelieerdePersoon.Persoon.PersoonsAdres.Add(pa);
                adres.PersoonsAdres.Add(pa);

                // Maak zo nodig voorkeursadres
                if (gelieerdePersoon.Persoon.PersoonsAdres.Count() == 1)
                {
                    // Eerste adres van de persoon.  Dit moet bij elke gelieerde persoon het voorkeursadres
                    // worden.

                    foreach (var gp2 in gelieerdePersoon.Persoon.GelieerdePersoon)
                    {
                        gp2.PersoonsAdres = pa;
                        pa.GelieerdePersoon.Add(gp2);
                    }
                }
                else if (voorkeur)
                {
                    // Onderstaande vreemde lange lijn is een fix voor #3844:
                    // verwijder link persoonsadres-gelieerdepersoon voor oude voorkeursadres.
                    gelieerdePersoon.PersoonsAdres.GelieerdePersoon.Remove(gelieerdePersoon);
                    gelieerdePersoon.PersoonsAdres = pa;
                    pa.GelieerdePersoon.Add(gelieerdePersoon);
                }
                resultaat.Add(pa);
            }
            return(resultaat);
        }
 /// <summary>
 /// Verhuist een persoon van oudAdres naar nieuwAdres.  Persisteert niet.
 /// </summary>
 /// <param name="verhuizer">
 /// Te verhuizen GelieerdePersoon
 /// </param>
 /// <param name="oudAdres">
 /// Oud adres, met personen gekoppeld
 /// </param>
 /// <param name="nieuwAdres">
 /// Nieuw adres, met personen gekoppeld
 /// </param>
 /// <param name="adresType">
 /// Adrestype voor de nieuwe koppeling persoon-adres
 /// </param>
 /// <remarks>
 /// Als de persoon niet gekoppeld is aan het oude adres,
 /// zal hij of zij ook niet verhuizen
 /// </remarks>
 public void Verhuizen(Persoon verhuizer, Adres oudAdres, Adres nieuwAdres, AdresTypeEnum adresType)
 {
     Verhuizen(new[] { verhuizer }, oudAdres, nieuwAdres, adresType);
 }