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