/// <summary>
        /// Checks the out of office.
        /// </summary>
        /// <param name="person">The person.</param>
        /// <param name="oldPerson">The old person.</param>
        public void CheckOutOfOffice(IPerson person, IPerson oldPerson)
        {
            if (person == null)
                throw new ArgumentNullException("person");

            if (oldPerson == null)
                throw new ArgumentNullException("oldPerson");

            try
            {
                if (person.ReadValueByPropertyName<bool?>(Constants.OutOfOfficePropertyName) == true)
                {
                    if (oldPerson.ReadValueByPropertyName<bool?>(Constants.OutOfOfficePropertyName) != true)
                    {
                        var personInfo = PersonManager.GetPerson(person.Id);

                        MoveApprovalMemberResultToDelegate(personInfo);
                        MoveActionsToDelegate(personInfo);
                    }
                    else
                    {
                        if (person.ReadValueByPropertyName<int?>(Constants.DelegateApproverPropertyName)
                            != oldPerson.ReadValueByPropertyName<int?>(Constants.DelegateApproverPropertyName))
                        {
                            var personInfo = PersonManager.GetPerson(person.Id);

                            GetApprovalMemberResultFromDelegate(personInfo);
                            GetActionsFromDelegate(personInfo, false);

                            MoveApprovalMemberResultToDelegate(personInfo);
                            MoveActionsToDelegate(personInfo);
                        }
                    }
                }
                else
                {
                    if (oldPerson.ReadValueByPropertyName<bool?>(Constants.OutOfOfficePropertyName) == true)
                    {
                        var personInfo = PersonManager.GetPerson(person.Id);

                        GetApprovalMemberResultFromDelegate(personInfo);
                        GetActionsFromDelegate(personInfo);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log(LogSeverity.Error, GetType().ToString(), ex);
                throw;
            }
        }