public int PostponeQueueItem(Guid queueItemId)
        {
            var    userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;
            int    updateCount    = 0;
            string message        = string.Empty;

            try {
                if (userConnection == null)
                {
                    throw new ArgumentNullException("UserConnection");
                }
                var update =
                    new Update(userConnection, "QueueItem")
                    .Set("PostponesCount", new QueryColumnExpression(ArithmeticOperation.Addition,
                                                                     new QueryColumnExpression("PostponesCount"), new QueryColumnExpression(Column.Const(1))))
                    .Set("OperatorId", Column.Parameter(null, "Guid"))
                    .Set("NextProcessingDate", Column.Const(null))
                    .Where("Id").IsEqual(new QueryParameter("QueueItemId", queueItemId));
                updateCount = update.Execute();
                message     = string.Format(GetResourceValue(userConnection, "QueueItemPostponeUpdatedMessage"),
                                            queueItemId);
                QueuesUtilities.LogDebug(message);
            } catch (Exception e) {
                message = string.Format(GetResourceValue(userConnection, "InvokeMethodErrorMessage"),
                                        "PostponeQueueItem", e.Message);
                QueuesUtilities.LogError(message, e);
                throw;
            }
            return(updateCount);
        }
        public void ChangeQueueItemDate(string processUId, long nextProcessingDateMilliseconds)
        {
            DateTime nextProcessingDate = new DateTime(1970, 01, 01).AddMilliseconds(nextProcessingDateMilliseconds);

            nextProcessingDate = DateTime.SpecifyKind(nextProcessingDate, DateTimeKind.Utc);
            var    userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;
            string message        = string.Empty;

            try {
                if (userConnection == null)
                {
                    throw new ArgumentNullException("UserConnection");
                }
                Guid queueItemId = GetProcessQueueItemId(userConnection, processUId);
                var  update      =
                    new Update(userConnection, "QueueItem")
                    .Set("NextProcessingDate", new QueryParameter("NextProcessingDate", nextProcessingDate))
                    .Where("Id").IsEqual(new QueryParameter("QueueItemId", queueItemId));
                update.Execute();
                message = string.Format(GetResourceValue(userConnection, "QueueItemDateUpdatedMessage"), queueItemId,
                                        nextProcessingDate.ToString());
                QueuesUtilities.LogDebug(message);
            } catch (Exception e) {
                message = string.Format(GetResourceValue(userConnection, "InvokeMethodErrorMessage"),
                                        "ChangeQueueItemDate", e.Message);
                QueuesUtilities.LogError(message, e);
                throw;
            }
        }
        public void UpdateQueuesTrigger()
        {
            var appConnection = HttpContext.Current.Application["AppConnection"] as AppConnection;

            if (appConnection == null)
            {
                throw new ArgumentNullException("AppConnection");
            }
            QueuesUtilities.UpdateQueuesTrigger(appConnection.SystemUserConnection);
        }
        public void SubscribeForQueuesNotifications()
        {
            var userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;

            if (userConnection == null)
            {
                throw new ArgumentNullException("UserConnection");
            }
            var userId = userConnection.CurrentUser.Id;

            if (!QueuesUtilities.QueuesNotificationsSubscribers.Contains(userId))
            {
                string message = string.Format(
                    GetResourceValue(userConnection, "AddingUserToQueuesNotificationsSubscribersMessage"), userId);
                QueuesUtilities.LogDebug(message);
                QueuesUtilities.QueuesNotificationsSubscribers.Add(userId);
            }
        }
 /// <summary>
 /// ######### ######## ####### ## ###### #######.
 /// </summary>
 /// <param name="userConnection">################ ###########.</param>
 /// <param name="folderEntity">###### #######.</param>
 /// <param name="entitySchemaName">######## ##### ####### #######.</param>
 /// <param name="queueId">############# #######.</param>
 /// <returns></returns>
 private int AddFolderEntityQueueItems(UserConnection userConnection, Entity folderEntity,
                                       string entitySchemaName, Guid queueId)
 {
     try {
         EntitySchemaManager entitySchemaManager = userConnection.EntitySchemaManager;
         var esq = new EntitySchemaQuery(entitySchemaManager, entitySchemaName);
         esq.PrimaryQueryColumn.IsVisible = true;
         Guid folderTypeId = folderEntity.GetTypedColumnValue <Guid>("FolderTypeId");
         Guid folderId     = folderEntity.PrimaryColumnValue;
         if (folderTypeId == SearchFolderTypeId)
         {
             byte[] searchData       = folderEntity.GetBytesValue("SearchData");
             string serializedFilter = Encoding.UTF8.GetString(searchData, 0, searchData.Length);
             if (serializedFilter.IsNullOrEmpty())
             {
                 return(0);
             }
             // TODO #CC-678 ########### # ######### ############## ######## ServiceStackTextHelper.
             Filters filters = Json.Deserialize <Filters>(serializedFilter);
             IEntitySchemaQueryFilterItem esqFilters = filters.BuildEsqFilter(entitySchemaName, userConnection);
             var queryFilterCollection = esqFilters as EntitySchemaQueryFilterCollection;
             if (queryFilterCollection.Count == 0)
             {
                 return(0);
             }
             if (queryFilterCollection != null)
             {
                 esq.Filters.LogicalOperation = queryFilterCollection.LogicalOperation;
                 esq.Filters.IsNot            = queryFilterCollection.IsNot;
                 foreach (IEntitySchemaQueryFilterItem filter in queryFilterCollection)
                 {
                     esq.Filters.Add(filter);
                 }
             }
             else
             {
                 esq.Filters.Add(esqFilters);
             }
         }
         else if (folderTypeId == GeneralFolderTypeId)
         {
             esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                            string.Format("[{0}InFolder:{0}:Id].Folder", entitySchemaName), folderId));
         }
         Select select = esq.GetSelectQuery(userConnection);
         select = select
                  .Column(new QueryParameter("QueueId", queueId))
                  .Column(new QueryParameter("StatusId", NewQueueItemStatusId))
                  .And().Not().Exists(new Select(userConnection)
                                      .Column("Id")
                                      .From("QueueItem")
                                      .Where(entitySchemaName, "Id").IsEqual("QueueItem", "EntityRecordId")
                                      .And("QueueItem", "QueueId").IsEqual(Column.Parameter(queueId))) as Select;
         var insertSelect = new InsertSelect(userConnection)
                            .Into("QueueItem")
                            .Set("EntityRecordId", "QueueId", "StatusId")
                            .FromSelect(select);
         return(insertSelect.Execute());
     } catch (Exception e) {
         QueuesUtilities.LogError(string.Format(GetResourceValue(userConnection, "InvokeMethodErrorMessage"),
                                                "AddFolderEntityQueueItems", e.Message), e);
         throw;
     }
 }