/// <summary>
        /// Saves the service contact.
        /// </summary>
        /// <param name="logonId">Logon id obtained when logging on to the logon service.</param>
        /// <param name="contactAddress">The contact address.</param>
        /// <param name="additionalElement">The additional element.</param>
        /// <param name="serviceContact">The service contact.</param>
        /// <param name="conflictNoteSummary">The conflict note summary.</param>
        /// <param name="conflictNoteContent">Content of the conflict note.</param>
        /// <returns></returns>
        public ReturnValue SaveServiceContact(Guid logonId, Address contactAddress,
                                       AdditionalAddressElement[] additionalElement,
                                       ServiceContact serviceContact,
                                       string conflictNoteSummary,
                                       string conflictNoteContent)
        {
            ReturnValue returnValue = new ReturnValue();

            try
            {
                // Get the logged on user from the current logons and add their
                // ApplicationSettings the list of concurrent sessions.
                Host.LoadLoggedOnUser(logonId);

                try
                {
                    Functions.RestrictRekoopIntegrationUser(UserInformation.Instance.DbUid);
                    switch (UserInformation.Instance.UserType)
                    {
                        case DataConstants.UserType.Staff:
                            // Can do everything
                            break;
                        case DataConstants.UserType.Client:
                        case DataConstants.UserType.ThirdParty:
                            if (!ApplicationSettings.Instance.IsUser(additionalElement[0].MemberId, additionalElement[0].OrganisationId))
                                throw new Exception("Access denied");
                            break;
                        default:
                            throw new Exception("Access denied");
                    }

                    SrvServiceContact serviceContactSrv = new SrvServiceContact();
                    SrvAddress srvAddress = new SrvAddress();

                    this.SetAddressValue(srvAddress, contactAddress);

                    // Save Additional Address Info to Address Object
                    if (additionalElement != null)
                    {
                        for (int i = 0; i <= 9; i++)
                        {
                            srvAddress.AdditionalInfoElements[i].AddressElementText = additionalElement[i].ElementText;
                        }
                    }
                    serviceContactSrv.Addresses.Add(srvAddress);

                    serviceContactSrv.ServiceId = serviceContact.ServiceId;
                    serviceContactSrv.Person.ForeName = serviceContact.ForeName;
                    serviceContactSrv.Person.Surname = serviceContact.SurName;
                    serviceContactSrv.Person.Title = serviceContact.Title;
                    serviceContactSrv.Position = serviceContact.Position;
                    serviceContactSrv.Person.Sex = serviceContact.Sex;

                    //These two notes fields are mandatory and have defined
                    //default values
                    serviceContactSrv.ConflictNoteSummary = conflictNoteSummary;
                    serviceContactSrv.ConflictNoteContent = conflictNoteContent;

                    string errorMessage;

                    returnValue.Success = serviceContactSrv.Save(out errorMessage);
                    returnValue.Message = errorMessage;
                }
                finally
                {
                    // Remove the logged on user's ApplicationSettings from the
                    // list of concurrent sessions
                    Host.UnloadLoggedOnUser();
                }
            }
            catch (System.Data.SqlClient.SqlException)
            {
                returnValue.Success = false;
                returnValue.Message = Functions.SQLErrorMessage;
            }
            catch (Exception ex)
            {
                returnValue.Success = false;
                returnValue.Message = ex.Message;
            }

            return returnValue;
        }
        /// <summary>
        /// This method updates the Person / Organisation information
        /// using contact service .
        /// </summary>
        /// <param name="logonId">User logon ID</param>
        /// <param name="person">Person information</param>
        /// <param name="contactType">Individual / Organisation</param>
        /// <param name="organisation">Organisation Information</param>
        /// <returns>Return Value</returns>
        public ReturnValue UpdateGeneralContact(Guid logonId, Person person, IRISLegal.IlbCommon.ContactType contactType, Organisation organisation)
        {
            ReturnValue returnValue = new ReturnValue();

            try
            {
                // Get the logged on user from the current logons and add their
                // ApplicationSettings the list of concurrent sessions.
                Host.LoadLoggedOnUser(logonId);

                try
                {
                    Functions.RestrictRekoopIntegrationUser(UserInformation.Instance.DbUid);
                    switch (UserInformation.Instance.UserType)
                    {
                        case DataConstants.UserType.Staff:
                        // Can do everything
                        case DataConstants.UserType.ThirdParty:
                            switch (contactType)
                            {
                                case IRISLegal.IlbCommon.ContactType.Individual:
                                    if (!ApplicationSettings.Instance.IsUser(person.MemberId, DataConstants.DummyGuid))
                                        throw new Exception("Access denied");
                                    break;
                                case IRISLegal.IlbCommon.ContactType.Organisation:
                                    if (!ApplicationSettings.Instance.IsUser(DataConstants.DummyGuid, organisation.OrganisationId))
                                        throw new Exception("Access denied");
                                    break;
                                default:
                                    throw new Exception("Invalid contact type");
                            }

                            break;
                        case DataConstants.UserType.Client:
                            switch (contactType)
                            {
                                case IRISLegal.IlbCommon.ContactType.Individual:
                                    if (!ApplicationSettings.Instance.IsUser(person.MemberId, DataConstants.DummyGuid))
                                        throw new Exception("Access denied");
                                    break;
                                case IRISLegal.IlbCommon.ContactType.Organisation:
                                    if (!ApplicationSettings.Instance.IsUser(DataConstants.DummyGuid, organisation.OrganisationId))
                                        throw new Exception("Access denied");
                                    break;
                                default:
                                    throw new Exception("Invalid contact type");
                            }
                            break;
                        default:
                            throw new Exception("Access denied");
                    }

                    SrvServiceContact serviceContactService = new SrvServiceContact();
                    SrvContact contactService = new SrvContact();

                    string errorMessage;
                    string errorMessageWarning;

                    contactService.ContactType = contactType;
                    contactService.Load(person.MemberId);

                    if (!contactService.ValidateId(out errorMessage, out errorMessageWarning))
                    {
                        serviceContactService.Id = person.MemberId;
                        serviceContactService.Load();

                        serviceContactService.Person.ForeName = person.ForeName;
                        serviceContactService.Person.MaritalId = person.MaritalStatusId;
                        serviceContactService.Person.PersonArmedForcesNo = person.ArmedForcesNo;
                        serviceContactService.Person.PersonBirthName = person.BirthName;
                        serviceContactService.Person.PersonDisability = person.DisabilityId;
                        serviceContactService.Person.PersonDOB = person.DOB;
                        serviceContactService.Person.PersonDOD = person.DOD;
                        serviceContactService.Person.PersonEthnicityId = person.EthnicityId;
                        serviceContactService.Person.PersonNINo = person.NINo;
                        serviceContactService.Person.PersonOccupation = person.Occupation;
                        serviceContactService.Person.PersonPlaceOfBirth = person.PlaceOfBirth;
                        serviceContactService.Person.PersonPreviousName = person.PreviousName;
                        serviceContactService.Person.PersonSalEnv = person.SalutationEnvelope;
                        serviceContactService.Person.PersonSalLet = person.SalutationLettterFriendly;
                        serviceContactService.Person.PersonSalletForm = person.SalutationLettterFormal;
                        serviceContactService.Person.PersonSalutationlettterInformal = person.SalutationLettterInformal;
                        serviceContactService.Person.Sex = person.Sex;
                        serviceContactService.Person.Surname = person.Surname;
                        serviceContactService.Person.Title = person.Title;

                        returnValue.Success = serviceContactService.Save(out errorMessage);
                        returnValue.Message = errorMessage;
                    }
                    else
                    {

                        if (contactService.ContactType == IRISLegal.IlbCommon.ContactType.Individual)
                        {

                            //Person Information for Individual contact

                            contactService.Person.ForeName = person.ForeName;
                            contactService.Person.MaritalId = person.MaritalStatusId;
                            contactService.Person.PersonArmedForcesNo = person.ArmedForcesNo;
                            contactService.Person.PersonBirthName = person.BirthName;
                            contactService.Person.PersonDisability = person.DisabilityId;
                            contactService.Person.PersonDOB = person.DOB;
                            contactService.Person.PersonDOD = person.DOD;
                            contactService.Person.PersonEthnicityId = person.EthnicityId;
                            contactService.Person.PersonNINo = person.NINo;
                            contactService.Person.PersonOccupation = person.Occupation;
                            contactService.Person.PersonPlaceOfBirth = person.PlaceOfBirth;
                            contactService.Person.PersonPreviousName = person.PreviousName;
                            contactService.Person.PersonSalEnv = person.SalutationEnvelope;
                            contactService.Person.PersonSalLet = person.SalutationLettterFriendly;
                            contactService.Person.PersonSalletForm = person.SalutationLettterFormal;
                            contactService.Person.PersonSalutationlettterInformal = person.SalutationLettterInformal;
                            contactService.Person.Sex = person.Sex;
                            contactService.Person.Surname = person.Surname;
                            contactService.Person.Title = person.Title;
                        }
                        else
                        {
                            contactService.Load(organisation.OrganisationId);
                            contactService.Organisation.IndustryId = organisation.IndustryId;
                            contactService.Organisation.Name = organisation.Name;
                            contactService.Organisation.RegisteredName = organisation.RegisteredName;
                            contactService.Organisation.RegisteredNumber = organisation.RegisteredNo;
                            contactService.Organisation.SubTypesId = organisation.SubTypeId;
                            contactService.Organisation.VATNumber = organisation.VATNo;
                        }

                        returnValue.Success = contactService.Save(out errorMessage);
                        returnValue.Message = errorMessage;
                    }
                }
                finally
                {
                    // Remove the logged on user's ApplicationSettings from the
                    // list of concurrent sessions
                    Host.UnloadLoggedOnUser();
                }
            }
            catch (System.Data.SqlClient.SqlException)
            {
                returnValue.Success = false;
                returnValue.Message = Functions.SQLErrorMessage;
            }
            catch (Exception ex)
            {
                returnValue.Success = false;
                returnValue.Message = ex.Message;
            }

            return returnValue;
        }
        public ServiceContactReturnValue GetServiceContact(Guid logonId, Guid contactId)
        {
            ServiceContactReturnValue returnValue = new ServiceContactReturnValue();

            try
            {
                // Get the logged on user from the current logons and add their
                // ApplicationSettings the list of concurrent sessions.
                Host.LoadLoggedOnUser(logonId);

                try
                {
                    Functions.RestrictRekoopIntegrationUser(UserInformation.Instance.DbUid);
                    switch (UserInformation.Instance.UserType)
                    {
                        case DataConstants.UserType.Staff:
                            // Can do everything
                            break;
                        case DataConstants.UserType.Client:
                        case DataConstants.UserType.ThirdParty:
                            throw new Exception("Access denied");
                        default:
                            throw new Exception("Access denied");
                    }

                    SrvServiceContact srvServiceContact = new SrvServiceContact();
                    srvServiceContact.Id = contactId;
                    srvServiceContact.Load();

                    if (srvServiceContact.IsLoaded)
                    {
                        //General Info
                        returnValue.ServiceContact = new Person();
                        returnValue.ServiceContact.Title = srvServiceContact.Person.Title;
                        returnValue.ServiceContact.ForeName = srvServiceContact.Person.ForeName;
                        returnValue.ServiceContact.Surname = srvServiceContact.Person.Surname;
                        returnValue.ServiceContact.MaritalStatusId = srvServiceContact.Person.MaritalId;
                        returnValue.ServiceContact.PreviousName = srvServiceContact.Person.PersonPreviousName;
                        returnValue.ServiceContact.Occupation = srvServiceContact.Person.PersonOccupation;
                        returnValue.ServiceContact.Sex = srvServiceContact.Person.Sex;
                        returnValue.ServiceContact.DOB = srvServiceContact.Person.PersonDOB;
                        returnValue.ServiceContact.DOD = srvServiceContact.Person.PersonDOD;
                        returnValue.ServiceContact.PlaceOfBirth = srvServiceContact.Person.PersonPlaceOfBirth;
                        returnValue.ServiceContact.BirthName = srvServiceContact.Person.PersonBirthName;
                        returnValue.CampaignId = srvServiceContact.CampaignId;

                        //Additional Info
                        returnValue.ServiceContact.SalutationLettterFormal = srvServiceContact.Person.PersonSalletForm;
                        returnValue.ServiceContact.SalutationLettterInformal = srvServiceContact.Person.PersonSalutationlettterInformal;
                        returnValue.ServiceContact.SalutationLettterFriendly = srvServiceContact.Person.PersonSalLet;
                        returnValue.ServiceContact.SalutationEnvelope = srvServiceContact.Person.PersonSalEnv;
                        returnValue.ServiceContact.EthnicityId = srvServiceContact.Person.PersonEthnicityId;
                        returnValue.ServiceContact.IsInArmedForces = srvServiceContact.Person.PersonInArmedForces;
                        returnValue.ServiceContact.ArmedForcesNo = srvServiceContact.Person.PersonArmedForcesNo;
                        returnValue.ServiceContact.NINo = srvServiceContact.Person.PersonNINo;
                        returnValue.IsReceivingMarketingStatus = srvServiceContact.IsReceivingMarketingStatus;
                    }
                }
                finally
                {
                    // Remove the logged on user's ApplicationSettings from the
                    // list of concurrent sessions
                    Host.UnloadLoggedOnUser();
                }
            }
            catch (System.Data.SqlClient.SqlException)
            {
                returnValue.Success = false;
                returnValue.Message = Functions.SQLErrorMessage;
            }
            catch (Exception ex)
            {
                returnValue.Success = false;
                returnValue.Message = ex.Message;
            }

            return returnValue;
        }