Пример #1
0
        public override int GetFilteredUsersCount(PersonsFilter filter)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand getCommand = connection.CreateCommand();
                connection.Open();

                SqlTransaction transaction = connection.BeginTransaction();
                try
                {
                    StringBuilder query = new StringBuilder();
                    query.Append(" SELECT COUNT(*) ");
                    query.AppendFormat(" FROM {0} A", DBUsersTableName);
                    query.Append(constructWhereClause(filter));

                    getCommand.Transaction = transaction;
                    getCommand.CommandText = query.ToString();

                    return (int)getCommand.ExecuteScalar();
                }
                finally
                {
                    transaction.Rollback();
                }
            }
        }
Пример #2
0
        public override IList<Person> GetFilteredUsers(string SortExpression, int maximumRows, int startRowIndex, PersonsFilter filter)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SortExpression = EnsureValidSortExpression(SortExpression);
                SqlCommand getCommand = connection.CreateCommand();
                connection.Open();

                SqlTransaction transaction = connection.BeginTransaction();
                try
                {
                    string strSubCommand = string.Format(
                        "SELECT * FROM {0} A {1} ",
                        DBUsersTableName,
                        constructWhereClause(filter));

                    strSubCommand = string.Format("SELECT ROW_NUMBER() OVER (ORDER BY {1}) AS RowNum,* FROM ({0}) AS TMP",
                                                  strSubCommand, SortExpression);

                    int lowerBound = startRowIndex + 1;
                    int upperBound = startRowIndex +  maximumRows;

                    getCommand.Transaction = transaction;
                    getCommand.CommandText =
                        string.Format(
                            "SELECT * FROM ({0}) as temp WHERE temp.RowNum BETWEEN {1} AND {2} ORDER BY RowNum ASC",
                            strSubCommand, lowerBound, upperBound);

                    using (IDataReader reader = getCommand.ExecuteReader())
                    {
                        return GetAllUserDetailsFromReader(reader);
                    }
                }
                finally
                {
                    transaction.Rollback();
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Get count of filtered persons.
 /// </summary>
 /// <param name="filter">Persons filter.</param>
 /// <returns>Count of filtered persons.</returns>
 public abstract int GetFilteredUsersCount(PersonsFilter filter);
Пример #4
0
 /// <summary>
 /// Returns page of sorted users
 /// </summary>
 public abstract IList<Person> GetFilteredUsers(string SortExpression, int maximumRows, int startRowIndex, PersonsFilter filter);
Пример #5
0
        /// <summary>
        /// Get persons uptime events which will ignore.
        /// </summary>
        /// <param name="filter">Persons filter class.</param>
        /// <returns>String of ignored person uptime events clause.</returns>
        private string getUptimeEvents_NOT_IN_Filter(PersonsFilter filter)
        {
            if (filter.Events == null
                || filter.Events.Count == 0
                || !filter.Events.Contains(9))
                return string.Empty;

            StringBuilder uptimeEvents_NOT_IN_Clause = new StringBuilder();

            uptimeEvents_NOT_IN_Clause.Append(" SELECT C.UserID ");
            uptimeEvents_NOT_IN_Clause.AppendFormat(" FROM {0} C ", DBEventsTable);
            uptimeEvents_NOT_IN_Clause.Append(" WHERE ");
            //uptimeEvents_NOT_IN_Clause.Append(" C.BeginTime = C.EndTime ");
            //uptimeEvents_NOT_IN_Clause.Append(" AND ");
            uptimeEvents_NOT_IN_Clause.Append(
                " CONVERT(varchar(10),C.BeginTime,104) = CONVERT(varchar(10),GETDATE(),104) ");

            return uptimeEvents_NOT_IN_Clause.ToString();
        }
Пример #6
0
        /// <summary>
        /// Get persons uptime events filter.
        /// </summary>
        /// <param name="filter">Persons filter class.</param>
        /// <returns>String of person uptime events clause.</returns>
        private string getUptimeEventsFilter(PersonsFilter filter)
        {
            if (filter.Events == null || filter.Events.Count == 0)
                return string.Empty;

            StringBuilder uptimeEventsClause = new StringBuilder();
            string openEventsIDs = string.Empty;
            string closeEventsIDs = string.Empty;

            foreach (int uptimeEventID in filter.Events)
            {
                if (!string.IsNullOrEmpty(openEventsIDs))
                    openEventsIDs += ", ";

                if (!string.IsNullOrEmpty(closeEventsIDs))
                    closeEventsIDs += ", ";

                if (m_closeUptimeEvents.Contains(uptimeEventID))
                    closeEventsIDs += uptimeEventID.ToString();
                else
                    openEventsIDs += uptimeEventID.ToString();
            }

            uptimeEventsClause.Append(" SELECT C.UserID ");
            uptimeEventsClause.AppendFormat(" FROM {0} C ", DBEventsTable);
            uptimeEventsClause.AppendFormat(" WHERE ");

            if (!string.IsNullOrEmpty(openEventsIDs))
            {
                uptimeEventsClause.AppendFormat(" ( ");
                uptimeEventsClause.AppendFormat(" C.UptimeEventTypeID IN ({0}) ", openEventsIDs);
                uptimeEventsClause.Append(" AND C.BeginTime = C.EndTime ");
                uptimeEventsClause.AppendFormat(" ) ");
            }

            if (!string.IsNullOrEmpty(closeEventsIDs))
            {
                if (!string.IsNullOrEmpty(openEventsIDs))
                    uptimeEventsClause.AppendFormat(" OR ");

                uptimeEventsClause.AppendFormat(" ( ");
                uptimeEventsClause.AppendFormat(" C.UptimeEventTypeID IN ({0}) ", closeEventsIDs);
                uptimeEventsClause.AppendFormat(" ) ");
            }

            uptimeEventsClause.Append(" AND ");
            uptimeEventsClause.Append(" CONVERT(varchar(10),C.BeginTime,104) = CONVERT(varchar(10),GETDATE(),104) ");

            return uptimeEventsClause.ToString();
        }
Пример #7
0
 /// <summary>
 /// Get persons group filter.
 /// </summary>
 /// <param name="filter">Persons filter class.</param>
 /// <returns>String of person group clause.</returns>
 private string getGroupFilter(PersonsFilter filter)
 {
     StringBuilder groupClause = new StringBuilder();
     if (filter.RoleID != -1)
     {
         groupClause.Append(" SELECT B.PersonID ");
         groupClause.AppendFormat(" FROM {0} B ", DBPersonGroupTable);
         groupClause.AppendFormat(" WHERE B.GroupID = '{0}' ", filter.RoleID);
     }
     return groupClause.ToString();
 }
Пример #8
0
        private string getBasePersonClause(PersonsFilter filter)
        {
            StringBuilder whereClause = new StringBuilder();

            if (filter.OfficeID > 0)
            {
                bool EmployeesUlterSYSMoscow = (filter.OfficeID == 2)
                                                   ? true
                                                   : false;
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" EmployeesUlterSYSMoscow = '{0}' ",
                                         EmployeesUlterSYSMoscow);
            }

            /*if (filter.ProjectID != -1)
            {
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" C.ProjectID = '{0}' ",
                                         filter.ProjectID);
            }*/

            if (!string.IsNullOrEmpty(filter.FirstName))
            {
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" A.FirstName LIKE '%\">' + '{0}' + '%' ",
                                         filter.FirstName);
            }

            if (!string.IsNullOrEmpty(filter.LastName))
            {
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" A.LastName LIKE '%\">' + '{0}' + '%' ",
                                         filter.LastName);
            }

            return whereClause.ToString();
        }
Пример #9
0
        private StringBuilder constructWhereClause(PersonsFilter filter)
        {
            #region TODO
            /*if (filter.ProjectID != -1)
            {
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" C.ProjectID = '{0}' ",
                                         filter.ProjectID);
            }*/
            #endregion

            string personBaseClause = getBasePersonClause(filter);
            string groupClause = getGroupFilter(filter);
            string uptimeEventsClause = getUptimeEventsFilter(filter);
            string uptimeEvents_NOT_IN_Clause = getUptimeEvents_NOT_IN_Filter(filter);

            if (string.IsNullOrEmpty(groupClause)
                && string.IsNullOrEmpty(uptimeEventsClause)
                && string.IsNullOrEmpty(personBaseClause))
                return new StringBuilder();

            StringBuilder whereClause = new StringBuilder();

            // construct basic part of filter like firstnaem, surname, role etc.
            if (!string.IsNullOrEmpty(personBaseClause)
                || !string.IsNullOrEmpty(groupClause))
            {
                StringBuilder basicFilterClause = new StringBuilder();
                if (!string.IsNullOrEmpty(personBaseClause))
                    basicFilterClause.Append(personBaseClause);

                if (!string.IsNullOrEmpty(groupClause))
                {
                    if (!string.IsNullOrEmpty(personBaseClause))
                        basicFilterClause.Append(" AND ");

                    basicFilterClause.AppendFormat(" A.ID IN ({0}) ", groupClause);
                }

                whereClause.AppendFormat(" ({0}) ", basicFilterClause);
            }

            // construct uptimeEvent part of filter.
            StringBuilder fullUptimeEventClause = new StringBuilder();
            if (!string.IsNullOrEmpty(uptimeEventsClause))
            {
                if (!string.IsNullOrEmpty(uptimeEvents_NOT_IN_Clause))
                    fullUptimeEventClause.AppendFormat(" A.ID NOT IN ({0}) OR ",
                                                       uptimeEvents_NOT_IN_Clause);

                if (!string.IsNullOrEmpty(uptimeEventsClause))
                    fullUptimeEventClause.AppendFormat(" A.ID IN ({0}) ", uptimeEventsClause);
            }

            if (!string.IsNullOrEmpty(fullUptimeEventClause.ToString()))
            {
                if (!string.IsNullOrEmpty(whereClause.ToString()))
                    whereClause.Append(" AND ");

                whereClause.AppendFormat(" ({0}) ", fullUptimeEventClause);
            }

            return new StringBuilder(" WHERE ").Append(whereClause);
        }