<commit_before>﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;

using AutoMapper;

using Chiro.Gap.Domain;
using Chiro.Gap.Orm;
using Chiro.Gap.ServiceContracts;
using Chiro.Gap.ServiceContracts.DataContracts;
using Chiro.Gap.ServiceContracts.FaultContracts;
using Chiro.Gap.Workers;
using Chiro.Gap.Workers.Exceptions;

namespace Chiro.Gap.Services
{
    /// <summary>
    /// 
    /// </summary>
    public class UitstappenService : IUitstappenService
    {
        private readonly UitstappenManager _uitstappenMgr;
        private readonly GroepsWerkJaarManager _groepsWerkJaarMgr;
        private readonly PlaatsenManager _plaatsenMgr;
        private readonly AdressenManager _adressenMgr;
		private readonly GelieerdePersonenManager _gelieerdePersonenMgr;
        private readonly DeelnemersManager _deelnemersMgr;

		/// <summary>
		/// Constructor.  De managers moeten m.b.v. dependency injection gecreeerd worden.
		/// </summary>
		/// <param name="uMgr">Uitstappenmanager</param>
		/// <param name="gwjMgr">Groepswerkjaarmanager</param>
		/// <param name="plMgr">Plaatsenmanager</param>
		/// <param name="adMgr">Adressenmanager</param>
		/// <param name="gpMgr">GelieerdePersonenManager</param>
		/// <param name="dMgr">Deelnemersmanager</param>
		public UitstappenService(
            UitstappenManager uMgr, 
            GroepsWerkJaarManager gwjMgr, 
            PlaatsenManager plMgr, 
            AdressenManager adMgr, 
            GelieerdePersonenManager gpMgr,
            DeelnemersManager dMgr)
		{
			_uitstappenMgr = uMgr;
			_groepsWerkJaarMgr = gwjMgr;
			_plaatsenMgr = plMgr;
			_adressenMgr = adMgr;
			_gelieerdePersonenMgr = gpMgr;
		    _deelnemersMgr = dMgr;
		}

        /// <summary>
        /// Bewaart een uitstap aan voor de groep met gegeven <paramref name="groepID"/>
        /// </summary>
        /// <param name="groepID">ID van de groep horende bij de uitstap.
        ///   Is eigenlijk enkel relevant als het om een nieuwe uitstap gaat.</param>
        /// <param name="info">Details over de uitstap.  Als <c>uitstap.ID</c> <c>0</c> is,
        ///   dan wordt een nieuwe uitstap gemaakt.  Anders wordt de bestaande overschreven.</param>
        /// <returns>ID van de uitstap</returns>
        public int Bewaren(int groepID, UitstapInfo info)
        {
            // Als de uitstap een ID heeft, moet een bestaande uitstap worden opgehaald.
            // Anders maken we een nieuwe.

            Uitstap uitstap;

            if (info.ID == 0)
            {
                var gwj = _groepsWerkJaarMgr.RecentsteOphalen(groepID, GroepsWerkJaarExtras.Groep);
                uitstap = Mapper.Map<UitstapInfo, Uitstap>(info);
                _uitstappenMgr.Koppelen(uitstap, gwj);
            }
            else
            {
                // haal origineel op, gekoppeld aan groepswerkjaar
                uitstap = _uitstappenMgr.Ophalen(info.ID, UitstapExtras.GroepsWerkJaar);
                // overschrijf met gegevens uit 'info'
                Mapper.Map(info, uitstap);
            }

            try
            {
                return _uitstappenMgr.Bewaren(uitstap, UitstapExtras.Geen).ID;
            }
            // Afhandelen van verwachte exceptions
            catch (GeenGavException ex)
            {
                FoutAfhandelaar.FoutAfhandelen(ex);
<commit_msg>Closes #986. Blijkbaar werd het groepswerkjaar niet (meer?) gekoppeld aan een nieuw bivak.<commit_after>﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;

using AutoMapper;

using Chiro.Gap.Domain;
using Chiro.Gap.Orm;
using Chiro.Gap.ServiceContracts;
using Chiro.Gap.ServiceContracts.DataContracts;
using Chiro.Gap.ServiceContracts.FaultContracts;
using Chiro.Gap.Workers;
using Chiro.Gap.Workers.Exceptions;

namespace Chiro.Gap.Services
{
    /// <summary>
    /// 
    /// </summary>
    public class UitstappenService : IUitstappenService
    {
        private readonly UitstappenManager _uitstappenMgr;
        private readonly GroepsWerkJaarManager _groepsWerkJaarMgr;
        private readonly PlaatsenManager _plaatsenMgr;
        private readonly AdressenManager _adressenMgr;
		private readonly GelieerdePersonenManager _gelieerdePersonenMgr;
        private readonly DeelnemersManager _deelnemersMgr;

		/// <summary>
		/// Constructor.  De managers moeten m.b.v. dependency injection gecreeerd worden.
		/// </summary>
		/// <param name="uMgr">Uitstappenmanager</param>
		/// <param name="gwjMgr">Groepswerkjaarmanager</param>
		/// <param name="plMgr">Plaatsenmanager</param>
		/// <param name="adMgr">Adressenmanager</param>
		/// <param name="gpMgr">GelieerdePersonenManager</param>
		/// <param name="dMgr">Deelnemersmanager</param>
		public UitstappenService(
            UitstappenManager uMgr, 
            GroepsWerkJaarManager gwjMgr, 
            PlaatsenManager plMgr, 
            AdressenManager adMgr, 
            GelieerdePersonenManager gpMgr,
            DeelnemersManager dMgr)
		{
			_uitstappenMgr = uMgr;
			_groepsWerkJaarMgr = gwjMgr;
			_plaatsenMgr = plMgr;
			_adressenMgr = adMgr;
			_gelieerdePersonenMgr = gpMgr;
		    _deelnemersMgr = dMgr;
		}

        /// <summary>
        /// Bewaart een uitstap aan voor de groep met gegeven <paramref name="groepID"/>
        /// </summary>
        /// <param name="groepID">ID van de groep horende bij de uitstap.
        ///   Is eigenlijk enkel relevant als het om een nieuwe uitstap gaat.</param>
        /// <param name="info">Details over de uitstap.  Als <c>uitstap.ID</c> <c>0</c> is,
        ///   dan wordt een nieuwe uitstap gemaakt.  Anders wordt de bestaande overschreven.</param>
        /// <returns>ID van de uitstap</returns>
        public int Bewaren(int groepID, UitstapInfo info)
        {
            // Als de uitstap een ID heeft, moet een bestaande uitstap worden opgehaald.
            // Anders maken we een nieuwe.

            Uitstap uitstap;

            if (info.ID == 0)
            {
                var gwj = _groepsWerkJaarMgr.RecentsteOphalen(groepID, GroepsWerkJaarExtras.Groep);
                uitstap = Mapper.Map<UitstapInfo, Uitstap>(info);
                _uitstappenMgr.Koppelen(uitstap, gwj);
            }
            else
            {
                // haal origineel op, gekoppeld aan groepswerkjaar
                uitstap = _uitstappenMgr.Ophalen(info.ID, UitstapExtras.GroepsWerkJaar);
                // overschrijf met gegevens uit 'info'
                Mapper.Map(info, uitstap);
            }

            try
            {
                return _uitstappenMgr.Bewaren(uitstap, UitstapExtras.GroepsWerkJaar).ID;
            }
            // Afhandelen van verwachte exceptions
            catch (GeenGavException ex)
            {
                FoutAfhandelaar.FoutAfhandelen(ex);

{'fraction_non_alphanumeric': 0.0941074272477197, 'fraction_numerical': 0.001013464601129289, 'mean_word_length': 2.374694675134343, 'pattern_counts': {'":': 0, '<': 63, '<?xml version=': 0, '>': 63, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6714907', 'n_tokens_mistral': 2335, 'n_tokens_neox': 2355, 'n_words': 472}