/// <summary>
        /// Zet de gegeven <paramref name="persoonsVerzekering"/> over naar Kipadmin.
        /// </summary>
        /// <param name="persoonsVerzekering">Over te zetten persoonsverzekering</param>
        /// <param name="gwj">Bepaalt werkJaar en groep die factuur zal krijgen</param>
        public void Bewaren(PersoonsVerzekering persoonsVerzekering, GroepsWerkJaar gwj)
        {
            Debug.Assert(persoonsVerzekering.Persoon.InSync);
            if (persoonsVerzekering.Persoon.AdNummer.HasValue)
            {
                bool gratis = persoonsVerzekering.Persoon.GelieerdePersoon.Any(
                    gp => gp.Lid.Any(l => l.GroepsWerkJaar.ID == gwj.ID && _ledenManager.GratisAansluiting(l)));
                ServiceHelper.CallService <ISyncPersoonService>(svc => svc.LoonVerliesVerzekeren(
                                                                    persoonsVerzekering.Persoon.AdNummer.Value,
                                                                    gwj.Groep.Code,
                                                                    gwj.WerkJaar,
                                                                    gratis));
            }
            else
            {
                // Verzekeren op basis van details.
                // Een verzekering loonverlies (de enige die we voorlopig ondersteunen) is
                // alleen mogelijk voor leden. Sinds gap 1.x ergens in het verleden, krijgen
                // probeerleden ook al een AD-nr. Dus mogen we ervanuit gaan dat het AD-nummer
                // al in aanvraag is.
                // Niet dat dat nog relevant is eigenlijk.

                var gelieerdePersoon = (from gp in persoonsVerzekering.Persoon.GelieerdePersoon
                                        where Equals(gp.Groep, gwj.Groep)
                                        select gp).Single();

                bool gratis =
                    gelieerdePersoon.Lid.Any(l => l.GroepsWerkJaar.ID == gwj.ID && _ledenManager.GratisAansluiting(l));

                ServiceHelper.CallService <ISyncPersoonService>(
                    svc =>
                    svc.LoonVerliesVerzekerenAdOnbekend(MappingHelper.Map <GelieerdePersoon, PersoonDetails>(gelieerdePersoon),
                                                        gwj.Groep.Code, gwj.WerkJaar, gratis));
            }
        }
        /// <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 BewarenTest()
        {
            // ARRANGE

            var groepsWerkJaar = new GroepsWerkJaar {
                Groep = new ChiroGroep()
            };
            var gelieerdePersoon = new GelieerdePersoon
            {
                Groep   = groepsWerkJaar.Groep,
                Persoon = new Persoon
                {
                    AdNummer = null,
                    InSync   = true,
                }
            };

            gelieerdePersoon.Persoon.GelieerdePersoon.Add(gelieerdePersoon);
            groepsWerkJaar.Groep.GelieerdePersoon.Add(gelieerdePersoon);

            var persoonsVerzekering = new PersoonsVerzekering
            {
                Persoon = gelieerdePersoon.Persoon
            };

            var kipSyncMock = new Mock <ISyncPersoonService>();

            kipSyncMock.Setup(
                src =>
                src.LoonVerliesVerzekerenAdOnbekend(It.IsAny <PersoonDetails>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <bool>())).Verifiable();
            Factory.InstantieRegistreren(kipSyncMock.Object);

            // ACT
            var target = Factory.Maak <VerzekeringenSync>();

            target.Bewaren(persoonsVerzekering, groepsWerkJaar);

            // ASSERT

            kipSyncMock.VerifyAll();
        }
Пример #4
0
 public void Bewaren(PersoonsVerzekering persoonsVerzekering, GroepsWerkJaar gwj)
 {
 }