public PersonRequest Base2PersonRequest(BaseRequest baseRequest)
 {
     PersonRequest personRequest = new PersonRequest();
     personRequest.BusinessUnitID = baseRequest.BusinessUnitID;
     personRequest.MessageLogId = baseRequest.MessageLogId;
     personRequest.RequestAction = baseRequest.RequestAction;
     personRequest.RequestID = baseRequest.RequestID;
     personRequest.RequestType = baseRequest.RequestType;
     personRequest.ReturnType = baseRequest.ReturnType;
     personRequest.ReturnCode = baseRequest.ReturnCode;
     personRequest.ReturnMessage = baseRequest.ReturnMessage;
     personRequest.WFMReturnCode = baseRequest.WFMReturnCode;
     personRequest.WFMReturnMessage = baseRequest.WFMReturnMessage;
     personRequest.XMLReturnCode = baseRequest.XMLReturnCode;
     personRequest.XMLReturnMessage = baseRequest.XMLReturnMessage;
     return personRequest;
 }
 public PersonRequest Clone(PersonDto o)
 {
     PersonRequest clone = new PersonRequest();
     clone.ApplicationLogOnName = o.ApplicationLogOnName;
     clone.ApplicationLogOnPassword = o.ApplicationLogOnPassword;
     clone.CultureLanguageId = o.CultureLanguageId.ToString();
     clone.Email = o.Email;
     clone.EmploymentNumber = o.EmploymentNumber;
     clone.FirstDayOfWeek = o.FirstDayOfWeek.ToString();
     clone.FirstName = o.FirstName;
     clone.Identity = o.Identity;
     clone.LastName = o.LastName;
     clone.Note = o.Note;
     clone.PersonID = o.Id;
     if (o.TerminationDate != null)
     {
         clone.TerminationDate = o.TerminationDate.DateTime;
     }
     else
     {
         clone.TerminationDate = new DateTime();
     }
     clone.TimeZoneId = o.TimeZoneId;
     clone.UICultureLanguageId = o.UICultureLanguageId.ToString();
     clone.WindowsDomain = o.WindowsDomain;
     clone.WindowsLogOnName = o.WindowsLogOnName;
     return clone;
 }
 public PersonRequest Clone(PersonRequest o)
 {
     PersonRequest clone = new PersonRequest();
     clone.ApplicationLogOnName = o.ApplicationLogOnName;
     clone.ApplicationLogOnPassword = o.ApplicationLogOnPassword;
     clone.BusinessUnitID = o.BusinessUnitID;
     clone.CultureLanguageId = o.CultureLanguageId;
     clone.DestinationBusinessUnitID = o.DestinationBusinessUnitID;
     clone.Email = o.Email;
     clone.EmploymentNumber = o.EmploymentNumber;
     clone.FirstDayOfWeek = o.FirstDayOfWeek;
     clone.FirstName = o.FirstName;
     clone.Identity = o.Identity;
     clone.IsProcessed = o.IsProcessed;
     clone.NewPersonID = o.NewPersonID;
     clone.Note = o.Note;
     clone.PersonID = o.PersonID;
     clone.RequestAction = o.RequestAction;
     clone.RequestID = o.RequestID;
     clone.RequestType = o.RequestType;
     clone.ReturnCode = o.ReturnCode;
     clone.ReturnMessage = o.ReturnMessage;
     clone.ReturnType = o.ReturnType;
     clone.SQLReturnCode = o.SQLReturnCode;
     clone.SQLReturnMessage = o.SQLReturnMessage;
     clone.SiteID = o.SiteID;
     clone.StartDate = o.StartDate;
     clone.TeamID = o.TeamID;
     clone.TerminationDate = o.TerminationDate;
     clone.TimeZoneId = o.TimeZoneId;
     clone.UICultureLanguageId = o.UICultureLanguageId;
     clone.WFMReturnCode = o.WFMReturnCode;
     clone.WFMReturnMessage = o.WFMReturnMessage;
     clone.WindowsDomain = o.WindowsDomain;
     clone.WindowsLogOnName = o.WindowsLogOnName;
     clone.XMLReturnCode = o.XMLReturnCode;
     clone.XMLReturnMessage = o.XMLReturnMessage;
     return clone;
 }
        private PersonRequest TransferPerson(PersonRequest personRequest)
        {
            SetBusinessUnit(personRequest.DestinationBusinessUnitID);
            var teamRequest = CheckSiteTeam(personRequest);
            SetBusinessUnit(personRequest.BusinessUnitID);
            if (teamRequest.ReturnCode != 0)
            {
                return teamRequest;
            }

            try
            {
                var personToTransfer = TerminatePersonById(personRequest);
                personToTransfer.BusinessUnitID = personRequest.DestinationBusinessUnitID;
                personToTransfer.SiteID = personRequest.SiteID;
                personToTransfer.TeamID = personRequest.TeamID;
                personToTransfer.StartDate = personRequest.StartDate;
                if (personToTransfer != null)
                {

                    SetBusinessUnit(personRequest.DestinationBusinessUnitID);

                    if (personToTransfer.WFMReturnCode == 0)
                    {

                        var createResult = CreatePerson(personToTransfer);
                        personToTransfer.WFMReturnCode = createResult.WFMReturnCode;
                        personToTransfer.WFMReturnMessage = createResult.WFMReturnMessage;
                        personToTransfer.ReturnType = ReturnTypes.ReturnTypeEnum.NoError;
                        personToTransfer.NewPersonID = createResult.NewPersonID;
                        return personToTransfer;
                    }
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = personToTransfer.WFMReturnCode;
                    personRequest.WFMReturnMessage = personToTransfer.WFMReturnMessage;
                    return personRequest;
                }
                else
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = personToTransfer.WFMReturnCode;
                    personRequest.WFMReturnMessage = personToTransfer.WFMReturnMessage;
                    return personRequest;
                }
            }
            catch (Exception ex)
            {
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
                return personRequest;
            }
        }
        private PersonRequest PersonTransferRequest(XmlDocument doc)
        {
            PersonRequest personRequest = new PersonRequest { RequestType = RequestTypes.RequestTypeEnum.Person, RequestAction = @"Transfer", XMLReturnCode = 0, XMLReturnMessage = @"OK" };
            try
            {
                Guid requestGuid = Guid.Empty;
                Guid.TryParse(ProcessNode(doc, "RequestID"), out requestGuid);
                personRequest.RequestID = requestGuid;
                personRequest.BusinessUnitID = ProcessNode(doc, "BusinessUnitID");
                personRequest.DestinationBusinessUnitID = ProcessNode(doc, "DestinationBusinessUnitID");
                personRequest.SiteID = ProcessNode(doc, "DestinationSiteID");
                personRequest.TeamID = ProcessNode(doc, "DestinationTeamID");
                personRequest.PersonID = ProcessNode(doc, "CurrentPersonID");

                DateTime dateTime = new DateTime();
                DateTime.TryParse(ProcessNode(doc, "TransferDate"), out dateTime);
                personRequest.StartDate = dateTime;
                personRequest.TerminationDate = dateTime;
            }
            catch (Exception ex)
            {
                Utilities.WriteLog(String.Format(ex.Message + " " + ex.StackTrace));
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.XmlError;
                personRequest.XMLReturnCode = -2;
                personRequest.XMLReturnMessage = ex.Message;
            }
            return personRequest;
        }
        public PersonRequest ProcessPersonRequest(PersonRequest personRequest)
        {
            if (AuthenticationResultSuccessful)
            {
                if (personRequest.RequestType == RequestTypes.RequestTypeEnum.Person)
                {
                    PersonRequest wfmResult = new PersonRequest();
                    if (personRequest.RequestAction == @"Create")
                    {
                        wfmResult = CreatePerson(personRequest);

                    }
                    else if (personRequest.RequestAction == @"Assign")
                    {
                        wfmResult = AssignPerson(personRequest);

                    }
                    else if (personRequest.RequestAction == @"Transfer")
                    {
                        wfmResult = TransferPerson(personRequest);

                    }
                    else if (personRequest.RequestAction == @"Terminate")
                    {
                        wfmResult = TerminatePersonById(personRequest);

                    }
                    else
                    {
                        wfmResult.ReturnType = ReturnTypes.ReturnTypeEnum.XmlError;
                        wfmResult.WFMReturnCode = -1000;
                        wfmResult.ReturnCode = wfmResult.WFMReturnCode;
                        wfmResult.WFMReturnMessage += String.Format(@"RequestAction - операция не определена {0}; ",
                            personRequest.RequestAction);
                    }
                    personRequest.ReturnType = wfmResult.ReturnType;
                    personRequest.WFMReturnCode = wfmResult.WFMReturnCode;
                    personRequest.WFMReturnMessage = wfmResult.WFMReturnMessage;
                    personRequest.ReturnCode = wfmResult.WFMReturnCode;
                    personRequest.ReturnMessage = wfmResult.WFMReturnMessage;
                    personRequest.NewPersonID = wfmResult.NewPersonID;
                    Utilities.WriteLog(String.Format(@"WFM Code {0} WFM Message {1}; ", wfmResult.WFMReturnCode,
                        wfmResult.WFMReturnMessage));
                }
                else
                {
                    personRequest.WFMReturnCode = -1;
                    personRequest.WFMReturnMessage = AuthenticationResultMessage;
                    Utilities.WriteLog(String.Format(@"WFM Code {0} WFM Message {1}; ", personRequest.WFMReturnCode,
                        personRequest.WFMReturnMessage));
                }
            }

            return personRequest;
        }
        private PersonRequest FindPersonByApplicationLogonNameSlow(PersonRequest personRequest)
        {
            try
            {
                var result = wfmServiceApplication.OrganizationService.GetPersons(false, false).FirstOrDefault(p => p.ApplicationLogOnName == personRequest.ApplicationLogOnName);

                if (result != null)
                {
                    personRequest.WFMReturnCode = 0;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ApplicationLogOnName [{0}] найден! ",
                        personRequest.ApplicationLogOnName);
                    personRequest.PersonID = result.Id;
                }
                else
                {
                    personRequest.WFMReturnCode = -2;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ApplicationLogOnName [{0}] НЕ найден! ",
                        personRequest.ApplicationLogOnName);
                }
            }
            catch (Exception ex)
            {
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
            }
            return personRequest;
        }
        private PersonRequest PersonCreateRequest(XmlDocument doc)
        {
            PersonRequest personRequest = new PersonRequest { RequestType = RequestTypes.RequestTypeEnum.Person, RequestAction = @"Create", XMLReturnCode = 0, XMLReturnMessage = @"OK" };
            try
            {
                Guid requestGuid = Guid.Empty;
                Guid.TryParse(ProcessNode(doc, "RequestID"), out requestGuid);
                personRequest.RequestID = requestGuid;
                personRequest.BusinessUnitID = ProcessNode(doc, "BusinessUnitID");
                personRequest.Identity = ProcessNode(doc, "Identity");
                personRequest.EmploymentNumber = ProcessNode(doc, "EmploymentNumber");
                personRequest.ApplicationLogOnName = ProcessNode(doc, "ApplicationLogOnName");
                personRequest.ApplicationLogOnPassword = ProcessNode(doc, "ApplicationLogOnPassword");
                personRequest.CultureLanguageId = ProcessNode(doc, "CultureLanguageId");
                personRequest.Email = ProcessNode(doc, "Email");
                personRequest.FirstDayOfWeek = ProcessNode(doc, "FirstDayOfWeek");
                personRequest.FirstName = ProcessNode(doc, "FirstName");
                personRequest.LastName = ProcessNode(doc, "LastName");
                personRequest.Name = ProcessNode(doc, "Name");
                personRequest.Note = ProcessNode(doc, "Note");
                personRequest.PersonID = ProcessNode(doc, "PersonID");
                personRequest.TimeZoneId = ProcessNode(doc, "TimeZoneId");
                personRequest.WindowsDomain = ProcessNode(doc, "WindowsDomain");
                personRequest.WindowsLogOnName = ProcessNode(doc, "WindowsLogOnName");

                DateTime dateTime = new DateTime();
                DateTime.TryParse(ProcessNode(doc, "StartDate"), out dateTime);
                personRequest.StartDate = dateTime;
                personRequest.SiteID = ProcessNode(doc, "SiteID");
                personRequest.TeamID = ProcessNode(doc, "TeamID");
            }
            catch (Exception ex)
            {
                Utilities.WriteLog(String.Format(ex.Message + " " + ex.StackTrace));
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.XmlError;
                personRequest.XMLReturnCode = -2;
                personRequest.XMLReturnMessage = ex.Message;
            }
            return personRequest;
        }
        private PersonRequest DeletePersonById(PersonRequest personRequest)
        {
            var myQueryDto = new GetPersonByIdQueryDto { PersonId = personRequest.PersonID };
            try
            {
                var result = wfmServiceApplication.OrganizationService.GetPersonsByQuery(myQueryDto).FirstOrDefault();
                if (result != null)
                {
                    if (result.IsDeleted)
                    {
                        personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.BusinessError;
                        personRequest.WFMReturnCode = 2;
                        personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ID [{0}] уже удален! ", personRequest.PersonID);
                        return personRequest;
                    }
                    result.IsDeleted = true;
                    result.IsDeletedSpecified = true;
                    wfmServiceApplication.OrganizationService.SavePerson(result);
                    personRequest.WFMReturnCode = 0;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ID [{0}] удален! ", personRequest.PersonID);

                }
                else
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -2;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ID [{0}] не найден! ", personRequest.PersonID);
                }
            }
            catch (Exception ex)
            {
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
            }
            return personRequest;
        }
        private PersonRequest FindPersonByApplicationLogonName(PersonRequest personRequest)
        {
            try
            {
                var result = entitiesModel.fsp_FindPersonByApplicationLogonName(personRequest.ApplicationLogOnName, 0).FirstOrDefault();

                if (result != null && result.PersonId.ToString() != personRequest.PersonID)
                {
                    personRequest.WFMReturnCode = 0;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с таким ApplicationLogOnName [{0}] найден! ",
                        personRequest.ApplicationLogOnName);
                }
                else
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -2;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ApplicationLogOnName [{0}] НЕ найден! ",
                        personRequest.ApplicationLogOnName);
                }
            }
            catch (Exception ex)
            {
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
            }
            return personRequest;
        }
        private PersonRequest CreatePerson(PersonRequest personRequest)
        {
            try
            {
                var result = FindPersonByIdentity(personRequest);
                if (result.WFMReturnCode == 0)
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -101;
                    personRequest.WFMReturnMessage += String.Format(@"Уже есть сотрудник с таким Identity [{0}]! ", personRequest.Identity);
                    return personRequest;
                }

                var result2 = FindPersonByEmploymentNumber(personRequest);
                if (result2.WFMReturnCode == 0)
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -102;
                    personRequest.WFMReturnMessage += String.Format(@"Уже есть сотрудник с таким EmploymentNumber [{0}]! ", personRequest.EmploymentNumber);
                    return personRequest;
                }

                var result3 = FindPersonByApplicationLogonName(personRequest);
                if (result3.WFMReturnCode == 0)
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -103;
                    personRequest.WFMReturnMessage += String.Format(@"Уже есть сотрудник с таким ApplicationLogonName [{0}]! ", personRequest.ApplicationLogOnName);
                    return personRequest;
                }

                PersonDto personDto = new PersonDto();

                personDto.ApplicationLogOnName = personRequest.ApplicationLogOnName;
                personDto.ApplicationLogOnPassword = personRequest.ApplicationLogOnPassword;

                int cultureLanguageId = 0;
                int.TryParse(personRequest.CultureLanguageId, out cultureLanguageId);
                personDto.CultureLanguageId = cultureLanguageId;
                personDto.CultureLanguageIdSpecified = true;

                personDto.Email = personRequest.Email;
                personDto.EmploymentNumber = personRequest.EmploymentNumber;

                int firstDayOfWeek = 0;
                int.TryParse(personRequest.FirstDayOfWeek, out firstDayOfWeek);
                personDto.FirstDayOfWeek = DayOfWeek.Monday;
                personDto.FirstDayOfWeekSpecified = true;

                personDto.FirstName = personRequest.FirstName;
                personDto.Identity = personRequest.Identity;

                personDto.IsDeleted = false;
                personDto.IsDeletedSpecified = true;

                personDto.LastName = personRequest.LastName;

                int uicultureLanguageId = 0;
                int.TryParse(personRequest.UICultureLanguageId, out uicultureLanguageId);
                personDto.UICultureLanguageId = uicultureLanguageId;

                personDto.Name = personRequest.Name;
                personDto.Note = personRequest.Note;
                personDto.TerminationDate = null;
                personDto.TimeZoneId = personRequest.TimeZoneId;

                personDto.WindowsDomain = personRequest.WindowsDomain;
                personDto.WindowsLogOnName = personRequest.WindowsLogOnName;

                wfmServiceApplication.OrganizationService.AddPerson(personDto);
                var findNewPerson = FindPersonByEmploymentNumber(personRequest);
                if (findNewPerson.WFMReturnCode == 0)
                {
                    personRequest.WFMReturnCode = 0;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник ID [{0}] добавлен в Бизнес-Юнит [{1}]; ", findNewPerson.PersonID, BusinessUnit);
                    var assignRes = AssignPerson(personRequest);
                    personRequest.NewPersonID = findNewPerson.PersonID;
                    personRequest.WFMReturnCode = assignRes.WFMReturnCode;
                    personRequest.WFMReturnMessage = assignRes.WFMReturnMessage;
                    personRequest.ReturnType = assignRes.ReturnType;
                }
            }
            catch (Exception ex)
            {
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
            }
            return personRequest;
        }
        private PersonRequest CheckSiteTeam(PersonRequest personRequest)
        {
            PersonRequest resultRequest = new PersonRequest();
            resultRequest = resultRequest.Clone(personRequest);

            var SiteID = personRequest.SiteID;
            if (string.IsNullOrEmpty(SiteID))
            {
                resultRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                resultRequest.WFMReturnCode = -1;
                resultRequest.WFMReturnMessage += String.Format(@"Не задан ID сайта: [{0}]! ", SiteID);
                resultRequest.ReturnCode = resultRequest.WFMReturnCode;
                resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
                return resultRequest;
            }

            var mySite = GetSiteById(SiteID);
            if (mySite == null)
            {
                resultRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                resultRequest.WFMReturnCode = -1;
                resultRequest.WFMReturnMessage += String.Format(@"Нет сайта с таким ID: [{0}] в BU [{1}]! ", SiteID, BusinessUnit);
                resultRequest.ReturnCode = resultRequest.WFMReturnCode;
                resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
                return resultRequest;
            }

            var TeamID = personRequest.TeamID;
            if (string.IsNullOrEmpty(TeamID))
            {
                resultRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                resultRequest.WFMReturnCode = -1;
                resultRequest.WFMReturnMessage += String.Format(@"Нет задан ID группы (TeamID)! ");
                resultRequest.ReturnCode = resultRequest.WFMReturnCode;
                resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
                return resultRequest;
            }

            var myTeam = GetTeamById(TeamID);
            if (myTeam == null)
            {
                resultRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                resultRequest.WFMReturnCode = -1;
                resultRequest.WFMReturnMessage += String.Format(@"Нет группы с таким ID: [{0}]! ", TeamID);
                resultRequest.ReturnCode = resultRequest.WFMReturnCode;
                resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
                return resultRequest;
            }

            if (!CheckTeamBySite(SiteID, TeamID))
            {
                resultRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                resultRequest.WFMReturnCode = -1;
                resultRequest.WFMReturnMessage += String.Format(@"Нет группы с таким ID: [{0}] в сайте [{1}] Бизнес-юнита [{2}]! ", TeamID, mySite.DescriptionName, BusinessUnit);
                resultRequest.ReturnCode = resultRequest.WFMReturnCode;
                resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
                return resultRequest;
            }

            resultRequest.WFMReturnCode = 0;
            resultRequest.WFMReturnMessage += @"OK; ";
            resultRequest.ReturnCode = resultRequest.WFMReturnCode;
            resultRequest.ReturnMessage = resultRequest.WFMReturnMessage;
            return resultRequest;
        }
        private PersonRequest AssignPerson(PersonRequest personRequest)
        {
            PersonPeriodLoadOptionDto loadOptionDto = new PersonPeriodLoadOptionDto();

            DateOnlyDto dateOnlyDto1 = new DateOnlyDto();
            dateOnlyDto1.DateTime = DateTime.Parse("1900.01.01");
            dateOnlyDto1.DateTimeSpecified = true;

            DateOnlyDto dateOnlyDto2 = new DateOnlyDto();
            dateOnlyDto2.DateTime = DateTime.Now;
            dateOnlyDto2.DateTimeSpecified = true;

            loadOptionDto.LoadAll = true;
            loadOptionDto.LoadAllSpecified = true;

            var myQueryDto = new GetPersonByIdQueryDto { PersonId = personRequest.PersonID };
            try
            {
                var result = wfmServiceApplication.OrganizationService.GetPersonsByQuery(myQueryDto).FirstOrDefault();
                if (result != null)
                {

                    PersonPeriodDto personPeriod = new PersonPeriodDto();
                    personPeriod.Period = new DateOnlyPeriodDto();
                    personPeriod.Period.StartDate = new DateOnlyDto();
                    personPeriod.Period.StartDate.DateTime = personRequest.StartDate;
                    personPeriod.Period.StartDate.DateTimeSpecified = true;

                    var teamRequest = CheckSiteTeam(personRequest);
                    if (teamRequest.ReturnCode != 0)
                    {
                        return teamRequest;
                    }

                    var myTeam = GetTeamById(personRequest.TeamID);
                    personPeriod.Team = myTeam;

                    personPeriod.PersonContract = new PersonContractDto();

                    LoadOptionDto contractDto = new LoadOptionDto();
                    contractDto.LoadDeleted = false;
                    contractDto.LoadDeletedSpecified = true;
                    var contract = wfmServiceApplication.OrganizationService.GetContracts(contractDto).FirstOrDefault();
                    if (contract != null)
                    {
                        personPeriod.PersonContract.ContractId = contract.Id;
                    }

                    LoadOptionDto partTimeDto = new LoadOptionDto();
                    partTimeDto.LoadDeleted = false;
                    partTimeDto.LoadDeletedSpecified = true;
                    var partTimesPercentage = wfmServiceApplication.OrganizationService.GetPartTimePercentages(contractDto).FirstOrDefault();
                    if (contract != null)
                    {
                        personPeriod.PersonContract.PartTimePercentageId = partTimesPercentage.Id;
                    }

                    LoadOptionDto contractScheduleDto = new LoadOptionDto();
                    contractScheduleDto.LoadDeleted = false;
                    contractScheduleDto.LoadDeletedSpecified = true;
                    var contractSchedule = wfmServiceApplication.OrganizationService.GetContractSchedules(contractScheduleDto).FirstOrDefault();
                    if (contractSchedule != null)
                    {
                        personPeriod.PersonContract.ContractScheduleId = contractSchedule.Id;
                    }

                    personPeriod.SchedulePreferenceDate = personRequest.StartDate;
                    personPeriod.SchedulePublishedToDate = personRequest.StartDate;
                    wfmServiceApplication.OrganizationService.AddPersonPeriod(result, personPeriod);
                    personRequest.WFMReturnCode = 0;
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.NoError;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник ID [{0}] назначен в Бизнес-Юнит [{1}] в [{2}]; ",
                        myQueryDto.PersonId,
                        BusinessUnit,
                        myTeam.SiteAndTeam);
                }
                else
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -2;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник Id [{0}] НЕ найден! ", myQueryDto.PersonId);
                }
            }
            catch (Exception ex)
            {
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
                personRequest.ReturnCode = -1;
                personRequest.ReturnMessage = personRequest.WFMReturnMessage;
            }
            return personRequest;
        }
        public BaseRequest OutputXMLParse2BaseResponse(string XMLString)
        {
            PersonRequest personRequest = new PersonRequest { };
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(XMLString);
                //Utilities.WriteLog(String.Format(Utilities.Cut(doc.ToString(), 100)));
                string docName = doc.DocumentElement.Name;

                Guid requestGuid = Guid.Empty;
                Guid.TryParse(ProcessNode(doc, "RequestID"), out requestGuid);
                personRequest.RequestID = requestGuid;

                Guid MessageLogId = Guid.Empty;
                Guid.TryParse(ProcessNode(doc, "MessageLogId"), out MessageLogId);
                personRequest.MessageLogId = MessageLogId;

                int returnCode = 0;
                int.TryParse(ProcessNode(doc, "ReturnCode"), out returnCode);
                personRequest.ReturnCode = returnCode;
                personRequest.ReturnMessage = ProcessNode(doc, "ReturnMessage");
            }
            catch (Exception ex)
            {
                Utilities.WriteLog(String.Format(ex.Message + " " + ex.StackTrace));
                personRequest.XMLReturnCode = -2;
                personRequest.XMLReturnMessage = ex.Message;
            }
            return personRequest;
        }
 private PersonRequest FindPersonByEmploymentNumber(PersonRequest personRequest)
 {
     var myQueryDto = new GetPersonByEmploymentNumberQueryDto();
     myQueryDto.EmploymentNumber = personRequest.EmploymentNumber;
     try
     {
         var result = wfmServiceApplication.OrganizationService.GetPersonsByQuery(myQueryDto).FirstOrDefault();
         if (result != null && personRequest.PersonID != result.Id)
         {
             personRequest.WFMReturnCode = 0;
             personRequest.WFMReturnMessage += String.Format(@"Сотрудник с EmploymentNumber [{0}] найден; ",
                 myQueryDto.EmploymentNumber);
             ;
             personRequest.PersonID = result.Id;
         }
         else
         {
             personRequest.WFMReturnCode = -2;
             personRequest.WFMReturnMessage += String.Format(@"Сотрудник с EmploymentNumber [{0}] не найден! ",
                 myQueryDto.EmploymentNumber);
         }
     }
     catch (Exception ex)
     {
         personRequest.WFMReturnCode = -1;
         personRequest.WFMReturnMessage += ex.Message;
     }
     return personRequest;
 }
 public PersonRequest ProcessInputXMLPerson(string messageText)
 {
     PersonRequest personRequest = new PersonRequest();
     try
     {
         XmlDocument doc = new XmlDocument();
         doc.LoadXml(messageText);
         //Utilities.WriteLog(String.Format(Utilities.Cut(doc.ToString(),100)));
         string docElementName = doc.DocumentElement.Name;
         var parsedDocElementName = docElementName.Split('.');
         var requestType = parsedDocElementName[0];
         var requestAction = parsedDocElementName[1];
         var requestMark = parsedDocElementName[2];
         if (requestType == @"Person")
         {
             personRequest.RequestType = RequestTypes.RequestTypeEnum.Person;
             if (requestAction == @"Create")
             {
                 personRequest = PersonCreateRequest(doc);
             }
             else if (requestAction == @"Terminate")
             {
                 personRequest = PersonTerminateRequest(doc);
             }
             else if (requestAction == @"Assign")
             {
                 personRequest = PersonAssignRequest(doc);
             }
             else if (requestAction == @"Transfer")
             {
                 personRequest = PersonTransferRequest(doc);
             }
             else
             {
                 personRequest.RequestAction = @"None";
             }
         }
         else
         {
             personRequest.RequestType = RequestTypes.RequestTypeEnum.None;
         }
     }
     catch (Exception ex)
     {
         Utilities.WriteLog(String.Format(ex.Message + " " + ex.StackTrace));
         personRequest.XMLReturnCode = -1;
         personRequest.XMLReturnMessage = ex.Message;
     }
     return personRequest;
 }
 private PersonRequest FindPersonByIdentity(PersonRequest personRequest)
 {
     var myQueryDto = new GetPersonByIdentityQueryDto();
     myQueryDto.Identity = personRequest.Identity;
     try
     {
         var result = wfmServiceApplication.OrganizationService.GetPersonsByQuery(myQueryDto).FirstOrDefault();
         if (result != null && result.Id != personRequest.PersonID)
         {
             personRequest.WFMReturnCode = 0;
             personRequest.WFMReturnMessage += String.Format(@"Сотрудник с Identity [{0}] найден; ", myQueryDto.Identity); ;
             personRequest.PersonID = result.Id;
         }
         else
         {
             personRequest.WFMReturnCode = -2;
             personRequest.WFMReturnMessage += String.Format(@"Сотрудник с Identity [{0}] НЕ найден! ", myQueryDto.Identity);
         }
     }
     catch (Exception ex)
     {
         personRequest.WFMReturnCode = -1;
         personRequest.WFMReturnMessage += ex.Message;
     }
     return personRequest;
 }
 private PersonRequest PersonDeleteRequest(XmlDocument doc)
 {
     PersonRequest personRequest = new PersonRequest { RequestType = RequestTypes.RequestTypeEnum.Person, RequestAction = @"Delete", XMLReturnCode = 0, XMLReturnMessage = @"OK" };
     try
     {
         Guid requestGuid = Guid.Empty;
         Guid.TryParse(ProcessNode(doc, "RequestID"), out requestGuid);
         personRequest.RequestID = requestGuid;
         personRequest.BusinessUnitID = ProcessNode(doc, "BusinessUnitID");
         personRequest.PersonID = ProcessNode(doc, "PersonID");
     }
     catch (Exception ex)
     {
         Utilities.WriteLog(String.Format(ex.Message + " " + ex.StackTrace));
         personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.XmlError;
         personRequest.XMLReturnCode = -2;
         personRequest.XMLReturnMessage = ex.Message;
     }
     return personRequest;
 }
        private PersonRequest TerminatePersonById(PersonRequest personRequest)
        {
            var myQueryDto = new GetPersonByIdQueryDto { PersonId = personRequest.PersonID };
            try
            {
                var personToTerminate = wfmServiceApplication.OrganizationService.GetPersonsByQuery(myQueryDto).FirstOrDefault();
                var terminationDate = personRequest.TerminationDate;
                personRequest = personRequest.Clone(personToTerminate);
                personRequest.TerminationDate = terminationDate;
                if (personToTerminate != null)
                {
                    DateOnlyDto dateOnly = new DateOnlyDto();
                    dateOnly.DateTime = personRequest.TerminationDate;
                    dateOnly.DateTimeSpecified = true;
                    personToTerminate.TerminationDate = dateOnly;

                    personToTerminate.ApplicationLogOnName = personToTerminate.Id;
                    personToTerminate.WindowsDomain = @"-";
                    personToTerminate.WindowsLogOnName = @"-";
                    personToTerminate.EmploymentNumber = personToTerminate.Id;
                    personToTerminate.Identity = personToTerminate.Id;

                    wfmServiceApplication.OrganizationService.UpdatePerson(personToTerminate);
                    personRequest.WFMReturnCode = 0;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ID [{0}] уволен: OK; ", personRequest.PersonID);
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.NoError;
                }
                else
                {
                    personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.DataError;
                    personRequest.WFMReturnCode = -2;
                    personRequest.WFMReturnMessage += String.Format(@"Сотрудник с ID [{0}] НЕ найден! ", myQueryDto.PersonId);
                }
            }
            catch (Exception ex)
            {
                personRequest.ReturnType = ReturnTypes.ReturnTypeEnum.UnknownError;
                personRequest.WFMReturnCode = -1;
                personRequest.WFMReturnMessage += ex.Message;
            }
            return personRequest;
        }
        public string OutputXMLMessageGenerate(Guid MessageLogId, PersonRequest personRequest)
        {
            //<? xml version = "1.0" ?>
            //< PersonCreate.response xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" >
            //< RequestID > 13B77B73 - A80D - 4E65 - BCC1 - B045867CE038 </ RequestID >
            //< PersonID > FFD9C2F7 - 70C4 - 4EBF - 90F4 - A30600FFF235 </ PersonID >
            //< ReturnCode > 0 </ ReturnCode >
            //< ReturnMessage > OK </ ReturnMessage >
            //</ PersonCreate.response >
            string newPersonID = @"";
            newPersonID = personRequest.NewPersonID;

            XElement result = null;

            if (!string.IsNullOrEmpty(newPersonID))
            {
                result = new XElement(personRequest.RequestType.ToString() + @"." + personRequest.RequestAction + @".response",
                new XElement("MessageLogId", MessageLogId),
                new XElement("RequestID", personRequest.RequestID.ToString()),
                new XElement("BusinessUnitID", personRequest.BusinessUnitID),
                new XElement("NewPersonID", newPersonID),
                new XElement("ReturnType", personRequest.ReturnType.ToString()),
                new XElement("ReturnCode", personRequest.ReturnCode),
                new XElement("ReturnMessage", personRequest.ReturnMessage)
                );
            }
            else
            {
                result = new XElement(personRequest.RequestType.ToString() + @"." + personRequest.RequestAction + @".response",
                new XElement("MessageLogId", MessageLogId),
                new XElement("RequestID", personRequest.RequestID.ToString()),
                new XElement("BusinessUnitID", personRequest.BusinessUnitID),
                new XElement("ReturnType", personRequest.ReturnType.ToString()),
                new XElement("ReturnCode", personRequest.ReturnCode),
                new XElement("ReturnMessage", personRequest.ReturnMessage)
                );
            }

            return result.ToString();
        }
 public void MessageSend(Guid MessageLogId, PersonRequest personRequest)
 {
     try
     {
         var xmlMessage = xmlHelper.OutputXMLMessageGenerate(MessageLogId, personRequest);
         entitiesModel.fsp_MessageLog_OutputMessageUpdate(MessageLogId, xmlMessage, 0);
         Message msg = new TextMessage(emsSession, xmlMessage);
         msgProducer.Send(destination, msg, completionListener);
     }
     catch (Exception ex)
     {
         Utilities.WriteExceptionMessageToLog(ex);
     }
 }