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

Материал из Oktell
Перейти к: навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[Дополнительно|Наверх]]
+
[[Работа с БД Oktell|Наверх]]
  
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
 
SQL-запрос находит по таблице внутренний номер пользователя по его идентификатору.  
Строка 7: Строка 7:
 
* Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.  
 
* Если у сотрудника все номера групповые возвращается тот, у которого меньше объектов.  
  
Запрос решает задачу нахождения внутреннего номера менеджера при наличии еще нескольких мобильных телефонов.  
+
'''Описание:''' Например, у менеджера Иванова был номер 800, в котором был обозначен только этот пользователь. После добавления нескольких мобильных, Иванов хотел бы, чтобы по-прежнему его номер определялся как номер 800. Но теперь его номер стал групповым. Если существует, например групповой номер операторской группы 100, то теперь будет номер Иванова будет определяться как наименьший из групповых, т.е. номер 100. Запрос решает эту проблему и находит номер Иванова 800. В расчет специально не берутся внутренние номера, потому что в них могут быть вложены пользователи, а задача распаковки номера слишком ресурсозатратна. Исходя из этого, определяются только те номера, в которых нет других пользователей помимо данного и нет внутренних номеров.  
  
Пример внутреннего номера:  
+
'''Пример внутреннего номера:'''
  
 
[[Файл:Внутренний номер по IDuser 001.png|center]]
 
[[Файл:Внутренний номер по IDuser 001.png|center]]

Текущая версия на 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 внутренний номер пользователя может быть найден с помощью компонента "Статус объекта"