private int GetManager(CallBackDTO model)
        {
            int manager = (int)ResponsibleUserEnum.Анастасия_Столовая;

            if (model.ProgramType == null || model.Url == null)
            {
                return(manager);
            }

            var uri = new Uri(model.Url);

            if (uri.Segments.Any(i => i.ToUpper() == "kursy-fitnesa/".ToUpper()))
            {
                if (uri.Segments.Any(i => i.ToUpper() == "seminary/".ToUpper()))
                {
                    manager = model.ProgramType.ToUpper() == "КОРПОРАТИВНАЯ".ToUpper() ? (int)ResponsibleUserEnum.Лина_Серрие : (int)ResponsibleUserEnum.Ирина_Моисеева;
                }
                else
                {
                    manager = model.ProgramType.ToUpper() == "ДИСТАНЦИОННАЯ".ToUpper() ? (int)ResponsibleUserEnum.Татьяна_Власова : (int)ResponsibleUserEnum.Анастасия_Столовая;
                }
            }

            if (uri.Segments.Any(i => i.ToUpper() == "shkola-fitnesa/".ToUpper()))
            {
                manager = (int)ResponsibleUserEnum.Анна_Скорюпина;
            }

            return(manager);
        }
        public async Task <bool> CreateRecallTask(CallBackDTO model)
        {
            Contact contact;

            try
            {
                // Check available contact
                var action = new FindContactActions(crm, logger);
                var result = await action.LookForContact(phone : model.UserPhone);

                contact = result?.Adapt <Contact>(mapper);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Ошибка при поиске контакта в Crm");
                return(false);
            }

            // Create contact
            if (contact == null)
            {
                var buildContact = new Common.BusinessLogicHelpers.Crm.Builders.ContactBuilder();
                buildContact.Name(model.UserName);
                buildContact.Phone(model.UserPhone);
                contact = (Contact)buildContact;

                contact.ResponsibleUserId = GetManager(model);

                var contactDTO = contact.Adapt <ContactDTO>(mapper);

                try
                {
                    System.Threading.Tasks.Task taskPrepareContactLog = System.Threading.Tasks.Task.Factory.StartNew(
                        () => logger.LogInformation("Подготовлен контакт для добавления - {@Contact}", contact)
                        );

                    var query = crm.Contacts.Add(contactDTO).Result;
                    contact = query.Adapt <Contact>(mapper);

                    System.Threading.Tasks.Task taskreateContactLog = System.Threading.Tasks.Task.Factory.StartNew(
                        () => logger.LogInformation("Создан контакт {Name} | {Id}", contactDTO.Name, contact.Id)
                        );
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Ошибка создания контакта с сайта");
                    return(false);
                }
            }

            if (contact != null)
            {
                var manager = GetManager(model);

                var modelTask = new TaskDTO()
                {
                    ElementId   = contact.Id,
                    ElementType = (int)ElementTypeEnum.Контакт,
                    Text        = "Клиент заказал обратный звонок!" + "\r\n"
                                  + "Со страницы мероприятия- " + model.ProgramTitle + "\r\n" +
                                  "URL.: " + model.Url,
                    ResponsibleUserId = manager,
                    CompleteTillAt    = DateTime.Now
                };

                logger.LogInformation("Подготовлена задача - {Task}", modelTask);

                try
                {
                    var tsk = crm.Tasks.Add(new[] { modelTask }).Result;
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Ошибка создания задачи для контакта - " + contact.Id);
                    return(false);
                }
            }

            return(true);
        }