Beispiel #1
0
        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);
        }
Beispiel #3
0
        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)));
        }