コード例 #1
0
ファイル: Worklist.cs プロジェクト: evgeniynet/DataLayer
        public static DataTable SelectTicketsByFilter(UserAuth usr, Config cfg, ColumnsSetting colset, Filter filter, QueryFilter qfilter, bool reqSortFilter, int bussinesDayLength)
        {
            string _query = "SELECT 0 as DaysOld, tkt.id as TicketId, tkt.Status, tkt.technician_id, tkt.user_id, tkt.TicketNumber, tkt.TicketNumberPrefix, ISNULL(tkt.TicketNumberPrefix,'')+CAST(tkt.TicketNumber AS nvarchar(10)) AS TicketNumberFull, tkt.CreateTime, tkt.ClosedTime";
            _query += ", tkt.newtechpost, tkt.newuserpost, tkt.dtFollowUp, tkt.subject, tkt.NextStep, tkt.NextStepDate, tkt.SchedTicketID";
            if (!qfilter.IsPrintMode) _query += ", ISNULL((SELECT TOP 1 1 FROM Mfs_File fsf WHERE fsf.OrganizationId='" + usr.InstanceID.ToString() + "' AND fsf.DepartmentId='" + usr.InstanceID.ToString() + "' AND fsf.LocalObjectId=CAST(tkt.id AS nvarchar(255))), 0) as files_count";
            else _query += ", dbo.fxSelectInitialPost(tkt.company_id,tkt.id) AS InitPost";
            if (cfg.ResolutionTracking) _query += ", ISNULL(tkt.btResolved, 0) btResolved, CASE ISNULL(tkt.btResolved, 0) WHEN 1 THEN 'Resolved' ELSE 'UnResolved' END+CASE WHEN NOT rc.vchName IS NULL AND LEN(rc.vchName)>0 THEN ' - '+rc.vchName ELSE '' END AS Resolution";
            if (cfg.ResolutionTracking && cfg.ConfirmationTracking) _query += ", CASE WHEN ISNULL(tkt.btResolved, 0)=1 THEN tkt.btConfirmed ELSE CAST (1 AS bit) END AS btConfirmed";
            else if (cfg.ConfirmationTracking) _query += ", tkt.btConfirmed";
            for (int i = 0; i < colset.BrowseColumnsCount; i++)
            {
                if (colset.GetColSQLName(colset.GetBrowseColumn(i)).Length == 0) continue;
                else if (colset.GetBrowseColumn(i) == BrowseColumn.TicketNumber) continue;
                switch (colset.GetBrowseColumn(i))
                {
                    case BrowseColumn.Account:
                        if (!cfg.AccountManager) continue;
                        break;
                    case BrowseColumn.Location:
                        if (!cfg.LocationTracking) continue;
                        break;
                    case BrowseColumn.Class:
                        if (!cfg.ClassTracking) continue;
                        break;
                    case BrowseColumn.Level:
                        if (!cfg.TktLevels) continue;
                        break;
                    case BrowseColumn.Priority:
                        if (!cfg.PrioritiesGeneral) continue;
                        break;
                    case BrowseColumn.SupportGroup:
                        if (!cfg.SupportGroups) continue;
                        break;
                    case BrowseColumn.Project:
                        if (!cfg.ProjectTracking || !cfg.EnableTicketToProjectRelation) continue;
                        break;
                    case BrowseColumn.Time:
                        if (!cfg.TimeTracking) continue;
                        break;
                }
                if (colset.GetBrowseColumn(i) == BrowseColumn.Location) _query += ", dbo.fxGetUserLocationName(" + usr.lngDId.ToString() + ", tkt.LocationId) AS " + colset.GetColSQLAlias(colset.GetBrowseColumn(i));
                else if (colset.GetBrowseColumn(i) == BrowseColumn.Account) _query += ", ISNULL(" + colset.GetColSQLName(colset.GetBrowseColumn(i)) + ",  CASE WHEN ISNULL(tkt.btNoAccount, 0) = 0 THEN co.company_name + ' (Internal)' ELSE '' END) + CASE WHEN tkt.AccountLocationId IS NULL THEN '' ELSE '<br class=brVisible><span class=subTitle>' + dbo.fxGetUserLocationName(" + usr.lngDId.ToString() + ", tkt.AccountLocationId) + '</span>' END AS " + colset.GetColSQLAlias(colset.GetBrowseColumn(i));
                else if (colset.GetBrowseColumn(i) == BrowseColumn.Class) _query += ", dbo.fxGetFullClassName(" + usr.lngDId.ToString() + ", tkt.class_id) AS " + colset.GetColSQLAlias(colset.GetBrowseColumn(i));
                else if (colset.GetBrowseColumn(i) == BrowseColumn.Time) _query += ", tkt.TotalHours, tkt.RemainingHours, tkt.EstimatedTime";
                else if (colset.GetBrowseColumn(i) == BrowseColumn.SLAResponse) _query += ", " + colset.GetColSQLName(colset.GetBrowseColumn(i)) + " AS " + colset.GetColSQLAlias(colset.GetBrowseColumn(i)) + ", tkt.Created_id, tkt.btInitResponse";
                else _query += ", " + colset.GetColSQLName(colset.GetBrowseColumn(i)) + " AS " + colset.GetColSQLAlias(colset.GetBrowseColumn(i));
            }
            if (qfilter.TicketId != 0 && qfilter.TicketRelation != RelatedTickets.TicketRelationType.None)
            {
                _query += " FROM RelatedTickets RT INNER JOIN tbl_ticket tkt ON tkt.company_id=" + usr.lngDId.ToString() + " AND tkt.Id=RT.RelatedTicketId";
            }
            else _query += " FROM tbl_ticket tkt";
            _query += " INNER JOIN tbl_LoginCompanyJunc tlj1 ON tlj1.company_id=" + usr.lngDId.ToString() + " AND tlj1.id=tkt.user_id INNER JOIN tbl_Logins lgu ON lgu.id=tlj1.login_id";
            _query += " INNER JOIN tbl_LoginCompanyJunc tlj2 ON tlj2.company_id=" + usr.lngDId.ToString() + " AND tlj2.id=tkt.technician_id INNER JOIN tbl_Logins lgt ON lgt.id=tlj2.login_id";
            _query += " INNER JOIN tbl_company co ON co.company_id=tkt.company_id";
            if (cfg.ResolutionTracking) _query += " LEFT OUTER JOIN ResolutionCats rc ON rc.DId=" + usr.lngDId.ToString() + " AND rc.Id=tkt.ResolutionCatsId";
            if (cfg.AccountManager) _query += " LEFT OUTER JOIN Accounts acct ON acct.DId=" + usr.lngDId.ToString() + " AND acct.id=tkt.intAcctId";
            if (cfg.PrioritiesGeneral) _query += " LEFT OUTER JOIN Priorities pri ON pri.DId=" + usr.lngDId.ToString() + " AND pri.id=tkt.PriorityId";
            if (cfg.SupportGroups) _query += " LEFT OUTER JOIN SupportGroups sg ON sg.DId=" + usr.lngDId.ToString() + " AND sg.Id=tlj2.SupGroupId";
            if (cfg.ProjectTracking && cfg.EnableTicketToProjectRelation) _query += " LEFT OUTER JOIN Project prj ON prj.CompanyID=" + usr.lngDId.ToString() + " AND prj.ProjectID=tkt.ProjectID";

            if (qfilter.Sort == SortMode.MyTicketsAsAlternateTech)
                _query += " JOIN TicketAssignment AS TA ON TA.DepartmentId = tkt.company_id AND TA.TicketId = tkt.Id AND TA.UserId = " + usr.lngUId.ToString() + " AND TA.AssignmentType = " + ((int)Ticket.TicketAssignmentType.Technician).ToString() + " AND IsPrimary = 0 AND StopDate IS NULL";
            else
                _query += " LEFT OUTER JOIN TicketAssignment AS TA ON TA.DepartmentId = tkt.company_id AND TA.TicketId = tkt.Id AND TA.UserId = " + usr.lngUId.ToString() + " AND TA.AssignmentType = " + ((int)Ticket.TicketAssignmentType.User).ToString() + " AND TA.IsPrimary = 0 AND TA.StopDate IS NULL";

            if (qfilter.SQLJoin.Length > 0) _query += Security.SQLInjectionBlock(qfilter.SQLJoin);

            if (qfilter.TicketId != 0 && qfilter.TicketRelation != RelatedTickets.TicketRelationType.None)
            {
                _query += " WHERE RT.DId=" + usr.lngDId.ToString() + " AND RT.TicketId=" + qfilter.TicketId.ToString() + " AND RelationType=" + ((int)qfilter.TicketRelation).ToString();
            }
            else _query += " WHERE tkt.company_id=" + usr.lngDId.ToString();

            if (qfilter.SQLWhere.Length > 0)
            {
                _query += Security.SQLInjectionBlock(qfilter.SQLWhere);
            }
            if (qfilter.SQLWhere.Length == 0 || reqSortFilter)
            {
                switch (qfilter.Sort)
                {
                    case SortMode.MyTickets:
                        if (usr.IsInRole(UserAuth.UserRole.StandardUser, UserAuth.UserRole.SuperUser)) _query += " AND (tkt.user_id=" + usr.lngUId.ToString() + " OR TA.UserId=" + usr.lngUId.ToString() + ")";
                        else _query += " AND tkt.technician_id=" + usr.lngUId;
                        break;
                    case SortMode.MyTicketsAsUser:
                        _query += " AND tkt.user_id=" + usr.lngUId.ToString();
                        break;
                    case SortMode.MyTicketsAsUserAndTech:
                        if (usr.IsInRole(UserAuth.UserRole.StandardUser, UserAuth.UserRole.SuperUser))
                        {
                            _query += " AND (tkt.user_id=" + usr.lngUId.ToString() + " OR tkt.technician_id=" +
                                      usr.lngUId.ToString() + " OR TA.UserId=" + usr.lngUId.ToString() + ")";
                        }
                        else
                        {
                            _query += " AND (tkt.user_id=" + usr.lngUId.ToString() + " OR tkt.technician_id=" +
                                      usr.lngUId.ToString() + ")";
                        }
                        break;
                    case SortMode.TechTickets:
                        _query += " AND tkt.technician_id = " + qfilter.TechnicianId.ToString();
                        break;
                    case SortMode.MyTicketsAsAlternateTech:
                        _query += " AND TA.UserId = " + usr.lngUId.ToString() + " AND TA.UserId <> tkt.technician_id";
                        break;
                    case SortMode.TicketsAsUserNotTech:
                        if (usr.IsInRole(UserAuth.UserRole.StandardUser, UserAuth.UserRole.SuperUser))
                        {
                            _query += "  AND (tkt.user_id=" + qfilter.UserId.ToString() + " OR TA.UserId=" + usr.lngUId.ToString()
                                + ") AND tkt.technician_id<>" + qfilter.UserId.ToString();
                        }
                        else
                        {
                            _query += "  AND tkt.user_id=" + qfilter.UserId.ToString() + " AND tkt.technician_id<>" + qfilter.UserId.ToString();
                        }
                        break;
                    case SortMode.SupportGroupTickets:
                        _query += " AND tlj2.SupGroupID=(SELECT SupGroupId FROM tbl_LoginCompanyJunc WHERE company_id=" + usr.lngDId.ToString() + " AND id=" + (qfilter.UserId != 0 ? qfilter.UserId.ToString() : usr.lngUId.ToString()) + ")";
                        break;
                    default:
                        if (qfilter.Sort == SortMode.SuperUserTickets || qfilter.Sort == SortMode.TicketsAsSuperUserNotTech)
                        {
                            string accQuery = " (tkt.intAcctId IN (SELECT AccountId FROM UserAccounts WHERE DepartmentId="
                                + usr.lngDId.ToString() + " AND UserId=" +
                                usr.lngUId.ToString() + ") OR (tkt.intAcctId IS NULL AND ((SELECT COUNT(*) FROM UserAccounts WHERE DepartmentId="
                                + usr.lngDId.ToString() + " AND UserId=" + usr.lngUId.ToString() + " AND AccountId IS NULL) > 0)))";
                            string locQuery = " tkt.LocationId IN (SELECT Id FROM dbo.fxGetAllChildLocationsFromList("
                                + usr.lngDId.ToString() + ", '" + usr.strGSUserRootLocationId + "'))";
                            switch (usr.sintGSUserType)
                            {
                                case 1://Account
                                    _query += " AND" + accQuery;
                                    break;
                                case 2://Loccation
                                    _query += " AND" + locQuery;
                                    break;
                                case 3://Account and Location
                                    _query += " AND (" + accQuery + " OR" + locQuery + ")";
                                    break;
                            }
                            if (qfilter.Sort == SortMode.TicketsAsSuperUserNotTech) _query += "  AND tkt.user_id=" + qfilter.UserId.ToString() + " AND tkt.technician_id<>" + qfilter.UserId.ToString();
                        }
                        else
                        {
                            if (usr.IsInRole(UserAuth.UserRole.StandardUser, UserAuth.UserRole.SuperUser)) _query += " AND tkt.user_id=" + usr.lngUId.ToString();
                        }
                        if (qfilter.AccountId != 0)
                        {
                            if (qfilter.AccountId > 0)
                                _query += " AND tkt.intAcctId=" + qfilter.AccountId.ToString();
                            else
                            {
                                _query += " AND tkt.intAcctId IS NULL AND ISNULL(tkt.btNoAccount, 0)=" + (qfilter.AccountId == -2 ? "1" : "0");
                            }
                            if (qfilter.AccountUserId != 0) _query += " AND tkt.user_id=" + qfilter.AccountUserId.ToString();
                            if (qfilter.AccountLocationId != 0) _query += " AND tkt.AccountLocationId IN (SELECT Id FROM dbo.fxGetAllChildLocations(" + usr.lngDId.ToString() + ", " + qfilter.AccountLocationId.ToString() + "))";
                        }
                        else
                            if (qfilter.AccountLocationId != 0) // Location's tickets
                                _query += " AND tkt.intAcctId IS NULL AND tkt.AccountLocationId = " + qfilter.AccountLocationId.ToString();

                        if (qfilter.LocationId > 0)
                            _query += " AND tkt.LocationId = " + qfilter.LocationId.ToString();

                        if (qfilter.ProjectID > 0)
                        {
                            _query += " AND tkt.ProjectID=" + qfilter.ProjectID.ToString();
                        }
                        break;
                }
            }

            if (qfilter.ShowNewMessages == NewMessagesMode.UserAndTech) _query += " AND ((tkt.NewUserPost=1 AND tkt.technician_id =" + usr.lngUId.ToString() + " AND tkt.user_id<>" + usr.lngUId.ToString() + ") OR (tkt.NewTechPost=1 AND  tkt.user_id=" + usr.lngUId.ToString() + " AND technician_id<>" + usr.lngUId.ToString() + "))";
            else if (qfilter.ShowNewMessages == NewMessagesMode.User) _query += " AND tkt.newuserpost=1";
            else if (qfilter.ShowNewMessages == NewMessagesMode.Technician) _query += " AND tkt.newtechpost=1";

            if (cfg.Folders && qfilter.FolderId != 0) _query += " AND tkt.folder_id=" + qfilter.FolderId.ToString();

            if (qfilter.ShowFollowUpTicketsOnly) _query += " AND tkt.dtFollowUp IS NOT NULL";

            switch (qfilter.TicketStatus)
            {
                case TicketStatusMode.AllOpen:
                    _query += "  AND tkt.status<>'Closed'";
                    break;
                case TicketStatusMode.Close:
                    _query += " AND tkt.status='Closed'";
                    break;
                case TicketStatusMode.Open:
                    _query += " AND tkt.status='Open'";
                    break;
                case TicketStatusMode.OnHold:
                    _query += " AND tkt.status='On Hold'";
                    break;
                case TicketStatusMode.PartsOnOrder:
                    _query += " AND tkt.status='Parts On Order'";
                    break;
                case TicketStatusMode.OpenClosed:
                    _query += " AND (tkt.status='Open' OR tkt.status='Closed')";
                    break;
            }

            if (filter != null && filter.IsEnabled && !qfilter.IsUseSql && !qfilter.IgnoreFilter && (qfilter.Sort == SortMode.NotSet || qfilter.Sort == SortMode.MyTickets || qfilter.Sort == SortMode.MyTicketsAsUser) && qfilter.AccountId == 0 && qfilter.AccountLocationId == 0 && qfilter.AccountUserId == 0 && qfilter.FolderId == 0 && qfilter.TechnicianId == 0 && qfilter.UserId == 0) //begin filter
            {
                if (filter.Statuses.Length > 0) _query += " AND tkt.status IN (" + filter.Statuses + ")";
                if (cfg.LocationTracking && filter.Locations.Length > 0) _query += " AND tkt.LocationId" + (!filter.IsLocationsInclude ? " NOT" : string.Empty) + " IN (SELECT Id FROM dbo.fxGetAllChildLocationsFromList(" + usr.lngDId.ToString() + ",'" + filter.Locations + "'))";
                if (cfg.ClassTracking && filter.Classes.Length > 0) _query += " AND tkt.class_id" + (!filter.IsClasseInclude ? " NOT" : string.Empty) + " IN (SELECT Id FROM dbo.fxGetAllChildClassesFromList(" + usr.lngDId.ToString() + ",'" + filter.Classes + "'))";
                if (cfg.TktLevels && filter.Levels.Length > 0) _query += " AND tkt.tintLevel IN (" + filter.Levels + ")";
                if (cfg.PrioritiesGeneral && filter.Priority.Length > 0) _query += " AND pri.tintpriority" + filter.Priority;
                if (cfg.AccountManager && filter.Accounts.Length > 0) _query += " AND ISNULL(tkt.intAcctId,-1)" + (!filter.IsAccountsInclude ? " NOT" : string.Empty) + " IN (" + filter.Accounts + ")";
                if (cfg.Folders)
                {
                    if (filter.Folders == Filter.FilterType.TicketsAssignedToItems) _query += " AND tkt.folder_id IS NOT NULL";
                    else if (filter.Folders == Filter.FilterType.TicketsNOTAsignedToItems) _query += " AND tkt.folder_id IS NULL";
                }
                if (cfg.TimeTracking)
                {
                    if (filter.Projects == Filter.FilterType.TicketsAssignedToItems) _query += " AND tkt.ProjectID IS NOT NULL";
                    else if (filter.Projects == Filter.FilterType.TicketsNOTAsignedToItems) _query += " AND tkt.ProjectID IS NULL";
                }
            }

            //use global filters
            if (qfilter.Sort == SortMode.NotSet || qfilter.Sort == SortMode.TechTickets) _query += GlobalFilters.GlobalFiltersSqlWhere(usr, cfg, "tkt.", "tlj2.", "SupGroupID");

            if (qfilter.SortColumnIndex < 0)
            {
                string _order = string.Empty;
                for (int i = 0; i < colset.SortColumnsCount; i++)
                {
                    if (colset.GetColSQLName(colset.GetSortColumn(i)).Length == 0) continue;

                    switch (colset.GetSortColumn(i))
                    {
                        case BrowseColumn.Account:
                            if (!cfg.AccountManager) continue;
                            break;
                        case BrowseColumn.Location:
                            if (!cfg.LocationTracking) continue;
                            break;
                        case BrowseColumn.Class:
                            if (!cfg.ClassTracking) continue;
                            break;
                        case BrowseColumn.Level:
                            if (!cfg.TktLevels) continue;
                            break;
                        case BrowseColumn.Priority:
                            if (!cfg.PrioritiesGeneral) continue;
                            break;
                        case BrowseColumn.SupportGroup:
                            if (!cfg.SupportGroups) continue;
                            break;
                        case BrowseColumn.Project:
                            if (!cfg.ProjectTracking || !cfg.EnableTicketToProjectRelation) continue;
                            break;
                    }
                    if (_order.IndexOf(colset.GetColSQLName(colset.GetSortColumn(i))) < 0)
                    {
                        if (colset.GetSortColumn(i) == BrowseColumn.Location) _order += " dbo.fxGetUserLocationName(" + usr.lngDId.ToString() + ", tkt.LocationId)";
                        else if (colset.GetColSQLAlias(colset.GetSortColumn(i)) == "TicketNumberFull") _order += " tkt.TicketNumber";
                        else _order += " " + colset.GetColSQLName(colset.GetSortColumn(i));
                        if (colset.GetSortOrderDesc(i)) _order += " DESC,";
                        else _order += " ASC,";
                    }
                }
                if (colset.SortColumnsCount > 0 && _order.Length > 0)
                {
                    _order = _order.Substring(0, _order.Length - 1);
                    _query += " ORDER BY" + _order;
                }
            }
            else
            {
                _query += " ORDER BY ";
                switch (qfilter.SortColumnSQLAlias)
                {
                    case "LocationName":
                        _query += "dbo.fxGetUserLocationName(" + usr.lngDId.ToString() + ", tkt.LocationId)";
                        break;
                    case "TicketNumberFull":
                        _query += "tkt.TicketNumber";
                        break;
                    case "CreateTime":
                        _query += "tkt.CreateTime";
                        break;
                    default:
                        _query += qfilter.SortColumnSQLAlias;
                        break;
                }
                _query += qfilter.IsSortColumnDesc ? " DESC" : " ASC";
            }

            DataTable dt = SelectByQuery(_query);

            if (usr != null && dt != null && string.Compare(qfilter.SortColumnSQLAlias, "DaysOld", true) == 0)
            {
                Data.Tickets.TicketTimer m_TicketTimer = (Data.Tickets.TicketTimer)usr.tintTicketTimer;
                dt.Columns.Add(new DataColumn("DaysOldSort", typeof(long)));
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["Status"].ToString() == "Closed")
                    {
                        if (m_TicketTimer == Data.Tickets.TicketTimer.SLATimer)
                            dr["DaysOldSort"] = Data.Tickets.SelectTicketSLATime(usr.OrgID, usr.lngDId, Functions.DB2UserDateTime((DateTime)dr["CreateTime"]), Functions.DB2UserDateTime((DateTime)dr["ClosedTime"]));
                        else
                            dr["DaysOldSort"] = ((DateTime)dr["ClosedTime"] - (DateTime)dr["CreateTime"]).TotalMinutes;
                    }
                    else
                    {
                        if (m_TicketTimer == Data.Tickets.TicketTimer.SLATimer)
                            dr["DaysOldSort"] = Data.Tickets.SelectTicketSLATime(usr.lngDId, Functions.DB2UserDateTime((DateTime)dr["CreateTime"]), Functions.DB2UserDateTime(DateTime.UtcNow));
                        else
                            dr["DaysOldSort"] = (DateTime.UtcNow - (DateTime)dr["CreateTime"]).TotalMinutes;
                    }
                }

                DataView dv = dt.DefaultView;
                dv.Sort = "DaysOldSort" + (qfilter.IsSortColumnDesc ? " DESC" : " ASC");
                dt = dv.ToTable();
            }

            return dt;
        }
コード例 #2
0
ファイル: Accounts.cs プロジェクト: evgeniynet/APIBeta
        public static DataTable SelectByFilter(UserAuth userAuth, ColumnsSetting colset, Filter filter, bool addNoAccountRow)
        {
            string _query = "SELECT 0 AS ArtificialSortingField, a.id AS Id, a.AcctRepId";
            System.Collections.Generic.List<string> columnAliases = new System.Collections.Generic.List<string>();
            for (int i = 0; i < colset.BrowseColumnsCount; i++)
            {
                string columnAlias = colset.GetColSQLAlias(colset.GetBrowseColumn(i));
                if (colset.GetBrowseColumn(i) == BrowseColumn.DeptLocation)
                {
                    _query += ", dbo.fxGetUserLocationName(" + userAuth.lngDId.ToString() + ", a.LocationId) AS " + columnAlias;
                }
                else if (colset.GetBrowseColumn(i) == BrowseColumn.BWDAccRef)
                {
                    _query += ", " + colset.GetColSQLName(colset.GetBrowseColumn(i)) + " AS " + columnAlias;
                    _query += ", " + colset.GetColSQLName(Data.Accounts.BrowseColumn.Ref1Number) + " AS " + colset.GetColSQLAlias(Data.Accounts.BrowseColumn.Ref1Number);
                    _query += ", " + colset.GetColSQLName(Data.Accounts.BrowseColumn.Ref2Number) + " AS " + colset.GetColSQLAlias(Data.Accounts.BrowseColumn.Ref2Number);
                    columnAliases.Add(colset.GetColSQLAlias(Data.Accounts.BrowseColumn.Ref1Number));
                    columnAliases.Add(colset.GetColSQLAlias(Data.Accounts.BrowseColumn.Ref2Number));
                }
                else
                {
                    _query += ", " + colset.GetColSQLName(colset.GetBrowseColumn(i)) + " AS " + columnAlias;
                }

                columnAliases.Add(columnAlias);
            }
            _query += " FROM Accounts a";
            _query += " LEFT OUTER JOIN SupportGroups sp ON sp.DId=a.DId AND a.SupGroupId=sp.Id";
            _query += " LEFT OUTER JOIN tbl_LoginCompanyJunc tlj ON tlj.company_id=a.DId AND tlj.id=a.AcctRepId JOIN tbl_Logins lg ON lg.id=tlj.login_id";
            _query += " LEFT OUTER JOIN Locations al ON al.DId=a.DId AND al.Id=a.LocationId";
            _query += " LEFT OUTER JOIN LocationTypes t on t.DId=a.DId and t.Id=al.LocationTypeId and t.Name='Building'  ";
            _query += " LEFT OUTER JOIN (SELECT t.intAcctId AS AccountId, COUNT(*) AS OpenTickets FROM tbl_ticket t WHERE t.company_id=" + userAuth.lngDId.ToString() + " AND t.Status<>'Closed' GROUP BY t.intAcctId) at ON at.AccountId=a.Id";
            _query += " WHERE a.DId=" + userAuth.lngDId;
            if (filter.AccActive != ActiveStatus.NoFilter) _query += " AND a.btActive=" + ((int)filter.AccActive).ToString();
            if (colset.ListViewMode == ViewMode.MyAccounts) _query += " AND a.AcctRepId=" + filter.UserId.ToString();
            else if (colset.ListViewMode == ViewMode.SupportGroupAccounts) _query += " AND a.SupGroupId=" + filter.SupportGroupId.ToString();
            if (filter.AccName.Length > 0)
            {
                string _fstr = Security.SQLInjectionBlock(Functions.SqlStr(filter.AccName)).Trim('\'');
                _query += " AND (a.vchName LIKE '%" + _fstr + "%'";
                if (filter.FilterLocation)
                {
                    _query += " OR (dbo.fxGetUserLocationName(" + userAuth.lngDId.ToString() + ", a.LocationId) LIKE '%" + _fstr + "%')";
                }
                _query += " OR (";
                _query += " CAST(a.intBWDAcctNum as nvarchar) LIKE '%" + _fstr + "%' OR a.vchRef1Num LIKE '%" + _fstr + "%' OR a.vchRef2Num LIKE '%" + _fstr + "%' OR a.vchAcctNum LIKE '%" + _fstr + "%'))";
            }

            string internalAccountName = userAuth.strGDName + " (Internal)";
            if (colset.ListViewMode == ViewMode.AllAccounts && filter.AccActive != ActiveStatus.Inactive && (string.IsNullOrEmpty(filter.AccName) || internalAccountName.ToLower().Contains(filter.AccName.ToLower())))
            {
                string union = " UNION SELECT 1 AS ArtificialSortingField, -1 AS Id, -1 AS AcctRepId";
                foreach (string columnAlias in columnAliases)
                {
                    union += ", ";
                    switch (columnAlias)
                    {
                        case "AccName":
                            union += Functions.SqlStr(internalAccountName);
                            break;
                        case "OpenTickets":
                            union += "(SELECT COUNT(*) AS OpenTickets FROM tbl_ticket t WHERE t.company_id=" + userAuth.lngDId.ToString() + " AND t.Status<>'Closed' AND t.intAcctId IS NULL AND ISNULL(t.btNoAccount, 0) = 0)";
                            break;
                        default:
                            union += "NULL";
                            break;
                    }
                    union += " AS " + columnAlias;
                }
                _query += union;
            }
            if (addNoAccountRow)
            {
                string union = " UNION SELECT -1 AS ArtificialSortingField, -2 AS Id, -2 AS AcctRepId";
                foreach (string columnAlias in columnAliases)
                {
                    union += ", ";
                    switch (columnAlias)
                    {
                        case "AccName":
                            union += Functions.SqlStr("(No Account)");
                            break;
                        case "OpenTickets":
                            union += "(SELECT COUNT(*) AS OpenTickets FROM tbl_ticket t WHERE t.company_id=" + userAuth.lngDId.ToString() + " AND t.Status<>'Closed' AND t.intAcctId IS NULL AND t.btNoAccount = 1)";
                            break;
                        default:
                            union += "NULL";
                            break;
                    }
                    union += " AS " + columnAlias;
                }
                _query += union;
            }

            string _order = " ORDER BY ArtificialSortingField DESC,";
            for (int i = 0; i < colset.SortColumnsCount; i++)
            {
                if (!columnAliases.Contains(colset.GetColSQLAlias(colset.GetSortColumn(i)))) continue;
                if (_order.IndexOf(colset.GetColSQLName(colset.GetSortColumn(i))) < 0)
                {
                    if (colset.GetBrowseColumn(i) == BrowseColumn.DeptLocation)
                    {
                        _order += " " + colset.GetColSQLAlias(colset.GetSortColumn(i));
                    }
                    else
                    {
                        _order += " " + colset.GetColSQLName(colset.GetSortColumn(i));
                    }
                    if (colset.GetSortOrderDesc(i)) _order += " DESC,";
                    else _order += " ASC,";
                }
            }
            _order = _order.Substring(0, _order.Length - 1);
            _query += _order;
            return SelectByQuery(_query);
        }