/// <summary>
        /// Verwijdert een functie
        /// </summary>
        /// <param name="functie">
        /// Te verwijderen functie
        /// </param>
        /// <param name="forceren">
        /// Indien <c>true</c> wordt de functie ook verwijderd als er
        ///  dit werkJaar personen met de gegeven functie zijn.  Anders krijg je een exception.
        /// </param>
        /// <returns>
        /// <c>Null</c> als de functie effectief verwijderd is, anders het functie-object met
        /// aangepast 'werkjaartot'.
        /// </returns>
        /// <remarks>
        /// Als de functie geen leden meer bevat na verwijdering van die van het huidige werkJaar,
        /// dan wordt ze verwijderd.  Zo niet, wordt er een stopdatum op geplakt.
        /// </remarks>
        public Functie Verwijderen(Functie functie, bool forceren)
        {
            // Leden moeten gekoppeld zijn
            // (null verschilt hier expliciet van een lege lijst)
            Debug.Assert(functie.Lid != null);

            if (functie.Groep == null)
            {
                throw new FoutNummerException(FoutNummer.FunctieNietBeschikbaar, Resources.NationaleFunctieVerwijderen);
            }

            var huidigGwj = functie.Groep.GroepsWerkJaar.OrderByDescending(gwj => gwj.WerkJaar).First();

            var metFunctieDitJaar = (from ld in functie.Lid
                                     where ld.GroepsWerkJaar.ID == huidigGwj.ID
                                     select ld).ToList();

            if (!forceren && metFunctieDitJaar.FirstOrDefault() != null)
            {
                throw new BlokkerendeObjectenException <Lid>(
                          metFunctieDitJaar,
                          metFunctieDitJaar.Count(),
                          Resources.FunctieNietLeeg);
            }

            foreach (var ld in metFunctieDitJaar)
            {
                functie.Lid.Remove(ld);
            }

            var metFunctieVroeger = from ld in functie.Lid
                                    where ld.GroepsWerkJaar.ID != huidigGwj.ID
                                    select ld;

            if (metFunctieVroeger.FirstOrDefault() == null)
            {
                functie.Groep.Functie.Remove(functie);
                return(null);
            }
            functie.WerkJaarTot = _veelGebruikt.WerkJaarOphalen(functie.Groep) - 1;
            return(functie);
        }
示例#2
0
        /// <summary>
        /// Bepaalt de status van het gegeven <paramref name="groepsWerkJaar"/>.
        /// </summary>
        /// <param name="groepsWerkJaar"></param>
        /// <returns>De status van het gegeven <paramref name="groepsWerkJaar"/>.</returns>
        public WerkJaarStatus StatusBepalen(GroepsWerkJaar groepsWerkJaar)
        {
            DateTime vandaag        = Vandaag();
            int      huidigWerkJaar = _veelGebruikt.WerkJaarOphalen(groepsWerkJaar.Groep);

            if (groepsWerkJaar.WerkJaar < huidigWerkJaar)
            {
                return(WerkJaarStatus.Voorbij);
            }
            var status = OvergangMogelijk(vandaag, groepsWerkJaar.WerkJaar)
                ? WerkJaarStatus.InOvergang
                : WerkJaarStatus.Bezig;

            if (status == WerkJaarStatus.Bezig && !groepsWerkJaar.Lid.Any(l => !l.NonActief && l.EindeInstapPeriode < vandaag))
            {
                // We gebruiken niet l.IsAangesloten, want die wordt pas gezet als er
                // teruggecommuniceerd wordt van Civi naar GAP. Als er leden zijn met
                // instapperiode voorbij, kan het werkjaar niet meer teruggedraaid worden.
                status = WerkJaarStatus.KanTerugDraaien;
            }
            return(status);
        }