/// <summary>
        ///     запрет на изменение в ситуациях-
        ///     блокировки проекта, ожидание модерации(выше 1 уровня), проект принят
        ///     добавление истории проекта - если модератор вернул на доработку
        /// </summary>
        /// <param name="projectId"></param>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <param name="priceAnnotation"></param>
        /// <param name="price"></param>
        /// <param name="isOpen"></param>
        public CompositeData EditAndAddHistory(Guid projectId,
            string title, string content,
            string priceAnnotation, int price, bool isOpen)
        {
            var result = new CompositeData(_msgSuccess, true);

            var serviceData = _endowmentRepositories.ServiceData.FindActual(projectId);
            if (serviceData == null) //проект ещё не попадал в очередь, все изменения проходят без садизма
            {
                Edit(projectId, title, content, priceAnnotation, price, isOpen);
                return result;
            }

            var status = _endowmentRepositories.Statuses.Find(serviceData.StatusId);

            result = CanNotBeEdit(status, serviceData);

            if (!result.Success)
                return result;

            var queue = _endowmentRepositories.ProjectQueue.Find(projectId);

            if (queue == null)
            {
                if (status.Title.Equals(StatusesManager.Return)) //если модератор вернул на доработку
                {
                    AddToHistory(projectId);

                    if (_endowmentRepositories.Moderators.Find(serviceData.ModeratorId) != null)
                        //если модератор не уволен
                        _endowmentHandlers.QueueProject
                            .Create(projectId, serviceData.ModeratorId); //возвращаем в очередь модератора
                    else
                    {
                        //todo выбрать случайного модератора?
                        var newModer =
                            _endowmentRepositories.Moderators.GetAll().FirstOrDefault(m => m.LevelId.Equals(m.LevelId));
                        if (newModer != null)
                            _endowmentHandlers.QueueProject.Create(projectId, newModer.UserId);
                        else
                            _endowmentHandlers.QueueProject.Create(projectId);
                    }

                    var statusId = _endowmentRepositories.Statuses.Find(_statusWaiting).Id;
                    _endowmentHandlers.ServiceData.Create(
                        serviceData.ModeratorId, projectId, statusId, _defaultComment);

                    _endowmentHandlers.ServiceData.ResetActual(serviceData.Id);
                    _endowmentHandlers.Project.Edit(projectId, title, content);
                }
            }
            else if (queue.ModeratorId.HasValue)
            {
                OnFirstLevelWaiting(projectId, serviceData.Id, title, content, status.Title);
            }
            _endowmentHandlers.SaveChanges();
            return result;
        }
        private CompositeData<Guid> TryCreate(string username, string password)
        {
            //todo подумать над уникальностью email
            var loginIsExist = _endowmentRepositories.Users.IsExist(username);
            var answerWithUserId = new CompositeData<Guid>(String.Format("Логин: {0} уже существует", username));
            var userId = Guid.Empty;
            if (!loginIsExist)
                userId = _endowmentHandlers.User.Create(username, password);

            if (!userId.Equals(Guid.Empty))
                answerWithUserId = new CompositeData<Guid>(String.Format(
                    "Пользоватеь: {0} спешно зарегестрирован", username), true, userId);
            return answerWithUserId;
        }