public void WerkjaarVerzekeringGeenOverlap() { // ARRANGE var groepsWerkJarenManager = Factory.Maak <IGroepsWerkJarenManager>(); var vtype = new VerzekeringsType { TotEindeWerkJaar = true }; var groepsWerkJaar = new GroepsWerkJaar { Groep = new ChiroGroep(), WerkJaar = 2012 }; var vorigGroepsWerkJaar = new GroepsWerkJaar { Groep = new ChiroGroep(), WerkJaar = 2011 }; groepsWerkJaar.Groep.GroepsWerkJaar.Add(groepsWerkJaar); groepsWerkJaar.Groep.GroepsWerkJaar.Add(vorigGroepsWerkJaar); var persoon = new Persoon { PersoonsVerzekering = new List <PersoonsVerzekering> { new PersoonsVerzekering { VerzekeringsType = vtype, Van = new DateTime(2011, 10, 1), // De einddatum moeten we via de groepsWerkJarenManager laten // berekenen, want het einde van een groepswerkjaar valt bijv. // anders bij staging als bij dev. Tot = groepsWerkJarenManager.EindDatum(vorigGroepsWerkJaar) } } }; var lid1 = new Leiding { GroepsWerkJaar = groepsWerkJaar, GelieerdePersoon = new GelieerdePersoon { Persoon = persoon } }; // ACT var verzekeringenManager = Factory.Maak <VerzekeringenManager>(); verzekeringenManager.Verzekeren(lid1, vtype, new DateTime(2012, 10, 1), groepsWerkJarenManager.EindDatum(groepsWerkJaar)); // ASSERT Assert.AreEqual(2, persoon.PersoonsVerzekering.Count); }
/// <summary> /// Verzekert een lid /// </summary> /// <param name="l"> /// Te verzekeren lid, met daaraan gekoppeld alle verzekeringen /// </param> /// <param name="verz"> /// Type van de verzekering /// </param> /// <param name="beginDatum"> /// Begindatum van de verzekering; moet in de toekomst liggen. /// </param> /// <param name="eindDatum"> /// Einddatum van de verzekering /// </param> /// <returns> /// Het gecreeerde PersoonsVerzekringsobject. /// </returns> public PersoonsVerzekering Verzekeren(Lid l, VerzekeringsType verz, DateTime beginDatum, DateTime eindDatum) { if (!_autorisatieMgr.IsGav(l)) { throw new GeenGavException(); } if (beginDatum > eindDatum) { throw new FoutNummerException(FoutNummer.ChronologieFout, Resources.FouteDatumVolgorde); } if (beginDatum > DateTime.Now) { throw new FoutNummerException(FoutNummer.ChronologieFout, Resources.VerzekeringInVerleden); } if (verz.TotEindeWerkJaar && eindDatum != _groepsWerkJaarManager.EindDatum(l.GroepsWerkJaar)) { throw new FoutNummerException( FoutNummer.ValidatieFout, Resources.OngeldigeEindDatumVerzekering); } // Onderstaande controle op 'al bestaande' verzekering, gebeurt niet door de database, omdat // dit meer inhoudt dan een unique index/unique constraint. var query = from v in l.GelieerdePersoon.Persoon.PersoonsVerzekering where v.VerzekeringsType.ID == verz.ID && ((verz.TotEindeWerkJaar && v.Tot == eindDatum) // Een verzekering tot het einde van het jaar mag wat overlappen (met vorig jaar) zolang je er nog geen hebt voor dat jaar. || (!verz.TotEindeWerkJaar && (v.Tot > beginDatum && beginDatum >= v.Van || v.Van < eindDatum && eindDatum <= v.Tot))) // Anders laten we geen overlap toe. select v; var bestaande = query.FirstOrDefault(); if (bestaande != null) { throw new BlokkerendeObjectenException <PersoonsVerzekering>( bestaande, Resources.OverlappendeVerzekering); } var pv = new PersoonsVerzekering { Van = beginDatum, Tot = eindDatum, Persoon = l.GelieerdePersoon.Persoon, VerzekeringsType = verz }; l.GelieerdePersoon.Persoon.PersoonsVerzekering.Add(pv); verz.PersoonsVerzekering.Add(pv); return(pv); }
public void NietWerkjaarVerzekeringWelOverlap() { // ARRANGE var vtype = new VerzekeringsType { TotEindeWerkJaar = false }; var groepsWerkJaar = new GroepsWerkJaar { Groep = new ChiroGroep(), WerkJaar = 2012 }; groepsWerkJaar.Groep.GroepsWerkJaar.Add(groepsWerkJaar); var persoon = new Persoon { PersoonsVerzekering = new List <PersoonsVerzekering> { new PersoonsVerzekering { VerzekeringsType = vtype, Van = new DateTime(2011, 10, 1), Tot = new DateTime(2012, 8, 31) } } }; var lid1 = new Leiding { GroepsWerkJaar = groepsWerkJaar, GelieerdePersoon = new GelieerdePersoon { Persoon = persoon } }; // ASSERT var verzekeringenManager = Factory.Maak <VerzekeringenManager>(); Assert.Throws <BlokkerendeObjectenException <PersoonsVerzekering> >(() => verzekeringenManager.Verzekeren(lid1, vtype, new DateTime(2012, 8, 1), new DateTime(2013, 8, 31))); }