/// <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); }
/// <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); }