Внутренний номер сотрудника по ID пользователя — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
 
(не показано 5 промежуточных версии этого же участника)
Строка 1: Строка 1:
[[Дополнительно|Наверх]]
+
[[Работа с БД Oktell|Наверх]]
  
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
  
 
* Запрос находит такой внутренний номер, в котором может быть только один пользователь и несколько внешних номеров и линий.  
 
* Запрос находит такой внутренний номер, в котором может быть только один пользователь и несколько внешних номеров и линий.  
* Если в номере больше 1 пользователя или есть внутренние номера, то считается что это номер групповой.  
+
* Если в номере '''больше 1 пользователя''' или есть какие-либо '''внутренние номера''', то считается что это '''номер групповой'''.  
 
* Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.  
 
* Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.  
 +
 +
'''Описание:''' Например, у менеджера Иванова был номер 800, в котором был обозначен только этот пользователь. После добавления нескольких мобильных, Иванов хотел бы, чтобы по-прежнему его номер определялся как номер 800. Но теперь его номер стал групповым. Если существует, например групповой номер операторской группы 100, то теперь будет номер Иванова будет определяться как наименьший из групповых, т.е. номер 100. Запрос решает эту проблему и находит номер Иванова 800. В расчет специально не берутся внутренние номера, потому что в них могут быть вложены пользователи, а задача распаковки номера слишком ресурсозатратна. Исходя из этого, определяются только те номера, в которых нет других пользователей помимо данного и нет внутренних номеров.
 +
 +
'''Пример внутреннего номера:'''
  
 
[[Файл:Внутренний номер по IDuser 001.png|center]]
 
[[Файл:Внутренний номер по IDuser 001.png|center]]
Строка 13: Строка 17:
 
FROM (
 
FROM (
 
         SELECT COALESCE((SELECT count(*)  
 
         SELECT COALESCE((SELECT count(*)  
                                            FROM A_RuleRecords s_r   
+
                      FROM A_RuleRecords s_r   
                                              LEFT JOIN A_NumberPlanAction s_npa ON  s_r.ReactID = s_npa.NumID  
+
                      LEFT JOIN A_NumberPlanAction s_npa ON  s_r.ReactID = s_npa.NumID  
                                              LEFT JOIN A_RuleRecords ss_r ON s_npa.ExtraId = ss_r.RuleId  
+
                      LEFT JOIN A_RuleRecords ss_r ON s_npa.ExtraId = ss_r.RuleId  
                                            WHERE s_r.RuleID = r.RuleID AND (s_r.ReactID IN (SELECT ID FROM A_USERS) OR s_npa.NumID IS NOT NULL)),0) cnt
+
                      WHERE s_r.RuleID = r.RuleID AND (s_r.ReactID IN (SELECT ID FROM A_USERS) OR s_npa.NumID IS NOT NULL)),0) cnt
 
         , np.Prefix, np.Visible
 
         , np.Prefix, np.Visible
 
             FROM A_NumberPlan np  
 
             FROM A_NumberPlan np  

Текущая версия на 11:58, 22 декабря 2014

Наверх

SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.

  • Запрос находит такой внутренний номер, в котором может быть только один пользователь и несколько внешних номеров и линий.
  • Если в номере больше 1 пользователя или есть какие-либо внутренние номера, то считается что это номер групповой.
  • Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.

Описание: Например, у менеджера Иванова был номер 800, в котором был обозначен только этот пользователь. После добавления нескольких мобильных, Иванов хотел бы, чтобы по-прежнему его номер определялся как номер 800. Но теперь его номер стал групповым. Если существует, например групповой номер операторской группы 100, то теперь будет номер Иванова будет определяться как наименьший из групповых, т.е. номер 100. Запрос решает эту проблему и находит номер Иванова 800. В расчет специально не берутся внутренние номера, потому что в них могут быть вложены пользователи, а задача распаковки номера слишком ресурсозатратна. Исходя из этого, определяются только те номера, в которых нет других пользователей помимо данного и нет внутренних номеров.

Пример внутреннего номера:

Внутренний номер по IDuser 001.png
SELECT top 1 @prefix=Prefix
FROM (
        SELECT COALESCE((SELECT count(*) 
                      FROM A_RuleRecords s_r  
                      LEFT JOIN A_NumberPlanAction s_npa ON  s_r.ReactID = s_npa.NumID 
                      LEFT JOIN A_RuleRecords ss_r ON s_npa.ExtraId = ss_r.RuleId 
                      WHERE s_r.RuleID = r.RuleID AND (s_r.ReactID IN (SELECT ID FROM A_USERS) OR s_npa.NumID IS NOT NULL)),0) cnt
        , np.Prefix, np.Visible
            FROM A_NumberPlan np 
              INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID 
              JOIN A_RuleRecords r ON r.RuleID =  npa.ExtraId AND r.reactid=@userid
                    AND InnerAddressType=0  -- Если только "Внутренние номера"
      ) t
ORDER BY cnt,  Visible DESC

где

  • @prefix (вых) - содержит внутренний номер пользователя
  • @userid (вх) - ID пользователя


ВНИМАНИЕ: Начиная с версии 2.10 внутренний номер пользователя может быть найден с помощью компонента "Статус объекта"