QUOTE(Санёк @ Dec 26 2019, 14:23)
Важно не время, важен приоритет) В принципе - наверное, если четко разработать алгоритм - реализовать будет недолго.
По идее это можно сделать частью ЛВ и вместе с ЛВ перенести на сайт.
Как справедливо заметил АИК, это можно сделать на основе голосования по сборным.
Примерно это может выглядеть так.
В БД добавляются 3 новых таблицы.
1. Таблица НОМИНАЦИИ
Ее поля:
- название номинации
- кол-во голосов у одного голосующего (сколько номинантов он должен пометить галочками при голосовании по данной номинации)
- список допущенных к голосованию менеджеров (здесь должен быть реализован выбор из предопределенных значений, из текущих вариантов - "все менеджеры", "все менеджеры, игравшие в прошлом сезоне и играющие сейчас", "менеджеры, дошедшие до 1/8 финала ИК или ЧМ" и т.д.)
- id метода подсчета голосов
- активность номинации (действующая или архивная)
Эта таблица доступна для просмотра и редактирования через любой простой интерфейс ответственному за ЛВ.
2. Таблица МЕТОДЫ ПОДСЧЕТА ГОЛОСОВ
Поля:
- id метода
- текстовое описание
Сейчас у нас два метода - это классический подсчет ЛВ и мой вариант по подсчету "упоминаний"
Эта таблица доступна для просмотра через любой простой интерфейс ответственному за ЛВ.
Если в дальнейшем возникает необходимость добавить новый метод подсчета, то потребуются дополнительные услуги разработчиков, т.к. каждый метод через if отдельно реализуется в коде подсчета голосов.
3. Таблица ГОЛОСОВАНИЕ
- номинация
- номинант
- список проголосовавших за данного номинанта
- кол-во голосов, высчитываемое из предыдущего поля с использование таблиц 1 и 2.
Как может выглядеть весь процесс.
1. Ответственный за ЛВ вне сайта собирает списки номинантов и в установленные сроки редактирует таблицы 1 и 3:
- задает список актуальных номинаций в таблице 1, корректирует в случае необходимости остальные поля таблицы
- при сохранении изменений в таблице 1 в таблицу 3 автоматом подтягиваются все актуальные номинации
задает дату окончания голосования, опционально текст приглашения к участию в голосовании и нажимает на кнопку "Начать голосование"
2. После этого открывается интерфейс голосования, а менеджерам, входящих в списки голосующих по любой из номинаций, приходят ЛС с текстом приглашения к участию в голосовании (это опционально)
3. Голосование проходит в интерфейсе типа голосования по сборным с использованием таблицы 3:
- вместо "сборной" - "номинация"
- вместо "кандидата на пост менеджера сборной" - "номинант"
- список голосующих по каждой "сборной"/"номинации" берется из соответствующего поля таблицы 1
- сколько галочек менеджер должен поставить в каждой номинации определяется полем кол-во голосов в таблице 1. Если менеджер поставил меньше галочек, чем нужно, всплывает соответствующее окно с уведомлением об этом.
Проголосовавшие менеджеры попадают в поле "список проголосовавших" таблицы 3 по ключу "номинация"+"номинант".
Как и по сборным, в процессе голосования никто не знает, кто проголосовал и за кого. Показывается только кол-во проголосовавших и в отличие от сборных кол-во отданных голосов показывать не нужно.
4. По истечении указанного ответственным срока голосования форма голосования закрывается и запускается скрипт подсчета голосов для каждой номинации в соответствии с методом подсчета из таблицы 2 (в коде скрипта зашито: если метод 1, то считаем так, если метод 2, то этак). Результаты подсчета заносятся в поле "Кол-во голосов" Таблицы 3 по каждому номинанту в каждой номинации. После завершения подсчета скрипт выдает результаты из таблицы 3 полностью аналогично результатам голосования по сборным.
5. Ответственный за ЛВ подтверждает результаты по каждой номинации точно так же, как сейчас ответственный за сборные назначает менеджеров сборных.
6. Опционально: скрипт может сразу после подтверждения сам раздать венки в профайлы.
Как-то так. Здесь важно, что можно будет использовать разные методы голосования и подсчета голосов.
Насколько это все нужно реализовывать на сайте, судить не берусь - это скорее из разряда рюшечек, чем необходимых функций. И уж точно это не может быть высокоприоритетной задачей.