PersonenSync.cs 5.09 KB
Newer Older
1
/*
2
 * Copyright 2008-2013, 2015 the GAP developers. See the NOTICE file at the 
3
 * top-level directory of this distribution, and at
4
 * https://gapwiki.chiro.be/copyright
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

using System.Diagnostics;
using Chiro.Cdf.ServiceHelper;
21
using Chiro.Gap.Domain;
22 23
using Chiro.Gap.Poco.Model;
using Chiro.Gap.SyncInterfaces;
24
using Chiro.Gap.WorkerInterfaces;
25 26 27 28 29 30 31
using Chiro.Kip.ServiceContracts;
using Chiro.Kip.ServiceContracts.DataContracts;
using Persoon = Chiro.Gap.Poco.Model.Persoon;

namespace Chiro.Gap.Sync
{
	/// <summary>
32
	/// Klasse die de synchronisatie van persoonsgegevens naar Chirocivi regelt
33
	/// </summary>
34
	public class PersonenSync : BaseSync, IPersonenSync
35
	{
36
	    private readonly IGroepsWerkJarenManager _groepsWerkJarenManager;
37
	    private readonly ILedenManager _ledenManager;
38 39 40 41 42 43 44 45 46 47 48

	    /// <summary>
	    /// Constructor.
	    /// 
	    /// De ServiceHelper wordt genjecteerd door de dependency injection container. Wat de
	    /// ServiceHelper precies zal opleveren, hangt af van welke IChannelProvider geregistreerd
	    /// is bij de container.
	    /// </summary>
	    /// <param name="serviceHelper">ServiceHelper, nodig voor service calls.</param>
	    /// <param name="groepsWerkJarenManager">GroepsWerkJarenManager; wordt gebruikt om te kijken of iemand
	    /// verzekerd is tegen loonverlies.</param>
49 50
	    /// <param name="ledenManager">Ledenlogica.</param>
	    public PersonenSync(ServiceHelper serviceHelper, IGroepsWerkJarenManager groepsWerkJarenManager, ILedenManager ledenManager)
51 52 53
	        : base(serviceHelper)
	    {
	        _groepsWerkJarenManager = groepsWerkJarenManager;
54
	        _ledenManager = ledenManager;
55
	    }
56

57 58 59 60 61 62 63 64 65 66
        /// <summary>
        /// Probeert de gegeven gelieerde persoon in de Chirocivi te vinden, en updatet
        /// hem als dat lukt. Wordt de persoon niet gevonden, dan wordt er een
        /// nieuwe aangemaakt.
        /// </summary>
        /// <param name="gp">Te bewaren gelieerde persoon</param>
	    public void UpdatenOfMaken(GelieerdePersoon gp)
        {
            Debug.Assert(gp.Persoon.InSync);

67
            var details = MappingHelper.Map<GelieerdePersoon, PersoonDetails>(gp);
68 69 70 71
            ServiceHelper.CallService<ISyncPersoonService>(svc => svc.PersoonUpdatenOfMaken(details));
        }

	    /// <summary>
72
	    /// Updatet een bestaand persoon in Chirocivi: persoonsgegevens, en eventueel ook adressen en/of communicatie.
73 74 75 76 77
	    /// 
	    /// </summary>
	    /// <param name="gp">Gelieerde persoon, persoonsinfo</param>
	    /// <remarks>Enkel voor het wijzigen van bestaande personen!</remarks>
	    public void Updaten(GelieerdePersoon gp)
78 79
		{
			// Wijzigingen van personen met ad-nummer worden doorgesluisd
80
			// naar Chirocivi.
81 82 83

			Debug.Assert(gp.Persoon.InSync);

84
            var syncPersoon = MappingHelper.Map<Persoon, Kip.ServiceContracts.DataContracts.Persoon>(gp.Persoon);
85 86
			ServiceHelper.CallService<ISyncPersoonService>(svc => svc.PersoonUpdaten(syncPersoon));
		}
87 88

        /// <summary>
89
        /// Registreert een membership in de Chirocivi voor het gegeven <paramref name="lid"/>
90
        /// </summary>
91 92 93 94 95
        /// <param name="lid">Lid waarvoor membership geregistreerd moet worden</param>
	    public void MembershipRegistreren(Lid lid)
        {
            var persoon = lid.GelieerdePersoon.Persoon;
            int werkJaar = lid.GroepsWerkJaar.WerkJaar;
96 97
            if (persoon.AdNummer != null)
            {
98 99 100 101 102 103
                var gedoe = new MembershipGedoe
                {
                    Gratis = _ledenManager.GratisAansluiting(lid),
                    MetLoonVerlies = _groepsWerkJarenManager.IsVerzekerd(lid, Verzekering.LoonVerlies),
                    StamNummer = _ledenManager.StamNummer(lid)
                };
104
                ServiceHelper.CallService<ISyncPersoonService>(
105
                    svc => svc.MembershipBewaren(persoon.AdNummer.Value, werkJaar, gedoe));
106 107 108
            }
            else
            {
109
                var gelieerdePersoon = lid.GelieerdePersoon;
110

111
                var details = MappingHelper.Map<GelieerdePersoon, PersoonDetails>(gelieerdePersoon);
112
                bool isVerzekerd = _groepsWerkJarenManager.IsVerzekerd(lid, Verzekering.LoonVerlies);
113

114 115 116 117 118 119
                var gedoe = new MembershipGedoe
                {
                    Gratis = _ledenManager.GratisAansluiting(lid),
                    MetLoonVerlies = isVerzekerd,
                    StamNummer = _ledenManager.StamNummer(lid)
                };
120
                ServiceHelper.CallService<ISyncPersoonService>(
121
                    svc => svc.MembershipNieuwePersoonBewaren(details, werkJaar, gedoe));
122 123
            }
	    }
124 125
	}
}