Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#571 closed задача (fixed)

п.6. Адресная книга. Новый формат.

Reported by: san Owned by: alx
Priority: major Milestone: Задания от МВтел
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords:
Cc:

Description (last modified by san)

Сейчас адресная книга - текстовый файл отображаемый как есть в программе.
Требуется создать новую адресную книгу.

  1. Формат файла содержащего адресную книгу и место его хранения выбирается на усмотрение исполнителя.
  1. Адресная книга состоит из двух частей: списка абонентов(слева) и панели информации об абоненте(справа).
  • 2.а. Список абонентов.
    • Список абонентов телефонной книги отсортирован по имени абонента в алфавитном порядке.
    • Символы на пиктограммах абонентов формируются из имени пользователя по следующему алгоритму: Если слово в имени одно - используются два первых символа, если слов не менее двух, то используются по одному первому символу 1-го и 2-го слова(разделителем слов считать пробел). В пиктограмме символ отображается заглавным. Пример: "Авакян Василий Петрович" -> "АВ", "техник 1" -> "Т1", "Техник1" -> "ТЕ" (на рисунке есть нарушения описанного алгоритма выбора символов для пиктограммы- не обращать внимания).




  • При введении текста в поле фильтра для списка абонентов, в списке должны отображаться только абоненты в имени или в одном из номеров которых содержится введённый текст.
  • При нажатии кнопки "+" вызывается функция добавления нового абонента в книгу.
  • 2.b. Информация об абоненте - в этой панели отображается информация о выбранном абоненте(если абонент не выбран можно отображать "пусто").
    • Информация об абоненте состоит из обязательных полей: Имя, Номер, комментарий, и произвольных полей заданных пользователем. Поля выводятся на экран в следующем порядке:
  • Имя
  • Номер
  • Дополнительные номера - все произвольные поля состоящие только из символов, допустимых для номера (+-0123456789*#p,)
  • Комментарий
  • Произвольные поля
  1. При нажатии кнопки "Редактировать", панель "Информация об абоненте" переходит в режим Редактирование. В этом режиме можно изменить содержимое обязательных полей, добавить произвольные поля, добавить дополнительные номера телефонов.




3.a. При нажатии кнопки "+" напротив последнего из номеров, происходит добавление дополнительного поля номера с автоматическим созданым именем "Номер N". Удаление номеров и изменение имени полей производится через вызов контекстного меню в поле номера нажатием кнопки "шестерня"(аналогично странице 28 Гайдлайнов)
3.b. Добавление произвольного поля происходит при нажатии кнопки "Добавить поле" Внешний вид процедуры добавления аналогичен описанному в Гайдлайнах на странице 28.(удаление и редактирование имени с помощью кнопки "шестерня")

  1. Добавления нового абонента в книгу аналогично редактированию




  1. Вызов номера абонента в конференцию через контекст ТСОП

5.a. При нажатии кнопки + происходит вызов выбранного абонента в текущую конференцию
5.b. При нажатии кнопки "трубка" происходит создание новой конференции и вызов туда пользователя программы и выбранного абонента.
5.c. Выбор номера для вызова осуществляется через дополнительное меню(смотри рисунок), номером считается любое поле, состоящее только из символов, допустимых для номера (+-0123456789*#p,).
5.d. При выполнении вызова программа переключается на вкладку конференций где отображается конференция в которую вызван абонент.



p.s. Изображенное на рисунках местами отличается от постановки задачи, рисунки только поясняют внешний вид описанных элементов.

Attachments (8)

pb_call.png (37.5 KB ) - added by san 6 years ago.
pb_edit.png (38.0 KB ) - added by san 6 years ago.
pb_new.png (24.4 KB ) - added by san 6 years ago.
pb_view.png (34.6 KB ) - added by san 6 years ago.
pb_call_m.png (28.6 KB ) - added by san 6 years ago.
pb_edit_m.png (29.2 KB ) - added by san 6 years ago.
pb_new_m.png (17.3 KB ) - added by san 6 years ago.
pb_view_m.png (26.6 KB ) - added by san 6 years ago.

Download all attachments as: .zip

Change History (43)

comment:1 by san, 6 years ago

Description: modified (diff)

by san, 6 years ago

Attachment: pb_call.png added

by san, 6 years ago

Attachment: pb_edit.png added

by san, 6 years ago

Attachment: pb_new.png added

by san, 6 years ago

Attachment: pb_view.png added

by san, 6 years ago

Attachment: pb_call_m.png added

by san, 6 years ago

Attachment: pb_edit_m.png added

by san, 6 years ago

Attachment: pb_new_m.png added

by san, 6 years ago

Attachment: pb_view_m.png added

comment:2 by san, 6 years ago

Description: modified (diff)

comment:3 by san, 6 years ago

Description: modified (diff)

comment:4 by san, 6 years ago

Description: modified (diff)

comment:5 by san, 6 years ago

Description: modified (diff)

comment:6 by san, 6 years ago

Owner: changed from Ivanmvtel to alx
Status: newassigned

comment:7 by san, 6 years ago

Алексей, задание сформировано, если что-то непонятно - уточняй в комментах.

in reply to:  description comment:8 by alx, 6 years ago

Replying to san:

  1. Формат файла содержащего адресную книгу и место его хранения...

Верно ли я понял, что данные справочника должны храниться в файле на стороне клиента?

comment:9 by alx, 6 years ago

Еще вопрос: правильно ли я понимаю, что гайдлайнов на этот справочник пока не будет, дизайн - на мое усмотрение, а потом все это надо будет переделать в рамках #576?

comment:10 by san, 6 years ago

Верно ли я понял, что данные справочника должны храниться в файле на стороне клиента?

В задании от Вани это не уточняется, но думаю что да, на стороне клиента.

гайдлайнов на этот справочник пока не будет, дизайн - на мое усмотрение

Гайдлайнов не будет. Дизайн в соответствии с приложенными к тикету картинками, значения размеров и цветов нужно выбрать в соответствии с "похожими" элементам из гайдлайна.
Если не хватает каких-то элементов(иконок, картинок) замени их временными и напиши в комментах к #576 чего не хватает.

comment:11 by alx, 6 years ago

In 960/dispatcher:

Добавлен модуль phoneBookModel (пока не используется).
В пользовательском интерфейсе на левом тулбаре добавлена кнопка
новой телефонной книги. Пока она показывает пустой виджет. See #571.

comment:12 by alx, 6 years ago

In 962/dispatcher:

Добавлено отображение списка абонентов новой адресной книги. Пока отображение выполняется
классом QListView. К QListView подключается модель новой телефонной книги PhoneBookModel.
PhoneBookModel загружает данные (список контактов) из файла. See #571.

in reply to:  description comment:13 by alx, 6 years ago

Replying to san:

  • 2.а. Список абонентов.
    • Символы на пиктограммах абонентов формируются из имени пользователя по следующему алгоритму: Если слово в имени одно... если слов не менее двух...

Вопросы вроде бы тривиальные, но для очистки совести спрошу. Здесь не указаны случаи, когда

  • имя состоит менее чем из одного слова (пустая строка или только пробелы);
  • имя состоит из одного слова, но в этом слове менее двух символов.

Что должно быть на иконке в этих случаях?

in reply to:  description comment:14 by alx, 6 years ago

Replying to san:

  • Информация об абоненте состоит из обязательных полей: Имя, Номер 1...Номер N

Чему равно N?

comment:15 by san, 6 years ago

имя состоит менее чем из одного слова (пустая строка или только пробелы);

Думаю, что на иконке должно быть пусто

имя состоит из одного слова, но в этом слове менее двух символов.

На иконке разумно отобразить тот самый единственный символ

Информация об абоненте состоит из обязательных полей: Имя, Номер 1...Номер N

Чему равно N?

Строго говоря обязательным полем из "Номер 1...Номер N" является только Номер 1, а поля Номер 2...Номер N могут быть добавлены по желанию пользователя.
То есть N>=1, а верхний предел определяется разумным количеством телефонных номеров у человека (мне кажется что 10-ти хватит)

in reply to:  15 comment:16 by alx, 6 years ago

Replying to san:

Чему равно N?

То есть N>=1, а верхний предел определяется разумным количеством телефонных номеров у человека (мне кажется что 10-ти хватит)

Тогда приму N=1. Думаю, один телефон - наиболее часто встречающийся случай. А если надо больше, как ты верно заметил, у пользователя есть возможность добавить поле.

in reply to:  description comment:17 by alx, 6 years ago

Replying to san:

3.a. Добавление дополнительного номера происходит при нажатии кнопки "+" напротив последнего из добавленных номеров,

Тут возникает проблема "яйца и курицы": если ни один номер еще не добавлен, то кнопки "+" нет и, следовательно, добавить номер невозможно...

удаление через вызов контекстного меню в поле номера нажатием кнопки "шестерня"(аналогично странице 28 Гайдлайнов)

На приложенном рисунке в поле "Phone Number 2" нет шестерни. Это ошибка, или эта "шестерня" появляется только при определенных условиях? Если при определенных условиях, то при каких?

Last edited 6 years ago by alx (previous) (diff)

comment:18 by san, 6 years ago

Тут возникает проблема "яйца и курицы": если ни один номер еще не добавлен, то кнопки "+" нет и, следовательно, добавить номер невозможно...

Один(первый) номер - обязательное поле, он есть всегда и кнопка у него

На приложенном рисунке в поле "Phone Number 2" нет шестерни. Это ошибка, или эта "шестерня" появляется только при определенных условиях? Если при определенных условиях, то при каких?

Ошибка на рисунке

in reply to:  description comment:19 by alx, 6 years ago

Еще вопрос.

Replying to san:

5.c. Выбор номера для вызова осуществляется через дополнительное меню(смотри рисунок)

Согласно постановке задачи, диспетчер может добавлять в информацию контакта произвольные поля с произвольной информацией (с очень небольшими ограничениями). Как (по какому алгоритму) пульт должен определять, является ли информация какого-либо имеющегося у контакта поля телефонным номером или нет? Это необходимо чтобы составить список вариантов для выпадающего списка.

Верно ли я догадываюсь, что телефонным номером необходимо считать любое поле, имя которого начинается с "Номер"?

Last edited 6 years ago by alx (previous) (diff)

in reply to:  18 comment:20 by alx, 6 years ago

Replying to san:

Тут возникает проблема "яйца и курицы": если ни один номер еще не добавлен, то кнопки "+" нет и, следовательно, добавить номер невозможно...

Один(первый) номер - обязательное поле, он есть всегда и кнопка у него

Если у этого поля всегда есть кнопка, то нафига тогда еще одна кнопка у последнего добавленного номера? Почему бы не пользоваться всегда одной?

comment:21 by san, 6 years ago

Если у этого поля всегда есть кнопка, то нафига тогда еще одна кнопка у последнего добавленного номера? Почему бы не пользоваться всегда одной?

Нет, не так, я не правильно выразился. Уточняю: один номер есть всегда, кнопка есть всегда, кнопка у последнего из номеров.

Верно ли я догадываюсь, что телефонным номером необходимо считать любое поле, имя которого начинается с "Номер"?

Нет. В дополнительном меню для вызова должны присутствовать только номера из обязательных полей "Номер 1...Номер N". Пользовательские поля в это меню не попадают.

Last edited 6 years ago by san (previous) (diff)

in reply to:  21 comment:22 by alx, 6 years ago

Replying to san:

Нет, не так, я не правильно выразился. Уточняю: один номер есть всегда, кнопка есть всегда, кнопка у последнего из номеров.

Теперь понятно. Слово "добавленных" в первоначальной формулировке было лишним. Тогда у меня возникает новый вопрос (очень похожий на предыдущий, но в свете твоих разъяснений выясняется, что это два разных вопроса): как (по какому алгоритму) пульт должен находить последний телефонный номер контакта. А точнее, по какому алгоритму он должен принимать решение, является ли некое поле телефонным номером (с определением последнего из них у меня затруднений нет)...

Верно ли я догадываюсь, что телефонным номером необходимо считать любое поле, имя которого начинается с "Номер"?

Нет. В дополнительном меню для вызова должны присутствовать только номера из обязательных полей "Номер 1...Номер N". Пользовательские поля в это меню не попадают.

??? Подожди минутку... Ранее мы договорились, что число N (количество обязательных полей с номером телефона) мы принимаем равным единице (точнее, ты постулировал, что N >= 1, а я принял решение, что N будет равно 1, что удовлетворяет твоему условию и здравому смыслу, а ты не возражал). Более того, не далее как сегодня я переделал программу, следав N=1 (было 5)... Но если N равно 1, то теперь получается, что в выпадающем списке должен быть 1 (прописью: ОДИН) номер, что делает наличие этого выпадающего списка абсурдным...

Может я неправильно понял твой comment:15? Тогда давай вернемся к этому вопросу: так чему равно N?

comment:23 by alx, 6 years ago

Зафиксирую свое предложение, высказанное устно (чтобы не забылось).

Я предлагаю при формировании выпадающего списка номеров (появляющегося при вызове контакта в текущую или новую конференции) считать номером любое поле, состоящее только из символов, допустимых для номера (+-0123456789*#p,). Это избавит от необходимости иметь жесткие правила создания полей с телефонным номером (например давать им заранее установленные имена типа "Номер X"), и диспетчер сможет создавать любое число полей с произвольными именами, например "Работа", "Домашний телефон", "Дача", "Резиденция в Кэмп-Дэвиде", "Резиденция в Бочаровом Ручье"...

in reply to:  description comment:24 by alx, 6 years ago

Replying to san:

3.a. ... удаление через вызов контекстного меню в поле номера нажатием кнопки "шестерня"

В чем смысл наличия контекстного меню, если это меню состоит из единственного пункта - "удалить поле"?

Почему бы не сделать удаление поля по факту клика иконки, без всякого меню? Это упростит процесс, так как исключит бессмысленный выбор единственного варианта из списка... Иконку "шестерня" в этом случае имеет смысл заменить на иконку "крест" или что-то типа этого...

Last edited 6 years ago by alx (previous) (diff)

comment:25 by san, 6 years ago

Description: modified (diff)

Я предлагаю при формировании выпадающего списка номеров (появляющегося при вызове контакта в текущую или новую конференции) считать номером любое поле, состоящее только из символов, допустимых для номера (+-0123456789*#p,)

Принято, изменил описание задачи. Алексей, проверь, пожалуйста, правильно ли мы друг друга поняли :)


В чем смысл наличия контекстного меню, если это меню состоит из единственного пункта - "удалить поле"?

Т.к. поля доп. номеров теперь у нас представляют собой обычные произвольные поля, в этом меню появится второй пункт - "Редактирование имени поля", добавил в описание задачи.

Ещё у меня возникло предложение к произвольным полям добавить некий индекс для сортировки, для того чтобы у пользователя была возможность менять порядок вывода полей на экран (например с помощью пунктов "переместить выше", "переместить ниже" добавленных в меню шестерня). В задании этого не было, так что это на твоё усмотрение.

in reply to:  25 comment:26 by alx, 6 years ago

Replying to san:

Алексей, проверь, пожалуйста, правильно ли мы друг друга поняли :)

Вроде бы совершенно правильно. Единственное замечание - в описании по-прежнему присутствует слово "добавленных", которое, как мы уже выяснили ранее, лишнее.

Ещё у меня возникло предложение к произвольным полям добавить некий индекс для сортировки,

С одной стороны, у меня нет возражений (не вижу вреда от такой фичи), с другой стороны, нужности в ней, ее полезности я как-то тоже не ощущаю... Давай пока сделаем как описано, а для этой идеи создай новый тикет, может быть как-нибудь потом сделам...

А пока у меня вопрос по поводу

с автоматическим созданым именем "Номер N"

Чему равно N? :)

comment:27 by san, 6 years ago

Description: modified (diff)

добавленных

убрал

Чему равно N

Ищем все поля с содержанием удовлетворяющим условию "номер"
Среди этих полей выбираем те, имена которых удовлетворяют рег. выражению ^Номер (\d+)$
N = наименьшее число неравное содержимому скобок любого из выбранных имён, и N>1

Пример: представим что есть поля номеров:

Номер
Домашний
Номер 2
Номер 5 <+>

При нажатии + должно быть создано поле с именем Номер 3.

in reply to:  description comment:28 by alx, 6 years ago

Replying to san:

удаление и редактирование имени с помощью кнопки "шестерня"

Каждое поле состоит из двух основных частей: имени поля и значения поля.
Мне кажется нелогичным, что функция изменения имени поля находится в контекстном меню значения. Более логичным и естественным, а поэтому более понятным для пользователя мне кажется если функция изменения имени поля будет производиться в контекстном меню имени поля.

comment:29 by alx, 6 years ago

Для завершения работы над тикетом мне требуется изображение шестерни.

comment:30 by san, 6 years ago

Это изображение есть в наборе иконок xchange\IPДипетчерская\design\icons\
fieldsettings.png
fieldsettings-active.png

in reply to:  30 ; comment:31 by alx, 6 years ago

Replying to san:

fieldsettings.png
fieldsettings-active.png

Иконок с такими именами по 8 штук каждой. Какие из них использовать?

in reply to:  31 ; comment:32 by alx, 6 years ago

Replying to alx:

Иконок с такими именами по 8 штук каждой. Какие из них использовать?

Отвечаю сам себе со слов san: на мое усмотрение, но лучше синего и серого цветов.

in reply to:  32 comment:33 by alx, 6 years ago

Replying to alx:

Отвечаю сам себе со слов san: на мое усмотрение, но лучше синего и серого цветов.

Хм... Оказалось, что все иконки синие и серые, различаются только размером. Так что критерий цвета при выборе неприменим, и остается единственный критерий - на мое усмотрение. :) Потом не пеняйте...

comment:34 by alx, 6 years ago

Resolution: fixed
Status: assignedclosed

In 1005/dispatcher:

Слита ветка "#571", в которой реализован функционал новой телефонной книги.
Closes #571.

comment:35 by alx, 6 years ago

Саша, похоже, я работу по этому тикету закончил. По-моему все что требовалось - выполняется.

Проведи, пожалуйста, сам дополнительные проверки - объем работы был достаточно большой, возможно, какие-то мелочь забыты, или где-то что-то еще неправильно работает...

Если будут замечания, лучше, наверное, открывать отдельные тикеты, здесь уже и так комментариев выше крышы... :)

Note: See TracTickets for help on using tickets.